HMPP, IC: Implement shared provider for IC class files
#KT-61942 fixed temporary solution, see comments for details
This commit is contained in:
committed by
Space Team
parent
76eda0095e
commit
b3d33aee19
+58
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.session
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider
|
||||
import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.java.deserialization.OptionalAnnotationClassesProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.kotlinScopeProvider
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||
|
||||
data class FirJvmIncrementalCompilationSymbolProviders(
|
||||
val symbolProviderForBinariesFromIncrementalCompilation: JvmClassFileBasedSymbolProvider?,
|
||||
val previousFirSessionsSymbolProviders: Collection<FirSymbolProvider>,
|
||||
var optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation: OptionalAnnotationClassesProvider? = null,
|
||||
)
|
||||
|
||||
fun IncrementalCompilationContext.createSymbolProviders(
|
||||
session: FirSession,
|
||||
moduleData: FirModuleData,
|
||||
projectEnvironment: AbstractProjectEnvironment,
|
||||
): FirJvmIncrementalCompilationSymbolProviders {
|
||||
var symbolProviderForBinariesFromIncrementalCompilation: JvmClassFileBasedSymbolProvider? = null
|
||||
var optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation: OptionalAnnotationClassesProvider? = null
|
||||
if (precompiledBinariesPackagePartProvider != null && precompiledBinariesFileScope != null) {
|
||||
val moduleDataProvider = SingleModuleDataProvider(moduleData)
|
||||
val kotlinScopeProvider = session.kotlinScopeProvider
|
||||
symbolProviderForBinariesFromIncrementalCompilation =
|
||||
JvmClassFileBasedSymbolProvider(
|
||||
session,
|
||||
moduleDataProvider,
|
||||
kotlinScopeProvider,
|
||||
precompiledBinariesPackagePartProvider,
|
||||
projectEnvironment.getKotlinClassFinder(precompiledBinariesFileScope),
|
||||
projectEnvironment.getFirJavaFacade(session, moduleData, precompiledBinariesFileScope),
|
||||
defaultDeserializationOrigin = FirDeclarationOrigin.Precompiled
|
||||
)
|
||||
optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation =
|
||||
OptionalAnnotationClassesProvider(
|
||||
session,
|
||||
moduleDataProvider,
|
||||
kotlinScopeProvider,
|
||||
precompiledBinariesPackagePartProvider,
|
||||
defaultDeserializationOrigin = FirDeclarationOrigin.Precompiled
|
||||
)
|
||||
}
|
||||
return FirJvmIncrementalCompilationSymbolProviders(
|
||||
symbolProviderForBinariesFromIncrementalCompilation,
|
||||
previousFirSessionsSymbolProviders,
|
||||
optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation
|
||||
)
|
||||
}
|
||||
+7
-33
@@ -11,9 +11,7 @@ import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||
import org.jetbrains.kotlin.fir.checkers.registerJvmCheckers
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
|
||||
import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
|
||||
@@ -87,7 +85,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
sessionProvider: FirProjectSessionProvider,
|
||||
javaSourcesScope: AbstractProjectFileSearchScope,
|
||||
projectEnvironment: AbstractProjectEnvironment,
|
||||
incrementalCompilationContext: IncrementalCompilationContext?,
|
||||
createIncrementalCompilationSymbolProviders: (FirSession) -> FirJvmIncrementalCompilationSymbolProviders?,
|
||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||
lookupTracker: LookupTracker? = null,
|
||||
@@ -114,45 +112,21 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
},
|
||||
registerExtraCheckers = { it.registerJvmCheckers() },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) },
|
||||
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
var symbolProviderForBinariesFromIncrementalCompilation: JvmClassFileBasedSymbolProvider? = null
|
||||
var optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation: OptionalAnnotationClassesProvider? = null
|
||||
incrementalCompilationContext?.let {
|
||||
if (it.precompiledBinariesPackagePartProvider != null && it.precompiledBinariesFileScope != null) {
|
||||
val moduleDataProvider = SingleModuleDataProvider(moduleData)
|
||||
symbolProviderForBinariesFromIncrementalCompilation =
|
||||
JvmClassFileBasedSymbolProvider(
|
||||
session,
|
||||
moduleDataProvider,
|
||||
kotlinScopeProvider,
|
||||
it.precompiledBinariesPackagePartProvider,
|
||||
projectEnvironment.getKotlinClassFinder(it.precompiledBinariesFileScope),
|
||||
projectEnvironment.getFirJavaFacade(session, moduleData, it.precompiledBinariesFileScope),
|
||||
defaultDeserializationOrigin = FirDeclarationOrigin.Precompiled
|
||||
)
|
||||
optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation =
|
||||
OptionalAnnotationClassesProvider(
|
||||
session,
|
||||
moduleDataProvider,
|
||||
kotlinScopeProvider,
|
||||
it.precompiledBinariesPackagePartProvider,
|
||||
defaultDeserializationOrigin = FirDeclarationOrigin.Precompiled
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
createProviders = { session, _, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
val javaSymbolProvider =
|
||||
JavaSymbolProvider(session, projectEnvironment.getFirJavaFacade(session, moduleData, javaSourcesScope))
|
||||
session.register(JavaSymbolProvider::class, javaSymbolProvider)
|
||||
|
||||
val incrementalCompilationSymbolProviders = createIncrementalCompilationSymbolProviders(session)
|
||||
|
||||
listOfNotNull(
|
||||
symbolProvider,
|
||||
*(incrementalCompilationContext?.previousFirSessionsSymbolProviders?.toTypedArray() ?: emptyArray()),
|
||||
symbolProviderForBinariesFromIncrementalCompilation,
|
||||
*(incrementalCompilationSymbolProviders?.previousFirSessionsSymbolProviders?.toTypedArray() ?: emptyArray()),
|
||||
incrementalCompilationSymbolProviders?.symbolProviderForBinariesFromIncrementalCompilation,
|
||||
generatedSymbolsProvider,
|
||||
javaSymbolProvider,
|
||||
*dependencies.toTypedArray(),
|
||||
optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation,
|
||||
incrementalCompilationSymbolProviders?.optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation,
|
||||
)
|
||||
}
|
||||
).also {
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ object FirSessionFactoryHelper {
|
||||
sessionProvider,
|
||||
javaSourcesScope,
|
||||
projectEnvironment,
|
||||
incrementalCompilationContext,
|
||||
{ incrementalCompilationContext?.createSymbolProviders(it, mainModuleData, projectEnvironment) },
|
||||
extensionRegistrars,
|
||||
languageVersionSettings,
|
||||
lookupTracker,
|
||||
|
||||
Reference in New Issue
Block a user