<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 8.4.0-alpha12" type="baseline" client="gradle" dependencies="false" name="AGP (8.4.0-alpha12)" variant="all" version="8.4.0-alpha12">

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    /**"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    public synchronized void setHooks(ResourceManagerHooks hooks) {"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    public synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId,"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    public synchronized void onConfigurationChanged(@NonNull Context context) {"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    private synchronized Drawable getCachedDrawable(@NonNull final Context context,"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    private synchronized boolean addDrawableToCache(@NonNull final Context context, final long key,"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    synchronized Drawable onDrawableLoadedFromResources(@NonNull Context context,"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    synchronized ColorStateList getTintList(@NonNull Context context, @DrawableRes int resId) {"
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="    public static synchronized PorterDuffColorFilter getPorterDuffColorFilter("
        errorLine2="    ^">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="        if (SDK_INT >= LOLLIPOP) {"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="            } else if (SDK_INT >= LOLLIPOP) {"
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="            } else if (SDK_INT >= LOLLIPOP) {"
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="    @RequiresApi(21)"
        errorLine2="    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/resources/Compatibility.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="    @RequiresApi(LOLLIPOP)"
        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="            if (Build.VERSION.SDK_INT >= 21 &amp;&amp; hotspotBounds != null) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="    @RequiresApi(21)"
        errorLine2="    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="    @RequiresApi(21)"
        errorLine2="    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="        @RequiresApi(LOLLIPOP)"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="        @RequiresApi(LOLLIPOP)"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="    @RequiresApi(21)"
        errorLine2="    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {"
        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="    @RequiresApi(21)"
        errorLine2="    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourcesWrapper.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="    @RequiresApi(21)"
        errorLine2="    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourcesWrapper.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="        if (SDK_INT >= LOLLIPOP) {"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="                if (SDK_INT >= LOLLIPOP) {"
        errorLine2="                    ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is always >= 21"
        errorLine1="    @RequiresApi(21)"
        errorLine2="    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is never &lt; 21"
        errorLine1="        return Build.VERSION.SDK_INT &lt; 21 || VectorEnabledTintResources.shouldBeUsed();"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
    </issue>

    <issue
        id="ObsoleteSdkInt"
        message="Unnecessary; SDK_INT is never &lt; 21"
        errorLine1="                &amp;&amp; Build.VERSION.SDK_INT &lt;= MAX_SDK_WHERE_REQUIRED;"
        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java"/>
    </issue>

    <issue
        id="KotlinPropertyAccess"
        message="The getter return type (`Theme`) and setter parameter type (`int`) getter and setter methods for property `theme` should have exactly the same type to allow be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
        errorLine1="    public Resources.Theme getTheme() {"
        errorLine2="                           ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
        <location
            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
            message="Setter here"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static ColorStateList getColorStateList(@NonNull Context context, @ColorRes int resId) {"
        errorLine2="                  ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/content/res/AppCompatResources.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
        errorLine2="                               ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setTintList(ColorStateList tint) {"
        errorLine2="                            ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected void onBoundsChange(Rect bounds) {"
        errorLine2="                                  ~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public final ConstantState getConstantState() {"
        errorLine2="                 ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public Drawable mutate() {"
        errorLine2="           ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static PorterDuff.Mode parseTintMode(int value, PorterDuff.Mode defaultMode) {"
        errorLine2="                  ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/DrawableUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static PorterDuff.Mode parseTintMode(int value, PorterDuff.Mode defaultMode) {"
        errorLine2="                                                           ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/DrawableUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public DrawableWrapperCompat(Drawable drawable) {"
        errorLine2="                                 ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected void onBoundsChange(Rect bounds) {"
        errorLine2="                                  ~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setColorFilter(ColorFilter cf) {"
        errorLine2="                               ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public boolean setState(final int[] stateSet) {"
        errorLine2="                                  ~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int[] getState() {"
        errorLine2="           ~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public Drawable getCurrent() {"
        errorLine2="           ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public Region getTransparentRegion() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public boolean getPadding(Rect padding) {"
        errorLine2="                              ~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void invalidateDrawable(Drawable who) {"
        errorLine2="                                   ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
        errorLine2="                                 ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
        errorLine2="                                               ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
        errorLine2="                                   ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
        errorLine2="                                                 ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setTintList(ColorStateList tint) {"
        errorLine2="                            ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setTintMode(PorterDuff.Mode tintMode) {"
        errorLine2="                            ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static synchronized ResourceManagerInternal get() {"
        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public synchronized void setHooks(ResourceManagerHooks hooks) {"
        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {"
        errorLine2="                        ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static synchronized PorterDuffColorFilter getPorterDuffColorFilter("
        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            int color, PorterDuff.Mode mode) {"
        errorLine2="                       ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void addState(int[] stateSet, Drawable drawable) {"
        errorLine2="                         ~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void addState(int[] stateSet, Drawable drawable) {"
        errorLine2="                                         ~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static Context wrap(@NonNull final Context context) {"
        errorLine2="                  ~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public ColorStateList mTintList;"
        errorLine2="           ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/TintInfo.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public PorterDuff.Mode mTintMode;"
        errorLine2="           ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/appcompat/widget/TintInfo.java"/>
    </issue>

</issues>
