This is an automated email from the ASF dual-hosted git repository.
lkishalmi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 032ff3cbbd Made GradleCommandLine aware of GradleVersion (#3828)
032ff3cbbd is described below
commit 032ff3cbbd685ac32d8cd843f82d106422897197
Author: Laszlo Kishalmi <[email protected]>
AuthorDate: Tue Apr 12 06:08:10 2022 -0700
Made GradleCommandLine aware of GradleVersion (#3828)
* Made GradleCommandLine aware of GradleVersion
* Addedsome test and some minor refactor
* Adjust code to avoid, Javac to generate non instatniatable
GradleCliCompletionProvider.
---
extide/gradle/apichanges.xml | 17 +-
.../gradle/api/execute/GradleCommandLine.java | 172 ++++++++++++++++++---
.../api/execute/GradleDistributionManager.java | 75 ++++++++-
.../modules/gradle/api/execute/RunUtils.java | 19 +++
.../gradle/execute/GradleDaemonExecutor.java | 3 +-
.../execute/GradleDistributionProviderImpl.java | 2 +-
.../gradle/loaders/LegacyProjectLoader.java | 4 +-
.../modules/gradle/loaders/ModelCache.java | 13 +-
.../gradle/options/GradleOptionsController.java | 2 +-
.../modules/gradle/options/SettingsPanel.java | 2 +-
.../gradle/api/execute/GradleCommandLineTest.java | 15 ++
.../gradle/api/execute/GradleVersionRangeTest.java | 67 ++++++++
.../execute/GradleCliCompletionProviderTest.java | 39 +++++
.../classpath/AbstractGradleScriptClassPath.java | 2 +-
14 files changed, 396 insertions(+), 36 deletions(-)
diff --git a/extide/gradle/apichanges.xml b/extide/gradle/apichanges.xml
index 3dd4f642d7..5ce8c29166 100644
--- a/extide/gradle/apichanges.xml
+++ b/extide/gradle/apichanges.xml
@@ -102,8 +102,21 @@ is the proper place.
<author login="lkishalmi"/>
<compatibility semantic="compatible" addition="yes"/>
<description>
- Added GradleOptionItem interface to <code><a
href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleCommandLine.html">GradleCommandLine</a></code>
- in order to support a common interface for Flaf, Parameter,
and Property enums.
+ <p>
+ Added GradleOptionItem interface to <code><a
href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleCommandLine.html">GradleCommandLine</a></code>
+ in order to support a common interface for Flaf,
Parameter, and Property enums.
+ </p>
+ <p>
+ <code>
+ <a
href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleCommandLine.html">GradleCommandLine</a>
+ </code> also can be aware of the GradleDistribution it is
plan to be used with, so it got a few
+ new constructors supporting that.
+ </p>
+ <p>
+ <code>
+ <a
href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html#getCompatibleGradleDistribution-org.netbeans.api.project.Project-">RunUtils.getCompatibleGradleDistribution</a>
+ </code>is added to help retrieve the closest Gradle
distribution a project could use to invoke Gradle build actions.
+ </p>
</description>
</change>
<change id="tooling-runWorkingDir-runEnvironment">
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleCommandLine.java
b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleCommandLine.java
index 942f2cfabd..7124f862bd 100644
---
a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleCommandLine.java
+++
b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleCommandLine.java
@@ -44,6 +44,8 @@ import java.util.logging.Logger;
import org.gradle.tooling.ConfigurableLauncher;
import org.openide.util.NbBundle;
import static
org.netbeans.modules.gradle.api.execute.GradleCommandLine.Argument.Kind.*;
+import
org.netbeans.modules.gradle.api.execute.GradleDistributionManager.GradleDistribution;
+import
org.netbeans.modules.gradle.api.execute.GradleDistributionManager.GradleVersionRange;
import org.netbeans.modules.gradle.spi.GradleSettings;
import org.netbeans.modules.gradle.spi.GradleFiles;
import org.openide.util.Utilities;
@@ -88,58 +90,75 @@ public final class GradleCommandLine implements
Serializable {
* @since 2.23
*/
public interface GradleOptionItem {
+ /**
+ * Shall return {@code true} if the IDE supports this option item.
+ *
+ * @return {@code true} if this option is supported by the IDE
+ */
boolean isSupported();
+
+ /**
+ * Shall return {@code true} if this option is supported by the
provided
+ * GradleDistribution.
+ *
+ * @param dist the GradleDistribution to check.
+ * @return {@code true} if the provided {@link GradleDistribution}
supports this option.
+ */
+ boolean supportsGradle(GradleDistribution dist);
List<String> getFlags();
String getDescription();
}
+
+
/**
* Gradle command line flags
*/
public enum Flag implements GradleOptionItem {
BUILD_CACHE(PARAM, "--build-cache"),
- CONFIGURATION_CACHE(PARAM, "--configuration-cache"),
+ CONFIGURATION_CACHE(PARAM, GradleVersionRange.from("6.5"),
"--configuration-cache"),
CONFIGURE_ON_DEMAND(PARAM, "--configure-on-demand"),
CONTINUE(PARAM, "--continue"),
CONTINUOUS(PARAM, "--continuous", "-t"),
DAEMON(UNSUPPORTED, "--daemon"),
DRY_RUN(PARAM, "-m", "--dry-run"),
- EXPORT_KEYS(PARAM, "--export-keys"),
+ EXPORT_KEYS(PARAM, GradleVersionRange.from("6.2"), "--export-keys"),
FOREGROUND(UNSUPPORTED, "--foreground"),
- GUI(UNSUPPORTED, "--gui"),
+ GUI(UNSUPPORTED, GradleVersionRange.until("4.0"), "--gui"),
HELP(UNSUPPORTED, "--help", "-h", "-?"),
LOG_DEBUG(PARAM, "-d", "--debug"),
LOG_INFO(PARAM, "-i", "--info"),
LOG_QUIET(PARAM, "-q", "--quiet"),
LOG_WARN(PARAM, "-w", "--warn"),
NO_BUILD_CACHE(PARAM, "--no-build-cache"),
- NO_CONFIGURATION_CACHE(PARAM, "--no-configuration-cache"),
+ NO_CONFIGURATION_CACHE(PARAM, GradleVersionRange.from("6.5"),
"--no-configuration-cache"),
NO_CONFIGURE_ON_DEMAND(PARAM, "--no-configure-on-demand"),
NO_DAEMON(UNSUPPORTED, "--no-daemon"),
NO_PARALLEL(PARAM, "--no-parallel"),
NO_REBUILD(PARAM, "-a", "--no-rebuild"),
- NO_SCAN(PARAM, "--no-scan"),
- NO_SEARCH_UPWARD(UNSUPPORTED, "--no-search-upward", "-u"),
- NO_WATCH_FS(PARAM, "--no-watch-fs"),
+ NO_SCAN(PARAM, GradleVersionRange.from("4.3"), "--no-scan"),
+ NO_SEARCH_UPWARD(UNSUPPORTED, GradleVersionRange.until("5.0"),
"--no-search-upward", "-u"),
+ NO_WATCH_FS(PARAM, GradleVersionRange.from("6.7"), "--no-watch-fs"),
OFFLINE(PARAM, "--offline"),
PARALLEL(PARAM, "--parallel"),
PROFILE(PARAM, "--profile"),
- RECOMPILE_SCRIPTS(UNSUPPORTED, "--recompile-scripts"),
+ RECOMPILE_SCRIPTS(UNSUPPORTED, GradleVersionRange.until("5.0"),
"--recompile-scripts"),
REFRESH_DEPENDENCIES(PARAM, "--refresh-dependencies"),
- REFRESH_KEYS(PARAM, "--refresh-keys"),
+ REFRESH_KEYS(PARAM, GradleVersionRange.from("6.2"), "--refresh-keys"),
RERUN_TASKS(PARAM, "--rerun-tasks"),
- SCAN(PARAM, "--scan"),
+ SCAN(PARAM, GradleVersionRange.from("4.3"), "--scan"),
STACKTRACE(PARAM, "-s", "--stacktrace"),
STACKTRACE_FULL(PARAM, "-S", "--full-stacktrace"),
STATUS(UNSUPPORTED, "--status"),
STOP(UNSUPPORTED, "--stop"),
- UPDATE_LOCKS(PARAM, "--update-locks"),
+ UPDATE_LOCKS(PARAM, GradleVersionRange.from("4.8"), "--update-locks"),
VERSION(UNSUPPORTED, "--version", "-v"),
- WATCH_FS(PARAM, "--watch-fs"),
- WRITE_LOCKS(PARAM,"--write-locks");
+ WATCH_FS(PARAM, GradleVersionRange.from("6.7"), "--watch-fs"),
+ WRITE_LOCKS(PARAM, GradleVersionRange.from("4.8"),"--write-locks");
private Set<Flag> incompatible = Collections.emptySet();
private final Argument.Kind kind;
private final List<String> flags;
+ private final GradleDistributionManager.GradleVersionRange
supportedRange;
static {
DAEMON.incompatibleWith(NO_DAEMON);
@@ -173,8 +192,13 @@ public final class GradleCommandLine implements
Serializable {
}
private Flag(Argument.Kind kind, String... flags) {
+ this(kind, GradleDistributionManager.GradleVersionRange.UNBOUNDED,
flags);
+ }
+
+ private Flag(Argument.Kind kind,
GradleDistributionManager.GradleVersionRange supportedRange, String... flags) {
this.kind = kind;
this.flags = Arrays.asList(flags);
+ this.supportedRange = supportedRange;
}
private void incompatibleWith(Flag first, Flag... rest) {
@@ -195,6 +219,11 @@ public final class GradleCommandLine implements
Serializable {
public final String getDescription() {
return NbBundle.getMessage(GradleCommandLine.class, this.name() +
"_DSC");
}
+
+ @Override
+ public boolean supportsGradle(GradleDistribution dist) {
+ return supportedRange.contains(dist.version);
+ }
}
public enum Property implements GradleOptionItem {
@@ -226,12 +255,17 @@ public final class GradleCommandLine implements
Serializable {
return NbBundle.getMessage(GradleCommandLine.class, this.name() +
"_DSC");
}
+ @Override
+ public boolean supportsGradle(GradleDistribution dist) {
+ return true;
+ }
+
}
public enum Parameter implements GradleOptionItem {
BUILD_FILE(UNSUPPORTED, "-b", "--build-file"),
- CONFIGURATION_CACHE_PROBLEMS(PARAM, argValues("fail", "warn"),
"--configuration-cache-problems"),
+ CONFIGURATION_CACHE_PROBLEMS(PARAM, GradleVersionRange.from("6.5"),
argValues("fail", "warn"), "--configuration-cache-problems"),
CONSOLE(UNSUPPORTED, argValues("plain", "auto", "rich", "verbose"),
"--console"),
DEPENDENCY_VERIFICATION(PARAM, argValues("strict", "lenient", "off"),
"-F", "--dependency-verification"),
EXCLUDE_TASK(PARAM, "-x", "--exclude-task"),
@@ -239,7 +273,7 @@ public final class GradleCommandLine implements
Serializable {
INIT_SCRIPT(PARAM, "-I", "--init-script"),
@Deprecated
IMPORT_BUILD(UNSUPPORTED),
- INCLUDE_BUILD(PARAM, "--include-build"),
+ INCLUDE_BUILD(PARAM, GradleVersionRange.from("3.1"),
"--include-build"),
MAX_WORKER(PARAM, "--max-worker"),
PRIORITY(PARAM, argValues("normal", "low"), "--priority"),
PROJECT_CACHE_DIR(UNSUPPORTED, "--project-cache-dir"),
@@ -247,9 +281,10 @@ public final class GradleCommandLine implements
Serializable {
@Deprecated
SETTINGS_FILE(UNSUPPORTED, "-c", "--settings-file"),
WARNING_MODE(PARAM, argValues("all", "fail", "summary",
"none"),"--warning-mode"),
- WRITE_VERIFICATION_METADATA(PARAM, "-M",
"write-verification-metadata");
+ WRITE_VERIFICATION_METADATA(PARAM, GradleVersionRange.from("6.2"),
"-M", "write-verification-metadata");
final Argument.Kind kind;
+ final GradleDistributionManager.GradleVersionRange supportedRange;
final List<String> flags;
final Argument.Values values;
@@ -257,12 +292,21 @@ public final class GradleCommandLine implements
Serializable {
this(kind, Argument.Values.ANY, flags);
}
+ Parameter(Argument.Kind kind,
GradleDistributionManager.GradleVersionRange supportedRange, String... flags) {
+ this(kind, supportedRange, Argument.Values.ANY, flags);
+ }
+
Parameter(Argument.Kind kind, Argument.Values values, String... flags)
{
+ this(kind, GradleDistributionManager.GradleVersionRange.UNBOUNDED,
values, flags);
+ }
+
+ Parameter(Argument.Kind kind,
GradleDistributionManager.GradleVersionRange supportedRange, Argument.Values
values, String... flags) {
this.kind = kind;
this.values = values;
this.flags = Arrays.asList(flags);
+ this.supportedRange = supportedRange;
}
-
+
private static Argument.Values argValues(String... values) {
return new Argument.Values(values);
}
@@ -281,6 +325,11 @@ public final class GradleCommandLine implements
Serializable {
public String getDescription() {
return NbBundle.getMessage(GradleCommandLine.class, this.name() +
"_DSC");
}
+
+ @Override
+ public boolean supportsGradle(GradleDistribution dist) {
+ return supportedRange.contains(dist.version);
+ }
}
//<editor-fold desc="Argument processing internals"
defaultstate="collapsed" >
@@ -302,6 +351,8 @@ public final class GradleCommandLine implements
Serializable {
Kind getKind();
List<String> getArgs();
+
+ boolean supportsGradle(GradleDistribution dist);
}
interface ArgumentParser<T extends Argument> {
@@ -330,7 +381,7 @@ public final class GradleCommandLine implements
Serializable {
@Override
public List<String> getArgs() {
- return Collections.singletonList(flag.flags.get(0));
+ return Collections.singletonList(toString());
}
@Override
@@ -362,6 +413,16 @@ public final class GradleCommandLine implements
Serializable {
public Kind getKind() {
return flag.kind;
}
+
+ @Override
+ public boolean supportsGradle(GradleDistribution dist) {
+ return flag.supportsGradle(dist);
+ }
+
+ @Override
+ public String toString() {
+ return flag.flags.get(0);
+ }
}
static class PropertyArgument implements Argument {
@@ -378,7 +439,7 @@ public final class GradleCommandLine implements
Serializable {
@Override
public List<String> getArgs() {
- return Collections.singletonList(prop.prefix + key + "=" + value);
+ return Collections.singletonList(toString());
}
@Override
@@ -412,6 +473,15 @@ public final class GradleCommandLine implements
Serializable {
return this.prop == other.prop;
}
+ @Override
+ public boolean supportsGradle(GradleDistribution dist) {
+ return prop.supportsGradle(dist);
+ }
+
+ @Override
+ public String toString(){
+ return prop.prefix + key + "=" + value;
+ }
}
static class PropertyParser implements ArgumentParser<PropertyArgument> {
@@ -493,6 +563,18 @@ public final class GradleCommandLine implements
Serializable {
}
return this.param == other.param;
}
+
+ @Override
+ public boolean supportsGradle(GradleDistribution dist) {
+ return param.supportsGradle(dist);
+ }
+
+ @Override
+ public String toString() {
+ return param.flags.get(0) + " " + value;
+ }
+
+
}
static class ParameterParser implements ArgumentParser<ParametricArgument>
{
@@ -525,15 +607,46 @@ public final class GradleCommandLine implements
Serializable {
}
//</editor-fold>
+ final GradleDistribution dist;
final Set<Argument> arguments = new LinkedHashSet<>();
final Set<String> tasks = new LinkedHashSet<>();
- public GradleCommandLine(GradleCommandLine cmd) {
+ /**
+ /**
+ * Creates a copy instance of the provided GradleCommandLine, but with for
a
+ * specified GradleDistribution.
+ *
+ * @param dist the GradleDistribution for compatibility checks. {@code
null}
+ * can be used for unspecified.
+ * @param cmd the command line to copy
+ * @since 2.23
+ */
+ public GradleCommandLine(GradleDistribution dist, GradleCommandLine cmd) {
+ this.dist = dist;
arguments.addAll(cmd.arguments);
tasks.addAll(cmd.tasks);
}
- public GradleCommandLine(String... args) {
+ /**
+ * Creates a copy instance of the provided GradleCommandLine.
+ *
+ * @param cmd the command line to copy
+ */
+ public GradleCommandLine(GradleCommandLine cmd) {
+ this(cmd.dist, cmd);
+ }
+
+ /**
+ * Creates a command line form the specified arguments with compatibility
+ * constraint on a specified Gradle distribution.
+ *
+ * @param dist the GradleDistribution for compatibility checks. {@code
null}
+ * can be used for unspecified.
+ * @param args the command line parameters
+ * @since 2.23
+ */
+ public GradleCommandLine(GradleDistribution dist, String... args) {
+ this.dist = dist;
Iterator<String> it = Arrays.asList(args).iterator();
while (it.hasNext()) {
String arg = it.next();
@@ -551,15 +664,28 @@ public final class GradleCommandLine implements
Serializable {
}
}
+ public GradleCommandLine(String... args) {
+ this(null, args);
+ }
+
+ public GradleCommandLine(GradleDistribution dist, CharSequence argLine) {
+ this(dist, Utilities.parseParameters(argLine.toString()));
+ }
+
public GradleCommandLine(CharSequence argLine) {
- this(Utilities.parseParameters(argLine.toString()));
+ this(null, Utilities.parseParameters(argLine.toString()));
}
private List<String> getArgs(Set<Argument.Kind> kinds) {
List<String> ret = new LinkedList<>();
for (Argument arg : arguments) {
if (kinds.contains(arg.getKind())) {
- ret.addAll(arg.getArgs());
+ if ((dist == null) || arg.supportsGradle(dist)) {
+ ret.addAll(arg.getArgs());
+ }
+ if ((dist != null) && !arg.supportsGradle(dist)) {
+ LOGGER.log(Level.INFO, "'{0}' is not supported by Gradle
{1}, so it will be omitted.", new Object[]{arg.toString(), dist.getVersion()});
+ }
}
}
return ret;
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java
b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java
index f5d6a6c2b4..1d27b0078a 100644
---
a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java
+++
b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java
@@ -66,6 +66,7 @@ import org.json.simple.parser.ParseException;
import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.modules.gradle.api.NbGradleProject;
import org.netbeans.modules.gradle.spi.GradleFiles;
+import org.netbeans.modules.gradle.spi.GradleSettings;
import org.openide.awt.Notification;
import org.openide.awt.NotificationDisplayer;
import org.openide.util.Exceptions;
@@ -131,14 +132,26 @@ public final class GradleDistributionManager {
* @return
*/
public static GradleDistributionManager get(File gradleUserHome) {
- GradleDistributionManager ret = CACHE.get(gradleUserHome);
+ File home = gradleUserHome != null ? gradleUserHome :
GradleSettings.getDefault().getGradleUserHome();
+ GradleDistributionManager ret = CACHE.get(home);
if (ret == null) {
- ret = new GradleDistributionManager(gradleUserHome);
- CACHE.put(gradleUserHome, ret);
+ ret = new GradleDistributionManager(home);
+ CACHE.put(home, ret);
}
return ret;
}
+ /**
+ * Return a {@link GradleDistributionManager} for the Gradle user
+ * home, set in the IDE.
+ *
+ * @return the GradleDistributionManager for the default Gradle user home.
+ * @since 2.23
+ */
+ public static GradleDistributionManager get() {
+ return GradleDistributionManager.get(null);
+ }
+
/**
* Create a {@link GradleDistribution} from a manually downloaded and
* unpacked directory.
@@ -365,6 +378,62 @@ public final class GradleDistributionManager {
return new File(dist.getDistributionDir(), "gradle-" + version);
}
+
+ static final class GradleVersionRange {
+
+ public final GradleVersion lowerBound;
+ public final GradleVersion upperBound;
+ public static final GradleVersionRange UNBOUNDED = new
GradleVersionRange(null, null);
+
+ GradleVersionRange(GradleVersion lowerBound, GradleVersion upperBound)
{
+ if ((lowerBound != null) && (upperBound != null) &&
(lowerBound.compareTo(upperBound) >= 0)) {
+ throw new IllegalArgumentException("Invalid version range: ["
+ lowerBound + ", " + upperBound + ")");
+ }
+ this.lowerBound = lowerBound;
+ this.upperBound = upperBound;
+ }
+
+ public boolean contains(GradleVersion ver) {
+ return ((lowerBound == null) || (lowerBound.compareTo(ver) <= 0))
&& ((upperBound == null) || (upperBound.compareTo(ver) > 0));
+ }
+
+ public boolean contains(String ver) {
+ return contains(GradleVersion.version(ver));
+ }
+
+ public static GradleVersionRange from(GradleVersion lowerBound) {
+ return new GradleVersionRange(lowerBound, null);
+ }
+
+ public static GradleVersionRange from(String lowerBound) {
+ return from(GradleVersion.version(lowerBound));
+ }
+
+ public static GradleVersionRange until(GradleVersion upperBound) {
+ return new GradleVersionRange(null, upperBound);
+ }
+
+ public static GradleVersionRange until(String upperBound) {
+ return until(GradleVersion.version(upperBound));
+ }
+
+ public static GradleVersionRange range(GradleVersion lowerRange,
GradleVersion upperRange) {
+ return new GradleVersionRange(lowerRange, upperRange);
+ }
+
+ public static GradleVersionRange range(GradleVersion lowerRange,
String upperRange) {
+ return range(lowerRange, GradleVersion.version(upperRange));
+ }
+
+ public static GradleVersionRange range(String lowerRange,
GradleVersion upperRange) {
+ return new GradleVersionRange(GradleVersion.version(lowerRange),
upperRange);
+ }
+
+ public static GradleVersionRange range(String lowerRange, String
upperRange) {
+ return new GradleVersionRange(GradleVersion.version(lowerRange),
GradleVersion.version(upperRange));
+ }
+ }
+
/**
* This object represents a Gradle distribution in NetBeans combining the
* following four attributes:
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/RunUtils.java
b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/RunUtils.java
index 7c331af15f..22144f14a1 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/RunUtils.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/RunUtils.java
@@ -53,6 +53,7 @@ import java.util.MissingResourceException;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.function.Function;
+import org.gradle.util.GradleVersion;
import org.netbeans.api.project.ProjectInformation;
import org.netbeans.api.project.ui.OpenProjects;
@@ -245,6 +246,24 @@ public final class RunUtils {
return exec != null ? exec.cancel() : false;
}
+ /**
+ * Returns the GradleDistribution for the given project which is compatible
+ * with the JVM runtime, the IDE is running on
+ * .
+ * @param prj the project
+ * @return The project Gradle distribution or the current tooling
+ * distribution if the runtime JVM is not supported by the project
+ * specified distribution.
+ * @since 2.23
+ */
+ public static GradleDistribution getCompatibleGradleDistribution(Project
prj) {
+ GradleDistributionProvider pvd =
prj.getLookup().lookup(GradleDistributionProvider.class);
+ GradleDistribution ret = pvd != null ? pvd.getGradleDistribution() :
GradleDistributionManager.get().defaultDistribution();
+ ret = ret.isCompatibleWithSystemJava() ? ret :
GradleDistributionManager.get().defaultDistribution();
+ return ret;
+
+ }
+
private static ExecutorTask executeGradleImpl(String runtimeName, final
GradleExecutor exec, String initialOutput) {
InputOutput io = exec.getInputOutput();
ExecutorTask task = ExecutionEngine.getDefault().execute(runtimeName,
exec,
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDaemonExecutor.java
b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDaemonExecutor.java
index a4cfe68f6b..cd10f28c59 100644
---
a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDaemonExecutor.java
+++
b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDaemonExecutor.java
@@ -34,7 +34,6 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.io.StreamCorruptedException;
import java.nio.file.Path;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -197,6 +196,8 @@ public final class GradleDaemonExecutor extends
AbstractGradleExecutor {
cmd = GradleCommandLine.combine(addConfigParts, cmd);
}
}
+
+ cmd = new GradleCommandLine(dist, cmd);
// will not show augmented in the output
GradleCommandLine augmented = cmd;
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDistributionProviderImpl.java
b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDistributionProviderImpl.java
index 34d98f1679..351241d8cc 100644
---
a/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDistributionProviderImpl.java
+++
b/extide/gradle/src/org/netbeans/modules/gradle/execute/GradleDistributionProviderImpl.java
@@ -99,7 +99,7 @@ public class GradleDistributionProviderImpl implements
GradleDistributionProvide
if (dist == null) {
GradleSettings settings = GradleSettings.getDefault();
- GradleDistributionManager mgr =
GradleDistributionManager.get(settings.getGradleUserHome());
+ GradleDistributionManager mgr = GradleDistributionManager.get();
if (settings.isWrapperPreferred()) {
try {
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java
b/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java
index 09a484c9b2..4496ab9e2c 100644
---
a/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java
+++
b/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java
@@ -70,6 +70,7 @@ import static
org.netbeans.modules.gradle.api.NbGradleProject.Quality.SIMPLE;
import org.netbeans.modules.gradle.api.NbProjectInfo;
import org.netbeans.modules.gradle.api.NbProjectInfo.Report;
import org.netbeans.modules.gradle.api.execute.GradleCommandLine;
+import org.netbeans.modules.gradle.api.execute.RunUtils;
import org.netbeans.modules.gradle.cache.ProjectInfoDiskCache;
import org.netbeans.modules.gradle.spi.GradleSettings;
import org.openide.util.Cancellable;
@@ -140,8 +141,9 @@ public class LegacyProjectLoader extends
AbstractProjectLoader {
GradleProjectErrorNotifications errors =
ctx.project.getLookup().lookup(GradleProjectErrorNotifications.class);
- GradleCommandLine cmd = new GradleCommandLine(ctx.cmd);
+ GradleCommandLine cmd = new
GradleCommandLine(RunUtils.getCompatibleGradleDistribution(ctx.project),
ctx.cmd);
cmd.setFlag(GradleCommandLine.Flag.CONFIGURE_ON_DEMAND,
GradleSettings.getDefault().isConfigureOnDemand());
+ cmd.setFlag(GradleCommandLine.Flag.CONFIGURATION_CACHE,
GradleSettings.getDefault().getUseConfigCache());
cmd.addParameter(GradleCommandLine.Parameter.INIT_SCRIPT,
GradleDaemon.initScript());
cmd.setStackTrace(GradleCommandLine.StackTrace.SHORT);
cmd.addProjectProperty("nbSerializeCheck", "true");
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/loaders/ModelCache.java
b/extide/gradle/src/org/netbeans/modules/gradle/loaders/ModelCache.java
index 80488da3da..1b659dd000 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/loaders/ModelCache.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/loaders/ModelCache.java
@@ -23,12 +23,14 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import org.gradle.tooling.ProjectConnection;
import org.gradle.tooling.model.Model;
import org.netbeans.api.project.Project;
import org.netbeans.modules.gradle.api.ModelFetcher;
+import org.netbeans.modules.gradle.api.execute.GradleCommandLine;
+import org.netbeans.modules.gradle.api.execute.RunUtils;
import static org.netbeans.modules.gradle.loaders.ModelCache.State.*;
+import org.netbeans.modules.gradle.spi.GradleSettings;
import org.openide.util.RequestProcessor;
/**
@@ -75,14 +77,20 @@ public class ModelCache <T extends Model> {
try {
List<String> filteredTargets =
descriptor.getTargets().stream().filter((String target) ->
descriptor.needsRefresh(target)).collect(Collectors.toList());
if (!filteredTargets.isEmpty()) {
+ final GradleCommandLine cmd = new
GradleCommandLine(RunUtils.getCompatibleGradleDistribution(project),
descriptor.gradleCommandLine());
+
+ cmd.setFlag(GradleCommandLine.Flag.CONFIGURE_ON_DEMAND,
GradleSettings.getDefault().isConfigureOnDemand());
+ cmd.setFlag(GradleCommandLine.Flag.CONFIGURATION_CACHE,
GradleSettings.getDefault().getUseConfigCache());
+
ProjectConnection pconn =
project.getLookup().lookup(ProjectConnection.class);
+
ModelFetcher fetcher = new ModelFetcher();
for (String target : filteredTargets) {
fetcher.modelAction(target, descriptor.getModelClass(),
(T model) -> descriptor.onLoad(target, model));
}
long startTime = System.currentTimeMillis();
fetcher.fetchModels(pconn, (launcher) -> {
- descriptor.gradleCommandLine().configure(launcher);
+ cmd.configure(launcher);
});
fetcher.awaitTermination(10, TimeUnit.MINUTES);
long endTime = System.currentTimeMillis();
@@ -100,4 +108,5 @@ public class ModelCache <T extends Model> {
public synchronized State getState() {
return state;
}
+
}
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/options/GradleOptionsController.java
b/extide/gradle/src/org/netbeans/modules/gradle/options/GradleOptionsController.java
index 6249f8a9a8..2ed99a7ea2 100644
---
a/extide/gradle/src/org/netbeans/modules/gradle/options/GradleOptionsController.java
+++
b/extide/gradle/src/org/netbeans/modules/gradle/options/GradleOptionsController.java
@@ -53,7 +53,7 @@ public class GradleOptionsController extends
OptionsPanelController {
getPanel().applyValues();
if (GradleSettings.getDefault().isSilentInstall()) {
// If allowed, let's just install the required Gradle version.
- GradleDistributionManager gdm =
GradleDistributionManager.get(GradleSettings.getDefault().getGradleUserHome());
+ GradleDistributionManager gdm = GradleDistributionManager.get();
GradleDistribution dist =
gdm.distributionFromVersion(GradleSettings.getDefault().getGradleVersion());
dist.install();
}
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.java
b/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.java
index 35cc6739c4..546024e5d4 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/options/SettingsPanel.java
@@ -62,7 +62,7 @@ public class SettingsPanel extends javax.swing.JPanel {
private static final String[] CARDS = {"Execution", "Appearance",
"Dependencies", "Experimental"}; //NOI18N
- private GradleDistributionManager gdm =
GradleDistributionManager.get(GradleSettings.getDefault().getGradleUserHome());
+ private GradleDistributionManager gdm = GradleDistributionManager.get();
/**
* Creates new form SettingsPanel
diff --git
a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/execute/GradleCommandLineTest.java
b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/execute/GradleCommandLineTest.java
index 2454829169..2ce826c436 100644
---
a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/execute/GradleCommandLineTest.java
+++
b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/execute/GradleCommandLineTest.java
@@ -323,4 +323,19 @@ public class GradleCommandLineTest {
}
assertTrue(missing.toString(), missing.isEmpty());
}
+
+ @Test
+ public void testUnsupportedArg1() {
+ GradleCommandLine cmd = new GradleCommandLine("--gui");
+ cmd = new
GradleCommandLine(GradleDistributionManager.get().defaultDistribution(), cmd);
+ assertTrue(cmd.getFullCommandLine().isEmpty());
+ }
+
+ @Test
+ public void testUnsupportedArg2() {
+ GradleCommandLine cmd = new GradleCommandLine("--include-build",
"../something");
+ cmd = new
GradleCommandLine(GradleDistributionManager.get().distributionFromVersion("2.2"),
cmd);
+ assertTrue(cmd.getFullCommandLine().isEmpty());
+ }
+
}
diff --git
a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/execute/GradleVersionRangeTest.java
b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/execute/GradleVersionRangeTest.java
new file mode 100644
index 0000000000..4433da93f0
--- /dev/null
+++
b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/execute/GradleVersionRangeTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.gradle.api.execute;
+
+import org.gradle.util.GradleVersion;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author Laszlo Kishalmi
+ */
+public class GradleVersionRangeTest {
+
+ public GradleVersionRangeTest() {
+ }
+
+
+ /**
+ * Test of from method, of class GradleVersionRange.
+ */
+ @Test
+ public void testFrom() {
+ GradleDistributionManager.GradleVersionRange range =
GradleDistributionManager.GradleVersionRange.from(GradleVersion.version("2.0"));
+ assertTrue(range.contains(GradleVersion.version("2.1")));
+ assertTrue(range.contains(GradleVersion.version("2.0")));
+ assertFalse(range.contains(GradleVersion.version("1.9")));
+ }
+
+ @Test
+ public void testUntil() {
+ GradleDistributionManager.GradleVersionRange range =
GradleDistributionManager.GradleVersionRange.until(GradleVersion.version("6.7"));
+ assertTrue(range.contains(GradleVersion.version("2.1")));
+ assertFalse(range.contains(GradleVersion.version("7.0")));
+ assertFalse(range.contains(GradleVersion.version("6.7")));
+ }
+
+
+ @Test
+ public void test() {
+ GradleDistributionManager.GradleVersionRange range =
GradleDistributionManager.GradleVersionRange.range("3.0", "5.0");
+ assertTrue(range.contains(GradleVersion.version("3.0")));
+ assertTrue(range.contains(GradleVersion.version("4.0")));
+ assertFalse(range.contains(GradleVersion.version("5.0")));
+ assertFalse(range.contains(GradleVersion.version("6.0")));
+ }
+}
diff --git
a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/execute/GradleCliCompletionProviderTest.java
b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/execute/GradleCliCompletionProviderTest.java
new file mode 100644
index 0000000000..f49950e368
--- /dev/null
+++
b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/execute/GradleCliCompletionProviderTest.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.gradle.execute;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author lkishalmi
+ */
+public class GradleCliCompletionProviderTest {
+
+ /**
+ * Test of createTask method, of class GradleCliCompletionProvider.
+ */
+ @Test
+ public void testCreateInstance() {
+ GradleCliCompletionProvider instance = new
GradleCliCompletionProvider();
+ assertNotNull(instance);
+ }
+
+}
diff --git
a/java/gradle.java/src/org/netbeans/modules/gradle/java/classpath/AbstractGradleScriptClassPath.java
b/java/gradle.java/src/org/netbeans/modules/gradle/java/classpath/AbstractGradleScriptClassPath.java
index 7a9a296726..cac8af0055 100644
---
a/java/gradle.java/src/org/netbeans/modules/gradle/java/classpath/AbstractGradleScriptClassPath.java
+++
b/java/gradle.java/src/org/netbeans/modules/gradle/java/classpath/AbstractGradleScriptClassPath.java
@@ -92,7 +92,7 @@ abstract class AbstractGradleScriptClassPath implements
ClassPathImplementation
}
private void changeDistDir() {
- GradleDistribution dist =
GradleDistributionManager.get(GradleSettings.getDefault().getGradleUserHome()).defaultDistribution();
+ GradleDistribution dist =
GradleDistributionManager.get().defaultDistribution();
File newDistDir = dist.getDistributionDir();
if (distDir != null && !distDir.equals(newDistDir)) {
distDir = newDistDir;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists