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 2021/11/20 05:07:34 UTC

[netbeans] branch master updated: [NETBEANS-5846] Minimal support of java-platfom Gradle projects.

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 224dfc0  [NETBEANS-5846] Minimal support of java-platfom Gradle projects.
224dfc0 is described below

commit 224dfc07b432249e216c170be32130cc66d12318
Author: Laszlo Kishalmi <la...@gmail.com>
AuthorDate: Mon Nov 1 09:13:12 2021 -0700

    [NETBEANS-5846] Minimal support of java-platfom Gradle projects.
---
 .../gradle/tooling/NbProjectInfoBuilder.groovy     | 94 +++++++++++++++++-----
 .../gradle/GradleProjectErrorNotifications.java    |  2 +-
 .../gradle/api/GradleBaseProjectBuilder.java       | 14 +++-
 .../modules/gradle/api/GradleConfiguration.java    |  5 +-
 .../modules/gradle/nodes/ConfigurationsNode.java   | 32 ++++----
 .../gradle/java/JavaSEProjectIconProvider.java     |  8 ++
 6 files changed, 115 insertions(+), 40 deletions(-)

diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/groovy/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.groovy b/extide/gradle/netbeans-gradle-tooling/src/main/groovy/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.groovy
index ad7a61b..3e71104 100644
--- a/extide/gradle/netbeans-gradle-tooling/src/main/groovy/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.groovy
+++ b/extide/gradle/netbeans-gradle-tooling/src/main/groovy/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.groovy
@@ -29,7 +29,8 @@ import org.gradle.api.artifacts.ProjectDependency
 import org.gradle.api.artifacts.ResolvedDependency
 import org.gradle.api.artifacts.ResolveException
 import org.gradle.api.artifacts.FileCollectionDependency
-import org.gradle.api.artifacts.ExternalModuleDependency
+import org.gradle.api.artifacts.ModuleDependency
+import org.gradle.api.artifacts.Dependency
 import org.gradle.api.artifacts.component.ModuleComponentSelector
 import org.gradle.api.artifacts.component.ProjectComponentSelector
 import org.gradle.api.artifacts.result.ArtifactResult
