[FIR IDE]: support enum entry search properly
This commit is contained in:
@@ -99,7 +99,7 @@ fun KtCallableDeclaration.getOrBuildFir(
|
|||||||
fun KtClassOrObject.getOrBuildFir(
|
fun KtClassOrObject.getOrBuildFir(
|
||||||
state: FirModuleResolveState,
|
state: FirModuleResolveState,
|
||||||
phase: FirResolvePhase = FirResolvePhase.DECLARATIONS
|
phase: FirResolvePhase = FirResolvePhase.DECLARATIONS
|
||||||
): FirRegularClass {
|
): FirMemberDeclaration {
|
||||||
val session = state.getSession(this)
|
val session = state.getSession(this)
|
||||||
|
|
||||||
val file = this.containingKtFile
|
val file = this.containingKtFile
|
||||||
@@ -108,14 +108,20 @@ fun KtClassOrObject.getOrBuildFir(
|
|||||||
|
|
||||||
val firProvider = FirProvider.getInstance(session) as FirIdeProvider
|
val firProvider = FirProvider.getInstance(session) as FirIdeProvider
|
||||||
val firFile = firProvider.getOrBuildFile(file)
|
val firFile = firProvider.getOrBuildFile(file)
|
||||||
val firClass = firProvider.getFirClassifierByFqName(ClassId(packageFqName, klassFqName, false)) as FirRegularClass
|
|
||||||
if (firClass.resolvePhase >= phase) {
|
val firClassOrEnumEntry = if (this is KtEnumEntry) {
|
||||||
return firClass
|
val firEnumClass = firProvider.getFirClassifierByFqName(ClassId(packageFqName, klassFqName.parent(), false)) as FirRegularClass
|
||||||
|
firEnumClass.declarations.first { it is FirEnumEntry && it.name == this.nameAsSafeName } as FirMemberDeclaration
|
||||||
|
} else {
|
||||||
|
firProvider.getFirClassifierByFqName(ClassId(packageFqName, klassFqName, false)) as FirRegularClass
|
||||||
|
}
|
||||||
|
if (firClassOrEnumEntry.resolvePhase >= phase) {
|
||||||
|
return firClassOrEnumEntry
|
||||||
}
|
}
|
||||||
synchronized(firFile) {
|
synchronized(firFile) {
|
||||||
firClass.runResolve(firFile, firProvider, phase, state)
|
firClassOrEnumEntry.runResolve(firFile, firProvider, phase, state)
|
||||||
}
|
}
|
||||||
return firClass
|
return firClassOrEnumEntry
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun KtFile.getOrBuildRawFirFile(state: FirModuleResolveState): Pair<FirIdeProvider, FirFile> {
|
private fun KtFile.getOrBuildRawFirFile(state: FirModuleResolveState): Pair<FirIdeProvider, FirFile> {
|
||||||
|
|||||||
Reference in New Issue
Block a user