You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by lk...@apache.org on 2022/12/06 05:49:51 UTC

[netbeans] branch delivery updated: Fixed some Gradle introspection problems wit pre-6.1 Gradle Versions

This is an automated email from the ASF dual-hosted git repository.

lkishalmi pushed a commit to branch delivery
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/delivery by this push:
     new 648564ff47 Fixed some Gradle introspection problems wit pre-6.1 Gradle Versions
648564ff47 is described below

commit 648564ff47d5a70c4e03ce781e407b5d6f547131
Author: Laszlo Kishalmi <la...@gmail.com>
AuthorDate: Sun Nov 27 08:37:10 2022 -0800

    Fixed some Gradle introspection problems wit pre-6.1 Gradle Versions
---
 .../gradle/tooling/NbProjectInfoBuilder.java       | 95 +++++++++++++---------
 .../gradle/api/GradleBaseProjectBuilder.java       |  2 +-
 2 files changed, 57 insertions(+), 40 deletions(-)

diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
index dae86ef964..fbd02232a9 100644
--- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
+++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
@@ -91,7 +91,6 @@ import org.gradle.api.logging.Logging;
 import org.gradle.api.plugins.ExtensionAware;
 import org.gradle.api.plugins.ExtensionContainer;
 import org.gradle.api.plugins.ExtensionsSchema.ExtensionSchema;
-import org.gradle.api.plugins.JavaPlatformPlugin;
 import org.gradle.api.provider.Provider;
 import org.gradle.api.reflect.HasPublicType;
 import org.gradle.api.reflect.TypeOf;
@@ -105,7 +104,7 @@ import org.gradle.jvm.JvmLibrary;
 import org.gradle.language.base.artifact.SourcesArtifact;
 import org.gradle.language.java.artifact.JavadocArtifact;
 import org.gradle.plugin.use.PluginId;
