From 829788e410649ab353f625f540d9090df037d239 Mon Sep 17 00:00:00 2001 From: Nikita Skvortsov Date: Wed, 6 Dec 2017 20:34:15 +0300 Subject: [PATCH] Allow to include "Provided" scope in classpath. IDEA-107048 --- .../application/ApplicationConfigurable.form | 25 +++++++++++-------- .../application/ApplicationConfigurable.java | 4 +++ .../application/ApplicationConfiguration.java | 11 +++++++- .../execution/util/JavaParametersUtil.java | 10 +++++++- .../configurations/JavaParameters.java | 7 +++++- .../configurations/JavaParametersTest.java | 4 ++- .../src/messages/ExecutionBundle.properties | 1 + 7 files changed, 47 insertions(+), 15 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.form b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.form index c00b40681466..c7953d3c98de 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.form +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.form @@ -1,18 +1,13 @@
- + - + - - - - - @@ -42,13 +37,13 @@ - + - + @@ -63,20 +58,28 @@ - + - + + + + + + + + + diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java index b8a7db8003c8..e5cf26e47ed8 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java @@ -32,6 +32,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiMethodUtil; import com.intellij.ui.EditorTextFieldWithBrowseButton; import com.intellij.ui.PanelWithAnchor; +import com.intellij.ui.components.JBCheckBox; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -50,6 +51,7 @@ public class ApplicationConfigurable extends SettingsEditor getValidModules() { return JavaRunConfigurationModule.getModulesForClass(getProject(), MAIN_CLASS_NAME); @@ -280,7 +289,7 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration { - int classPathType = JavaParametersUtil.getClasspathType(module, myConfiguration.MAIN_CLASS_NAME, false); + int classPathType = JavaParametersUtil.getClasspathType(module, myConfiguration.MAIN_CLASS_NAME, false, myConfiguration.isProvidedScopeIncluded()); JavaParametersUtil.configureModule(module, params, classPathType, jreHome); }); } diff --git a/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java b/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java index 86a4eb9fe7f6..04e67b3b3b1e 100644 --- a/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java +++ b/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java @@ -77,6 +77,12 @@ public class JavaParametersUtil { @MagicConstant(valuesFromClass = JavaParameters.class) public static int getClasspathType(final RunConfigurationModule configurationModule, final String mainClassName, final boolean classMustHaveSource) throws CantRunException { + return getClasspathType(configurationModule, mainClassName, classMustHaveSource, false); + } + + @MagicConstant(valuesFromClass = JavaParameters.class) + public static int getClasspathType(final RunConfigurationModule configurationModule, final String mainClassName, + final boolean classMustHaveSource, final boolean includeProvidedDependencies) throws CantRunException { final Module module = configurationModule.getModule(); if (module == null) throw CantRunException.noModuleConfigured(configurationModule.getModuleName()); Boolean inProduction = isClassInProductionSources(mainClassName, module); @@ -87,7 +93,9 @@ public class JavaParametersUtil { throw CantRunException.classNotFound(mainClassName, module); } - return inProduction ? JavaParameters.JDK_AND_CLASSES : JavaParameters.JDK_AND_CLASSES_AND_TESTS; + return inProduction + ? (includeProvidedDependencies ? JavaParameters.JDK_AND_CLASSES_AND_PROVIDED : JavaParameters.JDK_AND_CLASSES) + : JavaParameters.JDK_AND_CLASSES_AND_TESTS; } @Nullable("null if class not found") diff --git a/java/execution/openapi/src/com/intellij/execution/configurations/JavaParameters.java b/java/execution/openapi/src/com/intellij/execution/configurations/JavaParameters.java index 1c36843570e1..c35ae9faaddb 100644 --- a/java/execution/openapi/src/com/intellij/execution/configurations/JavaParameters.java +++ b/java/execution/openapi/src/com/intellij/execution/configurations/JavaParameters.java @@ -58,9 +58,11 @@ public class JavaParameters extends SimpleJavaParameters { public static final int JDK_ONLY = 0x1; public static final int CLASSES_ONLY = 0x2; public static final int TESTS_ONLY = 0x4; + public static final int INCLUDE_PROVIDED = 0x8; public static final int JDK_AND_CLASSES = JDK_ONLY | CLASSES_ONLY; public static final int JDK_AND_CLASSES_AND_TESTS = JDK_ONLY | CLASSES_ONLY | TESTS_ONLY; public static final int CLASSES_AND_TESTS = CLASSES_ONLY | TESTS_ONLY; + public static final int JDK_AND_CLASSES_AND_PROVIDED = JDK_ONLY | CLASSES_ONLY | INCLUDE_PROVIDED; public void configureByModule(final Module module, @MagicConstant(valuesFromClass = JavaParameters.class) final int classPathType, @@ -77,7 +79,7 @@ public class JavaParameters extends SimpleJavaParameters { } setDefaultCharset(module.getProject()); - configureEnumerator(OrderEnumerator.orderEntries(module).runtimeOnly().recursively(), classPathType, jdk).collectPaths(getClassPath()); + configureEnumerator(OrderEnumerator.orderEntries(module).recursively(), classPathType, jdk).collectPaths(getClassPath()); configureJavaLibraryPath(OrderEnumerator.orderEntries(module).recursively()); } @@ -176,6 +178,9 @@ public class JavaParameters extends SimpleJavaParameters { } private static OrderRootsEnumerator configureEnumerator(OrderEnumerator enumerator, int classPathType, Sdk jdk) { + if ((classPathType & INCLUDE_PROVIDED) == 0) { + enumerator = enumerator.runtimeOnly(); + } if ((classPathType & JDK_ONLY) == 0) { enumerator = enumerator.withoutSdk(); } diff --git a/java/java-tests/testSrc/com/intellij/java/execution/configurations/JavaParametersTest.java b/java/java-tests/testSrc/com/intellij/java/execution/configurations/JavaParametersTest.java index 4592d08a062b..1ce8f2259acb 100644 --- a/java/java-tests/testSrc/com/intellij/java/execution/configurations/JavaParametersTest.java +++ b/java/java-tests/testSrc/com/intellij/java/execution/configurations/JavaParametersTest.java @@ -67,9 +67,11 @@ public class JavaParametersTest extends ModuleRootManagerTestCase { public void testProvidedScope() throws Exception { ModuleRootModificationUtil.addDependency(myModule, createJDomLibrary(), DependencyScope.PROVIDED, false); + ModuleRootModificationUtil.addDependency(myModule, createAsmLibrary(), DependencyScope.TEST, false); - assertClasspath(myModule, JavaParameters.CLASSES_AND_TESTS, getJDomJar()); + assertClasspath(myModule, JavaParameters.CLASSES_AND_TESTS, getJDomJar(), getAsmJar()); assertClasspath(myModule, JavaParameters.CLASSES_ONLY); + assertClasspath(myModule, JavaParameters.JDK_AND_CLASSES_AND_PROVIDED, getRtJarJdk17(), getJDomJar()); } public void testModuleDependency() throws Exception { diff --git a/platform/platform-resources-en/src/messages/ExecutionBundle.properties b/platform/platform-resources-en/src/messages/ExecutionBundle.properties index 0bf20c3c74ed..92f422992657 100644 --- a/platform/platform-resources-en/src/messages/ExecutionBundle.properties +++ b/platform/platform-resources-en/src/messages/ExecutionBundle.properties @@ -417,3 +417,4 @@ run.dashboard.group.configurations.label=Group Name: run.dashboard.configurable.add.configuration.type=Add Configuration Type run.dashboard.configurable.types.panel.title=Configurations available in Run Dashboard +application.configuration.include.provided.scope=Include dependencies with "Provided" scope