Merge pull request #3575 from mbien/nb-javac-libname-fix_delivery

fixed wrong nb-javac module name so that it can be installed.
diff --git a/extide/gradle/src/org/netbeans/modules/gradle/nodes/SubProjectsNode.java b/extide/gradle/src/org/netbeans/modules/gradle/nodes/SubProjectsNode.java
index 662284b..54b0fe0 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/nodes/SubProjectsNode.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/nodes/SubProjectsNode.java
@@ -26,8 +26,8 @@
 import java.awt.event.ActionEvent;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -48,6 +48,8 @@
 
 import static org.netbeans.modules.gradle.nodes.Bundle.*;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.netbeans.api.project.ProjectUtils;
 import org.netbeans.modules.gradle.api.GradleBaseProject;
 import org.netbeans.modules.gradle.spi.Utils;
@@ -59,6 +61,8 @@
  */
 public class SubProjectsNode extends AbstractNode {
 
+    private static final Logger LOG = Logger.getLogger(SubProjectsNode.class.getName());
+    
     @StaticResource
     private static final String SP_BADGE
             = "org/netbeans/modules/gradle/resources/gradle-large-badge.png";
@@ -122,13 +126,21 @@
         protected boolean createKeys(final List<Project> projects) {
 
             Set<Project> containedProjects = ProjectUtils.getContainedProjects(project, false);
-            projects.addAll(containedProjects);
+            if (containedProjects != null) {
+                projects.addAll(containedProjects);
+            } else {
+                LOG.log(Level.FINE, "No ProjectContainerProvider in the lookup of: {0}", project);
+            }
             return true;
         }
 
         @Override
         protected Node createNodeForKey(Project key) {
             Set<Project> containedProjects = ProjectUtils.getContainedProjects(key, false);
+            if (containedProjects == null) {
+                containedProjects = Collections.emptySet();
+                LOG.log(Level.FINE, "No ProjectContainerProvider in the lookup of: {0}", project);                
+            }
             GradleBaseProject gbp = GradleBaseProject.get(project);
             String prefix = (gbp != null && !gbp.isRoot() ? gbp.getPath() : "") + ':';
             Children ch = containedProjects.isEmpty() ? Children.LEAF : Children.create(new SubProjectsChildFactory(key), true);
@@ -182,9 +194,7 @@
 
         @Override
         public Action[] getActions(boolean b) {
-            ArrayList<Action> lst = new ArrayList<Action>();
-            lst.add(OpenProjectAction.SINGLETON);
-            return lst.toArray(new Action[lst.size()]);
+            return new Action[]{OpenProjectAction.SINGLETON};
         }
 
         @Override
diff --git a/ide/csl.api/src/org/netbeans/modules/csl/navigation/ElementNode.java b/ide/csl.api/src/org/netbeans/modules/csl/navigation/ElementNode.java
index 077d3f6..0649d3b 100644
--- a/ide/csl.api/src/org/netbeans/modules/csl/navigation/ElementNode.java
+++ b/ide/csl.api/src/org/netbeans/modules/csl/navigation/ElementNode.java
@@ -29,6 +29,7 @@
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import javax.swing.Action;
 import javax.swing.Icon;
@@ -242,7 +243,15 @@
             Node[] children = ch.getNodes();
             for (int i = 0; i < children.length; i++) {
                 ElementNode c = (ElementNode) children[i];
-                if (this.getFileObject() != c.getDescription().getElementHandle().getFileObject()) {
+                // The promise of the API is broken at several places in the
+                // codebase and thus this needs to be guarded. The assert is in
+                // place to find the violating places.
+                assert c.getDescription().getElementHandle() != null;
+                @SuppressWarnings("null")
+                FileObject childFileObject = c.getDescription().getElementHandle() != null
+                        ? c.getDescription().getElementHandle().getFileObject()
+                        : null;
+                if (! Objects.equals(this.getFileObject(), childFileObject)) {
                     // e.g. inherited items may be in another file
                     // in such a case, incorrect item is highlighted on the navigator window if the FileObjects are not checked
                     continue;
diff --git a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/TopLevelStructureItem.java b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/TopLevelStructureItem.java
index 4452e15..4897b90 100644
--- a/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/TopLevelStructureItem.java
+++ b/ide/css.editor/src/org/netbeans/modules/css/editor/module/main/TopLevelStructureItem.java
@@ -24,13 +24,18 @@
 import java.util.List;
 import java.util.Set;
 import javax.swing.ImageIcon;
+import org.netbeans.lib.editor.util.StringEscapeUtils;
 import org.netbeans.modules.csl.api.ElementHandle;
 import org.netbeans.modules.csl.api.ElementKind;
 import org.netbeans.modules.csl.api.HtmlFormatter;
 import org.netbeans.modules.csl.api.Modifier;
+import org.netbeans.modules.csl.api.OffsetRange;
 import org.netbeans.modules.csl.api.StructureItem;
+import org.netbeans.modules.csl.spi.ParserResult;
+import org.netbeans.modules.css.editor.csl.CssLanguage;
 import org.netbeans.modules.css.editor.module.spi.FeatureContext;
 import org.netbeans.modules.parsing.api.Snapshot;
+import org.openide.filesystems.FileObject;
 import org.openide.util.NbBundle;
 
 /**
@@ -39,29 +44,40 @@
  */
 public abstract class TopLevelStructureItem implements StructureItem {
 
+    private final ElementHandle elementHandle;
+
+    public TopLevelStructureItem(String name, FileObject fileObject) {
+        this.elementHandle = new TopElementHandle(fileObject, name);
+    }
+
+    @Override
+    public String getName() {
+        return elementHandle.getName();
+    }
+
     @Override
     public String getSortText() {
-        return getName();
+        return this.elementHandle.getName();
     }
 
     @Override
     public String getHtml(HtmlFormatter formatter) {
-        return getName();
+        return StringEscapeUtils.escapeHtml(this.elementHandle.getName());
     }
 
     @Override
     public ElementHandle getElementHandle() {
-        return null;
+        return elementHandle;
     }
 
     @Override
     public ElementKind getKind() {
-        return ElementKind.PACKAGE; //xxx fix - add mode categories to csl
+        return elementHandle.getKind();
     }
 
     @Override
     public Set<Modifier> getModifiers() {
-        return Collections.emptySet();
+        return elementHandle.getModifiers();
     }
 
     @Override
@@ -102,9 +118,10 @@
 
     public abstract static class ChildrenSetStructureItem extends TopLevelStructureItem {
 
-        private Collection<StructureItem> items;
+        private final Collection<StructureItem> items;
 
-        public ChildrenSetStructureItem(Collection<StructureItem> items) {
+        public ChildrenSetStructureItem(String name, FileObject fileObject, Collection<StructureItem> items) {
+            super(name, fileObject);
             this.items = items;
         }
 
@@ -116,15 +133,17 @@
 
     public abstract static class ChildrenListStructureItem extends TopLevelStructureItem {
 
-        private List<StructureItem> items;
+        private final List<StructureItem> items;
 
-        public ChildrenListStructureItem(List<StructureItem> items) {
+        public ChildrenListStructureItem(String name, FileObject fileObject, List<StructureItem> items) {
+            super(name, fileObject);
             this.items = items;
         }
 
         @Override
+        @SuppressWarnings("ReturnOfCollectionOrArrayField")
         public List<? extends StructureItem> getNestedItems() {
-            return items;
+            return new ArrayList<>(items);
         }
     }
 
@@ -133,15 +152,12 @@
         private final Snapshot snapshot;
 
         public Rules(List<StructureItem> children, FeatureContext context) {
-            super(children);
+            super(NbBundle.getMessage(TopLevelStructureItem.class, "Rules"),  //NOI18N
+                    context.getSnapshot().getSource().getFileObject(),
+                    children);
             this.snapshot = context.getSnapshot();
         }
 
-        @Override
-        public String getName() {
-            return NbBundle.getMessage(TopLevelStructureItem.class, "Rules"); //NOI18N
-        }
-
         //return the element range 0 - source lenght to ensure the recursive
         //leaf node search mechanism in CSL navigator will try to match
         //the rule children
@@ -157,75 +173,91 @@
     }
 
     public static class Elements extends ChildrenSetStructureItem {
-
         public Elements(Collection<StructureItem> items) {
-            super(items);
-        }
-
-        @Override
-        public String getName() {
-            return NbBundle.getMessage(TopLevelStructureItem.class, "Elements"); //NOI18N
+            super(NbBundle.getMessage(TopLevelStructureItem.class, "Elements"), null, items); //NOI18N
         }
     }
 
     public static class Classes extends ChildrenSetStructureItem {
-
         public Classes(Collection<StructureItem> children) {
-            super(children);
-        }
-
-        @Override
-        public String getName() {
-            return NbBundle.getMessage(TopLevelStructureItem.class, "Classes"); //NOI18N
+            super(NbBundle.getMessage(TopLevelStructureItem.class, "Classes"), null, children);
         }
     }
 
     public static class Ids extends ChildrenSetStructureItem {
-
         public Ids(Collection<StructureItem> children) {
-            super(children);
-        }
-
-        @Override
-        public String getName() {
-            return NbBundle.getMessage(TopLevelStructureItem.class, "Ids"); //NOI18N
+            super(NbBundle.getMessage(TopLevelStructureItem.class, "Ids"), null, children); //NOI18N
         }
     }
 
     public static class Namespaces extends ChildrenListStructureItem {
 
         public Namespaces(List<StructureItem> children) {
-            super(children);
+            super(NbBundle.getMessage(TopLevelStructureItem.class, "Namespaces"), null, children);  //NOI18N
         }
 
-        @Override
-        public String getName() {
-            return NbBundle.getMessage(TopLevelStructureItem.class, "Namespaces"); //NOI18N
-        }
     }
 
     public static class AtRules extends ChildrenListStructureItem {
-
         public AtRules(List<StructureItem> children) {
-            super(children);
-        }
-
-        @Override
-        public String getName() {
-            return NbBundle.getMessage(TopLevelStructureItem.class, "AtRules"); //NOI18N
+            super(NbBundle.getMessage(TopLevelStructureItem.class, "AtRules"), null, children); //NOI18N
         }
     }
 
     @NbBundle.Messages("imports=Imports")
     public static class Imports extends ChildrenSetStructureItem {
-
         public Imports(Collection<StructureItem> children) {
-            super(children);
+            super(Bundle.imports(), null, children);
+        }
+    }
+
+    private static class TopElementHandle implements ElementHandle {
+        private final FileObject fileObject;
+        private final String name;
+
+        public TopElementHandle(FileObject fileObject, String name) {
+            this.fileObject = fileObject;
+            this.name = name;
+        }
+
+        @Override
+        public FileObject getFileObject() {
+            return fileObject;
+        }
+
+        @Override
+        public String getMimeType() {
+            return CssLanguage.CSS_MIME_TYPE;
         }
 
         @Override
         public String getName() {
-            return Bundle.imports();
+            return name;
+        }
+
+        @Override
+        public String getIn() {
+            return null;
+        }
+
+        @Override
+        public ElementKind getKind() {
+            return ElementKind.PACKAGE; //xxx fix - add mode categories to csl
+        }
+
+        @Override
+        public Set<Modifier> getModifiers() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public boolean signatureEquals(ElementHandle handle) {
+            return false;
+        }
+
+        @Override
+        public OffsetRange getOffsetRange(ParserResult result) {
+            return new OffsetRange(-1, -1);
         }
     }
 }
diff --git a/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPCategoryStructureItem.java b/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPCategoryStructureItem.java
index e403a24..e231a1d 100644
--- a/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPCategoryStructureItem.java
+++ b/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPCategoryStructureItem.java
@@ -28,9 +28,12 @@
 import org.netbeans.modules.csl.api.ElementKind;
 import org.netbeans.modules.csl.api.HtmlFormatter;
 import org.netbeans.modules.csl.api.Modifier;
+import org.netbeans.modules.csl.api.OffsetRange;
 import org.netbeans.modules.csl.api.StructureItem;
+import org.netbeans.modules.csl.spi.ParserResult;
 import org.netbeans.modules.css.editor.module.spi.FeatureContext;
 import org.netbeans.modules.parsing.api.Snapshot;
+import org.openide.filesystems.FileObject;
 import org.openide.util.ImageUtilities;
 import org.openide.util.NbBundle;
 
@@ -42,7 +45,18 @@
 
     //let the CP items to be at the top of the navigator
     private static final String SORT_TEXT_PREFIX = "0_"; //NOI18N
-    
+
+    private final ElementHandle elementHandle;
+
+    public CPCategoryStructureItem(ElementHandle elementHandle) {
+        this.elementHandle = elementHandle;
+    }
+
+    @Override
+    public String getName() {
+        return this.elementHandle.getName();
+    }
+
     @Override
     public String getSortText() {
         return new StringBuilder().append(SORT_TEXT_PREFIX).append(getName()).toString();
@@ -55,17 +69,17 @@
 
     @Override
     public ElementHandle getElementHandle() {
-        return null;
+        return elementHandle;
     }
 
     @Override
     public ElementKind getKind() {
-        return ElementKind.PACKAGE; //xxx fix - add mode categories to csl
+        return elementHandle.getKind();
     }
 
     @Override
     public Set<Modifier> getModifiers() {
-        return Collections.emptySet();
+        return elementHandle.getModifiers();
     }
 
     @Override
@@ -104,12 +118,12 @@
         return true;
     }
 
-
     public abstract static class ChildrenSetStructureItem extends CPCategoryStructureItem {
 
-        private Collection<StructureItem> items;
+        private final Collection<StructureItem> items;
 
-        public ChildrenSetStructureItem(Collection<StructureItem> items) {
+        public ChildrenSetStructureItem(ElementHandle elementHandle, Collection<StructureItem> items) {
+            super(elementHandle);
             this.items = items;
         }
 
@@ -123,31 +137,26 @@
     public static class Variables extends ChildrenSetStructureItem {
 
         private static final ImageIcon ICON = new ImageIcon(ImageUtilities.loadImage("org/netbeans/modules/css/prep/editor/resources/variables.gif")); //NOI18N
-        
-        public Variables(Set<StructureItem> children) {
-            super(children);
+
+        public Variables(Set<StructureItem> children, FeatureContext context) {
+            super(new DummyElementHandle(context.getFileObject(), Bundle.navigator_item_name_variables()), children);
         }
 
         @Override
         public ImageIcon getCustomIcon() {
             return ICON;
         }
-        
-        @Override
-        public String getName() {
-            return Bundle.navigator_item_name_variables();
-        }
     }
 
     @NbBundle.Messages("navigator.item.name.mixins=Mixins")
     public static class Mixins extends ChildrenSetStructureItem {
 
         private static final ImageIcon ICON = new ImageIcon(ImageUtilities.loadImage("org/netbeans/modules/css/prep/editor/resources/methods.gif")); //NOI18N
-        
-        private FeatureContext context;
+
+        private final FeatureContext context;
 
         public Mixins(Collection<StructureItem> items, FeatureContext context) {
-            super(items);
+            super(new DummyElementHandle(context.getFileObject(), Bundle.navigator_item_name_mixins()), items);
             this.context = context;
         }
 
@@ -156,11 +165,6 @@
             return ICON;
         }
 
-        @Override
-        public String getName() {
-            return Bundle.navigator_item_name_mixins();
-        }
-
         //return the element range 0 - source lenght to ensure the recursive
         //leaf node search mechanism in CSL navigator will try to match
         //the rule children
@@ -175,4 +179,54 @@
             return s.getOriginalOffset(s.getText().length());
         }
     }
+
+    private static class DummyElementHandle implements ElementHandle {
+        private final FileObject fileObject;
+        private final String name;
+
+        public DummyElementHandle(FileObject fileObject, String name) {
+            this.fileObject = fileObject;
+            this.name = name;
+        }
+
+        @Override
+        public FileObject getFileObject() {
+            return fileObject;
+        }
+
+        @Override
+        public String getMimeType() {
+            return "text/css";
+        }
+
+        @Override
+        public String getName() {
+            return name;
+        }
+
+        @Override
+        public String getIn() {
+            return null;
+        }
+
+        @Override
+        public ElementKind getKind() {
+            return ElementKind.PACKAGE;  //xxx fix - add mode categories to csl
+        }
+
+        @Override
+        public Set<Modifier> getModifiers() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public boolean signatureEquals(ElementHandle handle) {
+            return false;
+        }
+
+        @Override
+        public OffsetRange getOffsetRange(ParserResult result) {
+            return new OffsetRange(-1, -1);
+        }
+    }
 }
diff --git a/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPCssEditorModule.java b/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPCssEditorModule.java
index 4e6b456..e1e5539 100644
--- a/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPCssEditorModule.java
+++ b/ide/css.prep/src/org/netbeans/modules/css/prep/editor/CPCssEditorModule.java
@@ -712,7 +712,7 @@
         }
 
         if (!vars.isEmpty()) {
-            result.add(new CPCategoryStructureItem.Variables(vars));
+            result.add(new CPCategoryStructureItem.Variables(vars, context));
         }
         if (!mixins.isEmpty()) {
             result.add(new CPCategoryStructureItem.Mixins(mixins, context));