[FIR IDE]: support enum entry search properly

This commit is contained in:
Mikhail Glukhikh
2020-01-09 17:11:00 +03:00
parent 2f6a48f70c
commit ea267d9ef4
@@ -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> {