[LL] fix resolving of compiled type value parameter
KT-57917 occurs when UAST requests e.g. annotations for the target parameter to check correctness of nullability or Nls
This commit is contained in:
+13
@@ -33,11 +33,24 @@ internal class FirDeclarationForCompiledElementSearcher(private val symbolProvid
|
|||||||
is KtConstructor<*> -> findConstructorOfNonLocalClass(ktDeclaration)
|
is KtConstructor<*> -> findConstructorOfNonLocalClass(ktDeclaration)
|
||||||
is KtNamedFunction -> findNonLocalFunction(ktDeclaration)
|
is KtNamedFunction -> findNonLocalFunction(ktDeclaration)
|
||||||
is KtProperty -> findNonLocalProperty(ktDeclaration)
|
is KtProperty -> findNonLocalProperty(ktDeclaration)
|
||||||
|
is KtParameter -> findParameter(ktDeclaration)
|
||||||
|
|
||||||
else -> errorWithFirSpecificEntries("Unsupported compiled declaration of type", psi = ktDeclaration)
|
else -> errorWithFirSpecificEntries("Unsupported compiled declaration of type", psi = ktDeclaration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun findParameter(param: KtParameter): FirDeclaration {
|
||||||
|
val ownerFunction = param.ownerFunction ?: errorWithFirSpecificEntries("Unsupported compiled parameter", psi = param)
|
||||||
|
val firDeclaration = findNonLocalDeclaration(ownerFunction)
|
||||||
|
val firFunction = firDeclaration as? FirFunction ?: errorWithFirSpecificEntries(
|
||||||
|
"No fir function found by ktFunction",
|
||||||
|
psi = ownerFunction,
|
||||||
|
fir = firDeclaration
|
||||||
|
)
|
||||||
|
return firFunction.valueParameters.find { it.name == param.nameAsSafeName }
|
||||||
|
?: errorWithFirSpecificEntries("No fir value parameter found", psi = param, fir = firFunction)
|
||||||
|
}
|
||||||
|
|
||||||
private fun findNonLocalEnumEntry(declaration: KtEnumEntry): FirEnumEntry {
|
private fun findNonLocalEnumEntry(declaration: KtEnumEntry): FirEnumEntry {
|
||||||
require(!declaration.isLocal)
|
require(!declaration.isLocal)
|
||||||
val classId = declaration.containingClassOrObject?.getClassId()
|
val classId = declaration.containingClassOrObject?.getClassId()
|
||||||
|
|||||||
Reference in New Issue
Block a user