Merge "False positive warnings for MissingJvmStatic are fixed."
diff --git a/src/main/java/com/android/tools/metalava/KotlinInteropChecks.kt b/src/main/java/com/android/tools/metalava/KotlinInteropChecks.kt
index 95476e9..d88ed2a 100644
--- a/src/main/java/com/android/tools/metalava/KotlinInteropChecks.kt
+++ b/src/main/java/com/android/tools/metalava/KotlinInteropChecks.kt
@@ -132,17 +132,19 @@
                 if (sourcePsi is KtProperty) {
                     val companionClassName = sourcePsi.containingClassOrObject?.name
                     if (companionClassName == "Companion") {
-                        // TODO and const?
-                        if (modifiers.findAnnotation("kotlin.jvm.JvmField") == null) {
-                            reporter.report(
-                                Issues.MISSING_JVMSTATIC, field,
-                                "Companion object constants like ${field.name()} should be marked @JvmField for Java interoperability; see https://android.github.io/kotlin-guides/interop.html#companion-constants"
-                            )
-                        } else if (modifiers.findAnnotation("kotlin.jvm.JvmStatic") != null) {
-                            reporter.report(
-                                Issues.MISSING_JVMSTATIC, field,
-                                "Companion object constants like ${field.name()} should be using @JvmField, not @JvmStatic; see https://android.github.io/kotlin-guides/interop.html#companion-constants"
-                            )
+                        // JvmField cannot be applied to const property (https://github.com/JetBrains/kotlin/blob/dc7b1fbff946d1476cc9652710df85f65664baee/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt#L46)
+                        if (!modifiers.isConst()) {
+                            if (modifiers.findAnnotation("kotlin.jvm.JvmField") == null) {
+                                reporter.report(
+                                    Issues.MISSING_JVMSTATIC, field,
+                                    "Companion object constants like ${field.name()} should be marked @JvmField for Java interoperability; see https://android.github.io/kotlin-guides/interop.html#companion-constants"
+                                )
+                            } else if (modifiers.findAnnotation("kotlin.jvm.JvmStatic") != null) {
+                                reporter.report(
+                                    Issues.MISSING_JVMSTATIC, field,
+                                    "Companion object constants like ${field.name()} should be using @JvmField, not @JvmStatic; see https://android.github.io/kotlin-guides/interop.html#companion-constants"
+                                )
+                            }
                         }
                     }
                 }
diff --git a/src/main/java/com/android/tools/metalava/model/DefaultModifierList.kt b/src/main/java/com/android/tools/metalava/model/DefaultModifierList.kt
index 549136d..0bfd158 100644
--- a/src/main/java/com/android/tools/metalava/model/DefaultModifierList.kt
+++ b/src/main/java/com/android/tools/metalava/model/DefaultModifierList.kt
@@ -123,6 +123,10 @@
         return isSet(INFIX)
     }
 
+    override fun isConst(): Boolean {
+        return isSet(CONST)
+    }
+
     override fun isSuspend(): Boolean {
         return isSet(SUSPEND)
     }
@@ -310,6 +314,7 @@
         const val INLINE = 1 shl 18
         const val SUSPEND = 1 shl 19
         const val COMPANION = 1 shl 20
+        const val CONST = 1 shl 21
 
         /**
          * Modifiers considered significant to include signature files (and similarly
diff --git a/src/main/java/com/android/tools/metalava/model/ModifierList.kt b/src/main/java/com/android/tools/metalava/model/ModifierList.kt
index 0ff7189..648a051 100644
--- a/src/main/java/com/android/tools/metalava/model/ModifierList.kt
+++ b/src/main/java/com/android/tools/metalava/model/ModifierList.kt
@@ -53,6 +53,7 @@
     fun isSealed(): Boolean = false
     fun isCompanion(): Boolean = false
     fun isInfix(): Boolean = false
+    fun isConst(): Boolean = false
     fun isSuspend(): Boolean = false
     fun isOperator(): Boolean = false
     fun isInline(): Boolean = false
diff --git a/src/main/java/com/android/tools/metalava/model/psi/PsiModifierItem.kt b/src/main/java/com/android/tools/metalava/model/psi/PsiModifierItem.kt
index 9426f0a..bd88e3a 100644
--- a/src/main/java/com/android/tools/metalava/model/psi/PsiModifierItem.kt
+++ b/src/main/java/com/android/tools/metalava/model/psi/PsiModifierItem.kt
@@ -122,6 +122,9 @@
                     if (ktModifierList.hasModifier(KtTokens.INFIX_KEYWORD)) {
                         flags = flags or INFIX
                     }
+                    if (ktModifierList.hasModifier(KtTokens.CONST_KEYWORD)) {
+                        flags = flags or CONST
+                    }
                     if (ktModifierList.hasModifier(KtTokens.OPERATOR_KEYWORD)) {
                         flags = flags or OPERATOR
                     }
diff --git a/src/test/java/com/android/tools/metalava/KotlinInteropChecksTest.kt b/src/test/java/com/android/tools/metalava/KotlinInteropChecksTest.kt
index 4ad0e6d..49a472c 100644
--- a/src/test/java/com/android/tools/metalava/KotlinInteropChecksTest.kt
+++ b/src/test/java/com/android/tools/metalava/KotlinInteropChecksTest.kt
@@ -106,7 +106,6 @@
         check(
             extraArguments = arrayOf(ARG_CHECK_KOTLIN_INTEROP),
             warnings = """
-                src/test/pkg/Foo.kt:7: warning: Companion object constants like INTEGER_ONE should be marked @JvmField for Java interoperability; see https://android.github.io/kotlin-guides/interop.html#companion-constants [MissingJvmstatic]
                 src/test/pkg/Foo.kt:10: warning: Companion object constants like WRONG2 should be using @JvmField, not @JvmStatic; see https://android.github.io/kotlin-guides/interop.html#companion-constants [MissingJvmstatic]
                 src/test/pkg/Foo.kt:13: warning: Companion object methods like missing should be marked @JvmStatic for Java interoperability; see https://android.github.io/kotlin-guides/interop.html#companion-functions [MissingJvmstatic]
                 """,