diff --git a/src/main/java/com/android/tools/metalava/Constants.kt b/src/main/java/com/android/tools/metalava/Constants.kt index 88cd3a701cfca56d1e553267e506bc29efaf91a4..59ffda5afd20f5534e256fea05f8b5f5d72e4903 100644 --- a/src/main/java/com/android/tools/metalava/Constants.kt +++ b/src/main/java/com/android/tools/metalava/Constants.kt @@ -32,6 +32,8 @@ const val ANDROID_SYSTEM_API = "android.annotation.SystemApi" const val ANDROID_REQUIRES_PERMISSION = "android.annotation.RequiresPermission" const val RECENTLY_NULLABLE = "androidx.annotation.RecentlyNullable" const val RECENTLY_NONNULL = "androidx.annotation.RecentlyNonNull" +const val ANDROID_NULLABLE = "android.annotation.Nullable" +const val ANDROID_NONNULL = "android.annotation.NonNull" const val ANDROIDX_VISIBLE_FOR_TESTING = "androidx.annotation.VisibleForTesting" const val ANDROID_SUPPORT_VISIBLE_FOR_TESTING = "android.support.annotation.VisibleForTesting" const val ATTR_OTHERWISE = "otherwise" diff --git a/src/main/java/com/android/tools/metalava/RewriteAnnotations.kt b/src/main/java/com/android/tools/metalava/RewriteAnnotations.kt index fb56a1030c329900d7d3977580d0e08ca16d44af..d256e10631ea397fd3d37c32ffd92aedb4d233e8 100644 --- a/src/main/java/com/android/tools/metalava/RewriteAnnotations.kt +++ b/src/main/java/com/android/tools/metalava/RewriteAnnotations.kt @@ -123,10 +123,10 @@ class RewriteAnnotations { */ private fun hasSourceRetention(codebase: Codebase?, qualifiedName: String): Boolean { when { - qualifiedName == "androidx.annotation.RecentlyNullable" || - qualifiedName == "androidx.annotation.RecentlyNonNull" || - qualifiedName == "android.annotation.Nullable" || - qualifiedName == "android.annotation.NonNull" -> return false + qualifiedName == RECENTLY_NULLABLE || + qualifiedName == RECENTLY_NONNULL || + qualifiedName == ANDROID_NULLABLE || + qualifiedName == ANDROID_NONNULL -> return false qualifiedName.startsWith("androidx.annotation.") -> return true } diff --git a/src/main/java/com/android/tools/metalava/model/AnnotationItem.kt b/src/main/java/com/android/tools/metalava/model/AnnotationItem.kt index a7c04edc8995e0f61fadf7cf207c6cc746b50e3b..ae61fdd9cf9c3fb9935adac9c7aa30dd2923d1f9 100644 --- a/src/main/java/com/android/tools/metalava/model/AnnotationItem.kt +++ b/src/main/java/com/android/tools/metalava/model/AnnotationItem.kt @@ -27,6 +27,8 @@ import com.android.tools.lint.annotations.Extractor.ANDROID_STRING_DEF import com.android.tools.metalava.ANDROIDX_ANNOTATION_PREFIX import com.android.tools.metalava.ANDROIDX_NONNULL import com.android.tools.metalava.ANDROIDX_NULLABLE +import com.android.tools.metalava.ANDROID_NONNULL +import com.android.tools.metalava.ANDROID_NULLABLE import com.android.tools.metalava.ANDROID_SUPPORT_ANNOTATION_PREFIX import com.android.tools.metalava.Compatibility import com.android.tools.metalava.JAVA_LANG_PREFIX @@ -238,17 +240,18 @@ interface AnnotationItem { // We only change recently/newly nullable annotation in stubs RECENTLY_NULLABLE -> return if (target == AnnotationTarget.SDK_STUBS_FILE) qualifiedName else ANDROIDX_NULLABLE RECENTLY_NONNULL -> return if (target == AnnotationTarget.SDK_STUBS_FILE) qualifiedName else ANDROIDX_NONNULL - "android.annotation.Nullable" -> return if (target == AnnotationTarget.SDK_STUBS_FILE) qualifiedName else ANDROIDX_NULLABLE - "android.annotation.NonNull" -> return if (target == AnnotationTarget.SDK_STUBS_FILE) qualifiedName else ANDROIDX_NONNULL - ANDROIDX_NULLABLE -> return if (target == AnnotationTarget.SDK_STUBS_FILE) "android.annotation.Nullable" else ANDROIDX_NULLABLE - ANDROIDX_NONNULL -> return if (target == AnnotationTarget.SDK_STUBS_FILE) "android.annotation.NonNull" else ANDROIDX_NONNULL - - "android.support.annotation.NonNull" -> return ANDROIDX_NONNULL - "android.support.annotation.Nullable" -> return ANDROIDX_NULLABLE - "libcore.util.NonNull" -> return ANDROIDX_NONNULL - "libcore.util.Nullable" -> return ANDROIDX_NULLABLE - "org.jetbrains.annotations.NotNull" -> return ANDROIDX_NONNULL - "org.jetbrains.annotations.Nullable" -> return ANDROIDX_NULLABLE + + ANDROIDX_NULLABLE, + ANDROID_NULLABLE, + "android.support.annotation.Nullable", + "libcore.util.Nullable", + "org.jetbrains.annotations.Nullable" -> return if (target == AnnotationTarget.SDK_STUBS_FILE) ANDROID_NULLABLE else ANDROIDX_NULLABLE + + ANDROIDX_NONNULL, + ANDROID_NONNULL, + "android.support.annotation.NonNull", + "libcore.util.NonNull", + "org.jetbrains.annotations.NotNull" -> return if (target == AnnotationTarget.SDK_STUBS_FILE) ANDROID_NONNULL else ANDROIDX_NONNULL // Typedefs "android.support.annotation.IntDef", @@ -408,8 +411,8 @@ interface AnnotationItem { // @android.annotation.Nullable and NonNullable specially recognized annotations by the Kotlin // compiler 1.3 and above: they always go in the stubs. - if (qualifiedName == "android.annotation.Nullable" || - qualifiedName == "android.annotation.NonNull" || + if (qualifiedName == ANDROID_NULLABLE || + qualifiedName == ANDROID_NONNULL || qualifiedName == ANDROIDX_NULLABLE || qualifiedName == ANDROIDX_NONNULL ) { @@ -424,8 +427,8 @@ interface AnnotationItem { // @RecentlyNullable and @RecentlyNonNull are specially recognized annotations by the Kotlin // compiler: they always go in the stubs. - if (qualifiedName == "androidx.annotation.RecentlyNullable" || - qualifiedName == "androidx.annotation.RecentlyNonNull" + if (qualifiedName == RECENTLY_NULLABLE || + qualifiedName == RECENTLY_NONNULL ) { return ANNOTATION_IN_ALL_STUBS } diff --git a/src/test/java/com/android/tools/metalava/DocAnalyzerTest.kt b/src/test/java/com/android/tools/metalava/DocAnalyzerTest.kt index ea5b13fcbb72d874b86f2f8ae1c6347f0532fec3..d309a11500f08fb46e1add323f9d776cc9bc74c5 100644 --- a/src/test/java/com/android/tools/metalava/DocAnalyzerTest.kt +++ b/src/test/java/com/android/tools/metalava/DocAnalyzerTest.kt @@ -1333,7 +1333,7 @@ class DocAnalyzerTest : DriverTest() { * @deprecated Blah blah blah 1 */ @Deprecated - @androidx.annotation.NonNull + @android.annotation.NonNull public java.lang.String toString() { throw new RuntimeException("Stub!"); } /** * My description diff --git a/src/test/java/com/android/tools/metalava/StubsTest.kt b/src/test/java/com/android/tools/metalava/StubsTest.kt index fca7dea3011b5a63d582759c6c383878913a428e..da65e5c80cee2a87718896ce951c4873e2cecad9 100644 --- a/src/test/java/com/android/tools/metalava/StubsTest.kt +++ b/src/test/java/com/android/tools/metalava/StubsTest.kt @@ -1352,17 +1352,17 @@ class StubsTest : DriverTest() { /** My class doc */ @SuppressWarnings({"unchecked", "deprecation", "all"}) public final class Kotlin extends test.pkg.Parent { - public Kotlin(@androidx.annotation.NonNull java.lang.String property1, int arg2) { throw new RuntimeException("Stub!"); } - @androidx.annotation.NonNull + public Kotlin(@android.annotation.NonNull java.lang.String property1, int arg2) { throw new RuntimeException("Stub!"); } + @android.annotation.NonNull public java.lang.String method() { throw new RuntimeException("Stub!"); } /** My method doc */ public void otherMethod(boolean ok, int times) { throw new RuntimeException("Stub!"); } /** property doc */ - @androidx.annotation.Nullable + @android.annotation.Nullable public java.lang.String getProperty2() { throw new RuntimeException("Stub!"); } /** property doc */ - public void setProperty2(@androidx.annotation.Nullable java.lang.String p) { throw new RuntimeException("Stub!"); } - @androidx.annotation.NonNull + public void setProperty2(@android.annotation.Nullable java.lang.String p) { throw new RuntimeException("Stub!"); } + @android.annotation.NonNull public java.lang.String getProperty1() { throw new RuntimeException("Stub!"); } public int someField2; }