diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmPackagePartProvider.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmPackagePartProvider.kt index 1050dc4f331..aa5b65d99f2 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmPackagePartProvider.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmPackagePartProvider.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.cli.jvm.compiler +import com.intellij.psi.search.GlobalSearchScope import com.intellij.util.SmartList import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot import org.jetbrains.kotlin.config.JVMConfigurationKeys @@ -23,12 +24,15 @@ import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.ModuleMapping import java.io.EOFException -class JvmPackagePartProvider(val env: KotlinCoreEnvironment) : PackagePartProvider { +class JvmPackagePartProvider( + private val env: KotlinCoreEnvironment, + private val scope: GlobalSearchScope +) : PackagePartProvider { private val notLoadedRoots by lazy(LazyThreadSafetyMode.NONE) { env.configuration.getList(JVMConfigurationKeys.CONTENT_ROOTS) .filterIsInstance() .mapNotNull { env.contentRootToVirtualFile(it) } - .filter { it.findChild("META-INF") != null } + .filter { it in scope && it.findChild("META-INF") != null } .toMutableList() } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index 06d72afb096..f4131a3dbbc 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -408,7 +408,7 @@ object KotlinToJVMBytecodeCompiler { environment.getSourceFiles(), CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), environment.configuration, - JvmPackagePartProvider(environment) + { scope -> JvmPackagePartProvider(environment, scope) } ) override fun reportEnvironmentErrors() { diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/CliReplAnalyzerEngine.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/CliReplAnalyzerEngine.kt index 94d4c72a834..b2f1edac2d8 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/CliReplAnalyzerEngine.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/CliReplAnalyzerEngine.kt @@ -54,12 +54,13 @@ class CliReplAnalyzerEngine(environment: KotlinCoreEnvironment) { this.scriptDeclarationFactory = ScriptMutableDeclarationProviderFactory() + val moduleContentScope = ProjectScope.getAllScope(environment.project) val container = createContainerForTopDownSingleModuleAnalyzerForJvm( moduleContext, trace, scriptDeclarationFactory, - ProjectScope.getAllScope(environment.project), - JvmPackagePartProvider(environment) + moduleContentScope, + JvmPackagePartProvider(environment, moduleContentScope) ) this.resolveSession = container.get() diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt index 66a0bed81af..a25deed9eef 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt @@ -58,7 +58,7 @@ object TopDownAnalyzerFacadeForJVM { files: Collection, trace: BindingTrace, configuration: CompilerConfiguration, - packagePartProvider: PackagePartProvider + packagePartProviderFactory: (GlobalSearchScope) -> PackagePartProvider ): AnalysisResult { val moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, configuration) val storageManager = moduleContext.storageManager @@ -76,13 +76,16 @@ object TopDownAnalyzerFacadeForJVM { } } + val sourceScope = GlobalSearchScope.allScope(project) val container = createContainerForTopDownAnalyzerForJvm( moduleContext, trace, FileBasedDeclarationProviderFactory(storageManager, files), - GlobalSearchScope.allScope(project), + sourceScope, lookupTracker, - IncrementalPackagePartProvider.create(packagePartProvider, targetIds, incrementalComponents, storageManager), + IncrementalPackagePartProvider.create( + packagePartProviderFactory(sourceScope), targetIds, incrementalComponents, storageManager + ), configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT), ModuleClassResolverImpl(resolverByClass) ) diff --git a/compiler/tests-common/org/jetbrains/kotlin/codegen/GenerationUtils.kt b/compiler/tests-common/org/jetbrains/kotlin/codegen/GenerationUtils.kt index d4784823e3f..d911d642175 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/codegen/GenerationUtils.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/codegen/GenerationUtils.kt @@ -39,10 +39,11 @@ object GenerationUtils { @JvmStatic fun compileFiles(files: List, environment: KotlinCoreEnvironment?): GenerationState { - val packagePartProvider = if (environment == null) PackagePartProvider.Empty else JvmPackagePartProvider(environment) val configuration = environment?.configuration ?: KotlinTestUtils.newConfiguration() - val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration, packagePartProvider) + val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration) { scope -> + if (environment == null) PackagePartProvider.Empty else JvmPackagePartProvider(environment, scope) + } analysisResult.throwIfError() val state = GenerationState( diff --git a/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java index 646ced2c3c6..f037649fd44 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java +++ b/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java @@ -18,7 +18,9 @@ package org.jetbrains.kotlin.jvm.compiler; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.psi.search.GlobalSearchScope; import junit.framework.ComparisonFailure; +import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.analyzer.AnalysisResult; import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport; @@ -29,10 +31,7 @@ import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt; import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.config.ContentRootsKt; import org.jetbrains.kotlin.config.JVMConfigurationKeys; -import org.jetbrains.kotlin.descriptors.ClassDescriptor; -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; -import org.jetbrains.kotlin.descriptors.ModuleDescriptor; -import org.jetbrains.kotlin.descriptors.PackageViewDescriptor; +import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorUtils; @@ -155,12 +154,17 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { JvmContentRootsKt.addJavaSourceRoot(configuration, new File("compiler/testData/loadJava/include")); JvmContentRootsKt.addJavaSourceRoot(configuration, tmpdir); - KotlinCoreEnvironment environment = + final KotlinCoreEnvironment environment = KotlinCoreEnvironment.createForTests(getTestRootDisposable(), configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES); AnalysisResult result = TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( environment.getProject(), environment.getSourceFiles(), new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), - configuration, new JvmPackagePartProvider(environment) + configuration, new Function1() { + @Override + public PackagePartProvider invoke(GlobalSearchScope scope) { + return new JvmPackagePartProvider(environment, scope); + } + } ); PackageViewDescriptor packageView = result.getModuleDescriptor().getPackage(TEST_PACKAGE_FQNAME); diff --git a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.kt b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.kt index 0f76a59b387..c86b4030add 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.resolve.lazy import com.intellij.openapi.project.Project +import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider @@ -34,14 +35,16 @@ object JvmResolveUtil { @JvmStatic fun analyzeAndCheckForErrors(files: Collection, environment: KotlinCoreEnvironment): AnalysisResult = - analyzeAndCheckForErrors(environment.project, files, environment.configuration, JvmPackagePartProvider(environment)) + analyzeAndCheckForErrors(environment.project, files, environment.configuration) { scope -> + JvmPackagePartProvider(environment, scope) + } @JvmStatic fun analyzeAndCheckForErrors( project: Project, files: Collection, configuration: CompilerConfiguration, - packagePartProvider: PackagePartProvider + packagePartProvider: (GlobalSearchScope) -> PackagePartProvider ): AnalysisResult { for (file in files) { AnalyzingUtils.checkForSyntacticErrors(file) @@ -62,16 +65,18 @@ object JvmResolveUtil { @JvmStatic fun analyze(files: Collection, environment: KotlinCoreEnvironment): AnalysisResult = - analyze(environment.project, files, environment.configuration, JvmPackagePartProvider(environment)) + analyze(environment.project, files, environment.configuration) { scope -> + JvmPackagePartProvider(environment, scope) + } private fun analyze( project: Project, files: Collection, configuration: CompilerConfiguration, - packagePartProvider: PackagePartProvider + packagePartProviderFactory: (GlobalSearchScope) -> PackagePartProvider ): AnalysisResult { return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( - project, files, CliLightClassGenerationSupport.CliBindingTrace(), configuration, packagePartProvider + project, files, CliLightClassGenerationSupport.CliBindingTrace(), configuration, packagePartProviderFactory ) } } diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java index 41eac894029..530f2e968b4 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java @@ -283,12 +283,13 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest { // New JavaDescriptorResolver is created for each module, which is good because it emulates different Java libraries for each module, // albeit with same class names // See TopDownAnalyzerFacadeForJVM#analyzeFilesWithJavaIntegration + GlobalSearchScope moduleContentScope = GlobalSearchScope.allScope(moduleContext.getProject()); ComponentProvider container = InjectionKt.createContainerForTopDownSingleModuleAnalyzerForJvm( moduleContext, moduleTrace, new FileBasedDeclarationProviderFactory(moduleContext.getStorageManager(), files), - GlobalSearchScope.allScope(moduleContext.getProject()), - new JvmPackagePartProvider(getEnvironment()), + moduleContentScope, + new JvmPackagePartProvider(getEnvironment(), moduleContentScope), configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT) ); diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt index 3d5c28e796c..b78a536b6b0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.decompiler.textBuilder import com.intellij.openapi.vfs.VirtualFile -import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil @@ -49,8 +48,7 @@ class DecompiledTextConsistencyTest : TextConsistencyBaseTest() { override fun getModuleDescriptor(): ModuleDescriptor = TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( - project, listOf(), BindingTraceContext(), KotlinTestUtils.newConfiguration(), - IDEPackagePartProvider(GlobalSearchScope.allScope(project)) + project, listOf(), BindingTraceContext(), KotlinTestUtils.newConfiguration(), ::IDEPackagePartProvider ).moduleDescriptor override fun getProjectDescriptor() =