Skip to content

Commit

Permalink
Remove a workaround for nested classes
Browse files Browse the repository at this point in the history
The proper fix had landed in Kotlin 1.8.20.
See google#1034 for details.
  • Loading branch information
ting-yuan committed Jun 30, 2023
1 parent 448af70 commit 7823f2a
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 27 deletions.
Expand Up @@ -514,9 +514,7 @@ class ResolverImpl(
// TODO: Resolve Java variables is not supported by this function. Not needed currently.
fun resolveJavaDeclaration(psi: PsiElement): DeclarationDescriptor? {
return when (psi) {
is PsiClass -> moduleClassResolver.resolveClass(
JavaClassImpl(psi).apply { workaroundForNested(lazyJavaResolverContext) }
)
is PsiClass -> moduleClassResolver.resolveClass(JavaClassImpl(psi))
is PsiMethod -> {
// TODO: get rid of hardcoded check if possible.
val property = if (psi.name.startsWith("set") || psi.name.startsWith("get")) {
Expand Down Expand Up @@ -544,9 +542,7 @@ class ResolverImpl(
}
is PsiField -> {
moduleClassResolver
.resolveClass(
JavaFieldImpl(psi).containingClass.apply { workaroundForNested(lazyJavaResolverContext) }
)
.resolveClass(JavaFieldImpl(psi).containingClass)
?.findEnclosedDescriptor(
kindFilter = DescriptorKindFilter.VARIABLES,
filter = { it.findPsi() == psi }
Expand Down Expand Up @@ -735,9 +731,7 @@ class ResolverImpl(
}
}
val containingDeclaration = if (psi.owner is PsiClass) {
moduleClassResolver.resolveClass(
JavaClassImpl(psi.owner as PsiClass).apply { workaroundForNested(lazyJavaResolverContext) }
)
moduleClassResolver.resolveClass(JavaClassImpl(psi.owner as PsiClass))
} else {
val owner = psi.owner
check(owner is PsiMethod) {
Expand Down Expand Up @@ -1553,16 +1547,3 @@ internal fun KSTypeReference.resolveToUnderlying(): KSType {
}
return candidate
}

// TODO: Remove this after upgrading to Kotlin 1.8.20.
// Temporary work around for https://github.com/google/ksp/issues/1034
// Force resolve outer most class for Java nested classes.
internal fun JavaClass.workaroundForNested(
lazyJavaResolverContext: LazyJavaResolverContext = ResolverImpl.instance!!.lazyJavaResolverContext
) {
var outerMost = outerClass
while (outerMost?.outerClass != null) {
outerMost = outerMost.outerClass
}
outerMost?.classId?.let { lazyJavaResolverContext.components.finder.findClass(it) }
}
Expand Up @@ -22,7 +22,6 @@ import com.google.devtools.ksp.isConstructor
import com.google.devtools.ksp.memoized
import com.google.devtools.ksp.processing.impl.KSNameImpl
import com.google.devtools.ksp.processing.impl.ResolverImpl
import com.google.devtools.ksp.processing.impl.workaroundForNested
import com.google.devtools.ksp.symbol.*
import com.google.devtools.ksp.symbol.impl.*
import com.google.devtools.ksp.symbol.impl.binary.getAllFunctions
Expand Down Expand Up @@ -75,7 +74,7 @@ class KSClassDeclarationJavaImpl private constructor(val psi: PsiClass) :

// Could the resolution ever fail?
private val descriptor: ClassDescriptor? by lazy {
ResolverImpl.instance!!.moduleClassResolver.resolveClass(JavaClassImpl(psi).apply { workaroundForNested() })
ResolverImpl.instance!!.moduleClassResolver.resolveClass(JavaClassImpl(psi))
}

// TODO in 1.5 + jvmTarget 15, will we return Java permitted types?
Expand Down
Expand Up @@ -20,7 +20,6 @@ import com.google.devtools.ksp.BinaryClassInfoCache
import com.google.devtools.ksp.ExceptionMessage
import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.processing.impl.ResolverImpl
import com.google.devtools.ksp.processing.impl.workaroundForNested
import com.google.devtools.ksp.symbol.*
import com.google.devtools.ksp.symbol.Variance
import com.google.devtools.ksp.symbol.impl.binary.KSClassDeclarationDescriptorImpl
Expand Down Expand Up @@ -231,9 +230,9 @@ internal inline fun <reified T : CallableMemberDescriptor> T.findClosestOverride

internal fun ModuleClassResolver.resolveContainingClass(psiMethod: PsiMethod): ClassDescriptor? {
return if (psiMethod.isConstructor) {
resolveClass(JavaConstructorImpl(psiMethod).containingClass.apply { workaroundForNested() })
resolveClass(JavaConstructorImpl(psiMethod).containingClass)
} else {
resolveClass(JavaMethodImpl(psiMethod).containingClass.apply { workaroundForNested() })
resolveClass(JavaMethodImpl(psiMethod).containingClass)
}
}

Expand Down

0 comments on commit 7823f2a

Please sign in to comment.