diff --git a/src/org/netbeans/gradle/project/CollectionUtils.java b/src/org/netbeans/gradle/project/CollectionUtils.java index f10d3b32..d636d84a 100644 --- a/src/org/netbeans/gradle/project/CollectionUtils.java +++ b/src/org/netbeans/gradle/project/CollectionUtils.java @@ -1,11 +1,12 @@ package org.netbeans.gradle.project; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; public final class CollectionUtils { - public static List copyNullSafeList(List list) { + public static List copyNullSafeList(Collection list) { if (list == null) throw new NullPointerException("list"); List result = Collections.unmodifiableList(new ArrayList(list)); diff --git a/src/org/netbeans/gradle/project/model/GradleModelLoader.java b/src/org/netbeans/gradle/project/model/GradleModelLoader.java index 1c75b8fe..7ca94c18 100644 --- a/src/org/netbeans/gradle/project/model/GradleModelLoader.java +++ b/src/org/netbeans/gradle/project/model/GradleModelLoader.java @@ -144,6 +144,7 @@ public static NbGradleModel createEmptyModel(FileObject projectDir) throws IOExc NbGradleModule mainModule = new NbGradleModule(properties, Collections.emptyMap(), + Collections.emptyList(), Collections.emptyMap(), Collections.emptyList()); @@ -314,6 +315,25 @@ private static List getChildModules(IdeaModule mainModule) { return result; } + private static List lookupListedDirs(Map sources) { + List result = new LinkedList(); + + NbSourceGroup sourceGroups = sources.get(NbSourceType.SOURCE); + if (sourceGroups != null) { + for (File sourceRoot: sourceGroups.getPaths()) { + File parent = sourceRoot.getParentFile(); + if (parent != null) { + File webapp = new File(parent, "webapp"); + if (webapp.isDirectory()) { + result.add(webapp); + } + } + } + } + + return result; + } + private static NbGradleModule tryParseModule(IdeaModule module, Map parsedModules) { String uniqueName = module.getGradleProject().getPath(); @@ -364,7 +384,8 @@ private static NbGradleModule tryParseModule(IdeaModule module, createDefaultOutput(moduleDir), taskNames); - NbGradleModule result = new NbGradleModule(properties, sources, dependencies, children); + List listedDirs = lookupListedDirs(sources); + NbGradleModule result = new NbGradleModule(properties, sources, listedDirs, dependencies, children); parsedModules.put(uniqueName, result); return result; } diff --git a/src/org/netbeans/gradle/project/model/NbGradleModule.java b/src/org/netbeans/gradle/project/model/NbGradleModule.java index 5f86c9b6..58ef4070 100644 --- a/src/org/netbeans/gradle/project/model/NbGradleModule.java +++ b/src/org/netbeans/gradle/project/model/NbGradleModule.java @@ -9,31 +9,32 @@ import java.util.EnumMap; import java.util.List; import java.util.Map; +import org.netbeans.gradle.project.CollectionUtils; public final class NbGradleModule { private final Properties properties; private final Map sources; private final Map dependencies; private final List children; + private final List listedDirs; public NbGradleModule( Properties properties, Map sources, + List listedDirs, Map dependencies, Collection children) { if (properties == null) throw new NullPointerException("properties"); if (dependencies == null) throw new NullPointerException("dependencies"); + if (listedDirs == null) throw new NullPointerException("listedDirs"); if (children == null) throw new NullPointerException("children"); this.properties = properties; this.sources = asImmutable(NbSourceType.class, sources); + this.listedDirs = CollectionUtils.copyNullSafeList(listedDirs); this.dependencies = asImmutable(NbDependencyType.class, dependencies); - this.children = Collections.unmodifiableList(new ArrayList(children)); - - for (NbGradleModule child: this.children) { - if (child == null) throw new NullPointerException("child"); - } + this.children = CollectionUtils.copyNullSafeList(children); } private static , V> Map asImmutable( @@ -80,6 +81,10 @@ public Map getSources() { return sources; } + public List getListedDirs() { + return listedDirs; + } + public NbDependencyGroup getDependencies(NbDependencyType dependencyType) { NbDependencyGroup result = dependencies.get(dependencyType); return result != null ? result : NbDependencyGroup.EMPTY; diff --git a/src/org/netbeans/gradle/project/view/GradleProjectChildFactory.java b/src/org/netbeans/gradle/project/view/GradleProjectChildFactory.java index 7db2c38a..2a800ec3 100644 --- a/src/org/netbeans/gradle/project/view/GradleProjectChildFactory.java +++ b/src/org/netbeans/gradle/project/view/GradleProjectChildFactory.java @@ -1,6 +1,7 @@ package org.netbeans.gradle.project.view; import java.awt.Image; +import java.io.File; import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Logger; @@ -18,6 +19,7 @@ import org.netbeans.gradle.project.model.NbGradleModule; import org.netbeans.spi.java.project.support.ui.PackageView; import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; import org.openide.loaders.DataFolder; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; @@ -212,8 +214,24 @@ private void addSources(List toPopulate) { addSourceGroups(sources.getSourceGroups(GradleProjectConstants.TEST_RESOURCES), toPopulate); } + private void addListedDirs(List toPopulate) { + for (File listedDir: project.getCurrentModel().getMainModule().getListedDirs()) { + FileObject listedDirObj = FileUtil.toFileObject(listedDir); + if (listedDirObj != null) { + final DataFolder listedFolder = DataFolder.findFolder(listedDirObj); + toPopulate.add(new SingleNodeFactory() { + @Override + public Node createNode() { + return listedFolder.getNodeDelegate().cloneNode(); + } + }); + } + } + } + private void readKeys(List toPopulate) throws DataObjectNotFoundException { addSources(toPopulate); + addListedDirs(toPopulate); addChildren(toPopulate);