-import org.gradle.util.VersionNumber;
+import org.gradle.util.GradleVersion;
 import org.netbeans.modules.gradle.tooling.internal.NbProjectInfo;
 
 /**
@@ -176,8 +175,9 @@ class NbProjectInfoBuilder {
         "war"
     }));
 
+    private static final GradleVersion GRADLE_VERSION = GradleVersion.current().getBaseVersion();
+
     final Project project;
-    final VersionNumber gradleVersion;
     final GradleInternalAdapter adapter;
 
     public static final class ValueAndType {
@@ -197,9 +197,7 @@ class NbProjectInfoBuilder {
 
     NbProjectInfoBuilder(Project project) {
         this.project = project;
-        this.gradleVersion = VersionNumber.parse(project.getGradle().getGradleVersion());
-        // checked that version 7.6.0 > 7.6.0-rc-1 in the VersionNumber order
-        this.adapter = sinceGradleOrDefault("7.6.0-rc-1", () -> new GradleInternalAdapter.Gradle76(project), () -> new GradleInternalAdapter(project));
+        this.adapter = sinceGradleOrDefault("7.6", () -> new GradleInternalAdapter.Gradle76(project), () -> new GradleInternalAdapter(project));
     }
     
     private NbProjectInfoModel model = new NbProjectInfoModel();
@@ -864,7 +862,7 @@ class NbProjectInfoBuilder {
         model.getInfo().put("project_subProjects", sp);
         
         Map<String, File> ib = new HashMap<>();
-        LOG.lifecycle("Gradle Version: {}", gradleVersion);
+        LOG.lifecycle("Gradle Version: {}", GradleVersion.current());
         sinceGradle("3.1", () -> {
             for(IncludedBuild p: project.getGradle().getIncludedBuilds()) {
                 LOG.lifecycle("Include Build: {}", p.getName());
@@ -1016,36 +1014,44 @@ class NbProjectInfoBuilder {
                         }
                         if (Boolean.TRUE.equals(available.get(langId))) {
                             model.getInfo().put(propBase + lang, storeSet(getProperty(sourceSet, langId, "srcDirs")));
-                            DirectoryProperty dirProp = (DirectoryProperty)getProperty(sourceSet, langId, "classesDirectory");
-                            if (dirProp != null) {
-                                File outDir;
-                                
-                                if (dirProp.isPresent()) {
-                                    outDir = dirProp.get().getAsFile();
-                                } else {
-                                    // kotlin plugin uses some weird late binding, so it has the output item, but it cannot be resolved to a 
-                                    // concrete file path at this time. Let's make an approximation from 
-                                    Path candidate = null;
-                                    if (base != null) {
-                                        Path prefix = base.resolve(langId);
-                                        // assume the language has just one output dir in the source set:
-                                        for (int i = 0; i < outPaths.size(); i++) {
-                                            Path p = outPaths.get(i);
-                                            if (p.startsWith(prefix)) {
-                                                if (candidate != null) {
-                                                    candidate = null;
-                                                    break;
-                                                } else {
-                                                    candidate = p;
+                            asGradle("4.0", "6.1", () -> {
+                                File outDir = (File) getProperty(sourceSet, langId, "outputDir");
+                                model.getInfo().put(propBase + lang + "_output_classes", outDir);
+                            });
+                            sinceGradle("6.1", () -> {
+                                DirectoryProperty dirProp = (DirectoryProperty)getProperty(sourceSet, langId, "classesDirectory");
+                                if (dirProp != null) {
+                                    File outDir;
+
+                                    if (dirProp.isPresent()) {
+                                        outDir = dirProp.get().getAsFile();
+                                    } else {
+                                        // kotlin plugin uses some weird late binding, so it has the output item, but it cannot be resolved to a
+                                        // concrete file path at this time. Let's make an approximation from
+                                        Path candidate = null;
+                                        if (base != null) {
+                                            Path prefix = base.resolve(langId);
+                                            // assume the language has just one output dir in the source set:
+                                            for (int i = 0; i < outPaths.size(); i++) {
+                                                Path p = outPaths.get(i);
+                                                if (p.startsWith(prefix)) {
+                                                    if (candidate != null) {
+                                                        candidate = null;
+                                                        break;
+                                                    } else {
+                                                        candidate = p;
+                                                    }
                                                 }
                                             }
                                         }
+                                        outDir = candidate != null ? candidate.toFile() : new File("");
                                     }
-                                    outDir = candidate != null ? candidate.toFile() : new File("");
+
+                                    model.getInfo().put(propBase + lang + "_output_classes", outDir);
                                 }
-                                
-                                model.getInfo().put(propBase + lang + "_output_classes", outDir);
-                            }
+                            });
+
+
                         }
                     }
    
@@ -1295,7 +1301,7 @@ class NbProjectInfoBuilder {
 
         // NETBEANS-5846: if this project uses javaPlatform plugin with dependencies enabled, 
         // do not report unresolved problems
-        boolean ignoreUnresolvable = (project.getPlugins().hasPlugin(JavaPlatformPlugin.class) && 
+        boolean ignoreUnresolvable = (project.getPlugins().hasPlugin("java-platform") &&
             Boolean.TRUE.equals(getProperty(project, "javaPlatform", "allowDependencies")));
 
         visibleConfigurations.forEach(it -> {
@@ -1606,7 +1612,7 @@ class NbProjectInfoBuilder {
     }        
     
     private <T, E extends Throwable> T sinceGradleOrDefault(String version, ExceptionCallable<T, E> c, Supplier<T> def) {
-        if (gradleVersion.compareTo(VersionNumber.parse(version)) >= 0) {
+        if (GRADLE_VERSION.compareTo(GradleVersion.version(version)) >= 0) {
             try {
                 return c.call();
             } catch (RuntimeException | Error e) {
@@ -1625,23 +1631,34 @@ class NbProjectInfoBuilder {
     }
     
     private void sinceGradle(String version, Runnable r) {
-        if (gradleVersion.compareTo(VersionNumber.parse(version)) >= 0) {
+        if (GRADLE_VERSION.compareTo(GradleVersion.version(version)) >= 0) {
             r.run();
         }
     }
 
     private void beforeGradle(String version, Runnable r) {
-        if (gradleVersion.compareTo(VersionNumber.parse(version)) < 0) {
+        if (GRADLE_VERSION.compareTo(GradleVersion.version(version)) < 0) {
+            r.run();
+        }
+    }
+
+    private void asGradle(String fromVersion, String toVersion, Runnable r) {
+        if ((GRADLE_VERSION.compareTo(GradleVersion.version(fromVersion)) >= 0)
+                && (GRADLE_VERSION.compareTo(GradleVersion.version(toVersion)) < 0)) {
             r.run();
         }
     }
 
     private static Object getProperty(Object obj, String... propPath) {
         Object currentObject = obj;
-        for(String prop: propPath) {
-            currentObject = InvokerHelper.getPropertySafe(currentObject, prop);
+        try {
+            for(String prop: propPath) {
+                currentObject = InvokerHelper.getPropertySafe(currentObject, prop);
+            }
+            return currentObject;
+        } catch (MissingPropertyException ex) {
+            return null;
         }
-        return currentObject;
     }
 }
 
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
index 0b98521530..d299a47989 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
@@ -154,7 +154,7 @@ class GradleBaseProjectBuilder implements ProjectInfoExtractor.Result {
         if (sourceSetNames != null) {
             for (String name : sourceSetNames) {
                 Set<File> dirs = (Set<File>) info.get("sourceset_" + name + "_output_classes");
-                sourceSetOutputs.addAll(dirs);
+                sourceSetOutputs.addAll(dirs != null ? dirs : Collections.emptySet());
                 sourceSetOutputs.add((File) info.get("sourceset_" + name + "_output_resources"));
             }
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists