[FIR] Add separate session component for FirIdeProvider

This commit is contained in:
Dmitriy Novozhilov
2020-05-20 16:14:51 +03:00
parent 34d3fe26e6
commit a1c3d2b709
4 changed files with 16 additions and 6 deletions
@@ -34,10 +34,18 @@ class FirIdeJavaModuleBasedSession(
init {
val firIdeProvider = FirIdeProvider(project, scope, this, KotlinScopeProvider(::wrapScopeWithJvmMapped))
registerComponent(
FirProvider::class,
FirIdeProvider(project, scope, this, KotlinScopeProvider(::wrapScopeWithJvmMapped))
firIdeProvider
)
registerComponent(
FirIdeProvider::class,
firIdeProvider
)
registerComponent(
FirSymbolProvider::class,
FirCompositeSymbolProvider(
@@ -150,4 +150,6 @@ class FirIdeProvider(
getFirClassifierByFqName(classId)
return cacheProvider.getNestedClassifierScope(classId)
}
}
}
val FirSession.firIdeProvider: FirIdeProvider by FirSession.sessionComponentAccessor()
@@ -81,7 +81,7 @@ fun KtCallableDeclaration.getOrBuildFir(
val klassFqName = this.containingClassOrObject?.relativeFqName()
val declName = this.nameAsSafeName
val firProvider = session.firProvider as FirIdeProvider
val firProvider = session.firIdeProvider
val firFile = firProvider.getOrBuildFile(file)
val firMemberSymbol = firFile.findCallableMember(firProvider, this, packageFqName, klassFqName, declName).symbol
val firMemberDeclaration = firMemberSymbol.fir
@@ -104,7 +104,7 @@ fun KtClassOrObject.getOrBuildFir(
val packageFqName = file.packageFqName
val klassFqName = this.relativeFqName()
val firProvider = session.firProvider as FirIdeProvider
val firProvider = session.firIdeProvider
val firFile = firProvider.getOrBuildFile(file)
val firClassOrEnumEntry = if (this is KtEnumEntry) {
@@ -124,7 +124,7 @@ fun KtClassOrObject.getOrBuildFir(
private fun KtFile.getOrBuildRawFirFile(state: FirModuleResolveState): Pair<FirIdeProvider, FirFile> {
val session = state.getSession(this)
val firProvider = session.firProvider as FirIdeProvider
val firProvider = session.firIdeProvider
return firProvider to firProvider.getOrBuildFile(this)
}
@@ -102,7 +102,7 @@ abstract class AbstractFirLazyResolveTest : KotlinLightCodeInsightFixtureTestCas
for (file in files) {
val psiFile = psiManager.findFile(file) as KtFile
val session = resolveState.getSession(psiFile)
val firProvider = session.firProvider as FirIdeProvider
val firProvider = session.firIdeProvider
val firFile = firProvider.getFile(psiFile) ?: continue
KotlinTestUtils.assertEqualsToFile(File(expectedTxtPath(file)), firFile.render())
}