False positive warnings for MissingJvmStatic are fixed.
'@JvmOverloads' annotation cannot be used on interface methods
Bug: 138602561
Test: ./gradlew test
Change-Id: I8ec9f0f0a1e77f8a6b4786573eba5ed67ad78f1e
diff --git a/src/main/java/com/android/tools/metalava/KotlinInteropChecks.kt b/src/main/java/com/android/tools/metalava/KotlinInteropChecks.kt
index 6a6812c..95476e9 100644
--- a/src/main/java/com/android/tools/metalava/KotlinInteropChecks.kt
+++ b/src/main/java/com/android/tools/metalava/KotlinInteropChecks.kt
@@ -233,6 +233,11 @@
// in Java you still don't have the option of adding @JvmOverloads
return
}
+ if (method.containingClass().isInterface()) {
+ // '@JvmOverloads' annotation cannot be used on interface methods
+ // (https://github.com/JetBrains/kotlin/blob/dc7b1fbff946d1476cc9652710df85f65664baee/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java#L50)
+ return
+ }
val parameters = method.parameters()
if (parameters.size <= 1) {
// No need for overloads when there is at most one version...
diff --git a/src/test/java/com/android/tools/metalava/KotlinInteropChecksTest.kt b/src/test/java/com/android/tools/metalava/KotlinInteropChecksTest.kt
index c64bce5..4ad0e6d 100644
--- a/src/test/java/com/android/tools/metalava/KotlinInteropChecksTest.kt
+++ b/src/test/java/com/android/tools/metalava/KotlinInteropChecksTest.kt
@@ -142,13 +142,17 @@
check(
extraArguments = arrayOf(ARG_CHECK_KOTLIN_INTEROP),
warnings = """
- src/test/pkg/Foo.kt:8: warning: A Kotlin method with default parameter values should be annotated with @JvmOverloads for better Java interoperability; see https://android.github.io/kotlin-guides/interop.html#function-overloads-for-defaults [MissingJvmstatic]
+ src/test/pkg/Bar.kt:12: warning: A Kotlin method with default parameter values should be annotated with @JvmOverloads for better Java interoperability; see https://android.github.io/kotlin-guides/interop.html#function-overloads-for-defaults [MissingJvmstatic]
""",
sourceFiles = arrayOf(
kotlin(
"""
package test.pkg
+ interface Bar {
+ fun ok(int: Int = 0, int2: Int = 0) { }
+ }
+
class Foo {
fun ok1() { }
fun ok2(int: Int) { }