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

Reply via email to