diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionDeclarationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionDeclarationImpl.kt index 51d2ca84f4..352a9c216c 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionDeclarationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionDeclarationImpl.kt @@ -52,6 +52,7 @@ class KSFunctionDeclarationImpl private constructor(internal val ktFunctionSymbo } } KaSymbolLocation.TOP_LEVEL -> FunctionKind.TOP_LEVEL + KaSymbolLocation.PROPERTY -> FunctionKind.MEMBER else -> throw IllegalStateException("Unexpected location ${ktFunctionSymbol.location}") } } diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/FunctionKindProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/FunctionKindProcessor.kt index 4e0cffbf7c..0bcaf47f43 100644 --- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/FunctionKindProcessor.kt +++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/FunctionKindProcessor.kt @@ -27,7 +27,12 @@ open class FunctionKindProcessor : AbstractTestProcessor() { override fun process(resolver: Resolver): List { fun KSFunctionDeclaration.pretty(): String { val name = if (parentDeclaration != null) { - val className = parentDeclaration?.simpleName?.asString() ?: "" + val parentClass = when (val parent = parentDeclaration) { + // Fix for https://github.com/google/ksp/issues/2498. Must be removed after fixing the original issue. + is KSPropertyDeclaration -> parent.parentDeclaration + else -> parentDeclaration + } + val className = parentClass?.simpleName?.asString() ?: "" if (className.isNotEmpty()) { "$className.${simpleName.asString()}" } else { diff --git a/test-utils/testData/api/functionKinds.kt b/test-utils/testData/api/functionKinds.kt index 89f81b417b..c8fb7587ef 100644 --- a/test-utils/testData/api/functionKinds.kt +++ b/test-utils/testData/api/functionKinds.kt @@ -29,6 +29,9 @@ // MyClass.suspendMethod: MEMBER // MyInterface.method: MEMBER // MyInterface.methodWithImpl: MEMBER +// MyInterfaceImplJava.: MEMBER +// MyInterfaceImplJava.getProperty: MEMBER +// MyInterfaceImplJava.method: MEMBER // topLevelMethod: TOP_LEVEL // topLevelSuspendMethod: TOP_LEVEL // END @@ -51,6 +54,7 @@ class MyClass { interface MyInterface { fun method() fun methodWithImpl() {} + val property: Int } // FILE: JavaClass.java @@ -64,3 +68,12 @@ interface JavaInterface { void methodInInterface(); static void staticMethodInInterface() {} } + +// FILE: MyInterfaceImplJava.java +class MyInterfaceImplJava implements MyInterface { + @Override + public void method() {} + + @Override + public int getProperty() { return 0; } +}