Snap for 5280121 from 509e6a75f2aefe9629c7366d8180f7c555ebec8f to qt-release

Change-Id: Ie540e36dee9f80472fae0911638d13ab0582f607
diff --git a/src/main/java/com/android/tools/metalava/Constants.kt b/src/main/java/com/android/tools/metalava/Constants.kt
index 88cd3a7..59ffda5 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_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/Driver.kt b/src/main/java/com/android/tools/metalava/Driver.kt
index 2a440bd..c455923 100644
--- a/src/main/java/com/android/tools/metalava/Driver.kt
+++ b/src/main/java/com/android/tools/metalava/Driver.kt
@@ -48,9 +48,13 @@
 import com.google.common.base.Stopwatch
 import com.google.common.collect.Lists
 import com.google.common.io.Files
+import com.intellij.core.CoreApplicationEnvironment
 import com.intellij.openapi.diagnostic.DefaultLogger
+import com.intellij.openapi.extensions.Extensions
 import com.intellij.openapi.roots.LanguageLevelProjectExtension
 import com.intellij.openapi.util.Disposer
+import com.intellij.psi.javadoc.CustomJavadocTagProvider
+import com.intellij.psi.javadoc.JavadocTagInfo
 import com.intellij.util.execution.ParametersListUtil
 import java.io.File
 import java.io.IOException
@@ -909,7 +913,20 @@
         DefaultLogger.disableStderrDumping(parentDisposable)
     }
 
-    return LintCoreProjectEnvironment.create(parentDisposable, appEnv)
+    val environment = LintCoreProjectEnvironment.create(parentDisposable, appEnv)
+
+    // Missing service needed in metalava but not in lint: javadoc handling
+    environment.project.registerService(
+        com.intellij.psi.javadoc.JavadocManager::class.java,
+        com.intellij.psi.impl.source.javadoc.JavadocManagerImpl::class.java
+    )
+    environment.registerProjectExtensionPoint(JavadocTagInfo.EP_NAME,
+        com.intellij.psi.javadoc.JavadocTagInfo::class.java)
+    CoreApplicationEnvironment.registerExtensionPoint(
+        Extensions.getRootArea(), CustomJavadocTagProvider.EP_NAME, CustomJavadocTagProvider::class.java
+    )
+
+    return environment
 }
 
 private fun ensurePsiFileCapacity() {
diff --git a/src/main/java/com/android/tools/metalava/RewriteAnnotations.kt b/src/main/java/com/android/tools/metalava/RewriteAnnotations.kt
index fb56a10..d256e10 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 @@
      */
     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 a7c04ed..ae61fdd 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.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 @@
                 // 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 @@
 
             // @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 @@
 
             // @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 ea5b13f..d309a11 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 @@
                  * @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 fca7dea..da65e5c 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 @@
                     /** 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;
                     }