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 81af35ca15 Add property sheet for Gradle Configuration nodes 81af35ca15 is described below commit 81af35ca1534a04554019de8336a14d628a1eb50 Author: Laszlo Kishalmi <laszlo.kisha...@gmail.com> AuthorDate: Thu Jun 2 21:42:38 2022 +0200 Add property sheet for Gradle Configuration nodes --- extide/gradle/nbproject/project.xml | 2 +- .../gradle/tooling/NbProjectInfoBuilder.java | 11 +++ .../gradle/api/GradleBaseProjectBuilder.java | 5 + .../modules/gradle/api/GradleConfiguration.java | 26 ++++++ .../modules/gradle/cache/ProjectInfoDiskCache.java | 2 +- .../modules/gradle/nodes/ConfigurationsNode.java | 104 +++++++++++++++------ 6 files changed, 121 insertions(+), 29 deletions(-) diff --git a/extide/gradle/nbproject/project.xml b/extide/gradle/nbproject/project.xml index 65840173c7..024a39262f 100644 --- a/extide/gradle/nbproject/project.xml +++ b/extide/gradle/nbproject/project.xml @@ -314,7 +314,7 @@ <build-prerequisite/> <compile-dependency/> <run-dependency> - <specification-version>7.38.1</specification-version> + <specification-version>7.62</specification-version> </run-dependency> </dependency> <dependency> 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 bc3c26203f..ff6c30571d 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 @@ -28,6 +28,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -53,6 +54,8 @@ import org.gradle.api.artifacts.result.ComponentArtifactsResult; import org.gradle.api.artifacts.result.ResolvedArtifactResult; import org.gradle.api.artifacts.result.ResolvedDependencyResult; import org.gradle.api.artifacts.result.UnresolvedDependencyResult; +import org.gradle.api.attributes.Attribute; +import org.gradle.api.attributes.AttributeContainer; import org.gradle.api.distribution.DistributionContainer; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.initialization.IncludedBuild; @@ -417,8 +420,16 @@ class NbProjectInfoBuilder { String propBase = "configuration_" + it.getName() + "_"; model.getInfo().put(propBase + "non_resolving", !resolvable(it)); model.getInfo().put(propBase + "transitive", it.isTransitive()); + model.getInfo().put(propBase + "canBeConsumed", it.isCanBeConsumed()); model.getInfo().put(propBase + "extendsFrom", it.getExtendsFrom().stream().map(c -> c.getName()).collect(Collectors.toCollection(HashSet::new))); model.getInfo().put(propBase + "description", it.getDescription()); + + Map<String, String> attributes = new LinkedHashMap<>(); + AttributeContainer attrs = it.getAttributes(); + for (Attribute<?> attr : attrs.keySet()) { + attributes.put(attr.getName(), String.valueOf(attrs.getAttribute(attr))); + } + model.getInfo().put(propBase + "attributes", attributes); }); //visibleConfigurations = visibleConfigurations.findAll() { resolvable(it) } visibleConfigurations.forEach(it -> { 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 dc5586c114..5aefbc9e75 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java @@ -284,6 +284,11 @@ class GradleBaseProjectBuilder implements ProjectInfoExtractor.Result { Boolean transitive = (Boolean) info.get("configuration_" + name + "_transitive"); conf.transitive = transitive == null ? true : transitive; + Boolean canBeConsumed = (Boolean) info.get("configuration_" + name + "_canBeConsumed"); + conf.canBeConsumed = canBeConsumed == null ? false : canBeConsumed; + + conf.attributes = (Map<String, String>) info.get("configuration_" + name + "_attributes"); + conf.description = (String) info.get("configuration_" + name + "_description"); } for (String name : configurationNames) { 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 96634bd37c..cf619ec942 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java @@ -22,6 +22,7 @@ package org.netbeans.modules.gradle.api; import java.io.Serializable; import java.util.Collections; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.netbeans.modules.gradle.GradleModuleFileCache21; @@ -41,6 +42,8 @@ public final class GradleConfiguration implements Serializable, ModuleSearchSupp GradleDependency.FileCollectionDependency files; boolean transitive; boolean canBeResolved = true; + boolean canBeConsumed; + Map<String, String> attributes; GradleConfiguration(String name) { this.name = name; @@ -119,6 +122,29 @@ public final class GradleConfiguration implements Serializable, ModuleSearchSupp return canBeResolved; } + /** + * Returns {@code true} if this configuration is to be consumed. + * + * @return {@code true} if this configuration is consumable. + * @since 2.24 + */ + public boolean isCanBeConsumed() { + return canBeConsumed; + } + + /** + * Returns the attributes of this configuration. The returned map is a + * simplified version of the Gradle configuration + * {@link https://docs.gradle.org/current/javadoc/org/gradle/api/attributes/AttributeContainer.html AttributeContainer}, + * where the attribute names are the keys and the attribute string values are the values. + * + * @return the attributes of this configuration + * @since 2.24 + */ + public Map<String, String> getAttributes() { + return attributes != null ? attributes : Collections.emptyMap(); + } + public boolean isEmpty() { return ((files == null || files.files.isEmpty()) && modules.isEmpty() diff --git a/extide/gradle/src/org/netbeans/modules/gradle/cache/ProjectInfoDiskCache.java b/extide/gradle/src/org/netbeans/modules/gradle/cache/ProjectInfoDiskCache.java index 3560708c27..74757cdb6f 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/cache/ProjectInfoDiskCache.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/cache/ProjectInfoDiskCache.java @@ -45,7 +45,7 @@ import org.netbeans.modules.gradle.spi.GradleFiles; public final class ProjectInfoDiskCache extends AbstractDiskCache<GradleFiles, QualifiedProjectInfo> { // Increase this number if new info is gathered from the projects. - private static final int COMPATIBLE_CACHE_VERSION = 21; + private static final int COMPATIBLE_CACHE_VERSION = 22; private static final String INFO_CACHE_FILE_NAME = "project-info.ser"; //NOI18N private static final Map<GradleFiles, ProjectInfoDiskCache> DISK_CACHES = Collections.synchronizedMap(new WeakHashMap<>()); 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 ed5218ff28..348883f441 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java @@ -16,7 +16,6 @@ * specific language governing permissions and limitations * under the License. */ - package org.netbeans.modules.gradle.nodes; import org.netbeans.modules.gradle.ActionProviderImpl; @@ -38,6 +37,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.prefs.PreferenceChangeEvent; import java.util.prefs.PreferenceChangeListener; import javax.swing.AbstractAction; @@ -50,6 +50,7 @@ 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.actions.PropertiesAction; import org.openide.awt.HtmlBrowser; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; @@ -60,8 +61,12 @@ import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; +import org.openide.nodes.PropertySupport; +import org.openide.nodes.Sheet; import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; +import org.openide.util.NbBundle.Messages; +import org.openide.util.actions.SystemAction; import org.openide.util.lookup.Lookups; /** @@ -122,7 +127,7 @@ public class ConfigurationsNode extends AbstractNode { @Override public Action[] getActions(boolean context) { - return new Action[] { + return new Action[]{ downloadSourcesAction, downloadJavadocAction }; @@ -152,24 +157,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()), false); - AbstractNode ret = new AbstractNode(ch); - ret.setName(conf.getName()); - ret.setShortDescription(conf.getDescription()); - StringBuilder displayName = new StringBuilder(conf.getName()); - if (!conf.getExtendsFrom().isEmpty()) { - displayName.append(" ["); - String separator = ""; - for (GradleConfiguration ext : conf.getExtendsFrom()) { - displayName.append(separator); - displayName.append(ext.getName()); - separator = ", "; - } - displayName.append(']'); - } - ret.setDisplayName(displayName.toString()); - ret.setIconBaseWithExtension(LIBRARIES_ICON); - return ret; + return new ConfigurationNode(project, conf); } @Override @@ -208,24 +196,23 @@ public class ConfigurationsNode extends AbstractNode { @Override public void propertyChange(PropertyChangeEvent evt) { refresh(false); - } + } } private static class ConfigurationChildren extends ChildFactory.Detachable<GradleDependency> implements PropertyChangeListener { - private final NbGradleProjectImpl project; + private final Project project; private final String configuration; - public ConfigurationChildren(NbGradleProjectImpl project, String configuration) { + public ConfigurationChildren(Project project, String configuration) { this.project = project; this.configuration = configuration; } @NbBundle.Messages({ "LBL_LocalDependenciesNode=Local Files", - "HINT_NotResolvableConfiguration=This dependency is not resolved here as its configuration can't be resolved.", - }) + "HINT_NotResolvableConfiguration=This dependency is not resolved here as its configuration can't be resolved.",}) @Override protected Node[] createNodesForKey(GradleDependency key) { ArrayList<Node> ret = new ArrayList<>(1); @@ -332,11 +319,11 @@ public class ConfigurationsNode extends AbstractNode { private static class ModuleFilterNode extends FilterNode implements ChangeListener { - private final NbGradleProjectImpl project; + private final Project project; private final GradleDependency.ModuleDependency module; private final DataObject mainJar; - public ModuleFilterNode(NbGradleProjectImpl project, GradleDependency.ModuleDependency module, DataObject mainJar) { + public ModuleFilterNode(Project project, GradleDependency.ModuleDependency module, DataObject mainJar) { super(mainJar.getNodeDelegate().cloneNode()); this.project = project; this.module = module; @@ -442,7 +429,59 @@ public class ConfigurationsNode extends AbstractNode { return null; } + } + private static class ConfigurationNode extends AbstractNode { + + public ConfigurationNode(Project project, GradleConfiguration conf) { + super(conf.isEmpty() ? Children.LEAF : Children.create(new ConfigurationChildren(project, conf.getName()), false), Lookups.fixed(project, conf)); + setName(conf.getName()); + setShortDescription(conf.getDescription()); + StringBuilder displayName = new StringBuilder(conf.getName()); + if (!conf.getExtendsFrom().isEmpty()) { + displayName.append(" [").append(extendsFrom(conf)).append(']'); + } + setDisplayName(displayName.toString()); + setIconBaseWithExtension(LIBRARIES_ICON); + } + + @Override + @Messages({ + "LBL_name=Name", + "LBL_canBeConsumed=Can be Consumed", + "LBL_canBeResolved=Can be Resolved", + "LBL_extendsFrom=Extends From", + "LBL_transitive=Transitive", + "LBL_attributes=Attributes", + }) + protected final Sheet createSheet() { + Sheet sheet = Sheet.createDefault(); + Sheet.Set set = Sheet.createPropertiesSet(); + GradleConfiguration conf = getLookup().lookup(GradleConfiguration.class); + + set.put(PropertySupport.readOnly("name", String.class, conf::getName).withDisplayName(Bundle.LBL_name())); //NOI18N + set.put(PropertySupport.readOnly("canBeConsumed", Boolean.class, conf::isCanBeConsumed).withDisplayName(Bundle.LBL_canBeConsumed())); //NOI18N + set.put(PropertySupport.readOnly("canBeResolved", Boolean.class, conf::isCanBeResolved).withDisplayName(Bundle.LBL_canBeResolved())); //NOI18N + set.put(PropertySupport.readOnly("extendsFrom", String.class, () -> extendsFrom(conf)).withDisplayName(Bundle.LBL_extendsFrom())); //NOI18N + set.put(PropertySupport.readOnly("transitive", Boolean.class, conf::isTransitive).withDisplayName(Bundle.LBL_transitive())); //NOI18N + sheet.put(set); + + Sheet.Set attrs = new Sheet.Set(); + attrs.setName("attributes"); //NOI18N + attrs.setDisplayName(Bundle.LBL_attributes()); + for (Map.Entry<String, String> entry : conf.getAttributes().entrySet()) { + attrs.put(PropertySupport.readOnly(entry.getKey(), String.class, entry::getValue)); + } + sheet.put(attrs); + return sheet; + } + + @Override + public Action[] getActions(boolean context) { + return new Action[] { + SystemAction.get(PropertiesAction.class), + }; + } } private static class LocalFileFilterNode extends FilterNode { @@ -523,4 +562,15 @@ public class ConfigurationsNode extends AbstractNode { } } + + private static String extendsFrom(GradleConfiguration conf) { + StringBuilder ret = new StringBuilder(); + String separator = ""; + for (GradleConfiguration ext : conf.getExtendsFrom()) { + ret.append(separator); + ret.append(ext.getName()); + separator = ", "; + } + return ret.toString(); + } } --------------------------------------------------------------------- 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