[86382] fixes for XML-JSP translation, as well as some more unit tests for the fixes
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java
index 450be4e..ba0dc5a 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java
@@ -566,7 +566,7 @@
/**
* Only valid after a configure(...), translate(...) or
- * translateFromFile(...) call
+ * translateFromFile(...) call
*
* @return the current result (java translation) buffer
*/
@@ -664,8 +664,8 @@
if (getCurrentNode().getType() == DOMRegionContext.XML_COMMENT_TEXT || getCurrentNode().getType() == DOMRegionContext.XML_CDATA_TEXT || getCurrentNode().getType() == DOMRegionContext.UNDEFINED) {
translateXMLCommentNode(getCurrentNode());
}
- else // iterate through each region in the flat node
- {
+ else {
+ // iterate through each region in the flat node
translateRegionContainer(getCurrentNode(), STANDARD_JSP);
}
if (getCurrentNode() != null)
@@ -890,8 +890,7 @@
else if (directiveName.equals("include")) { //$NON-NLS-1$
String fileLocation = ""; //$NON-NLS-1$
- String attrValue = ""; //$NON-NLS-1$
-
+
// skip to required "file" attribute,
// should be safe because
// "file" is the only attribute for the
@@ -899,8 +898,8 @@
while (r != null && regions.hasNext() && !r.getType().equals(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) {
r = (ITextRegion) regions.next();
}
- attrValue = getAttributeValue(r, regions);
- if (attrValue != null)
+ fileLocation = getAttributeValue(r, regions);
+ if (fileLocation != null)
handleIncludeFile(fileLocation);
}
else if (directiveName.equals("page")) { //$NON-NLS-1$
@@ -993,19 +992,19 @@
sdr = sdr.getNext();
}
+ advanceNextNode();
+
switch(type) {
case SCRIPTLET:
- translateScriptletString(content.toString(), getCurrentNode(), start, end);
+ translateScriptletString(content.toString(), getCurrentNode(), start, end-start);
break;
case EXPRESSION:
- translateExpressionString(content.toString(), getCurrentNode(), start, end);
+ translateExpressionString(content.toString(), getCurrentNode(), start, end-start);
break;
case DECLARATION:
- translateDeclarationString(content.toString(), getCurrentNode(), start, end);
+ translateDeclarationString(content.toString(), getCurrentNode(), start, end-start);
break;
}
-
- advanceNextNode();
}
/**
@@ -1993,8 +1992,8 @@
String suffix = "null;" + ENDL; //$NON-NLS-1$
if (className != null)
suffix = "new " + className + "();" + ENDL; //$NON-NLS-1$ //$NON-NLS-2$
- IStructuredDocumentRegion referenceRegion = fCurrentNode.getPrevious() != null ? fCurrentNode.getPrevious() : fCurrentNode;
- appendToBuffer(prefix + suffix, fUserCode, true, referenceRegion);
+
+ appendToBuffer(prefix + suffix, fUserCode, true, fCurrentNode);
}
}
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
index 3efbbd5..8def042 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
@@ -126,10 +126,7 @@
* determines which type of region the cursor is in, and adjusts cursor offset accordingly
*/
public void nodeParsed(IStructuredDocumentRegion sdRegion) {
- // System.out.println("tagname > " + fTagname);
- // System.out.println("sdRegion > " + sdRegion.getType());
- // System.out.println("sdRegion text is >> " + fTextToParse.substring(sdRegion.getStartOffset(), sdRegion.getEndOffset()));
- // System.out.println("+++=======================");
+
try {
if (isJSPStartRegion(sdRegion)) {
String nameStr = getRegionName(sdRegion);
@@ -138,7 +135,7 @@
else
fTagname = null;
}
- else if (sdRegion.getFirstRegion().getType() == DOMJSPRegionContexts.JSP_CONTENT) {
+ else if (sdRegion.getFirstRegion().getType() == DOMJSPRegionContexts.JSP_CONTENT || sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_CONTENT) {
if (fTagname != null) {
// assign contents to one of the tables
if (isScriptlet(fTagname)) {
@@ -151,16 +148,19 @@
processDeclaration(sdRegion);
}
else {
- processOtherRegions(sdRegion);
+ if (fTagname != null) {
+ processUseBean(sdRegion);
+ processOtherRegions(sdRegion);
+ }
}
}
}
- else if (sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_CONTENT) {
- if (fTagname != null) {
- processUseBean(sdRegion);
- processOtherRegions(sdRegion);
- }
- }
+// else if (sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_CONTENT) {
+// if (fTagname != null) {
+// processUseBean(sdRegion);
+// processOtherRegions(sdRegion);
+// }
+// }
else {
fTagname = null;
}
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/reconcile/ReconcileStepForJspTranslation.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/reconcile/ReconcileStepForJspTranslation.java
index fc6381e..2369813 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/reconcile/ReconcileStepForJspTranslation.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/reconcile/ReconcileStepForJspTranslation.java
@@ -222,14 +222,14 @@
r = regions.get(i);
if (r.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME || r.getType() == DOMRegionContext.XML_TAG_NAME) {
tagName = sdRegion.getText(r).trim();
- if (tagName.equals("include")) { //$NON-NLS-1$
+ if (tagName.equals("include") || tagName.equals("jsp:directive.include")) { //$NON-NLS-1$ //$NON-NLS-2$
adjustForInclude(annotation, pos, sdRegion, regions, i);
}
- else if (tagName.equals("page")) { //$NON-NLS-1$
+ else if (tagName.equals("page") || tagName.equals("jsp:directive.page")) { //$NON-NLS-1$ //$NON-NLS-2$
adjustForPage(annotation, pos, sdRegion, regions, i);
}
else if (tagName.equals("jsp:useBean")) { //$NON-NLS-1$
- //adjustForUseBean(pos, sdRegion, regions, i);
+ adjustForUseBean(pos, sdRegion, regions, i);
// do nothing for usebean for now...
break;
}
@@ -290,6 +290,27 @@
}
}
+ private void adjustForUseBean(Position pos, IStructuredDocumentRegion sdRegion, ITextRegionList regions, int startingRegionNumber) {
+ ITextRegion r;
+ String value;
+ int size = regions.size();
+
+ for (int j = startingRegionNumber; j < size; j++) {
+ r = regions.get(j);
+ if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME && sdRegion.getText(r).trim().equals("id")) { //$NON-NLS-1$
+ if (size > j + 2) {
+ r = regions.get(j + 2);
+ if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) {
+ value = sdRegion.getText(r);
+ pos.offset = sdRegion.getStartOffset(r);
+ pos.length = value.trim().length();
+ break;
+ }
+ }
+ }
+ }
+ }
+
public void release() {
if (fTranslationAdapter != null) {
if(DEBUG) {