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 <laszlo.kisha...@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-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists