Skip to content

Commit

Permalink
Fix resolveJavaDeclaration for get/set methods
Browse files Browse the repository at this point in the history
This PR fixes a bug where KSP failed to resolve the java
declaration for a java method if its name starts with get
or set.

Fixes: #200
Test: signatureMapper
  • Loading branch information
yigit authored and neetopia committed Dec 22, 2020
1 parent 91d9d18 commit 03de9f1
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -329,22 +329,21 @@ class ResolverImpl(
is PsiClass -> moduleClassResolver.resolveClass(JavaClassImpl(psi))
is PsiMethod -> {
// TODO: get rid of hardcoded check if possible.
if (psi.name.startsWith("set") || psi.name.startsWith("get")) {
val property = if (psi.name.startsWith("set") || psi.name.startsWith("get")) {
moduleClassResolver
.resolveClass(JavaMethodImpl(psi).containingClass)
?.findEnclosedDescriptor(
kindFilter = DescriptorKindFilter.CALLABLES
) {
(it as? PropertyDescriptor)?.getter?.findPsi() == psi || (it as? PropertyDescriptor)?.setter?.findPsi() == psi
}
} else {
moduleClassResolver
.resolveClass(JavaMethodImpl(psi).containingClass)
?.findEnclosedDescriptor(
kindFilter = DescriptorKindFilter.FUNCTIONS,
filter = { it.findPsi() == psi }
)
}
} else null
property ?: moduleClassResolver
.resolveClass(JavaMethodImpl(psi).containingClass)
?.findEnclosedDescriptor(
kindFilter = DescriptorKindFilter.FUNCTIONS,
filter = { it.findPsi() == psi }
)
}
is PsiField -> {
moduleClassResolver
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ class MapSignatureProcessor : AbstractTestProcessor() {
result.add(resolver.mapToJvmSignature(cls))
cls.primaryConstructor?.let { result.add(resolver.mapToJvmSignature(it)) }
cls.declarations.map { result.add(resolver.mapToJvmSignature(it)) }
listOf("Cls", "JavaIntefaceWithVoid")
.map { className ->
resolver.getClassDeclarationByName(className)!!
}.forEach { subject ->
result.add(resolver.mapToJvmSignature(subject))
subject.primaryConstructor?.let { result.add(resolver.mapToJvmSignature(it)) }
subject.declarations.map { result.add(resolver.mapToJvmSignature(it)) }
}
return emptyList()
}
}
8 changes: 8 additions & 0 deletions compiler-plugin/testData/api/signatureMapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,18 @@
// ()V
// I
// ()Ljava/lang/String;
// LJavaIntefaceWithVoid;
// ()Ljava/lang/Void;
// END

// FILE: Cls.kt
class Cls {
val a: Int = 1

fun foo(): String { return "1" }
}

// FILE: JavaIntefaceWithVoid.java
interface JavaIntefaceWithVoid {
Void getVoid();
}

0 comments on commit 03de9f1

Please sign in to comment.