public @interface

AppCompatShadowedAttributes

implements java.lang.annotation.Annotation

 androidx.resourceinspection.annotation.AppCompatShadowedAttributes

Gradle dependencies

compile group: 'androidx.resourceinspection', name: 'resourceinspection-annotation', version: '1.0.1'

  • groupId: androidx.resourceinspection
  • artifactId: resourceinspection-annotation
  • version: 1.0.1

Artifact androidx.resourceinspection:resourceinspection-annotation:1.0.1 it located at Google repository (https://maven.google.com/)

Overview

Marks a view within AppCompat that shadows platform attributes.

Many AppCompat views shadow a platform attribute in order to provide backwards compatibility for older API levels. This means that a developer might set androidx.appcompat:backgroundTint instead of android:backgroundTint to get a background tint with support for API < 21. On more recent versions of the platform, this has the effect of storing the resolution stack in the androidx.appcompat namespace but reading the set value from the platform inspection companion in the android namespace, causing the resolution stack to get lost in the inspector.

Ordinarily, this behavior could be overridden by an Attribute annotation on the getter, but it is infeasible to override a platform getter that doesn't exist on older supported API levels. It results in worse performance at load time on those devices.

This annotation instructs the processor to include a list of shadowed attributes with API-level appropriate accessors in the view's inspection companion. It infers the attributes to include from the interfaces on the annotated view. For example, a view that implements TintableBackgroundView will report androidx.appcompat:backgroundTint directly from the platform AppCompatShadowedAttributes getter. This approach allows views within AppCompat to mix shadowed attributes and regular attribute annotations on the same view without hand-written inspection companions.

The full list of supported interfaces is AutoSizeableTextView, TintableBackgroundView, TintableCheckedTextView, TintableCompoundButton, TintableCompoundDrawablesView, and TintableImageSourceView. Please see the mapping in for full details.

Summary

Source

/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.resourceinspection.annotation;

import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.SOURCE;

import androidx.annotation.RestrictTo;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * Marks a view within AppCompat that shadows platform attributes.
 * <p>
 * Many AppCompat views shadow a platform attribute in order to provide backwards compatibility
 * for older API levels. This means that a developer might set
 * {@code androidx.appcompat:backgroundTint} instead of {@code android:backgroundTint} to get a
 * background tint with support for API < 21. On more recent versions of the platform, this has
 * the effect of storing the resolution stack in the {@code androidx.appcompat} namespace but
 * reading the set value from the platform inspection companion in the {@code android} namespace,
 * causing the resolution stack to get lost in the inspector.
 * <p>
 * Ordinarily, this behavior could be overridden by an {@link Attribute} annotation on the getter,
 * but it is infeasible to override a platform getter that doesn't exist on older supported API
 * levels. It results in worse performance at load time on those devices.
 * <p>
 * This annotation instructs the processor to include a list of shadowed attributes with
 * API-level appropriate accessors in the view's inspection companion. It infers the attributes
 * to include from the interfaces on the annotated view. For example, a view that implements
 * {@link androidx.core.view.TintableBackgroundView} will report
 * {@code androidx.appcompat:backgroundTint} directly from the platform
 * {@link android.view.View.getBackgroundTintList()} getter. This approach allows views within
 * AppCompat to mix shadowed attributes and regular attribute annotations on the same view
 * without hand-written inspection companions.
 * <p>
 * The full list of supported interfaces is
 * {@link androidx.core.widget.AutoSizeableTextView},
 * {@link androidx.core.view.TintableBackgroundView},
 * {@link androidx.core.widget.TintableCheckedTextView},
 * {@link androidx.core.widget.TintableCompoundButton},
 * {@link androidx.core.widget.TintableCompoundDrawablesView}, and
 * {@link androidx.core.widget.TintableImageSourceView}.
 * Please see the mapping in {@link androidx.resourceinspection.processor} for full details.
 *
 * @hide
 */
@Target(TYPE)
@Retention(SOURCE)
@RestrictTo(LIBRARY_GROUP_PREFIX)
public @interface AppCompatShadowedAttributes {
}