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