Remove dependency of module 'frontend.java' on 'javac-wrapper'

This breaks the circular dependency between them
This commit is contained in:
Alexander Udalov
2017-06-02 18:34:47 +03:00
parent 1df13e0bc9
commit cc2f607be3
3 changed files with 32 additions and 27 deletions
@@ -25,7 +25,9 @@ import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.context.ContextForNewModule import org.jetbrains.kotlin.context.ContextForNewModule
import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.context.MutableModuleContext import org.jetbrains.kotlin.context.MutableModuleContext
@@ -41,6 +43,9 @@ import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerFo
import org.jetbrains.kotlin.frontend.java.di.initJvmBuiltInsForTopDownAnalysis import org.jetbrains.kotlin.frontend.java.di.initJvmBuiltInsForTopDownAnalysis
import org.jetbrains.kotlin.frontend.java.di.initialize import org.jetbrains.kotlin.frontend.java.di.initialize
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.javac.components.JavacBasedClassFinder
import org.jetbrains.kotlin.javac.components.JavacBasedSourceElementFactory
import org.jetbrains.kotlin.javac.components.StubJavaResolverCache
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver
import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaClass
import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass
@@ -144,7 +149,15 @@ object TopDownAnalyzerFacadeForJVM {
} }
else null else null
val useJavac = configuration.getBoolean(JVMConfigurationKeys.USE_JAVAC) fun StorageComponentContainer.useJavac() {
useImpl<JavacBasedClassFinder>()
useImpl<StubJavaResolverCache>()
useImpl<JavacBasedSourceElementFactory>()
}
val configureJavaClassFinder =
if (configuration.getBoolean(JVMConfigurationKeys.USE_JAVAC)) StorageComponentContainer::useJavac
else null
val dependencyModule = if (separateModules) { val dependencyModule = if (separateModules) {
val dependenciesContext = ContextForNewModule( val dependenciesContext = ContextForNewModule(
@@ -157,7 +170,7 @@ object TopDownAnalyzerFacadeForJVM {
val dependenciesContainer = createContainerForTopDownAnalyzerForJvm( val dependenciesContainer = createContainerForTopDownAnalyzerForJvm(
dependenciesContext, trace, DeclarationProviderFactory.EMPTY, dependencyScope, lookupTracker, dependenciesContext, trace, DeclarationProviderFactory.EMPTY, dependencyScope, lookupTracker,
packagePartProvider(dependencyScope), moduleClassResolver, jvmTarget, languageVersionSettings, useJavac packagePartProvider(dependencyScope), moduleClassResolver, jvmTarget, languageVersionSettings, configureJavaClassFinder
) )
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(dependenciesContainer, null) } StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(dependenciesContainer, null) }
@@ -184,7 +197,7 @@ object TopDownAnalyzerFacadeForJVM {
// TODO: get rid of duplicate invocation of CodeAnalyzerInitializer#initialize, or refactor CliLightClassGenerationSupport // TODO: get rid of duplicate invocation of CodeAnalyzerInitializer#initialize, or refactor CliLightClassGenerationSupport
val container = createContainerForTopDownAnalyzerForJvm( val container = createContainerForTopDownAnalyzerForJvm(
moduleContext, trace, declarationProviderFactory(storageManager, files), sourceScope, lookupTracker, moduleContext, trace, declarationProviderFactory(storageManager, files), sourceScope, lookupTracker,
partProvider, moduleClassResolver, jvmTarget, languageVersionSettings, useJavac partProvider, moduleClassResolver, jvmTarget, languageVersionSettings, configureJavaClassFinder
).apply { ).apply {
initJvmBuiltInsForTopDownAnalysis() initJvmBuiltInsForTopDownAnalysis()
(partProvider as? IncrementalPackagePartProvider)?.deserializationConfiguration = get<DeserializationConfiguration>() (partProvider as? IncrementalPackagePartProvider)?.deserializationConfiguration = get<DeserializationConfiguration>()
-1
View File
@@ -11,6 +11,5 @@
<orderEntry type="library" scope="PROVIDED" name="intellij-core" level="project" /> <orderEntry type="library" scope="PROVIDED" name="intellij-core" level="project" />
<orderEntry type="module" module-name="descriptor.loader.java" exported="" /> <orderEntry type="module" module-name="descriptor.loader.java" exported="" />
<orderEntry type="module" module-name="util" /> <orderEntry type="module" module-name="util" />
<orderEntry type="module" module-name="javac-wrapper" />
</component> </component>
</module> </module>
@@ -28,9 +28,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.frontend.di.configureModule
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.javac.components.JavacBasedClassFinder import org.jetbrains.kotlin.load.java.AbstractJavaClassFinder
import org.jetbrains.kotlin.javac.components.JavacBasedSourceElementFactory
import org.jetbrains.kotlin.javac.components.StubJavaResolverCache
import org.jetbrains.kotlin.load.java.InternalFlexibleTypeTransformer import org.jetbrains.kotlin.load.java.InternalFlexibleTypeTransformer
import org.jetbrains.kotlin.load.java.JavaClassFinderImpl import org.jetbrains.kotlin.load.java.JavaClassFinderImpl
import org.jetbrains.kotlin.load.java.components.* import org.jetbrains.kotlin.load.java.components.*
@@ -50,8 +48,7 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
private fun StorageComponentContainer.configureJavaTopDownAnalysis( private fun StorageComponentContainer.configureJavaTopDownAnalysis(
moduleContentScope: GlobalSearchScope, moduleContentScope: GlobalSearchScope,
project: Project, project: Project,
lookupTracker: LookupTracker, lookupTracker: LookupTracker
useJavac: Boolean
) { ) {
useInstance(moduleContentScope) useInstance(moduleContentScope)
useInstance(lookupTracker) useInstance(lookupTracker)
@@ -63,16 +60,6 @@ private fun StorageComponentContainer.configureJavaTopDownAnalysis(
useInstance(VirtualFileFinderFactory.getInstance(project).create(moduleContentScope)) useInstance(VirtualFileFinderFactory.getInstance(project).create(moduleContentScope))
if (useJavac) {
useImpl<JavacBasedClassFinder>()
useImpl<StubJavaResolverCache>()
useImpl<JavacBasedSourceElementFactory>()
} else {
useImpl<JavaClassFinderImpl>()
useImpl<LazyResolveBasedCache>()
useImpl<JavaSourceElementFactoryImpl>()
}
useImpl<JavaPropertyInitializerEvaluatorImpl>() useImpl<JavaPropertyInitializerEvaluatorImpl>()
useImpl<AnnotationResolverImpl>() useImpl<AnnotationResolverImpl>()
useImpl<SignaturePropagatorImpl>() useImpl<SignaturePropagatorImpl>()
@@ -97,10 +84,19 @@ fun createContainerForLazyResolveWithJava(
jvmTarget: JvmTarget, jvmTarget: JvmTarget,
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
useBuiltInsProvider: Boolean, useBuiltInsProvider: Boolean,
useJavac: Boolean = false configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null
): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatform) { ): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatform) {
configureModule(moduleContext, JvmPlatform, jvmTarget, bindingTrace) configureModule(moduleContext, JvmPlatform, jvmTarget, bindingTrace)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker, useJavac) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker)
if (configureJavaClassFinder != null) {
configureJavaClassFinder()
}
else {
useImpl<JavaClassFinderImpl>()
useImpl<LazyResolveBasedCache>()
useImpl<JavaSourceElementFactoryImpl>()
}
useInstance(packagePartProvider) useInstance(packagePartProvider)
useInstance(moduleClassResolver) useInstance(moduleClassResolver)
@@ -115,10 +111,7 @@ fun createContainerForLazyResolveWithJava(
targetEnvironment.configure(this) targetEnvironment.configure(this)
}.apply { }.apply {
if (useJavac) get<AbstractJavaClassFinder>().initialize(bindingTrace, get<KotlinCodeAnalyzer>())
get<JavacBasedClassFinder>().initialize(bindingTrace, get<KotlinCodeAnalyzer>())
else
get<JavaClassFinderImpl>().initialize(bindingTrace, get<KotlinCodeAnalyzer>())
} }
@@ -132,11 +125,11 @@ fun createContainerForTopDownAnalyzerForJvm(
moduleClassResolver: ModuleClassResolver, moduleClassResolver: ModuleClassResolver,
jvmTarget: JvmTarget, jvmTarget: JvmTarget,
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
useJavac: Boolean = false configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null
): ComponentProvider = createContainerForLazyResolveWithJava( ): ComponentProvider = createContainerForLazyResolveWithJava(
moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver, moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver,
CompilerEnvironment, lookupTracker, packagePartProvider, jvmTarget, languageVersionSettings, CompilerEnvironment, lookupTracker, packagePartProvider, jvmTarget, languageVersionSettings,
useBuiltInsProvider = true, useJavac = useJavac useBuiltInsProvider = true, configureJavaClassFinder = configureJavaClassFinder
) )