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]
""",