[307924]: Fix NPE in Semantic Highlighting and add Unit Test
https://bugs.eclipse.org/bugs/show_bug.cgi?id=307924
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/AbstractXSLSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/AbstractXSLSemanticHighlighting.java
index 3b8ec2d..36f5061 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/AbstractXSLSemanticHighlighting.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/AbstractXSLSemanticHighlighting.java
@@ -11,6 +11,8 @@
package org.eclipse.wst.xsl.ui.internal.style;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.Position;
@@ -64,16 +66,15 @@
public abstract Position[] consumes(IStructuredDocumentRegion region);
- protected Position[] createSemanticPositions(IStructuredDocumentRegion region, String regionType) {
+ protected List createSemanticPositions(IStructuredDocumentRegion region, String regionType) {
if (region == null) {
- return null;
+ return Collections.EMPTY_LIST;
}
if (!region.getType().equals(DOMRegionContext.XML_TAG_NAME)) {
- return null;
+ return Collections.EMPTY_LIST;
}
- Position p[] = null;
ITextRegionList regionList = region.getRegions();
ArrayList arrpos = new ArrayList();
@@ -85,9 +86,7 @@
arrpos.add(pos);
}
}
- p = new Position[arrpos.size()];
- arrpos.toArray(p);
- return p;
+ return arrpos;
}
public Position[] consumes(IStructuredDocumentRegion documentRegion, IndexedRegion indexedRegion) {
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrNameSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrNameSemanticHighlighting.java
index cc39c52..8b92595 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrNameSemanticHighlighting.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrNameSemanticHighlighting.java
@@ -11,6 +11,8 @@
package org.eclipse.wst.xsl.ui.internal.style;
+import java.util.ArrayList;
+
import org.eclipse.jface.text.Position;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.ui.ISemanticHighlighting;
@@ -32,8 +34,13 @@
}
public Position[] consumes(IStructuredDocumentRegion region) {
- return createSemanticPositions(region,
- DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE);
+ ArrayList array = new ArrayList();
+ array.addAll(createSemanticPositions(region, DOMRegionContext.XML_TAG_ATTRIBUTE_NAME));
+ Position[] allPos = new Position[array.size()];
+ if (!array.isEmpty()) {
+ array.toArray(allPos);
+ }
+ return allPos;
}
}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrValueSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrValueSemanticHighlighting.java
index a577a8b..836baf7 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrValueSemanticHighlighting.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrValueSemanticHighlighting.java
@@ -11,6 +11,8 @@
package org.eclipse.wst.xsl.ui.internal.style;
+import java.util.ArrayList;
+
import org.eclipse.jface.text.Position;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.ui.ISemanticHighlighting;
@@ -32,8 +34,12 @@
}
public Position[] consumes(IStructuredDocumentRegion region) {
- return createSemanticPositions(region,
- DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE);
- }
+ ArrayList array = new ArrayList();
+ array.addAll(createSemanticPositions(region, DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE));
+ Position[] allPos = new Position[array.size()];
+ if (!array.isEmpty()) {
+ array.toArray(allPos);
+ }
+ return allPos; }
}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagDelimsSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagDelimsSemanticHighlighting.java
index bbdc681..5812907 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagDelimsSemanticHighlighting.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagDelimsSemanticHighlighting.java
@@ -7,12 +7,15 @@
*
* Contributors:
* David Carver (Intalio) - bug 256339 - initial API and implementation
+ * - bug 307924 - Fix NPE when textRegion is null.
*******************************************************************************/
package org.eclipse.wst.xsl.ui.internal.style;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import org.eclipse.jface.text.Position;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
@@ -38,36 +41,34 @@
public Position[] consumes(IStructuredDocumentRegion region) {
- Position[] openPos = createSemanticPositions(region.getFirstRegion(), region, DOMRegionContext.XML_TAG_OPEN);
- Position[] endOpenPos = createSemanticPositions(region.getFirstRegion(), region, DOMRegionContext.XML_END_TAG_OPEN);
- Position[] emptyTagClose = createSemanticPositions(region, DOMRegionContext.XML_EMPTY_TAG_CLOSE);
- Position[] closePos = createSemanticPositions(region, DOMRegionContext.XML_TAG_CLOSE);
+ List openPos = createSemanticPositions(region.getFirstRegion(), region, DOMRegionContext.XML_TAG_OPEN);
+ List endOpenPos = createSemanticPositions(region.getFirstRegion(), region, DOMRegionContext.XML_END_TAG_OPEN);
+ List emptyTagClose = createSemanticPositions(region, DOMRegionContext.XML_EMPTY_TAG_CLOSE);
+ List closePos = createSemanticPositions(region, DOMRegionContext.XML_TAG_CLOSE);
ArrayList arrpos = new ArrayList();
- arrpos.addAll(Arrays.asList(openPos));
- arrpos.addAll(Arrays.asList(closePos));
- arrpos.addAll(Arrays.asList(endOpenPos));
- arrpos.addAll(Arrays.asList(emptyTagClose));
+ arrpos.addAll(openPos);
+ arrpos.addAll(closePos);
+ arrpos.addAll(endOpenPos);
+ arrpos.addAll(emptyTagClose);
Position[] allPos = new Position[arrpos.size()];
- arrpos.toArray(allPos);
+ if (!arrpos.isEmpty()) {
+ arrpos.toArray(allPos);
+ }
return allPos;
}
- protected Position[] createSemanticPositions(ITextRegion textRegion, IStructuredDocumentRegion region, String regionType) {
- if (textRegion == null) {
- return null;
- }
-
- Position p[] = null;
-
+ protected List createSemanticPositions(ITextRegion textRegion, IStructuredDocumentRegion region, String regionType) {
ArrayList arrpos = new ArrayList();
- if (textRegion.getType().equals(regionType)) {
+ if (textRegion == null) {
+ return Collections.EMPTY_LIST;
+ }
+
+ if (regionType.equals(textRegion.getType())) {
Position pos = new Position(region
.getStartOffset(textRegion), textRegion.getLength());
arrpos.add(pos);
}
- p = new Position[arrpos.size()];
- arrpos.toArray(p);
- return p;
+ return arrpos;
}
}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagNameSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagNameSemanticHighlighting.java
index fc029b5..fc450be 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagNameSemanticHighlighting.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagNameSemanticHighlighting.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.wst.xsl.ui.internal.style;
+import java.util.ArrayList;
+
import org.eclipse.jface.text.Position;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.ui.ISemanticHighlighting;
@@ -30,6 +32,12 @@
}
public Position[] consumes(IStructuredDocumentRegion region) {
- return createSemanticPositions(region, DOMRegionContext.XML_TAG_NAME);
+ ArrayList array = new ArrayList();
+ array.addAll(createSemanticPositions(region, DOMRegionContext.XML_TAG_NAME));
+ Position[] allPos = new Position[array.size()];
+ if (!array.isEmpty()) {
+ array.toArray(allPos);
+ }
+ return allPos;
}
}