[294672] [validation] Errors generated by El Generated and associated classes are not being reported
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/JSPCoreMessages.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/JSPCoreMessages.java
index fcc32ed..9269604 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/JSPCoreMessages.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/JSPCoreMessages.java
@@ -52,6 +52,7 @@
public static String JSPTranslator_3;
public static String JSPTranslator_4;
public static String JSPTranslator_5;
+ public static String JSPELTranslator_0;
public static String TLDValidator_MissingValidator;
public static String TLDValidator_MissingVariable;
public static String TLDValidator_MissingListener;
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/JSPCorePluginResources.properties b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/JSPCorePluginResources.properties
index 284a121..e2a16de 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/JSPCorePluginResources.properties
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/JSPCorePluginResources.properties
@@ -41,6 +41,7 @@
JSPTranslator_3=Unknown type for identifier "{0}"
JSPTranslator_4=Missing start tag for "{0}"
JSPTranslator_5=Missing end tag for "{0}"
+JSPELTranslator_0=The function {0} is undefined
TLDValidator_MissingValidator=The TagLibraryValidator subclass '{0}' was not found on the Java Build Path
TLDValidator_MissingVariable=The variable class '{0}' was not found on the Java Build Path
TLDValidator_MissingListener=The listener class '{0}' was not found on the Java Build Path
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/IJSPProblem.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/IJSPProblem.java
index 4bd7140..8270cd8 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/IJSPProblem.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/IJSPProblem.java
@@ -28,7 +28,8 @@
int EndCustomTagMissing = F_PROBLEM_ID_LITERAL + 10;
int UseBeanStartTagMissing = F_PROBLEM_ID_LITERAL + 11;
int UseBeanEndTagMissing = F_PROBLEM_ID_LITERAL + 12;
-
+ int ELProblem = F_PROBLEM_ID_LITERAL + 13;
+
/**
* @return the ID of this JSP problem
*/
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 d16ee8e..cc07896 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
@@ -1634,7 +1634,8 @@
private void translateEL(String elText, String delim, IStructuredDocumentRegion currentNode, int contentStart, int contentLength) {
IJSPELTranslator translator = getELTranslator();
if (null != translator) {
- translator.translateEL(elText, delim, currentNode, contentStart, contentLength, fUserELExpressions, fUserELRanges, fStructuredDocument);
+ List elProblems = translator.translateEL(elText, delim, currentNode, contentStart, contentLength, fUserELExpressions, fUserELRanges, fStructuredDocument);
+ fTranslationProblems.addAll(elProblems);
}
}
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGenerator.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGenerator.java
index 11292e3..7ee3b72 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGenerator.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGenerator.java
@@ -12,8 +12,10 @@
package org.eclipse.jst.jsp.core.internal.java.jspel;
+import java.util.List;
import java.util.Map;
+import org.eclipse.jst.jsp.core.jspel.ELProblem;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection;
@@ -30,18 +32,25 @@
public ELGenerator() {
} // constructor
-
/**
* Check the netuiel AST and set diagnostics as necessary.
- * @param translator TODO
- * @param jspReferenceRegion TODO
- * @param contentStart
- * @param contentLength
+ *
+ * @param root
+ * @param currentNode
+ * @param result
+ * @param codeMap
+ * @param document
+ * @param jspReferenceRegion
+ * @param contentStart
+ * @param contentLength
+ * @return a {@link List} of {@link ELProblem}s reported by the {@link ELGeneratorVisitor} this {@link ELGenerator} uses
*/
- public void generate(ASTExpression root, IStructuredDocumentRegion currentNode, StringBuffer result, Map codeMap, IStructuredDocument document, ITextRegionCollection jspReferenceRegion, int contentStart, int contentLength) {
+ public List generate(ASTExpression root, IStructuredDocumentRegion currentNode, StringBuffer result, Map codeMap, IStructuredDocument document, ITextRegionCollection jspReferenceRegion, int contentStart, int contentLength) {
ELGeneratorVisitor visitor = new ELGeneratorVisitor(result, currentNode, codeMap, document, jspReferenceRegion, contentStart);
visitor.startFunctionDefinition(root.getFirstToken().beginColumn - 1);
root.jjtAccept(visitor, null);
visitor.endFunctionDefinition(root.getLastToken().endColumn - 1);
+
+ return visitor.getELProblems();
}
}
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java
index f9d8fdd..7bb6633 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java
@@ -15,6 +15,7 @@
*******************************************************************************/
package org.eclipse.jst.jsp.core.internal.java.jspel;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -27,11 +28,14 @@
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.text.Position;
+import org.eclipse.jst.jsp.core.internal.JSPCoreMessages;
import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController;
import org.eclipse.jst.jsp.core.internal.contentmodel.tld.CMDocumentImpl;
import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager;
import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker;
import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDFunction;
+import org.eclipse.jst.jsp.core.jspel.ELProblem;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection;
@@ -108,6 +112,8 @@
private boolean fUseParameterizedTypes;
+ private List fELProblems;
+
/**
* Tranlsation of XML-style operators to java
*/
@@ -143,6 +149,7 @@
fCurrentNode = currentNode;
fGeneratedFunctionStart = -1; //set when generating function definition
fUseParameterizedTypes = compilerSupportsParameterizedTypes();
+ fELProblems = new ArrayList();
}
/**
@@ -544,10 +551,29 @@
}
append(")"); //$NON-NLS-1$
}
+ else {
+ //column offsets are 1 based not 0 based, thus subtract one
+ final int problemOffset = fContentStart + node.getFirstToken().beginColumn - 1;
+ final int problemLength = node.getLastToken().endColumn - 1;
+
+ //could not find function translation so report error
+ fELProblems.add(new ELProblem(new Position(problemOffset, problemLength), NLS.bind(JSPCoreMessages.JSPELTranslator_0, node.getFullFunctionName())));
+
+ //error message to be injected into translation purely for debugging purposes
+ String errorMsg = "\"Could not find function translation for: " + node.getFullFunctionName() + "\""; //$NON-NLS-1$ //$NON-NLS-2$
+ append(errorMsg);
+ }
return null;
}
/**
+ * @return the {@link ELProblem}s found by this visitor
+ */
+ public List getELProblems() {
+ return fELProblems;
+ }
+
+ /**
* Literal
*/
public Object visit(ASTLiteral node, Object data) {
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELTranslator.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELTranslator.java
index 745f9e6..c995a1a 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELTranslator.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELTranslator.java
@@ -47,7 +47,8 @@
ASTExpression expression = elParser.Expression();
ELGenerator gen = new ELGenerator();
- gen.generate(expression, currentNode, fUserELExpressions, fUserELRanges, document, currentNode, contentStart, contentLength);
+ List generatorELProblems = gen.generate(expression, currentNode, fUserELExpressions, fUserELRanges, document, currentNode, contentStart, contentLength);
+ elProblems.addAll(generatorELProblems);
}
} catch (ParseException e) {
Token curTok = e.currentToken;
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/jspel/ELProblem.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/jspel/ELProblem.java
index cb548c0..ef95d18 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/jspel/ELProblem.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/jspel/ELProblem.java
@@ -13,22 +13,78 @@
package org.eclipse.jst.jsp.core.jspel;
import org.eclipse.jface.text.Position;
+import org.eclipse.jst.jsp.core.internal.java.IJSPProblem;
-public class ELProblem {
+/**
+ * All ELProblems are currently assumed to be errors.
+ */
+public class ELProblem implements IJSPProblem {
private Position fPos;
private String fMessage;
-
+ private int fId = IJSPProblem.ELProblem;
+
+ /**
+ * @param pos should be relative to the JSP document the error is to be reported on
+ * @param message
+ */
public ELProblem(Position pos, String message) {
fPos = pos;
fMessage = message;
}
+
+ public ELProblem(Position pos, String message, int id) {
+ fPos = pos;
+ fMessage = message;
+ fId = id;
+ }
public String getMessage() {
return fMessage;
}
-
public Position getPosition() {
return fPos;
}
+
+ public String[] getArguments() {
+ return null;
+ }
+
+ public int getID() {
+ return fId;
+ }
+
+ public int getEID() {
+ return fId;
+ }
+
+ public char[] getOriginatingFileName() {
+ return null;
+ }
+
+ public int getSourceEnd() {
+ return fPos.getOffset() + fPos.getLength();
+ }
+
+ public int getSourceLineNumber() {
+ return 0;
+ }
+
+ public int getSourceStart() {
+ return fPos.getOffset();
+ }
+
+ public boolean isError() {
+ return true;
+ }
+
+ public boolean isWarning() {
+ return false;
+ }
+
+ public void setSourceEnd(int sourceEnd) {}
+
+ public void setSourceLineNumber(int lineNumber) {}
+
+ public void setSourceStart(int sourceStart) {}
}