From 79193006ced038da07c26e049b314f9c5e73c0fb Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 9 Oct 2023 16:01:37 +0200 Subject: [PATCH] [LC] light methods should provide type parameters for on the fly resolve References inside LC apis are build over `ClsJavaCodeReferenceElement`, which simplifies resolve by providing precalculated data. When refactorings or quick fixes do on the fly resolve, giving only text and LC context, such precalculated data is not available and normal resolve starts. In order for this resolve to work correctly, LC should provide available declarations Corresponding test in monorepo: `KotlinSymbolOnAirResolveTest` ^ KT-62440 fixed --- .../classes/symbol/methods/SymbolLightMethodBase.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethodBase.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethodBase.kt index 080bea34734..b4ad3eccda6 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethodBase.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethodBase.kt @@ -9,6 +9,7 @@ import com.intellij.psi.* import com.intellij.psi.impl.PsiImplUtil import com.intellij.psi.impl.PsiSuperMethodImplUtil import com.intellij.psi.impl.light.LightReferenceListBuilder +import com.intellij.psi.scope.PsiScopeProcessor import com.intellij.psi.util.MethodSignature import com.intellij.psi.util.MethodSignatureBackedByPsiMethod import org.jetbrains.kotlin.analysis.api.KtAnalysisSession @@ -67,6 +68,15 @@ internal abstract class SymbolLightMethodBase( override fun getSignature(substitutor: PsiSubstitutor): MethodSignature = MethodSignatureBackedByPsiMethod.create(this, substitutor) + override fun processDeclarations( + processor: PsiScopeProcessor, + state: ResolveState, + lastParent: PsiElement?, + place: PsiElement, + ): Boolean { + return PsiImplUtil.processDeclarationsInMethod(this, processor, state, lastParent, place) + } + abstract override fun equals(other: Any?): Boolean abstract override fun hashCode(): Int