@@ -51,10 +52,53 @@ import org.gradle.util.VersionNumber
  */
 class NbProjectInfoBuilder {
     def NB_PREFIX = 'netbeans.'
-    def CONFIG_EXCLUDES = ['archives', 'checkstyle', 'pmd', 'jacocoAgent', \
-        'jacocoAnt', 'findbugs', 'findbugsPlugins', 'jdepend', 'codenarc', \
-        'classycle']
-
+    def CONFIG_EXCLUDES = [\
+        'archives', 
+        'checkstyle',
+        'classycle',
+        'codenarc', 
+        'findbugs',
+        'findbugsPlugins',
+        'jacocoAgent',
+        'jacocoAnt',
+        'jdepend',
+        'pmd',
+    ]
+
+    def RECOGNISED_PLUGINS = [
+            'antlr', 
+            'application',
+            'base',
+            'checkstyle',
+            'com.android.application',
+            'com.android.library',
+            'com.github.lkishalmi.gatling',
+            'distribution',
+            'ear',
+            'findbugs',
+            'groovy',
+            'groovy-base',
+            'io.micronaut.application',
+            'ivy-publish',
+            'jacoco',
+            'java',
+            'java-base',
+            'java-library-distribution',
+            'java-platform',
+            'maven',
+            'maven-publish',
+            'org.jetbrains.kotlin.js',
+            'org.jetbrains.kotlin.jvm',
+            'org.jetbrains.kotlin.android',
+            'org.springframework.boot',
+            'osgi', 
+            'play',
+            'pmd',
+            'scala',
+            'scala-base',
+            'war',
+    ]
+    
     final Project project;
     final VersionNumber gradleVersion;
 
@@ -147,18 +191,7 @@ class NbProjectInfoBuilder {
     private void detectPlugins(NbProjectInfoModel model) {
         long time = System.currentTimeMillis()
         Set<String> plugins = new HashSet<>();
-        for (String plugin: ['base', 'java-base', 'java', 'war', \
-            'scala-base', 'scala', 'groovy-base', 'groovy',\
-            'distribution', 'application', 'maven', 'osgi', \
-            'jacoco', 'checkstyle', 'pmd', 'findbugs', 'ear', \
-            'play', 'java-library-distribution', 'maven-publish',
-            'ivy-publish', 'antlr', \
-            'org.springframework.boot', \
-            'com.github.lkishalmi.gatling', \
-            'com.android.library', 'com.android.application',
-            'org.jetbrains.kotlin.android', 'org.jetbrains.kotlin.js',
-            'org.jetbrains.kotlin.jvm',
-            'io.micronaut.application']) {
+        for (String plugin: RECOGNISED_PLUGINS) {
             if (project.plugins.hasPlugin(plugin)) {
                 plugins.add(plugin);
             }
@@ -341,10 +374,18 @@ class NbProjectInfoBuilder {
         }
         //visibleConfigurations = visibleConfigurations.findAll() { resolvable(it) }
         visibleConfigurations.each() {
-            def componentIds = []
+            def componentIds = new HashSet()
             def unresolvedIds = []
             def projectNames = []
             long time_inspect_conf = System.currentTimeMillis()
+            
+            it.dependencies.withType(ModuleDependency) {
+                def group = it.group != null ? it.group : '';
+                def name = it.name
+                def version = it.version != null ? ':' + it.version : ''
+                def id = group + ':' + name + version;
+                componentIds.add(id)                
+            }
             if (resolvable(it)) {
                 try {
                     it.incoming.resolutionResult.allDependencies.each {
@@ -355,14 +396,21 @@ class NbProjectInfoBuilder {
                         }
                         if (it instanceof UnresolvedDependencyResult) {
                             def id = it.requested.displayName
-                            unresolvedIds.add(id)
-                            unresolvedProblems.put(id, it.failure.message)
+                            if (componentIds.contains(id)) {
+                                unresolvedIds.add(id)
+                            }
+                            if (!project.plugins.hasPlugin('java-platform')) {
+                                unresolvedProblems.put(id, it.failure.message)
+                            }
                         }
                     }
                 } catch (ResolveException ex) {
                     model.noteProblem(ex)
                 }
                 ids.addAll(componentIds)
+            } else {
+                unresolvedIds.addAll(componentIds)
+                componentIds.clear()
             }
             long time_project_deps = System.currentTimeMillis()
             model.ext.perf["dependency_inspect_${it.name}_module"] = time_project_deps - time_inspect_conf
@@ -482,10 +530,12 @@ class NbProjectInfoBuilder {
     }
 
     private void collectModuleDependencies(final NbProjectInfoModel model, String confiurationName, boolean includeRoot, final Set deps) {
-        if (includeRoot && !model.info["configuration_${confiurationName}_non_resolving"]) {
+        if (includeRoot) {
             deps.addAll(model.info["configuration_${confiurationName}_components"])
-            deps.addAll(model.info["configuration_${confiurationName}_unresolved"])
             deps.addAll(model.info["configuration_${confiurationName}_files"])
+            if (!model.info["configuration_${confiurationName}_non_resolving"]) {
+                deps.addAll(model.info["configuration_${confiurationName}_unresolved"])                
+            }
         }
         model.info["configuration_${confiurationName}_extendsFrom"].each {
             collectModuleDependencies(model, it, true, deps)
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectErrorNotifications.java b/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectErrorNotifications.java
index d284d43..c00bec84 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectErrorNotifications.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectErrorNotifications.java
@@ -62,7 +62,7 @@ public class GradleProjectErrorNotifications {
         sb.append("<ul>");                                   //NOI18N
         for (Object element : elements) {
             sb.append("<li>");                               //NOI18N
-            String[] lines = element.toString().split("\n"); //NOI18N
+            String[] lines = String.valueOf(element).split("\n"); //NOI18N
             for (int i = 0; i < lines.length; i++) {
                 String line = lines[i];
                 sb.append(lineWrap(line, 78));
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 bbc6141..2167860 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
@@ -36,6 +36,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.netbeans.modules.gradle.GradleModuleFileCache21;
 import org.netbeans.modules.gradle.spi.GradleSettings;
 import org.openide.util.lookup.ServiceProvider;
@@ -49,6 +51,7 @@ import org.openide.util.lookup.ServiceProvider;
 class GradleBaseProjectBuilder implements ProjectInfoExtractor.Result {
 
     final static Map<String, List<String>> DEPENDENCY_TO_PLUGIN = new LinkedHashMap<>();
+    final static Logger LOG = Logger.getLogger(GradleBaseProjectBuilder.class.getName());
 
     static {
         addDependencyPlugin("javax:javaee-api:.*", "ejb", "jpa");
@@ -73,6 +76,11 @@ class GradleBaseProjectBuilder implements ProjectInfoExtractor.Result {
     }
 
     void build() {
+        if (LOG.isLoggable(Level.FINE)) {
+            for (Map.Entry<String, Object> entry : info.entrySet()) {
+                LOG.log(Level.FINE, entry.getKey() + " = " + String.valueOf(entry.getValue()));
+            }
+        }
         processBasicInfo();
         processTasks();
         processDependencies();
@@ -217,7 +225,11 @@ class GradleBaseProjectBuilder implements ProjectInfoExtractor.Result {
                 Set<String> unresolvedComp = (Set<String>) info.get("configuration_" + name + "_unresolved");
                 if (unresolvedComp != null) {
                     for (String u : unresolvedComp) {
-                        conf.unresolved.add(unresolved.get(u));
+                        UnresolvedDependency dep = unresolved.get(u);
+                        if (dep == null) {
+                            dep = new UnresolvedDependency(u);
+                        }
+                        conf.unresolved.add(dep);
                     }
                 }
                 Set<File> files = (Set<File>) info.get("configuration_" + name + "_files");
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
index 4e3b137..96634bd 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
@@ -120,7 +120,10 @@ public final class GradleConfiguration implements Serializable, ModuleSearchSupp
     }
 
     public boolean isEmpty() {
-        return !canBeResolved || ((files == null || files.files.isEmpty()) && modules.isEmpty() && unresolved.isEmpty() && projects.isEmpty());
+        return ((files == null || files.files.isEmpty()) 
+                && modules.isEmpty() 
+                && unresolved.isEmpty() 
+                && projects.isEmpty());
     }
 
     @Override
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java b/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
index a68feb0..ed5218f 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
@@ -37,7 +37,6 @@ import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 import java.util.prefs.PreferenceChangeEvent;
 import java.util.prefs.PreferenceChangeListener;
@@ -48,6 +47,7 @@ import javax.swing.event.ChangeListener;
 import org.netbeans.api.annotations.common.StaticResource;
 import org.netbeans.api.project.Project;
 import org.netbeans.api.project.ProjectManager;
+import org.netbeans.modules.gradle.api.GradleBaseProject;
 import org.netbeans.modules.gradle.api.NbGradleProject.Quality;
 import org.netbeans.spi.project.ui.LogicalViewProvider;
 import org.openide.awt.HtmlBrowser;
@@ -94,7 +94,7 @@ public class ConfigurationsNode extends AbstractNode {
     })
     @SuppressWarnings("OverridableMethodCallInConstructor")
     public ConfigurationsNode(NbGradleProjectImpl project) {
-        super(Children.create(new ConfigurationsChildren(project), true), Lookups.singleton(project));
+        super(Children.create(new ConfigurationsChildren(project), false), Lookups.singleton(project));
         this.project = project;
         setName("configurations"); //NOI18N
         setDisplayName(Bundle.LBL_ConfigurationsNode());
@@ -108,7 +108,7 @@ public class ConfigurationsNode extends AbstractNode {
     public Image getIcon(int type) {
         GradleProject gp = project.getGradleProject();
         Image ret = ImageUtilities.loadImage(LIBRARIES_ICON);
-        if (gp.getQuality().worseThan(Quality.FULL) || !gp.getBaseProject().isResolved()) {
+        if (gp.getQuality().worseThan(Quality.FULL) || needsResolve()) {
             Image warn = ImageUtilities.loadImage(WARNING_BADGE);
             ret = ImageUtilities.mergeImages(ret, warn, 8, 0);
         }
@@ -134,8 +134,12 @@ public class ConfigurationsNode extends AbstractNode {
     })
     @Override
     public String getShortDescription() {
-        GradleProject gp = project.getGradleProject();
-        return gp.getBaseProject().isResolved() ? Bundle.HINT_ConfigurationsNode() : Bundle.HINT_ConfigurationsNodeUnresolved();
+        return !needsResolve() ? Bundle.HINT_ConfigurationsNode() : Bundle.HINT_ConfigurationsNodeUnresolved();
+    }
+
+    private boolean needsResolve() {
+        GradleBaseProject gbp = GradleBaseProject.get(project);
+        return !gbp.isResolved() && !gbp.hasPlugins("java-platform"); //NOI18N
     }
 
     private static class ConfigurationsChildren extends ChildFactory.Detachable<GradleConfiguration> implements PreferenceChangeListener, PropertyChangeListener {
@@ -148,7 +152,7 @@ public class ConfigurationsNode extends AbstractNode {
 
         @Override
         protected Node createNodeForKey(GradleConfiguration conf) {
-            Children ch = conf.isEmpty() ? Children.LEAF : Children.create(new ConfigurationChildren(project, conf.getName()), true);
+            Children ch = conf.isEmpty() ? Children.LEAF : Children.create(new ConfigurationChildren(project, conf.getName()), false);
             AbstractNode ret = new AbstractNode(ch);
             ret.setName(conf.getName());
             ret.setShortDescription(conf.getDescription());
@@ -220,6 +224,7 @@ public class ConfigurationsNode extends AbstractNode {
 
         @NbBundle.Messages({
             "LBL_LocalDependenciesNode=Local Files",
+            "HINT_NotResolvableConfiguration=This dependency is not resolved here as its configuration can't be resolved.",
         })
         @Override
         protected Node[] createNodesForKey(GradleDependency key) {
@@ -272,11 +277,15 @@ public class ConfigurationsNode extends AbstractNode {
                     break;
                 }
                 case UNRESOLVED: {
+                    GradleConfiguration conf = GradleBaseProject.get(project).getConfigurations().get(configuration);
                     GradleDependency.UnresolvedDependency dep = (GradleDependency.UnresolvedDependency) key;
 
                     AbstractNode node = new AbstractNode(Children.LEAF);
                     node.setName(dep.getId());
                     node.setIconBaseWithExtension(UNRESOLVED_ICON);
+                    if (!conf.isCanBeResolved()) {
+                        node.setShortDescription(Bundle.HINT_NotResolvableConfiguration());
+                    }
                     ret.add(node);
                     break;
                 }
@@ -287,9 +296,8 @@ public class ConfigurationsNode extends AbstractNode {
 
         @Override
         protected boolean createKeys(List<GradleDependency> list) {
-            GradleProject gp = project.getGradleProject();
             ArrayList<GradleDependency> ret = new ArrayList<>();
-            GradleConfiguration conf = gp.getBaseProject().getConfigurations().get(configuration);
+            GradleConfiguration conf = GradleBaseProject.get(project).getConfigurations().get(configuration);
             // We can get null here in some extreme cases, e.g. when the project is being deleted
             if (conf != null) {
                 ret.addAll(conf.getUnresolved());
@@ -313,7 +321,6 @@ public class ConfigurationsNode extends AbstractNode {
         @Override
         protected void addNotify() {
             NbGradleProject.addPropertyChangeListener(project, this);
-
         }
 
         @Override
@@ -419,12 +426,7 @@ public class ConfigurationsNode extends AbstractNode {
                     ret.add(fo);
                 }
             }
-            ret.sort(new Comparator<FileObject>() {
-                @Override
-                public int compare(FileObject o1, FileObject o2) {
-                    return o1.getNameExt().compareTo(o2.getNameExt());
-                }
-            });
+            ret.sort((FileObject o1, FileObject o2) -> o1.getNameExt().compareTo(o2.getNameExt()));
             keys.addAll(ret);
             return true;
         }
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/JavaSEProjectIconProvider.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/JavaSEProjectIconProvider.java
index 4a16ef6..054e54e 100644
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/JavaSEProjectIconProvider.java
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/JavaSEProjectIconProvider.java
@@ -44,6 +44,9 @@ public class JavaSEProjectIconProvider implements ProjectIconProvider {
     @StaticResource
     private static final String APPLICATION_BADGE = "org/netbeans/modules/gradle/java/resources/application-badge.png"; //NOI18
 
+    @StaticResource
+    private static final String LIBRARIES_BADGE = "org/netbeans/modules/gradle/java/resources/libraries-badge.png"; //NOI18
+
     final Project project;
 
     public JavaSEProjectIconProvider(Project project) {
@@ -61,6 +64,11 @@ public class JavaSEProjectIconProvider implements ProjectIconProvider {
                ret = ImageUtilities.mergeImages(ret, badge, 8, 8);
             }
         }
+        if (plugins.contains("java-platform")) {    //NOI18N
+            ret = ImageUtilities.loadImage(GRADLE_JAVASE_ICON);
+            Image badge = ImageUtilities.loadImage(LIBRARIES_BADGE);
+            ret = ImageUtilities.mergeImages(ret, badge, 8, 8);                
+        }
         return  ret;
     }
 

---------------------------------------------------------------------
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