From cc2f607be377abd0b6fa884d0d991d4e0fc07c30 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 2 Jun 2017 18:34:47 +0300 Subject: [PATCH] Remove dependency of module 'frontend.java' on 'javac-wrapper' This breaks the circular dependency between them --- .../compiler/TopDownAnalyzerFacadeForJVM.kt | 19 +++++++-- compiler/frontend.java/frontend.java.iml | 1 - .../kotlin/frontend/java/di/injection.kt | 39 ++++++++----------- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt index 369973f02c0..d2d6fe6f052 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt @@ -25,7 +25,9 @@ import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.container.ComponentProvider +import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.get +import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.context.ContextForNewModule import org.jetbrains.kotlin.context.ModuleContext 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.initialize 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.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass @@ -144,7 +149,15 @@ object TopDownAnalyzerFacadeForJVM { } else null - val useJavac = configuration.getBoolean(JVMConfigurationKeys.USE_JAVAC) + fun StorageComponentContainer.useJavac() { + useImpl() + useImpl() + useImpl() + } + + val configureJavaClassFinder = + if (configuration.getBoolean(JVMConfigurationKeys.USE_JAVAC)) StorageComponentContainer::useJavac + else null val dependencyModule = if (separateModules) { val dependenciesContext = ContextForNewModule( @@ -157,7 +170,7 @@ object TopDownAnalyzerFacadeForJVM { val dependenciesContainer = createContainerForTopDownAnalyzerForJvm( 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) } @@ -184,7 +197,7 @@ object TopDownAnalyzerFacadeForJVM { // TODO: get rid of duplicate invocation of CodeAnalyzerInitializer#initialize, or refactor CliLightClassGenerationSupport val container = createContainerForTopDownAnalyzerForJvm( moduleContext, trace, declarationProviderFactory(storageManager, files), sourceScope, lookupTracker, - partProvider, moduleClassResolver, jvmTarget, languageVersionSettings, useJavac + partProvider, moduleClassResolver, jvmTarget, languageVersionSettings, configureJavaClassFinder ).apply { initJvmBuiltInsForTopDownAnalysis() (partProvider as? IncrementalPackagePartProvider)?.deserializationConfiguration = get() diff --git a/compiler/frontend.java/frontend.java.iml b/compiler/frontend.java/frontend.java.iml index 43286584789..38bd69fc475 100644 --- a/compiler/frontend.java/frontend.java.iml +++ b/compiler/frontend.java/frontend.java.iml @@ -11,6 +11,5 @@ - \ No newline at end of file diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index 4486fe4f8c8..a942a096ee1 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -28,9 +28,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.frontend.di.configureModule 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.AbstractJavaClassFinder import org.jetbrains.kotlin.load.java.InternalFlexibleTypeTransformer import org.jetbrains.kotlin.load.java.JavaClassFinderImpl import org.jetbrains.kotlin.load.java.components.* @@ -50,8 +48,7 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory private fun StorageComponentContainer.configureJavaTopDownAnalysis( moduleContentScope: GlobalSearchScope, project: Project, - lookupTracker: LookupTracker, - useJavac: Boolean + lookupTracker: LookupTracker ) { useInstance(moduleContentScope) useInstance(lookupTracker) @@ -63,16 +60,6 @@ private fun StorageComponentContainer.configureJavaTopDownAnalysis( useInstance(VirtualFileFinderFactory.getInstance(project).create(moduleContentScope)) - if (useJavac) { - useImpl() - useImpl() - useImpl() - } else { - useImpl() - useImpl() - useImpl() - } - useImpl() useImpl() useImpl() @@ -97,10 +84,19 @@ fun createContainerForLazyResolveWithJava( jvmTarget: JvmTarget, languageVersionSettings: LanguageVersionSettings, useBuiltInsProvider: Boolean, - useJavac: Boolean = false + configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null ): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatform) { configureModule(moduleContext, JvmPlatform, jvmTarget, bindingTrace) - configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker, useJavac) + configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker) + + if (configureJavaClassFinder != null) { + configureJavaClassFinder() + } + else { + useImpl() + useImpl() + useImpl() + } useInstance(packagePartProvider) useInstance(moduleClassResolver) @@ -115,10 +111,7 @@ fun createContainerForLazyResolveWithJava( targetEnvironment.configure(this) }.apply { - if (useJavac) - get().initialize(bindingTrace, get()) - else - get().initialize(bindingTrace, get()) + get().initialize(bindingTrace, get()) } @@ -132,11 +125,11 @@ fun createContainerForTopDownAnalyzerForJvm( moduleClassResolver: ModuleClassResolver, jvmTarget: JvmTarget, languageVersionSettings: LanguageVersionSettings, - useJavac: Boolean = false + configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null ): ComponentProvider = createContainerForLazyResolveWithJava( moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver, CompilerEnvironment, lookupTracker, packagePartProvider, jvmTarget, languageVersionSettings, - useBuiltInsProvider = true, useJavac = useJavac + useBuiltInsProvider = true, configureJavaClassFinder = configureJavaClassFinder )