mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java, run configurations, jigsaw] take into account light modules when building run configurations IDEA-365889
GitOrigin-RevId: 6f010da9bd6bec02a947fe1f54bdd0fff7374989
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7b62c265ab
commit
d717576b04
+2
-2
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.execution.application;
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.JavaModuleGraphUtil;
|
||||
@@ -107,7 +107,7 @@ public abstract class ApplicationCommandLineState<T extends
|
||||
if (mainModule != null) {
|
||||
boolean inLibrary = mainModule instanceof PsiCompiledElement || mainModule instanceof LightJavaModule;
|
||||
if (!inLibrary || ReadAction.compute(() -> JavaModuleGraphUtil.findNonAutomaticDescriptorByModule(module.getModule(), false)) != null) {
|
||||
boolean isExcluded = CompilerConfiguration.getInstance(module.getProject())
|
||||
boolean isExcluded = !(mainModule instanceof LightJavaModule) && CompilerConfiguration.getInstance(module.getProject())
|
||||
.isExcludedFromCompilation(mainModule.getContainingFile().getVirtualFile());
|
||||
if(!isExcluded) {
|
||||
params.setModuleName(ReadAction.compute(() -> mainModule.getName()));
|
||||
|
||||
BIN
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
module my.module {
|
||||
requires my.test.launcher;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,7 @@ import com.intellij.openapi.roots.ContentEntry;
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.testFramework.IdeaTestUtil;
|
||||
@@ -28,6 +29,8 @@ import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.PathsList;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ApplicationModulePathTest extends BaseConfigurationTestCase {
|
||||
public void testAdditionalModules() throws Exception {
|
||||
@@ -36,9 +39,9 @@ public class ApplicationModulePathTest extends BaseConfigurationTestCase {
|
||||
ExecutionEnvironment environment =
|
||||
ExecutionEnvironmentBuilder.create(myProject, DefaultRunExecutor.getRunExecutorInstance(), configuration).build();
|
||||
Disposer.register(getTestRootDisposable(), environment);
|
||||
JavaParameters params4Tests =
|
||||
JavaParameters params4Tests =
|
||||
new ApplicationConfiguration.JavaApplicationCommandLineState<>(configuration, environment).createJavaParameters4Test();
|
||||
|
||||
|
||||
PathsList modulePath = params4Tests.getModulePath();
|
||||
assertTrue("module path: " + modulePath.getPathsString(),
|
||||
modulePath.getPathList().contains(getCompilerOutputPath(myModule)));
|
||||
@@ -59,20 +62,20 @@ public class ApplicationModulePathTest extends BaseConfigurationTestCase {
|
||||
public void testServices() throws ExecutionException {
|
||||
Module module2 = createEmptyModule();
|
||||
setupModule(getTestName(true) + "/dep", module2, getTestRootDisposable());
|
||||
|
||||
|
||||
Module module3 = createEmptyModule();
|
||||
setupModule(getTestName(true) + "/dep1", module3, getTestRootDisposable());
|
||||
|
||||
ApplicationConfiguration configuration = setupConfiguration(getTestName(true), myModule);
|
||||
ModuleRootModificationUtil.updateModel(myModule, model -> model.addModuleOrderEntry(module2));
|
||||
ModuleRootModificationUtil.updateModel(module2, model -> model.addModuleOrderEntry(module3));
|
||||
|
||||
|
||||
ExecutionEnvironment environment =
|
||||
ExecutionEnvironmentBuilder.create(myProject, DefaultRunExecutor.getRunExecutorInstance(), configuration).build();
|
||||
Disposer.register(getTestRootDisposable(), environment);
|
||||
JavaParameters params4Tests =
|
||||
JavaParameters params4Tests =
|
||||
new ApplicationConfiguration.JavaApplicationCommandLineState<>(configuration, environment).createJavaParameters4Test();
|
||||
|
||||
|
||||
PathsList modulePath = params4Tests.getModulePath();
|
||||
assertSize(3, modulePath.getPathList());
|
||||
}
|
||||
@@ -103,10 +106,34 @@ public class ApplicationModulePathTest extends BaseConfigurationTestCase {
|
||||
!commandLine.contains("-p") && !commandLine.contains("--module-path"));
|
||||
}
|
||||
|
||||
public void testLightModule() throws ExecutionException {
|
||||
ApplicationConfiguration configuration = setupConfiguration(getTestName(true), myModule);
|
||||
configuration.MAIN_CLASS_NAME = "my.test.launcher.Launcher";
|
||||
|
||||
VirtualFile moduleInfoFile = getContentRoot(getTestName(true))
|
||||
.findFileByRelativePath("src/module-info.java");
|
||||
assertNotNull("The file 'src/module-info.java' should exist", moduleInfoFile);
|
||||
|
||||
CompilerConfiguration compilerConfiguration = CompilerConfiguration.getInstance(myProject);
|
||||
ExcludeEntryDescription excludeEntry = new ExcludeEntryDescription(moduleInfoFile, true, false, myProject);
|
||||
WriteAction.runAndWait(() -> compilerConfiguration.getExcludedEntriesConfiguration().addExcludeEntryDescription(excludeEntry));
|
||||
|
||||
ExecutionEnvironment environment =
|
||||
ExecutionEnvironmentBuilder.create(myProject, DefaultRunExecutor.getRunExecutorInstance(), configuration).build();
|
||||
Disposer.register(getTestRootDisposable(), environment);
|
||||
JavaParameters params4Tests = new ApplicationConfiguration.JavaApplicationCommandLineState<>(configuration, environment)
|
||||
.createJavaParameters4Test();
|
||||
|
||||
String commandLine = params4Tests.toCommandLine().getCommandLineString();
|
||||
|
||||
assertEquals("my.test.launcher", params4Tests.getModuleName());
|
||||
assertTrue("The command line should contain the launcher from a light module", commandLine.contains("-m my.test.launcher/my.test.launcher.Launcher"));
|
||||
}
|
||||
|
||||
private ApplicationConfiguration setupConfiguration(String sources, Module module) {
|
||||
setupModule(sources, module, getTestRootDisposable());
|
||||
|
||||
|
||||
|
||||
PsiClass aClass = findClass(module, "p.Main");
|
||||
assertNotNull(aClass);
|
||||
|
||||
@@ -119,12 +146,23 @@ public class ApplicationModulePathTest extends BaseConfigurationTestCase {
|
||||
ContentEntry contentEntry = model.addContentEntry(contentRoot);
|
||||
contentEntry.addSourceFolder(contentRoot.getUrl() + "/src", false);
|
||||
|
||||
VirtualFile libDir = contentRoot.findChild("lib");
|
||||
if (libDir != null) {
|
||||
List<String> lib = new ArrayList<>();
|
||||
for (VirtualFile jar : libDir.getChildren()) {
|
||||
if (jar.isDirectory() || !jar.getName().endsWith(".jar")) continue;
|
||||
lib.add(VfsUtil.getUrlForLibraryRoot(jar.toNioPath()));
|
||||
}
|
||||
|
||||
ModuleRootModificationUtil.addModuleLibrary(module, "lib", lib, List.of());
|
||||
}
|
||||
|
||||
CompilerModuleExtension moduleExtension = model.getModuleExtension(CompilerModuleExtension.class);
|
||||
moduleExtension.inheritCompilerOutputPath(false);
|
||||
moduleExtension.setCompilerOutputPath(contentRoot.findFileByRelativePath("out/production"));
|
||||
});
|
||||
Sdk jdk9 = IdeaTestUtil.getMockJdk9();
|
||||
WriteAction.runAndWait(()-> ProjectJdkTable.getInstance().addJdk(jdk9, parentDisposable));
|
||||
WriteAction.runAndWait(() -> ProjectJdkTable.getInstance().addJdk(jdk9, parentDisposable));
|
||||
ModuleRootModificationUtil.setModuleSdk(module, jdk9);
|
||||
IndexingTestUtil.waitUntilIndexesAreReady(module.getProject());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user