Reproduce incorrect parent of Java method overriding a Kotlin property (#3048)
diff --git a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ParentOfJavaMethodOverridingKotlinPropertyProcessor.kt b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ParentOfJavaMethodOverridingKotlinPropertyProcessor.kt
new file mode 100644
index 0000000..6559f42
--- /dev/null
+++ b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ParentOfJavaMethodOverridingKotlinPropertyProcessor.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2026 Google LLC
+ * Copyright 2010-2026 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.devtools.ksp.processor
+
+import com.google.devtools.ksp.getClassDeclarationByName
+import com.google.devtools.ksp.getDeclaredFunctions
+import com.google.devtools.ksp.processing.Resolver
+import com.google.devtools.ksp.symbol.KSAnnotated
+
+class ParentOfJavaMethodOverridingKotlinPropertyProcessor : AbstractTestProcessor() {
+ private val result = mutableListOf<String>()
+
+ override fun process(resolver: Resolver): List<KSAnnotated> {
+ val function = resolver.getClassDeclarationByName("MyInterfaceImplJava")!!
+ .getDeclaredFunctions()
+ .single { it.simpleName.asString() == "getProperty" }
+ result.add("parent of $function: ${function.parentDeclaration?.simpleName?.asString()}")
+ return emptyList()
+ }
+
+ override fun toResult(): List<String> = result
+}
diff --git a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPUnitTestSuite.kt b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPUnitTestSuite.kt
index 965fcb6..113f03a 100644
--- a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPUnitTestSuite.kt
+++ b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPUnitTestSuite.kt
@@ -655,6 +655,13 @@
runTest("$AA_PATH/parameterTypes.kt")
}
+ @Bug("https://github.com/google/ksp/issues/2498", BugState.OPEN)
+ @TestMetadata("parentOfJavaMethodOverridingKotlinProperty.kt")
+ @Test
+ fun testParentOfJavaMethodOverridingKotlinProperty() {
+ runFailingTest("$AA_PATH/parentOfJavaMethodOverridingKotlinProperty.kt")
+ }
+
@TestMetadata("parent.kt")
@Test
fun testParent() {
diff --git a/kotlin-analysis-api/testData/parentOfJavaMethodOverridingKotlinProperty.kt b/kotlin-analysis-api/testData/parentOfJavaMethodOverridingKotlinProperty.kt
new file mode 100644
index 0000000..1e2d248
--- /dev/null
+++ b/kotlin-analysis-api/testData/parentOfJavaMethodOverridingKotlinProperty.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2026 Google LLC
+ * Copyright 2010-2026 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// TEST PROCESSOR: ParentOfJavaMethodOverridingKotlinPropertyProcessor
+// EXPECTED:
+// parent of getProperty: MyInterfaceImplJava
+// END
+
+// FILE: K.kt
+interface MyInterface {
+ val property: Int
+}
+
+// FILE: MyInterfaceImplJava.java
+class MyInterfaceImplJava implements MyInterface {
+ public int getProperty() { return 0; }
+}