[LL FIR] avoid ClassId computation to check isLocal

This commit is contained in:
Dmitrii Gridin
2023-06-17 12:31:41 +02:00
parent 56bebeaf92
commit fc7712148e
@@ -51,16 +51,17 @@ internal fun FirDeclaration.getKtDeclarationForFirElement(): KtDeclaration {
internal fun declarationCanBeLazilyResolved(declaration: KtDeclaration): Boolean = when (declaration) {
is KtDestructuringDeclarationEntry, is KtFunctionLiteral, is KtTypeParameter -> false
is KtPrimaryConstructor -> (declaration.parent as? KtClassOrObject)?.getClassId() != null
is KtParameter -> declaration.hasValOrVar() && declaration.containingClassOrObject?.getClassId() != null
is KtPrimaryConstructor -> (declaration.parent as? KtClassOrObject)?.isLocal == false
is KtParameter -> declaration.hasValOrVar() && declaration.containingClassOrObject?.isLocal == false
is KtCallableDeclaration, is KtEnumEntry, is KtClassInitializer -> {
when (val parent = declaration.parent) {
is KtFile -> true
is KtClassBody -> (parent.parent as? KtClassOrObject)?.getClassId() != null
is KtClassBody -> (parent.parent as? KtClassOrObject)?.isLocal == false
else -> false
}
}
!is KtNamedDeclaration -> false
is KtClassLikeDeclaration -> declaration.getClassId() != null
is KtClassOrObject -> !declaration.isLocal
is KtTypeAlias -> declaration.isTopLevel() || declaration.getClassId() != null
else -> error("Unexpected ${declaration::class.qualifiedName}")
}