diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java index 530f2e968b4..15253d0bdb7 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java @@ -41,6 +41,7 @@ import org.jetbrains.kotlin.context.GlobalContext; import org.jetbrains.kotlin.context.ModuleContext; import org.jetbrains.kotlin.context.SimpleGlobalContext; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; +import org.jetbrains.kotlin.descriptors.PackagePartProvider; import org.jetbrains.kotlin.descriptors.PackageViewDescriptor; import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider; import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; @@ -59,6 +60,7 @@ import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics; import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver; +import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM; import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; @@ -142,7 +144,12 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest { LanguageVersionSettings languageVersionSettings = loadCustomLanguageVersionSettings(testFilesInModule); ModuleContext moduleContext = ContextKt.withModule(ContextKt.withProject(context, getProject()), module); - analyzeModuleContents(moduleContext, jetFiles, moduleTrace, languageVersionSettings); + + boolean separateModules = groupedByModule.size() == 1; + AnalysisResult result = analyzeModuleContents(moduleContext, jetFiles, moduleTrace, languageVersionSettings, separateModules); + if (separateModules) { + modules.put(testModule, (ModuleDescriptorImpl) result.getModuleDescriptor()); + } checkAllResolvedCallsAreCompleted(jetFiles, moduleTrace.getBindingContext()); } @@ -269,7 +276,8 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest { @NotNull ModuleContext moduleContext, @NotNull List files, @NotNull BindingTrace moduleTrace, - @Nullable LanguageVersionSettings languageVersionSettings + @Nullable LanguageVersionSettings languageVersionSettings, + boolean separateModules ) { CompilerConfiguration configuration; if (languageVersionSettings != null) { @@ -283,6 +291,25 @@ 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 + + // Temporary solution: only use separate module mode in single-module tests because analyzeFilesWithJavaIntegration + // only supports creating two modules, whereas there can be more than two in multi-module diagnostic tests + // TODO: always use separate module mode, once analyzeFilesWithJavaIntegration can create multiple modules + if (separateModules) { + return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( + moduleContext.getProject(), + files, + moduleTrace, + configuration, + new Function1() { + @Override + public PackagePartProvider invoke(GlobalSearchScope scope) { + return new JvmPackagePartProvider(getEnvironment(), scope); + } + } + ); + } + GlobalSearchScope moduleContentScope = GlobalSearchScope.allScope(moduleContext.getProject()); ComponentProvider container = InjectionKt.createContainerForTopDownSingleModuleAnalyzerForJvm( moduleContext, diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.java index 109b58d65c9..0b5c58cc598 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.java @@ -72,7 +72,8 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno @NotNull ModuleContext moduleContext, @NotNull List ktFiles, @NotNull BindingTrace moduleTrace, - @Nullable LanguageVersionSettings languageVersionSettings + @Nullable LanguageVersionSettings languageVersionSettings, + boolean separateModules ) { // TODO: support LANGUAGE directive in JS diagnostic tests assert languageVersionSettings == null diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation.kt b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation.kt index ab7955bdbbf..483e99bec50 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation.kt +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation.kt @@ -30,9 +30,10 @@ abstract class AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation : Abstra moduleContext: ModuleContext, ktFiles: MutableList, moduleTrace: BindingTrace, - languageVersionSettings: LanguageVersionSettings? + languageVersionSettings: LanguageVersionSettings?, + separateModules: Boolean ): JsAnalysisResult { - val analysisResult = super.analyzeModuleContents(moduleContext, ktFiles, moduleTrace, languageVersionSettings) + val analysisResult = super.analyzeModuleContents(moduleContext, ktFiles, moduleTrace, languageVersionSettings, separateModules) val diagnostics = analysisResult.bindingTrace.bindingContext.diagnostics if (!hasError(diagnostics)) {