diff options
Diffstat (limited to 'bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java')
62 files changed, 0 insertions, 12184 deletions
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/CompilationUnitHelper.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/CompilationUnitHelper.java deleted file mode 100644 index 8df55241a1..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/CompilationUnitHelper.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.eclipse.jst.jsp.core.internal.java; - -import org.eclipse.jdt.core.WorkingCopyOwner; - -/** - * To ensure there is only one instance of ProblemRequestor and WorkingCopyOwner - * for JSP plugins. These were removed from JSPTranslation to ensure that the - * JSPTranslation was not held in memory by any type of JDT lists (caching - * search results, etc...) - * - * @author pavery - */ -public class CompilationUnitHelper { - - private JSPProblemRequestor fProblemRequestor = null; - private WorkingCopyOwner fWorkingCopyOwner = null; - private static CompilationUnitHelper instance; - - private CompilationUnitHelper() { - // force use of instance - } - - public synchronized static final CompilationUnitHelper getInstance() { - - if (instance == null) - instance = new CompilationUnitHelper(); - return instance; - } - - public JSPProblemRequestor getProblemRequestor() { - - if (fProblemRequestor == null) - fProblemRequestor = new JSPProblemRequestor(); - return fProblemRequestor; - } - - public WorkingCopyOwner getWorkingCopyOwner() { - - if (fWorkingCopyOwner == null) { - fWorkingCopyOwner = new WorkingCopyOwner() { - public String toString() { - return "JSP Working copy owner"; //$NON-NLS-1$ - } - }; - } - return fWorkingCopyOwner; - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/ELProblem.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/ELProblem.java deleted file mode 100644 index b856058d20..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/ELProblem.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.eclipse.jst.jsp.core.internal.java; - -import org.eclipse.jface.text.Position; - -public class ELProblem { - private Position fPos; - private String fMessage; - - public ELProblem(Position pos, String message) { - fPos = pos; - fMessage = message; - } - - public String getMessage() { - return fMessage; - } - - - public Position getPosition() { - return fPos; - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/EscapedTextUtil.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/EscapedTextUtil.java deleted file mode 100644 index 4370d9a935..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/EscapedTextUtil.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - - - -import java.util.Properties; -import java.util.StringTokenizer; - -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - -/** - * class to handle chunks of text/regions - * with escaped character data - * @author pavery - */ -public class EscapedTextUtil { - - public static Properties fXMLtoJavaLookup = null; - - /** - * @return unescaped full text of that region, "" if there is no text - */ - public static String getUnescapedText(IStructuredDocumentRegion parent, ITextRegion r) { - String test = (parent != r) ? parent.getFullText(r) : parent.getFullText(); - return getUnescapedText(test); - } - - public static String getUnescapedText(String test) { - initLookup(); - StringBuffer buffer = new StringBuffer(); - if (test != null) { - StringTokenizer st = new StringTokenizer(test, "&;", true); //$NON-NLS-1$ - String tok1, tok2, tok3, transString; - while (st.hasMoreTokens()) { - tok1 = tok2 = tok3 = transString = ""; //$NON-NLS-1$ - tok1 = st.nextToken(); - if (tok1.equals("&") && st.hasMoreTokens()) //$NON-NLS-1$ - { - tok2 = st.nextToken(); - if (st.hasMoreTokens()) { - tok3 = st.nextToken(); - } - } - if (!(transString = fXMLtoJavaLookup.getProperty(tok1 + tok2 + tok3, "")).equals("")) //$NON-NLS-2$ //$NON-NLS-1$ - { - buffer.append(transString); - } - else { - buffer.append(tok1 + tok2 + tok3); - } - } - return buffer.toString(); - } - return ""; //$NON-NLS-1$ - } - - /** - * initialize lookup tables - */ - private static void initLookup() { - fXMLtoJavaLookup = new Properties(); - fXMLtoJavaLookup.setProperty("'", "'"); //$NON-NLS-2$ //$NON-NLS-1$ - fXMLtoJavaLookup.setProperty(""", "\""); //$NON-NLS-2$ //$NON-NLS-1$ - fXMLtoJavaLookup.setProperty("&", "&"); //$NON-NLS-2$ //$NON-NLS-1$ - fXMLtoJavaLookup.setProperty("<", "<"); //$NON-NLS-2$ //$NON-NLS-1$ - fXMLtoJavaLookup.setProperty(">", ">"); //$NON-NLS-2$ //$NON-NLS-1$ - fXMLtoJavaLookup.setProperty(" ", " "); //$NON-NLS-2$ //$NON-NLS-1$ - } - - /** - * Get the String representation of an entity reference. - */ - public static String translateEntityReference(String entity) { - return fXMLtoJavaLookup.getProperty(entity, entity); - } -} - diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/IJSPTranslation.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/IJSPTranslation.java deleted file mode 100644 index cb79f3e1cd..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/IJSPTranslation.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import java.util.List; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.IJavaElement; - -/** - * An object that holds a translated JSP String along with - * position mapping from Java to JSP, and JSP to Java. - * - * @author pavery - * - */ -public interface IJSPTranslation { - - /** - * The string contents of the translated document. - * @return the string contents of the translated document. - */ - public String getJavaText(); - - /** - * The corresponding java offset in the translated document for a given jsp offset. - * @param jspPosition - * @return the java offset that maps to jspOffset, -1 if the position has no mapping. - */ - public int getJavaOffset(int jspOffset); - - /** - * The corresponding jsp offset in the source document for a given jsp offset in the translated document. - * @param javaPosition - * @return the jsp offset that maps to javaOffset, -1 if the position has no mapping. - */ - public int getJspOffset(int javaOffset); - - /** - * The corresponding CompilationUnit for the translated JSP document - * @return an ICompilationUnit of the translation - */ - public ICompilationUnit getCompilationUnit(); - - /** - * Returns the IJavaElements corresponding to the JSP range in the JSP StructuredDocument - * - * @param jspStart staring offset in the JSP document - * @param jspEnd ending offset in the JSP document - * @return IJavaElements corresponding to the JSP selection - */ - public IJavaElement[] getElementsFromJspRange(int jspStart, int jspEnd); - - /** - * Must be set true in order for problems to be collected during reconcile. - * If set false, problems will be ignored during reconcile. - * @param collect - */ - public void setProblemCollectingActive(boolean collect); - - /** - * Reconciles the compilation unit for this JSPTranslation - */ - public void reconcileCompilationUnit(); - - /** - * @return the List of problems collected during reconcile of the compilation unit - */ - public List getProblems(); - - // add these API once finalized - // getJspEdits(TextEdit javaEdit) - // getJavaRanges() - // getJavaDocument() -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSP2ServletNameUtil.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSP2ServletNameUtil.java deleted file mode 100644 index 43dfba47de..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSP2ServletNameUtil.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import java.io.File; - -/** - * @author pavery - */ -public class JSP2ServletNameUtil { - - /** - * WAS mangles Tom&Jerry as: _Tom_26_Jerry; this takes in the mangled name - * and returns the original name. - * - * Unmangles the qualified type name. If an underscore is found - * it is assumed to be a mangled representation of a non-alpha, - * non-digit character of the form _NN_, where NN are hex digits - * representing the encoded character. This routine converts it - * back to the original character. - */ - public final static String unmangle(String qualifiedTypeName) { - if(qualifiedTypeName.charAt(0) != '_') - return qualifiedTypeName; - - StringBuffer buf = new StringBuffer(); - String possible = ""; //$NON-NLS-1$ - - // remove the .java extension if there is one - if(qualifiedTypeName.endsWith(".java"))//$NON-NLS-1$ - qualifiedTypeName = qualifiedTypeName.substring(0, qualifiedTypeName.length() - 5); - - for(int i = 1; i < qualifiedTypeName.length(); i++) { // start at index 1 b/c 1st char is always '_' - char c = qualifiedTypeName.charAt(i); - if(c == '_') { - int endIndex = qualifiedTypeName.indexOf('_', i+1); - if(endIndex == -1) - buf.append(c); - else { - char unmangled; - try { - possible = qualifiedTypeName.substring(i+1, endIndex); - if(isValid(possible)) { - unmangled = (char)Integer.decode("0x" + possible).intValue();//$NON-NLS-1$ - i = endIndex; - } - else { - unmangled = c; - } - - } catch(NumberFormatException e) { - unmangled = c; - } - buf.append(unmangled); - } - } else { - buf.append(c); - } - } - return buf.toString(); - } - - /** - * Determine if given string is a valid Hex representation of an ASCII character (eg. 2F -> /) - * @param possible - * @return - */ - private static boolean isValid(String possible) { - boolean result = false; - if(possible.length() == 2){ - char c1 = possible.charAt(0); - char c2 = possible.charAt(1); - // 1st character must be a digit - if(Character.isDigit(c1)) { - // 2nd character must be digit or upper case letter A-F - if(Character.isDigit(c2)) { - result = true; - } - else if(Character.isUpperCase(c2) && (c2 == 'A' || c2 == 'B' || c2 == 'C'|| c2 == 'D'|| c2 == 'E'|| c2 == 'F')) { - result = true; - } - } - } - return result; - } - - /** - * Mangle string to WAS-like specifications - * - */ - public final static String mangle(String name) { - StringBuffer modifiedName = new StringBuffer(); - - // extension (.jsp, .jspf, .jspx, etc...) should already be encoded in name - - int length = name.length(); - // in case name is forbidden (a number, class, for, etc...) - modifiedName.append('_'); - - // ensure rest of characters are valid - for (int i=0; i< length; i++) { - char currentChar = name.charAt(i); - if (Character.isJavaIdentifierPart(currentChar) == true ) { - modifiedName.append(currentChar); - } else { - modifiedName.append(mangleChar(currentChar)); - } - } - return modifiedName.toString(); - - } - - /** - * take a character and return its hex equivalent - */ - private final static String mangleChar(char ch) { - if ( ch == File.separatorChar ) { - ch = '/'; - } - - if ( Character.isLetterOrDigit(ch) == true ) { - return "" + ch; //$NON-NLS-1$ - } - return "_" + Integer.toHexString(ch).toUpperCase() + "_"; //$NON-NLS-1$ //$NON-NLS-2$ - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPIncludeRegionHelper.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPIncludeRegionHelper.java deleted file mode 100644 index 5ef7219115..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPIncludeRegionHelper.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; - - -/** - * Extension of XMLJSPRegionHelper inteded to parse entire included JSP files. - * Basically it expands the rules for what tags are parsed as JSP. - * - * @author pavery - */ -class JSPIncludeRegionHelper extends XMLJSPRegionHelper { - /** - * @param JSPTranslator - */ - public JSPIncludeRegionHelper(JSPTranslator translator) { - super(translator); - } - - // these methods determine what content gets added to the local scriplet, expression, declaration buffers - /* - * return true for elements whose contents we might want to add to the java file we are building - */ - protected boolean isJSPStartRegion(IStructuredDocumentRegion sdRegion) { - String type = sdRegion.getFirstRegion().getType(); - return type == DOMRegionContext.XML_TAG_OPEN || type == DOMJSPRegionContexts.JSP_DECLARATION_OPEN || type == DOMJSPRegionContexts.JSP_EXPRESSION_OPEN || type == DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN || type == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN || type == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME; - } - - protected boolean isDeclaration(String tagName) { - return tagName.equalsIgnoreCase("jsp:declaration") //$NON-NLS-1$ - || tagName.equalsIgnoreCase("<%!"); //$NON-NLS-1$ - } - - protected boolean isExpression(String tagName) { - return tagName.equalsIgnoreCase("jsp:expression") //$NON-NLS-1$ - || tagName.equalsIgnoreCase("<%="); //$NON-NLS-1$ - } - - protected boolean isScriptlet(String tagName) { - return tagName.equalsIgnoreCase("jsp:scriptlet") //$NON-NLS-1$ - || tagName.equalsIgnoreCase("<%"); //$NON-NLS-1$ - } - - protected boolean isIncludeDirective(String tagName) { - return tagName.equalsIgnoreCase("jsp:directive.include") || //$NON-NLS-1$ - tagName.equalsIgnoreCase("include"); //$NON-NLS-1$ - } - - protected boolean isTaglibDirective(String tagName) { - return tagName.equalsIgnoreCase("jsp:directive.taglib") //$NON-NLS-1$ - || tagName.equalsIgnoreCase("taglib"); //$NON-NLS-1$ - } - - protected boolean isPageDirective(String tagName) { - return tagName.equalsIgnoreCase("jsp:directive.page") //$NON-NLS-1$ - || tagName.equalsIgnoreCase("page"); //$NON-NLS-1$ - } - - // different btwn XML-JSP and JSP tags - protected String getRegionName(IStructuredDocumentRegion sdRegion) { - ITextRegion nameRegion = null; - String nameStr = ""; //$NON-NLS-1$ - int size = sdRegion.getRegions().size(); - if (size > 1) { - // presumably XML-JSP <jsp:scriptlet> | <jsp:expression> | <jsp:declaration> - nameRegion = sdRegion.getRegions().get(1); - } - else if (size == 1) { - // presumably JSP open <% | <%= | <%! - nameRegion = sdRegion.getRegions().get(0); - } - if (nameRegion != null) - nameStr = fTextToParse.substring(sdRegion.getStartOffset(nameRegion), sdRegion.getTextEndOffset(nameRegion)); - return nameStr.trim(); - } - - protected void processOtherRegions(IStructuredDocumentRegion sdRegion) { - processIncludeDirective(sdRegion); - processPageDirective(sdRegion); - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPProblemRequestor.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPProblemRequestor.java deleted file mode 100644 index cf47682465..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPProblemRequestor.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.eclipse.jst.jsp.core.internal.java; - -/** - * @author pavery - */ - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jdt.core.IProblemRequestor; -import org.eclipse.jdt.core.compiler.IProblem; - -class JSPProblemRequestor implements IProblemRequestor { - - private boolean fIsActive = false; - - private boolean fIsRunning = false; - - private List fCollectedProblems; - - public void beginReporting() { - - fIsRunning = true; - fCollectedProblems = new ArrayList(); - } - - public void acceptProblem(IProblem problem) { - - if (isActive()) - fCollectedProblems.add(problem); - } - - public void endReporting() { - - fIsRunning = false; - } - - public boolean isActive() { - - return fIsActive && fCollectedProblems != null; - } - - /** - * Sets the active state of this problem requestor. - * - * @param isActive - * the state of this problem requestor - */ - public void setIsActive(boolean isActive) { - - if (fIsActive != isActive) { - fIsActive = isActive; - if (fIsActive) - startCollectingProblems(); - else - stopCollectingProblems(); - } - } - - /** - * Tells this annotation model to collect temporary problems from now on. - */ - private void startCollectingProblems() { - - fCollectedProblems = new ArrayList(); - } - - /** - * Tells this annotation model to no longer collect temporary problems. - */ - private void stopCollectingProblems() { - - // do nothing - } - - /** - * @return the list of collected problems - */ - public List getCollectedProblems() { - - return fCollectedProblems; - } - - public boolean isRunning() { - - return fIsRunning; - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslation.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslation.java deleted file mode 100644 index 05d71b71be..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslation.java +++ /dev/null @@ -1,572 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jdt.core.IBuffer; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.WorkingCopyOwner; -import org.eclipse.jface.text.Position; -import org.eclipse.jst.jsp.core.internal.Logger; - - -/** - * <p> - * An implementation of IJSPTranslation. - * <br> - * This object that holds the java translation of - * a JSP file as well as a mapping of ranges from the translated Java to the JSP source, - * and mapping from JSP source back to the translated Java. - * </p> - * - * <p> - * You may also use JSPTranslation to do CompilationUnit-esque things such as: - * <ul> - * <li>code select (get java elements for jsp selection)</li> - * <li>reconcile</li> - * <li>get java regions for jsp selection</li> - * <li>get a JSP text edit based on a Java text edit</li> - * <li>determine if a java offset falls within a jsp:useBean range</li> - * <li>determine if a java offset falls within a jsp import statment</li> - * </ul> - * </p> - * - * @author pavery - */ -public class JSPTranslation implements IJSPTranslation { - - // for debugging - private static final boolean DEBUG; - static { - String value= Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jsptranslation"); //$NON-NLS-1$ - DEBUG= value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - /** the name of the class (w/out extension) **/ - private String fClassname = ""; //$NON-NLS-1$ - private IJavaProject fJavaProject = null; - private HashMap fJava2JspMap = null; - private HashMap fJsp2JavaMap = null; - private HashMap fJava2JspImportsMap = null; - private HashMap fJava2JspUseBeanMap = null; - private HashMap fJava2JspIndirectMap = null; - private List fELProblems = null; - - // don't want to hold onto model (via translator) - // all relevant info is extracted in the constructor. - //private JSPTranslator fTranslator = null; - private String fJavaText = ""; //$NON-NLS-1$ - private String fJspText = ""; //$NON-NLS-1$ - - private ICompilationUnit fCompilationUnit = null; - private IProgressMonitor fProgressMonitor = null; - /** lock to synchronize access to the compilation unit **/ - private byte[] fLock = null; - - public JSPTranslation(IJavaProject javaProj, JSPTranslator translator) { - - fLock = new byte[0]; - fJavaProject = javaProj; - //fTranslator = translator; - - // can be null if it's an empty document (w/ NullJSPTranslation) - if(translator != null) { - fJavaText = translator.getTranslation().toString(); - fJspText = translator.getJspText(); - fClassname = translator.getClassname(); - fJava2JspMap = translator.getJava2JspRanges(); - fJsp2JavaMap = translator.getJsp2JavaRanges(); - fJava2JspImportsMap = translator.getJava2JspImportRanges(); - fJava2JspUseBeanMap = translator.getJava2JspUseBeanRanges(); - fJava2JspIndirectMap = translator.getJava2JspIndirectRanges(); - fELProblems = translator.getELProblems(); - } - } - - public IJavaProject getJavaProject() { - return fJavaProject; - } - - /* (non-Javadoc) - * @see org.eclipse.jst.jsp.core.internal.java.IJSPTranslation#getJavaText() - */ - public String getJavaText() { - //return (fTranslator != null) ? fTranslator.getTranslation().toString() : ""; //$NON-NLS-1$ - return fJavaText; - } - - public String getJspText() { - //return (fTranslator != null) ? fTranslator.getJspText() : ""; //$NON-NLS-1$ - return fJspText; - } - - public String getJavaPath() { - // create if necessary - ICompilationUnit cu = getCompilationUnit(); - return (cu != null) ? cu.getPath().toString() : ""; //$NON-NLS-1$ - } - - /** - * - * @return the corresponding Java offset for a give JSP offset - */ - public int getJavaOffset(int jspOffset) { - int result = -1; - int offsetInRange = 0; - Position jspPos, javaPos = null; - - // iterate all mapped jsp ranges - Iterator it = fJsp2JavaMap.keySet().iterator(); - while (it.hasNext()) { - jspPos = (Position) it.next(); - // need to count the last position as included - if (!jspPos.includes(jspOffset) && !(jspPos.offset+jspPos.length == jspOffset)) - continue; - - offsetInRange = jspOffset - jspPos.offset; - javaPos = (Position) fJsp2JavaMap.get(jspPos); - if(javaPos != null) - result = javaPos.offset + offsetInRange; - else { - - Logger.log(Logger.ERROR, "JavaPosition was null!" + jspOffset); //$NON-NLS-1$ - } - break; - } - return result; - } - - /** - * - * @return the corresponding JSP offset for a give Java offset - */ - public int getJspOffset(int javaOffset) { - int result = -1; - int offsetInRange = 0; - Position jspPos, javaPos = null; - - // iterate all mapped java ranges - Iterator it = fJava2JspMap.keySet().iterator(); - while (it.hasNext()) { - javaPos = (Position) it.next(); - // need to count the last position as included - if (!javaPos.includes(javaOffset) && !(javaPos.offset+javaPos.length == javaOffset)) - continue; - - offsetInRange = javaOffset - javaPos.offset; - jspPos = (Position) fJava2JspMap.get(javaPos); - - if(jspPos != null) - result = jspPos.offset + offsetInRange; - else { - Logger.log(Logger.ERROR, "jspPosition was null!" + javaOffset); //$NON-NLS-1$ - } - break; - } - - return result; - } - - /** - * - * @return a map of Positions in the Java document to corresponding Positions in the JSP document - */ - public HashMap getJava2JspMap() { - return fJava2JspMap; - } - - /** - * - * @return a map of Positions in the JSP document to corresponding Positions in the Java document - */ - public HashMap getJsp2JavaMap() { - return fJsp2JavaMap; - } - - /** - * Checks if the specified java range covers more than one partition in the JSP file. - * - * <p> - * ex. - * <code> - * <% - * if(submit) - * { - * %> - * <p> print this...</p> - * - * <% - * } - * else - * { - * %> - * <p> print that...</p> - * <% - * } - * %> - * </code> - * </p> - * - * the if else statement above spans 3 JSP partitions, so it would return true. - * @param offset - * @param length - * @return <code>true</code> if the java code spans multiple JSP partitions, otherwise false. - */ - public boolean javaSpansMultipleJspPartitions(int javaOffset, int javaLength) { - HashMap java2jsp = getJava2JspMap(); - int count = 0; - Iterator it = java2jsp.keySet().iterator(); - Position javaRange = null; - while(it.hasNext()) { - javaRange = (Position)it.next(); - if(javaRange.overlapsWith(javaOffset, javaLength)) - count++; - if(count > 1) - return true; - } - return false; - } - - /** - * Returns the Java positions for the given range in the Java document. - * - * @param offset - * @param length - * @return - */ - public Position[] getJavaRanges(int offset, int length) { - - List results = new ArrayList(); - Iterator it = getJava2JspMap().keySet().iterator(); - Position p = null; - while(it.hasNext()) { - p = (Position)it.next(); - if(p.overlapsWith(offset, length)) - results.add(p); - } - return (Position[])results.toArray(new Position[results.size()]); - } - - /** - * Indicates if the java Offset falls within the user import ranges - * @param javaOffset - * @return true if the java Offset falls within the user import ranges, otherwise false - */ - public boolean isImport(int javaOffset) { - return isInRanges(javaOffset, fJava2JspImportsMap); - } - - /** - * Indicates if the java offset falls within the use bean ranges - * @param javaOffset - * @return true if the java offset falls within the user import ranges, otherwise false - */ - public boolean isUseBean(int javaOffset) { - return isInRanges(javaOffset, fJava2JspUseBeanMap); - } - - /** - * @param javaPos - * @return - */ - public boolean isIndirect(int javaOffset) { - return isInRanges(javaOffset, fJava2JspIndirectMap, false); - } - - private boolean isInRanges(int javaOffset, HashMap ranges) { - return isInRanges(javaOffset, ranges, true); - } - /** - * Tells you if the given offset is included in any of the ranges (Positions) passed in. - * includeEndOffset tells whether or not to include the end offset of each range in the test. - * - * @param javaOffset - * @param ranges - * @param includeEndOffset - * @return - */ - private boolean isInRanges(int javaOffset, HashMap ranges, boolean includeEndOffset) { - - Iterator it = ranges.keySet().iterator(); - while(it.hasNext()) { - Position javaPos = (Position)it.next(); - // also include the start and end offset (only if requested) - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=81687 - if(javaPos.includes(javaOffset) || (includeEndOffset && javaPos.offset+javaPos.length == javaOffset)) - return true; - } - return false; - } - - /** - * Return the Java CompilationUnit associated with this JSPTranslation (this particular model) - * When using methods on the CU, it's reccomended to synchronize on the CU for reliable - * results. - * - * The method is synchronized to ensure that <code>createComplilationUnit</code> doesn't - * get entered 2 or more times simultaneously. A side effect of that is 2 compilation units - * can be created in the JavaModelManager, but we only hold one reference to it in - * fCompilationUnit. This would lead to a leak since only one instance of the CU is - * discarded in the <code>release()</code> method. - * - * @return a CompilationUnit representation of this JSPTranslation - */ - public ICompilationUnit getCompilationUnit() { - synchronized(fLock) { - try { - if (fCompilationUnit == null) { - fCompilationUnit = createCompilationUnit(); - } - } - catch (JavaModelException jme) { - if(DEBUG) - Logger.logException("error creating JSP working copy... ", jme); //$NON-NLS-1$ - } - } - return fCompilationUnit; - } - - /** - * Originally from ReconcileStepForJava. Creates an ICompilationUnit from the contents of the JSP document. - * - * @return an ICompilationUnit from the contents of the JSP document - */ - private ICompilationUnit createCompilationUnit() throws JavaModelException { - - IPackageFragment packageFragment = null; - IJavaElement je = getJavaProject(); - - if (je == null || !je.exists()) - return null; - - switch (je.getElementType()) { - case IJavaElement.PACKAGE_FRAGMENT : - je = je.getParent(); - // fall through - - case IJavaElement.PACKAGE_FRAGMENT_ROOT : - IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot) je; - packageFragment = packageFragmentRoot.getPackageFragment(IPackageFragmentRoot.DEFAULT_PACKAGEROOT_PATH); - break; - - case IJavaElement.JAVA_PROJECT : - IJavaProject jProject = (IJavaProject) je; - - if (!jProject.exists()) { - if(DEBUG) { - System.out.println("** Abort create working copy: cannot create working copy: JSP is not in a Java project"); //$NON-NLS-1$ - } - return null; - } - - packageFragmentRoot = null; - IPackageFragmentRoot[] packageFragmentRoots = jProject.getPackageFragmentRoots(); - int i = 0; - while (i < packageFragmentRoots.length) { - if (!packageFragmentRoots[i].isArchive() && !packageFragmentRoots[i].isExternal()) { - packageFragmentRoot = packageFragmentRoots[i]; - break; - } - i++; - } - if (packageFragmentRoot == null) { - if(DEBUG) { - System.out.println("** Abort create working copy: cannot create working copy: JSP is not in a Java project with source package fragment root"); //$NON-NLS-1$ - } - return null; - } - packageFragment = packageFragmentRoot.getPackageFragment(IPackageFragmentRoot.DEFAULT_PACKAGEROOT_PATH); - break; - - default : - return null; - } - - ICompilationUnit cu = packageFragment.getCompilationUnit(getClassname() + ".java").getWorkingCopy(getWorkingCopyOwner(), getProblemRequestor(), getProgressMonitor()); //$NON-NLS-1$ - setContents(cu); - - if(DEBUG) { - System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); //$NON-NLS-1$ - System.out.println("(+) JSPTranslation ["+ this + "] finished creating CompilationUnit: " + cu); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); //$NON-NLS-1$ - } - - return cu; - } - - /** - * - * @return the problem requestor for the CompilationUnit in this JSPTranslation - */ - private JSPProblemRequestor getProblemRequestor() { - return CompilationUnitHelper.getInstance().getProblemRequestor(); - } - - /** - * - * @return the IWorkingCopyOwner for this CompilationUnit in this JSPTranslation - */ - public WorkingCopyOwner getWorkingCopyOwner() { - return CompilationUnitHelper.getInstance().getWorkingCopyOwner(); - } - - /** - * - * @return the progress monitor used in long operations (reconcile, creating the CompilationUnit...) in this JSPTranslation - */ - private IProgressMonitor getProgressMonitor() { - if (fProgressMonitor == null) - fProgressMonitor = new NullProgressMonitor(); - return fProgressMonitor; - } - - /** - * - * @return the List of problems collected during reconcile of the compilation unit - */ - public List getProblems() { - List problems = getProblemRequestor().getCollectedProblems(); - return problems != null ? problems : new ArrayList(); - } - - /** - * - * @return the List of problems collected during reconcile of the compilation unit - */ - public List getELProblems() { - return fELProblems != null ? fELProblems : new ArrayList(); - } - - - /** - * Must be set true in order for problems to be collected during reconcile. - * If set false, problems will be ignored during reconcile. - * @param collect - */ - public void setProblemCollectingActive(boolean collect) { - ICompilationUnit cu = getCompilationUnit(); - if(cu != null) { - getProblemRequestor().setIsActive(collect); - } - } - - /** - * Reconciles the compilation unit for this JSPTranslation - */ - public void reconcileCompilationUnit() { - ICompilationUnit cu = getCompilationUnit(); - if (cu != null) { - try { - synchronized(cu) { - cu.makeConsistent(getProgressMonitor()); - cu.reconcile(ICompilationUnit.NO_AST, true, getWorkingCopyOwner(), getProgressMonitor()); - } - } - catch (JavaModelException e) { - Logger.logException(e); - } - } - } - - /** - * Set contents of the compilation unit to the translated jsp text. - * @param the ICompilationUnit on which to set the buffer contents - */ - private void setContents(ICompilationUnit cu) { - if (cu == null) - return; - - synchronized (cu) { - IBuffer buffer; - try { - - buffer = cu.getBuffer(); - } - catch (JavaModelException e) { - e.printStackTrace(); - buffer = null; - } - - if (buffer != null) - buffer.setContents(getJavaText()); - } - } - - /** - * Returns the IJavaElements corresponding to the JSP range in the JSP StructuredDocument - * - * @param jspStart staring offset in the JSP document - * @param jspEnd ending offset in the JSP document - * @return IJavaElements corresponding to the JSP selection - */ - public IJavaElement[] getElementsFromJspRange(int jspStart, int jspEnd) { - - int javaPositionStart = getJavaOffset(jspStart); - int javaPositionEnd = getJavaOffset(jspEnd); - - IJavaElement[] EMTPY_RESULT_SET = new IJavaElement[0]; - IJavaElement[] result = EMTPY_RESULT_SET; - try { - ICompilationUnit cu = getCompilationUnit(); - if (cu != null && cu.getBuffer().getLength() > 0 && javaPositionStart > 0 && javaPositionEnd >= javaPositionStart) { - synchronized (cu) { - result = cu.codeSelect(javaPositionStart, javaPositionEnd - javaPositionStart); - } - } - - if (result == null || result.length == 0) - return EMTPY_RESULT_SET; - } - catch (JavaModelException x) { - Logger.logException(x); - } - - return result; - } - - public String getClassname() { - return fClassname; - } - - /** - * Must discard compilation unit, or else they can leak in the JavaModelManager - */ - public void release() { - - synchronized(fLock) { - if(fCompilationUnit != null) { - try { - if(DEBUG) { - System.out.println("------------------------------------------------------------------"); //$NON-NLS-1$ - System.out.println("(-) JSPTranslation [" + this +"] discarding CompilationUnit: " + fCompilationUnit); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("------------------------------------------------------------------"); //$NON-NLS-1$ - } - fCompilationUnit.discardWorkingCopy(); - } - catch (JavaModelException e) { - // we're done w/ it anyway - } - } - } - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationAdapter.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationAdapter.java deleted file mode 100644 index 2a2b50213f..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationAdapter.java +++ /dev/null @@ -1,231 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.DocumentEvent; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IDocumentListener; -import org.eclipse.jst.jsp.core.internal.Logger; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; - -/** - * An adapter for getting a JSPTranslation of the document. - * - * @author pavery - */ -public class JSPTranslationAdapter implements INodeAdapter, IDocumentListener { - - // for debugging - private static final boolean DEBUG; - static { - String value = Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jsptranslation"); //$NON-NLS-1$ - DEBUG = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - private IDocument fJspDocument = null; - private IDocument fJavaDocument = null; - private JSPTranslationExtension fJSPTranslation = null; - private boolean fDocumentIsDirty = true; - private IDOMModel fXMLModel; - private JSPTranslator fTranslator = null; - private NullProgressMonitor fTranslationMonitor = null; - - public JSPTranslationAdapter(IDOMModel xmlModel) { - setXMLModel(xmlModel); - initializeJavaPlugins(); - } - - /** - * Initialize the required Java Plugins - */ - protected void initializeJavaPlugins() { - JavaCore.getPlugin(); - } - - public boolean isAdapterForType(Object type) { - return type.equals(IJSPTranslation.class); - } - - public void notifyChanged(INodeNotifier notifier, int eventType, Object changedFeature, Object oldValue, Object newValue, int pos) { - // nothing to do - } - - /** - * Automatically set through the setXMLModel(XMLModel) - * - * @param doc - */ - private void setDocument(IDocument doc) { - if (fJspDocument != null) - fJspDocument.removeDocumentListener(this); - if (doc != null) { - doc.addDocumentListener(this); - fJspDocument = doc; - } - } - - /** - * @see org.eclipse.jface.text.IDocumentListener#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent) - */ - public void documentAboutToBeChanged(DocumentEvent event) { - // do nothing - } - - /** - * @see org.eclipse.jface.text.IDocumentListener#documentChanged(org.eclipse.jface.text.DocumentEvent) - */ - public void documentChanged(DocumentEvent event) { - // mark translation for rebuilding - fDocumentIsDirty = true; - } - - public void release() { - - if (fJspDocument != null) - fJspDocument.removeDocumentListener(this); - - if (fTranslationMonitor != null) - fTranslationMonitor.setCanceled(true); - - if (fJSPTranslation != null) { - - if (DEBUG) - System.out.println("JSPTranslationAdapter releasing:" + fJSPTranslation); //$NON-NLS-1$ - - fJSPTranslation.release(); - } - } - - /** - * Returns the JSPTranslation for this adapter. - * - * @return a JSPTranslationExtension - */ - public synchronized JSPTranslationExtension getJSPTranslation() { - - if (fJSPTranslation == null || fDocumentIsDirty) { - JSPTranslator translator = null; - if (getXMLModel() != null && getXMLModel().getIndexedRegion(0) != null) { - translator = getTranslator((IDOMNode) getXMLModel().getIndexedRegion(0)); - translator.translate(); - StringBuffer javaContents = translator.getTranslation(); - fJavaDocument = new Document(javaContents.toString()); - - } - else { - // empty document case - translator = new JSPTranslator(); - StringBuffer emptyContents = translator.getEmptyTranslation(); - fJavaDocument = new Document(emptyContents.toString()); - } - // it's going to be rebuilt, so we release it here - if (fJSPTranslation != null) { - if (DEBUG) - System.out.println("JSPTranslationAdapter releasing:" + fJSPTranslation); //$NON-NLS-1$ - fJSPTranslation.release(); - } - fJSPTranslation = new JSPTranslationExtension(getXMLModel().getStructuredDocument(), fJavaDocument, getJavaProject(), translator); - fDocumentIsDirty = false; - } - return fJSPTranslation; - } - - /** - * Returns the JSPTranslator for this adapter. If it's null, a new - * translator is created with the xmlNode. Otherwise the - * translator.reset(xmlNode) is called to reset the current local - * translator. - * - * @param xmlNode - * the first node of the JSP document to be translated - * @return the JSPTranslator for this adapter (creates if null) - */ - private JSPTranslator getTranslator(IDOMNode xmlNode) { - if (fTranslator == null) { - fTranslationMonitor = new NullProgressMonitor(); - fTranslator = new JSPTranslator(); - fTranslator.reset(xmlNode, fTranslationMonitor); - } - else - fTranslator.reset(xmlNode, fTranslationMonitor); - return fTranslator; - } - - /** - * set the XMLModel for this adapter. Must be called. - * - * @param xmlModel - */ - public void setXMLModel(IDOMModel xmlModel) { - fXMLModel = xmlModel; - setDocument(fXMLModel.getStructuredDocument()); - } - - /** - * @return the XMLModel for this adapter. - */ - private IDOMModel getXMLModel() { - return fXMLModel; - } - - /** - * Gets (or creates via JavaCore) a JavaProject based on the location of - * this adapter's XMLModel. Returns null for non IFile based models. - * - * @return the java project where - */ - public IJavaProject getJavaProject() { - - IJavaProject javaProject = null; - try { - String baseLocation = getXMLModel().getBaseLocation(); - // 20041129 (pa) the base location changed for XML model - // because of FileBuffers, so this code had to be updated - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=79686 - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - IPath filePath = new Path(baseLocation); - IProject project = null; - if (filePath.segmentCount() > 0) { - project = root.getProject(filePath.segment(0)); - } -// IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(new Path(baseLocation)); -// for (int i = 0; project == null && i < files.length; i++) { -// if (files[i].getType() != IResource.PROJECT) { -// project = files[i].getProject(); -// break; -// } -// } - if (project != null) { - javaProject = JavaCore.create(project); - } - } - catch (Exception ex) { - if (getXMLModel() != null) - Logger.logException("(JSPTranslationAdapter) problem getting java project from the XMLModel's baseLocation > " + getXMLModel().getBaseLocation(), ex); //$NON-NLS-1$ - else - Logger.logException("(JSPTranslationAdapter) problem getting java project", ex); //$NON-NLS-1$ - } - return javaProject; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationAdapterFactory.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationAdapterFactory.java deleted file mode 100644 index 7d4b14fa33..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationAdapterFactory.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.wst.sse.core.internal.provisional.AbstractAdapterFactory; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; - -/** - * Factory for JSPTranslationAdapters. - * - * @author pavery - * - */ -public class JSPTranslationAdapterFactory extends AbstractAdapterFactory { - - private JSPTranslationAdapter fAdapter = null; - - // for debugging - private static final boolean DEBUG; - static { - String value= Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jsptranslation"); //$NON-NLS-1$ - DEBUG= value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - public JSPTranslationAdapterFactory() { - super(IJSPTranslation.class, true); - } - - public INodeAdapterFactory copy() { - return new JSPTranslationAdapterFactory(); - } - - protected INodeAdapter createAdapter(INodeNotifier target) { - if (target instanceof IDOMNode && fAdapter == null) { - fAdapter = new JSPTranslationAdapter(((IDOMNode) target).getModel()); - if(DEBUG) { - System.out.println("(+) JSPTranslationAdapterFactory [" + this + "] created adapter: " + fAdapter); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - return fAdapter; - } - - - public void release() { - if (fAdapter != null) { - if(DEBUG) { - System.out.println("(-) JSPTranslationAdapterFactory [" + this + "] releasing adapter: " + fAdapter); //$NON-NLS-1$ //$NON-NLS-2$ - } - fAdapter.release(); - } - super.release(); - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationExtension.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationExtension.java deleted file mode 100644 index 265259d38f..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationExtension.java +++ /dev/null @@ -1,393 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.filebuffers.ITextFileBuffer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.Position; -import org.eclipse.jst.jsp.core.internal.Logger; -import org.eclipse.text.edits.DeleteEdit; -import org.eclipse.text.edits.InsertEdit; -import org.eclipse.text.edits.MalformedTreeException; -import org.eclipse.text.edits.MultiTextEdit; -import org.eclipse.text.edits.ReplaceEdit; -import org.eclipse.text.edits.TextEdit; -import org.eclipse.text.edits.UndoEdit; -import org.eclipse.wst.sse.core.internal.FileBufferModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.StructuredModelManager; - - -/** - * Adds the notion of IDocuments (jsp Document and java Document) - * Used for TextEdit translation - * @author pavery - */ -public class JSPTranslationExtension extends JSPTranslation { - - // for debugging - private static final boolean DEBUG; - static { - String value= Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jsptranslation"); //$NON-NLS-1$ - DEBUG= value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - private static final String CT_ID_JSP_FRAGMENT = "org.eclipse.jst.jsp.core.jspfragmentsource"; //$NON-NLS-1$ - - // just a convenience data structure - // to keep track of java position deltas - private class PositionDelta { - - public boolean isDeleted = false; - public int preOffset = 0; - public int preLength = 0; - public int postOffset = 0; - public int postLength = 0; - - public PositionDelta(int preOffset, int preLength) { - this.preOffset = preOffset; - this.preLength = preLength; - } - public void setPostEditData(int postOffset, int postLength, boolean isDeleted) { - this.postOffset = postOffset; - this.postLength = postLength; - this.isDeleted = isDeleted; - } - } - - private IDocument fJspDocument = null; - private IDocument fJavaDocument = null; - - public JSPTranslationExtension(IDocument jspDocument, IDocument javaDocument, IJavaProject javaProj, JSPTranslator translator) { - super(javaProj, translator); - fJspDocument = jspDocument; - fJavaDocument = javaDocument; - - // make sure positions are added to Java and JSP documents - // this is necessary for text edits - addPositionsToDocuments(); - } - - public IDocument getJspDocument() { - return fJspDocument; - } - - public IDocument getJavaDocument() { - return fJavaDocument; - } - - public String getJavaText() { - return getJavaDocument() != null ? getJavaDocument().get() : ""; //$NON-NLS-1$ - } - - /** - * Returns a corresponding TextEdit for the JSP file given a TextEdit for a Java file. - * - * @param javaEdit - * @return the corresponding JSP edits (not applied to the document yet) - */ - public TextEdit getJspEdit(TextEdit javaEdit) { - - if(javaEdit == null) - return null; - - List jspEdits = new ArrayList(); - - int offset = javaEdit.getOffset(); - int length = javaEdit.getLength(); - - if(javaEdit instanceof MultiTextEdit && javaEdit.getChildren().length > 0) { - - IRegion r = TextEdit.getCoverage(getAllEdits(javaEdit)); - offset = r.getOffset(); - length = r.getLength(); - } - - // get java ranges that will be affected by the edit - Position[] javaPositions = getJavaRanges(offset, length); - - // record position data before the change - Position[] jspPositions = new Position[javaPositions.length]; - PositionDelta[] deltas = new PositionDelta[javaPositions.length]; - for(int i=0; i<javaPositions.length; i++) { - deltas[i] = new PositionDelta(javaPositions[i].offset, javaPositions[i].length); - // isIndirect means the position doesn't actually exist as exact text - // mapping from java <-> jsp (eg. an import statement) - if(!isIndirect(javaPositions[i].offset)) - jspPositions[i] = (Position)getJava2JspMap().get(javaPositions[i]); - } - - if(DEBUG) { - System.out.println("================================================"); //$NON-NLS-1$ - System.out.println("deltas:"); //$NON-NLS-1$ - String javaText = getJavaText(); - for(int i=0; i<deltas.length; i++) - System.out.println("pos[" + deltas[i].preOffset + ":" + deltas[i].preLength + "]" + javaText.substring(deltas[i].preOffset, deltas[i].preOffset + deltas[i].preLength) ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - System.out.println("==============================================="); //$NON-NLS-1$ - } - UndoEdit undo = null; - // apply the edit to the java document - try { - undo = javaEdit.apply(getJavaDocument()); - } catch (MalformedTreeException e) { - Logger.logException(e); - } catch (BadLocationException e) { - Logger.logException(e); - } - // now at this point Java positions are unreliable since they were updated after applying java edit. - - String newJavaText = getJavaDocument().get(); - if(DEBUG) - System.out.println("java post format text:\n" + newJavaText); //$NON-NLS-1$ - - // record post edit data - for(int i=0; i<javaPositions.length; i++) - deltas[i].setPostEditData(javaPositions[i].offset, javaPositions[i].length, javaPositions[i].isDeleted); - - // create appropriate text edits for deltas - Position jspPos = null; - String replaceText = ""; //$NON-NLS-1$ - for(int i=0; i<deltas.length; i++) { - jspPos = jspPositions[i]; - // can be null if it's an indirect mapping position - // or if something was added into java that was not originally in JSP (like a new import...) - - if(jspPos != null) { - if(deltas[i].isDeleted) { - jspEdits.add(new DeleteEdit(jspPos.offset, jspPos.length)); - } - else { - replaceText = newJavaText.substring(deltas[i].postOffset, deltas[i].postOffset + deltas[i].postLength); - jspEdits.add(new ReplaceEdit(jspPos.offset, jspPos.length, replaceText)); - } - if(DEBUG) - debugReplace(deltas, jspPos, replaceText, i); - } - else { - // the new Java text has no corresponding JSP position - // possible new import? - if(isImport(javaPositions[i].getOffset()) && replaceText.lastIndexOf("import ") != -1) { //$NON-NLS-1$ - replaceText = newJavaText.substring(deltas[i].postOffset, deltas[i].postOffset + deltas[i].postLength); - String importText = replaceText.substring(replaceText.lastIndexOf("import "), replaceText.indexOf(";")); //$NON-NLS-1$ //$NON-NLS-2$ - // evenutally need to check if it's XML-JSP - importText = "<%@page import=\"" + importText + "\" %>\n"; //$NON-NLS-1$ //$NON-NLS-2$ - jspEdits.add(new InsertEdit(0, importText)); - } - } - } - TextEdit allJspEdits = createMultiTextEdit((TextEdit[])jspEdits.toArray(new TextEdit[jspEdits.size()])); - - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=105632 - // undo the java edit - // (so the underlying Java document still represents what's in the editor) - if(undo != null) { - try { - undo.apply(getJavaDocument()); - } - catch (MalformedTreeException e) { - Logger.logException(e); - } - catch (BadLocationException e) { - Logger.logException(e); - } - } - - return allJspEdits; - } - - /** - * Combines an array of edits into one MultiTextEdit (with the appropriate coverage region) - * @param edits - * @return - */ - private TextEdit createMultiTextEdit(TextEdit[] edits) { - - if(edits.length == 0) - return new MultiTextEdit(); - - IRegion region = TextEdit.getCoverage(edits); - MultiTextEdit multiEdit = new MultiTextEdit(region.getOffset(), region.getLength()); - for (int i = 0; i < edits.length; i++) { - addToMultiEdit(edits[i], multiEdit); - } - return multiEdit; - } - - - private void addToMultiEdit(TextEdit edit, MultiTextEdit multiEdit) { - - // check for overlap here - // discard overlapping edits.. - // possible exponential performance hit... need a better way... - TextEdit[] children = multiEdit.getChildren(); - for (int i = 0; i < children.length; i++) { - if(children[i].covers(edit)) - // don't add - return; - } - multiEdit.addChild(edit); - } - - - /** - * @param translation - */ - private void addPositionsToDocuments() { - - // can be null if it's a NullJSPTranslation - if(getJavaDocument() != null && getJspDocument() != null) { - - HashMap java2jsp = getJava2JspMap(); - Iterator it = java2jsp.keySet().iterator(); - Position javaPos = null; - while(it.hasNext()) { - javaPos =(Position)it.next(); - try { - - fJavaDocument.addPosition(javaPos); - - } catch (BadLocationException e) { - if(DEBUG) { - System.out.println("tyring to add Java Position:[" + javaPos.offset + ":" + javaPos.length + "] to " + getJavaPath()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - //System.out.println("substring :[" + fJavaDocument.get().substring(javaPos.offset) + "]"); //$NON-NLS-1$ //$NON-NLS-2$ - Logger.logException(e); - } - } - - try { - - fJspDocument.addPosition((Position)java2jsp.get(javaPos)); - - } catch (BadLocationException e) { - if(DEBUG) { - System.out.println("tyring to add JSP Position:[" + ((Position)java2jsp.get(javaPos)).offset + ":" +((Position)java2jsp.get(javaPos)).length + "] to " + getJavaPath()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - Logger.logException(e); - } - } - } - } - } - - /** - * Recursively gets all child edits - * @param javaEdit - * @return all child edits - */ - private TextEdit[] getAllEdits(TextEdit javaEdit) { - - List result = new ArrayList(); - if(javaEdit instanceof MultiTextEdit) { - TextEdit[] children = javaEdit.getChildren(); - for (int i = 0; i < children.length; i++) - result.addAll(Arrays.asList(getAllEdits(children[i]))); - } - else - result.add(javaEdit); - return (TextEdit[])result.toArray(new TextEdit[result.size()]); - } - - public void reconcileCompilationUnit() { - - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=105109 - // don't want errors for JSP fragments - // since it's likely we don't know their context - if(!isJspFragment()) - super.reconcileCompilationUnit(); - } - - private boolean isJspFragment() { - - boolean isFrag = false; - - // pa_TODO - // need a way to get underlying IResource or IFile - // from IDocument - - // then check content type to see if it's JSP fragment - ITextFileBuffer buf = FileBufferModelManager.getInstance().getBuffer(getJspDocument()); - if(buf != null) { - isFrag = isJspFragment(buf); - } - else { - isFrag = isJspFragment(getJspDocument()); - } - return isFrag; - } - - private boolean isJspFragment(IDocument sDoc) { - boolean isFrag = false; - // buffer is null (no live models around) - IStructuredModel sModel = StructuredModelManager.getModelManager().getExistingModelForRead(sDoc); - try { - if(sModel != null) { - IPath p = new Path(sModel.getBaseLocation()); - IFile f = ResourcesPlugin.getWorkspace().getRoot().getFile(p); - if(f != null && f.exists()) { - IContentType jspFragType = Platform.getContentTypeManager().getContentType(CT_ID_JSP_FRAGMENT); - if(jspFragType != null) - isFrag = jspFragType.isAssociatedWith(f.getName()); - } - } - } - finally { - if(sModel != null) - sModel.releaseFromRead(); - } - return isFrag; - } - - private boolean isJspFragment(ITextFileBuffer buf) { - boolean isFrag = false; - IPath loc = buf.getLocation(); - if(loc != null) { - IFile f = ResourcesPlugin.getWorkspace().getRoot().getFile(loc); - if(f != null && f.exists()) { - IContentType jspFragType = Platform.getContentTypeManager().getContentType(CT_ID_JSP_FRAGMENT); - if(jspFragType != null) - isFrag = jspFragType.isAssociatedWith(f.getName()); - } - } - return isFrag; - } - - /** - * @param deltas - * @param jspPos - * @param replaceText - * @param jspText - * @param i - */ - private void debugReplace(PositionDelta[] deltas, Position jspPos, String replaceText, int i) { - String jspChunk; - jspChunk = getJspDocument().get().substring(jspPos.offset, jspPos.offset + jspPos.length); - if(!deltas[i].isDeleted) { - System.out.println("replacing:"); //$NON-NLS-1$ - System.out.println("jsp:[" + jspChunk + "]"); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("w/ :[" + replaceText + "]"); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("--------------------------------"); //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationUtil.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationUtil.java deleted file mode 100644 index d652586524..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslationUtil.java +++ /dev/null @@ -1,123 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jface.text.IDocument; -import org.eclipse.text.edits.CopySourceEdit; -import org.eclipse.text.edits.CopyTargetEdit; -import org.eclipse.text.edits.DeleteEdit; -import org.eclipse.text.edits.InsertEdit; -import org.eclipse.text.edits.MoveSourceEdit; -import org.eclipse.text.edits.MoveTargetEdit; -import org.eclipse.text.edits.MultiTextEdit; -import org.eclipse.text.edits.ReplaceEdit; -import org.eclipse.text.edits.TextEdit; -import org.eclipse.wst.sse.core.internal.provisional.IModelManager; -import org.eclipse.wst.sse.core.internal.provisional.StructuredModelManager; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; - -public class JSPTranslationUtil { - protected IDocument fDocument = null; - protected JSPTranslationExtension fTranslation = null; - - public JSPTranslationUtil(IDocument document) { - fDocument = document; - } - - public TextEdit translateTextEdit(TextEdit textEdit) { - TextEdit translatedTextEdit = null; - - int javaOffset = textEdit.getOffset(); - int jspOffset = getTranslation().getJspOffset(textEdit.getOffset()); - int length = textEdit.getLength(); - - if (textEdit instanceof MultiTextEdit) { - translatedTextEdit = new MultiTextEdit(); - TextEdit[] children = ((MultiTextEdit) textEdit).getChildren(); - for (int i = 0; i < children.length; i++) { - TextEdit translatedChildTextEdit = translateTextEdit(children[i]); - if (translatedChildTextEdit != null) - ((MultiTextEdit) translatedTextEdit).addChild(translatedChildTextEdit); - } - } - else if (textEdit instanceof ReplaceEdit) { - if (jspOffset == -1) - return null; - - if (!getTranslation().javaSpansMultipleJspPartitions(javaOffset, length)) - translatedTextEdit = new ReplaceEdit(jspOffset, length, ((ReplaceEdit) textEdit).getText()); - } - else if (textEdit instanceof InsertEdit) { - translatedTextEdit = new InsertEdit(jspOffset, ((InsertEdit) textEdit).getText()); - } - else if (textEdit instanceof DeleteEdit) { - translatedTextEdit = new DeleteEdit(jspOffset, length); - TextEdit[] children = ((DeleteEdit) textEdit).getChildren(); - for (int i = 0; i < children.length; i++) { - TextEdit translatedChildTextEdit = translateTextEdit(children[i]); - if (translatedChildTextEdit != null) - ((DeleteEdit) translatedTextEdit).addChild(translatedChildTextEdit); - } - } - else if (textEdit instanceof CopySourceEdit) { - translatedTextEdit = new CopySourceEdit(jspOffset, length); - ((CopySourceEdit) translatedTextEdit).setTargetEdit(((CopySourceEdit) textEdit).getTargetEdit()); - ((CopySourceEdit) translatedTextEdit).setSourceModifier(((CopySourceEdit) textEdit).getSourceModifier()); - } - else if (textEdit instanceof CopyTargetEdit) { - translatedTextEdit = new CopyTargetEdit(jspOffset); - ((CopyTargetEdit) textEdit).getSourceEdit().setTargetEdit((CopyTargetEdit) translatedTextEdit); - } - else if (textEdit instanceof MoveSourceEdit) { - translatedTextEdit = new MoveSourceEdit(jspOffset, length); - ((MoveSourceEdit) translatedTextEdit).setTargetEdit(((MoveSourceEdit) textEdit).getTargetEdit()); - } - else if (textEdit instanceof MoveTargetEdit) { - translatedTextEdit = new MoveTargetEdit(jspOffset); - ((MoveTargetEdit) textEdit).getSourceEdit().setTargetEdit((MoveTargetEdit) translatedTextEdit); - } - else { - System.out.println("Need to translate " + textEdit); //$NON-NLS-1$ - } - - return translatedTextEdit; - } - - public JSPTranslationExtension getTranslation() { - if (fTranslation == null) { - IDOMModel xmlModel = (IDOMModel) getModelManager().getExistingModelForRead(fDocument); - try { - IDOMDocument xmlDoc = xmlModel.getDocument(); - - JSPTranslationAdapter translationAdapter = (JSPTranslationAdapter) xmlDoc.getAdapterFor(IJSPTranslation.class); - if (translationAdapter != null) - fTranslation = translationAdapter.getJSPTranslation(); - } - finally { - if (xmlModel != null) { - xmlModel.releaseFromRead(); - } - } - } - - return fTranslation; - } - - public ICompilationUnit getCompilationUnit() { - return getTranslation().getCompilationUnit(); - } - - protected IModelManager getModelManager() { - return StructuredModelManager.getModelManager(); - } -}
\ No newline at end of file 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 deleted file mode 100644 index 685e121883..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java +++ /dev/null @@ -1,2157 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Stack; -import java.util.StringTokenizer; - -import org.eclipse.core.filebuffers.FileBuffers; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.Position; -import org.eclipse.jst.jsp.core.internal.JSPCoreMessages; -import org.eclipse.jst.jsp.core.internal.Logger; -import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.JSP12TLDNames; -import org.eclipse.jst.jsp.core.internal.java.jspel.ASTExpression; -import org.eclipse.jst.jsp.core.internal.java.jspel.ELGenerator; -import org.eclipse.jst.jsp.core.internal.java.jspel.JSPELParser; -import org.eclipse.jst.jsp.core.internal.java.jspel.ParseException; -import org.eclipse.jst.jsp.core.internal.java.jspel.Token; -import org.eclipse.jst.jsp.core.internal.java.jspel.TokenMgrError; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.jst.jsp.core.internal.taglib.TaglibHelper; -import org.eclipse.jst.jsp.core.internal.taglib.TaglibHelperManager; -import org.eclipse.jst.jsp.core.internal.taglib.TaglibVariable; -import org.eclipse.wst.sse.core.internal.ltk.parser.BlockMarker; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.StructuredModelManager; -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.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.core.internal.util.StringUtils; -import org.eclipse.wst.sse.core.internal.util.URIResolver; -import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; -import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocumentTracker; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; - -/** - * Translates a JSP document into a HttpServlet. Keeps two way mapping from - * java translation to the original JSP source, which can be obtained through - * getJava2JspRanges() and getJsp2JavaRanges(). - * - * @author pavery - */ -public class JSPTranslator { - // for debugging - private static final boolean DEBUG; - static { - String value = Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspjavamapping"); //$NON-NLS-1$ - DEBUG = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - public static final String ENDL = "\n"; //$NON-NLS-1$ - - private String fClassHeader = "public class _JSPServlet extends "; //$NON-NLS-1$ - private String fClassname = "_JSPServlet"; //$NON-NLS-1$ - - private String fImplicitImports = "import javax.servlet.*;" + ENDL + //$NON-NLS-1$ - "import javax.servlet.http.*;" + ENDL + //$NON-NLS-1$ - "import javax.servlet.jsp.*;" + ENDL + ENDL; //$NON-NLS-1$ - - private String fServiceHeader = "public void _jspService(javax.servlet.http.HttpServletRequest request," + //$NON-NLS-1$ - " javax.servlet.http.HttpServletResponse response)" + ENDL + //$NON-NLS-1$ - "\t\tthrows java.io.IOException, javax.servlet.ServletException {" + ENDL + //$NON-NLS-1$ - "javax.servlet.jsp.PageContext pageContext = null;" + ENDL + //$NON-NLS-1$ - "javax.servlet.http.HttpSession session = null;" + ENDL + //$NON-NLS-1$ - "javax.servlet.ServletContext application = null;" + ENDL + //$NON-NLS-1$ - "javax.servlet.ServletConfig config = null;" + ENDL + //$NON-NLS-1$ - "javax.servlet.jsp.JspWriter out = null;" + ENDL + //$NON-NLS-1$ - "Object page = null;" + ENDL; //$NON-NLS-1$ - - private String fFooter = "}}"; //$NON-NLS-1$ - private String fException = "Throwable exception = null;"; //$NON-NLS-1$ - public static final String EXPRESSION_PREFIX = "out.print(\"\"+"; //$NON-NLS-1$ - public static final String EXPRESSION_SUFFIX = ");"; //$NON-NLS-1$ - private String fSuperclass = "javax.servlet.http.HttpServlet"; //$NON-NLS-1$ - - private String fTryCatchStart = ENDL + "try {" + ENDL; //$NON-NLS-1$ - private String fTryCatchEnd = " } catch (java.lang.Exception e) {} " + ENDL; //$NON-NLS-1$ - - /** fSourcePosition = position in JSP source */ - private int fSourcePosition = -1; - /** fRelativeOffest = offset in the buffer there the cursor is */ - private int fRelativeOffset = -1; - /** fCursorPosition = offset in the translated java document */ - private int fCursorPosition = -1; - /** some page directive attributes */ - private boolean fIsErrorPage, fCursorInExpression = false; - - /** user java code in body of the service method */ - private StringBuffer fUserCode = new StringBuffer(); - /** user EL Expression */ - private StringBuffer fUserELExpressions = new StringBuffer(); - /** user defined vars declared in the beginning of the class */ - private StringBuffer fUserDeclarations = new StringBuffer(); - - /** user defined imports */ - private StringBuffer fUserImports = new StringBuffer(); - - private StringBuffer fResult; // the final traslated java document - // string buffer - private StringBuffer fCursorOwner = null; // the buffer where the cursor - // is - - private IDOMModel fStructuredModel = null; - private IStructuredDocument fStructuredDocument = null; - private IStructuredDocumentRegion fCurrentNode; - private boolean fInCodeRegion = false; // flag for if cursor is in the - // current region being translated - - /** - * these constants are to keep track of whether the code in question is - * embedded (JSP as an attribute or within comment tags) or is just - * standard JSP code, or identifies if it's an expression - */ - protected final static int STANDARD_JSP = 0; - protected final static int EMBEDDED_JSP = 1; - protected final static int DECLARATION = 2; - protected final static int EXPRESSION = 4; - protected final static int SCRIPTLET = 8; - - /** used to avoid infinite looping include files */ - private Stack fIncludes = null; - /** mostly for helper classes, so they parse correctly */ - private ArrayList fBlockMarkers = null; - /** - * for keeping track of offset in user buffers while document is being - * built - */ - private int fOffsetInUserImports = 0; - private int fOffsetInUserDeclarations = 0; - private int fOffsetInUserCode = 0; - - /** correlates ranges (positions) in java to ranges in jsp */ - private HashMap fJava2JspRanges = new HashMap(); - - /** - * map of ranges in fUserImports (relative to the start of the buffer) to - * ranges in source JSP buffer. - */ - private HashMap fImportRanges = new HashMap(); - /** - * map of ranges in fUserCode (relative to the start of the buffer) to - * ranges in source JSP buffer. - */ - private HashMap fCodeRanges = new HashMap(); - /** - * map of ranges in fUserDeclarations (relative to the start of the - * buffer) to ranges in source JSP buffer. - */ - private HashMap fDeclarationRanges = new HashMap(); - - private HashMap fUseBeanRanges = new HashMap(); - - private HashMap fUserELRanges = new HashMap(); - - /** - * ranges that don't directly map from java code to JSP code (eg. - * <%@include file="included.jsp"%> - */ - private HashMap fIndirectRanges = new HashMap(); - - private IProgressMonitor fProgressMonitor = null; - - /** - * save JSP document text for later use may just want to read this from - * the file or strucdtured document depending what is available - */ - private StringBuffer fJspTextBuffer = new StringBuffer(); - - /** - * JSP Expression Language Parser. - */ - private JSPELParser elParser = null; - - private ArrayList fELProblems = new ArrayList(); - - /** - * configure using an XMLNode - * - * @param node - * @param monitor - */ - private void configure(IDOMNode node, IProgressMonitor monitor) { - - fProgressMonitor = monitor; - fStructuredModel = node.getModel(); - // fPositionNode = node; - - fStructuredDocument = fStructuredModel.getStructuredDocument(); - - String className = createClassname(node); - if (className.length() > 0) { - setClassname(className); - fClassHeader = "public class " + className + " extends "; //$NON-NLS-1$ //$NON-NLS-2$ - } - } - - /** - * memory saving configure (no StructuredDocument in memory) currently - * doesn't handle included files - * - * @param jspFile - * @param monitor - */ - private void configure(IFile jspFile, IProgressMonitor monitor) { - // when configured on a file - // fStructuredModel, fPositionNode, fModelQuery, fStructuredDocument - // are all null - - fProgressMonitor = monitor; - - String className = createClassname(jspFile); - if (className.length() > 0) { - setClassname(className); - fClassHeader = "public class " + className + " extends "; //$NON-NLS-1$ //$NON-NLS-2$ - } - } - - /** - * Set the jsp text from an IFile - * - * @param jspFile - */ - private void setJspText(IFile jspFile) { - try { - BufferedInputStream in = new BufferedInputStream(jspFile.getContents()); - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); - String line = null; - while ((line = reader.readLine()) != null) { - fJspTextBuffer.append(line); - fJspTextBuffer.append(ENDL); - } - reader.close(); - } - catch (CoreException e) { - Logger.logException(e); - } - catch (IOException e) { - Logger.logException(e); - } - } - - /** - * @param node - * @return - */ - private String createClassname(IDOMNode node) { - - String classname = ""; //$NON-NLS-1$ - if (node != null) { - String base = node.getModel().getBaseLocation(); - classname = JSP2ServletNameUtil.mangle(base); - } - return classname; - } - - /** - * @param jspFile - * @return - */ - private String createClassname(IFile jspFile) { - - String classname = ""; //$NON-NLS-1$ - if (jspFile != null) { - classname = JSP2ServletNameUtil.mangle(jspFile.getFullPath().toString()); - } - return classname; - } - - public void setClassname(String classname) { - this.fClassname = classname; - } - - public String getClassname() { - return this.fClassname != null ? this.fClassname : "GenericJspServlet"; //$NON-NLS-1$ - } - - /** - * So that the JSPTranslator can be reused. - */ - public void reset(IDOMNode node, IProgressMonitor progress) { - - // initialize some things on node - configure(node, progress); - reset(); - // set the jsp text buffer - fJspTextBuffer.append(fStructuredDocument.get()); - } - - /** - * conservative version (no StructuredDocument/Model) - * - * @param jspFile - * @param progress - */ - public void reset(IFile jspFile, IProgressMonitor progress) { - - // initialize some things on node - configure(jspFile, progress); - reset(); - // set the jsp text buffer - setJspText(jspFile); - } - - /** - * Reinitialize some fields - */ - private void reset() { - - // reset progress monitor - if (fProgressMonitor != null) - fProgressMonitor.setCanceled(false); - - // reinit fields - fSourcePosition = -1; - fRelativeOffset = -1; - fCursorPosition = -1; - - fIsErrorPage = fCursorInExpression = false; - - fUserCode = new StringBuffer(); - fUserDeclarations = new StringBuffer(); - fUserImports = new StringBuffer(); - fUserELExpressions = new StringBuffer(); - - fResult = null; - fCursorOwner = null; // the buffer where the cursor is - - fCurrentNode = null; - fInCodeRegion = false; // flag for if cursor is in the current region - // being translated - - if (fIncludes != null) - fIncludes.clear(); - - fBlockMarkers = null; - - fOffsetInUserImports = 0; - fOffsetInUserDeclarations = 0; - fOffsetInUserCode = 0; - - fJava2JspRanges.clear(); - fImportRanges.clear(); - fCodeRanges.clear(); - fUseBeanRanges.clear(); - fDeclarationRanges.clear(); - fUserELRanges.clear(); - fIndirectRanges.clear(); - - fJspTextBuffer = new StringBuffer(); - - fELProblems = new ArrayList(); - - } - - /** - * @return just the "shell" of a servlet, nothing contributed from the JSP - * doc - */ - public final StringBuffer getEmptyTranslation() { - reset(); - buildResult(); - return getTranslation(); - } - - /** - * put the final java document together - */ - private final void buildResult() { - // to build the java document this is the order: - // - // + default imports - // + user imports - // + class header - // [+ error page] - // + user declarations - // + service method header - // + try/catch start - // + user code - // + try/catch end - // + service method footer - fResult = new StringBuffer(fImplicitImports.length() + fUserImports.length() + fClassHeader.length() + fUserDeclarations.length() + fServiceHeader.length() + fTryCatchStart.length() // try/catch - // start - + fUserCode.length() + fTryCatchEnd.length() // try/catch - // end - + fFooter.length()); - - int javaOffset = 0; - - fResult.append(fImplicitImports); - javaOffset += fImplicitImports.length(); - - // updateRanges(fIndirectImports, javaOffset); - updateRanges(fImportRanges, javaOffset); - // user imports - append(fUserImports); - javaOffset += fUserImports.length(); - - // class header - fResult.append(fClassHeader); //$NON-NLS-1$ - javaOffset += fClassHeader.length(); - fResult.append(fSuperclass + "{" + ENDL); //$NON-NLS-1$ - javaOffset += fSuperclass.length() + 2; - - updateRanges(fDeclarationRanges, javaOffset); - // user declarations - append(fUserDeclarations); - javaOffset += fUserDeclarations.length(); - - updateRanges(fUserELRanges, javaOffset); - append(fUserELExpressions); - javaOffset += fUserELExpressions.length(); - - fResult.append(fServiceHeader); - javaOffset += fServiceHeader.length(); - // error page - if (fIsErrorPage) { - fResult.append(fException); - javaOffset += fException.length(); - } - - - fResult.append(fTryCatchStart); - javaOffset += fTryCatchStart.length(); - - updateRanges(fCodeRanges, javaOffset); - - // user code - append(fUserCode); - javaOffset += fUserCode.length(); - - - fResult.append(fTryCatchEnd); - javaOffset += fTryCatchEnd.length(); - - // footer - fResult.append(fFooter); - javaOffset += fFooter.length(); - - fJava2JspRanges.putAll(fImportRanges); - fJava2JspRanges.putAll(fDeclarationRanges); - fJava2JspRanges.putAll(fCodeRanges); - fJava2JspRanges.putAll(fUserELRanges); - - } - - /** - * @param javaRanges - * @param offsetInJava - */ - private void updateRanges(HashMap rangeMap, int offsetInJava) { - // just need to update java ranges w/ the offset we now know - Iterator it = rangeMap.keySet().iterator(); - while (it.hasNext()) - ((Position) it.next()).offset += offsetInJava; - } - - /** - * map of ranges (positions) in java document to ranges in jsp document - * - * @return a map of java positions to jsp positions. - */ - public HashMap getJava2JspRanges() { - return fJava2JspRanges; - } - - /** - * map of ranges in jsp document to ranges in java document. - * - * @return a map of jsp positions to java positions, or null if no - * translation has occured yet (the map hasn't been built). - */ - public HashMap getJsp2JavaRanges() { - if (fJava2JspRanges == null) - return null; - HashMap flipFlopped = new HashMap(); - Iterator keys = fJava2JspRanges.keySet().iterator(); - Object range = null; - while (keys.hasNext()) { - range = keys.next(); - flipFlopped.put(fJava2JspRanges.get(range), range); - } - return flipFlopped; - } - - public HashMap getJava2JspImportRanges() { - return fImportRanges; - } - - public HashMap getJava2JspUseBeanRanges() { - return fUseBeanRanges; - } - - public HashMap getJava2JspIndirectRanges() { - return fIndirectRanges; - } - - /** - * Adds to the jsp<->java map by default - * - * @param value - * a comma delimited list of imports - */ - protected void addImports(String value) { - addImports(value, true); - } - - /** - * Pass in a comma delimited list of import values, appends each to the - * final result buffer - * - * @param value - * a comma delimited list of imports - */ - protected void addImports(String value, boolean addToMap) { - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=81687 - // added the "addToMap" parameter to exclude imports originating - // from included JSP files to be added to the jsp<->java mapping - StringTokenizer st = new StringTokenizer(value, ",", false); //$NON-NLS-1$ - String tok = ""; //$NON-NLS-1$ - // String appendage = ""; //$NON-NLS-1$ - while (st.hasMoreTokens()) { - tok = st.nextToken(); - appendImportToBuffer(tok, fCurrentNode, addToMap); - } - } - - /** - * /* keep track of cursor position inside the buffer /* appends buffer to - * the final result buffer - */ - protected void append(StringBuffer buf) { - if (getCursorOwner() == buf) { - fCursorPosition = fResult.length() + getRelativeOffset(); - } - fResult.append(buf.toString()); - } - - /** - * Only valid after a configure(...), translate(...) or - * translateFromFile(...) call - * - * @return the current result (java translation) buffer - */ - public final StringBuffer getTranslation() { - - if (DEBUG) { - StringBuffer debugString = new StringBuffer(); - try { - Iterator it = fJava2JspRanges.keySet().iterator(); - while (it.hasNext()) { - debugString.append("--------------------------------------------------------------\n"); //$NON-NLS-1$ - Position java = (Position) it.next(); - debugString.append("Java range:[" + java.offset + ":" + java.length + "]\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - debugString.append("[" + fResult.toString().substring(java.offset, java.offset + java.length) + "]\n"); //$NON-NLS-1$ //$NON-NLS-2$ - debugString.append("--------------------------------------------------------------\n"); //$NON-NLS-1$ - debugString.append("|maps to...|\n"); //$NON-NLS-1$ - debugString.append("==============================================================\n"); //$NON-NLS-1$ - Position jsp = (Position) fJava2JspRanges.get(java); - debugString.append("JSP range:[" + jsp.offset + ":" + jsp.length + "]\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - debugString.append("[" + fJspTextBuffer.toString().substring(jsp.offset, jsp.offset + jsp.length) + "]\n"); //$NON-NLS-1$ //$NON-NLS-2$ - debugString.append("==============================================================\n"); //$NON-NLS-1$ - debugString.append("\n"); //$NON-NLS-1$ - debugString.append("\n"); //$NON-NLS-1$ - } - } - catch(Exception e) { - Logger.logException("JSPTranslation error", e); //$NON-NLS-1$ - } - Logger.log(Logger.INFO_DEBUG, debugString.toString()); - } - - return fResult; - } - - /** - * Only valid after a configure(...), translate(...) or - * translateFromFile(...) call - * - * @return the text in the JSP file - */ - public final String getJspText() { - return fJspTextBuffer.toString(); - } - - protected void addTaglibVariables(String tagToAdd) { - IFile f = getFile(); - - if(f == null || !f.exists()) - return; - - TaglibHelper helper = TaglibHelperManager.getInstance().getTaglibHelper(f); - IStructuredDocumentRegion customTag = getCurrentNode(); - TaglibVariable[] taglibVars = helper.getTaglibVariables(tagToAdd, getStructuredDocument(), customTag); - String decl = ""; //$NON-NLS-1$ - for (int i = 0; i < taglibVars.length; i++) { - decl = taglibVars[i].getDeclarationString(); - appendToBuffer(decl, fUserCode, false, fCurrentNode); - } - } - - private IFile getFile() { - IFile f = null; - IStructuredModel sModel = StructuredModelManager.getModelManager().getExistingModelForRead(getStructuredDocument()); - try { - if(sModel != null) - f = FileBuffers.getWorkspaceFileAtLocation(new Path(sModel.getBaseLocation())); - } - finally { - if(sModel != null) - sModel.releaseFromRead(); - } - return f; - } - - /* - * used by inner helper class (XMLJSPRegionHelper, JSPIncludeRegionHelper) - */ - public List getBlockMarkers() { - if (fBlockMarkers == null) - fBlockMarkers = new ArrayList(); - return fBlockMarkers; - } - - /** - * /* the main control loop for translating the document, driven by the - * structuredDocument nodes - */ - public void translate() { - setCurrentNode(fStructuredDocument.getFirstStructuredDocumentRegion()); - - while (getCurrentNode() != null && !isCanceled()) { - - // intercept HTML comment flat node - // also handles UNDEFINED (which is what CDATA comes in as) - // basically this part will handle any "embedded" JSP containers - 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 - translateRegionContainer(getCurrentNode(), STANDARD_JSP); - } - if (getCurrentNode() != null) - advanceNextNode(); - } - buildResult(); - } - - protected void setDocumentContent(IDocument document, InputStream contentStream, String charset) { - Reader in = null; - try { - in = new BufferedReader(new InputStreamReader(contentStream, charset), 2048); - StringBuffer buffer = new StringBuffer(2048); - char[] readBuffer = new char[2048]; - int n = in.read(readBuffer); - while (n > 0) { - buffer.append(readBuffer, 0, n); - n = in.read(readBuffer); - } - document.set(buffer.toString()); - } - catch (IOException x) { - // ignore - } - finally { - if (in != null) { - try { - in.close(); - } - catch (IOException x) { - // ignore - } - } - } - } - - /** - * - * @return the status of the translator's progrss monitor, false if the - * monitor is null - */ - private boolean isCanceled() { - return (fProgressMonitor == null) ? false : fProgressMonitor.isCanceled(); - } - - private void advanceNextNode() { - setCurrentNode(getCurrentNode().getNext()); - if (getCurrentNode() != null) - setSourceReferencePoint(); - } - - private void setSourceReferencePoint() { - if (isJSP(getCurrentNode().getFirstRegion().getType())) { - Iterator it = getCurrentNode().getRegions().iterator(); - ITextRegion r = null; - while (it.hasNext()) { - r = (ITextRegion) it.next(); - if (r.getType() == DOMJSPRegionContexts.JSP_CONTENT || r.getType() == DOMRegionContext.XML_CONTENT) - break; - else if (r.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) - break; - else if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE && getCurrentNode().getFullText(r).trim().equals("import")) //$NON-NLS-1$ - break; - } - } - } - - /** - * translates a region container (and XML JSP container, or <% JSP - * container) - */ - protected void translateRegionContainer(ITextRegionCollection container, int JSPType) { - - ITextRegionCollection containerRegion = container; - - // custom tags need their own scope {} - handleScopingIfNecessary(containerRegion); - - Iterator regions = containerRegion.getRegions().iterator(); - ITextRegion region = null; - while (regions.hasNext()) { - region = (ITextRegion) regions.next(); - String type = region.getType(); - // PMR 91930 - // CMVC 241869 - // content assist was not showing up in JSP inside a javascript - // region - if (type == DOMRegionContext.BLOCK_TEXT) { - // check if it's nested jsp in a script tag... - if (region instanceof ITextRegionContainer) { - translateJSPNode(region, regions, type, EMBEDDED_JSP); - } - else { - // //////////////////////////////////////////////////////////////////////////////// - // THIS EMBEDDED JSP TEXT WILL COME OUT LATER WHEN - // PARTITIONING HAS - // SUPPORT FOR NESTED XML-JSP - // CMVC 241882 - decodeScriptBlock(containerRegion.getFullText(region), containerRegion.getStartOffset()); - // //////////////////////////////////////////////////////////////////////////////// - } - } - if (type != null && isJSP(type)) // <%, <%=, <%!, <%@ - { - translateJSPNode(region, regions, type, JSPType); - } - else if (type != null && type == DOMRegionContext.XML_TAG_OPEN) { - translateXMLNode(containerRegion, regions); - } - } - // } - } - - private void handleScopingIfNecessary(ITextRegionCollection containerRegion) { - // code within a custom tag gets its own scope - // so if we encounter a start of a custom tag, we add '{' - // and for the end of a custom tag we add '}' - if(containerRegion.getFirstRegion().getType() == DOMRegionContext.XML_TAG_OPEN) { - // don't add '{' if it's a self closing tag - if(!isSelfClosingTag(containerRegion)) { - if(isCustomTag(containerRegion)) { - startScope(); - } - } - } - else if(containerRegion.getFirstRegion().getType() == DOMRegionContext.XML_END_TAG_OPEN) { - if(isCustomTag(containerRegion)) { - endScope(); - } - } - } - - private void startScope() { - //fScopeDepth++; - StringBuffer text = new StringBuffer(); - //for(int i=0; i<fScopeDepth; i++) text.append(" "); //$NON-NLS-1$ - text.append("{ // <"); //$NON-NLS-1$ - text.append(getRegionName(fCurrentNode)); - text.append(">\n"); //$NON-NLS-1$ - appendToBuffer(text.toString(), fUserCode, false, fCurrentNode); //$NON-NLS-1$ - } - - private void endScope() { - StringBuffer text = new StringBuffer(); - text.append("} // </"); //$NON-NLS-1$ - text.append(getRegionName(fCurrentNode)); - text.append(">\n"); //$NON-NLS-1$ - appendToBuffer(text.toString(), fUserCode, false, fCurrentNode); //$NON-NLS-1$ - } - - private boolean isSelfClosingTag(ITextRegionCollection containerRegion) { - - if(containerRegion == null) - return false; - - ITextRegionList regions = containerRegion.getRegions(); - ITextRegion r = regions.get(regions.size()-1); - return r.getType() == DOMRegionContext.XML_EMPTY_TAG_CLOSE; - } - - private boolean isCustomTag(ITextRegionCollection containerRegion) { - String tagName = getRegionName(containerRegion); - - if(tagName == null) - return false; - - if(tagName.indexOf(":") > 0 && !tagName.startsWith("jsp")) //$NON-NLS-1$ //$NON-NLS-2$ - return true; - - return false; - } - - private String getRegionName(ITextRegionCollection containerRegion) { - ITextRegionList regions = containerRegion.getRegions(); - ITextRegion nameRegion = null; - for (int i = 0; i < regions.size(); i++) { - ITextRegion r = regions.get(i); - if(r.getType() == DOMRegionContext.XML_TAG_NAME) { - nameRegion = r; - break; - } - } - return nameRegion != null ? containerRegion.getText(nameRegion).trim() : null; - } - /* - * ////////////////////////////////////////////////////////////////////////////////// ** - * TEMP WORKAROUND FOR CMVC 241882 Takes a String and blocks out - * jsp:scriptlet, jsp:expression, and jsp:declaration @param blockText - * @return - */ - private void decodeScriptBlock(String blockText, int startOfBlock) { - XMLJSPRegionHelper helper = new XMLJSPRegionHelper(this); - helper.addBlockMarker(new BlockMarker("jsp:scriptlet", null, DOMJSPRegionContexts.JSP_CONTENT, false)); //$NON-NLS-1$ - helper.addBlockMarker(new BlockMarker("jsp:expression", null, DOMJSPRegionContexts.JSP_CONTENT, false)); //$NON-NLS-1$ - helper.addBlockMarker(new BlockMarker("jsp:declaration", null, DOMJSPRegionContexts.JSP_CONTENT, false)); //$NON-NLS-1$ - helper.addBlockMarker(new BlockMarker("jsp:directive.include", null, DOMJSPRegionContexts.JSP_CONTENT, false)); //$NON-NLS-1$ - helper.addBlockMarker(new BlockMarker("jsp:directive.taglib", null, DOMJSPRegionContexts.JSP_CONTENT, false)); //$NON-NLS-1$ - helper.reset(blockText, startOfBlock); - // force parse - helper.forceParse(); - helper.writeToBuffers(); - } - - /* - * returns string minus CDATA open and close text - */ - final public String stripCDATA(String text) { - String resultText = ""; //$NON-NLS-1$ - String CDATA_OPEN = "<![CDATA["; //$NON-NLS-1$ - String CDATA_CLOSE = "]]>"; //$NON-NLS-1$ - int start = 0; - int end = text.length(); - while (start < text.length()) { - if (text.indexOf(CDATA_OPEN, start) > -1) { - end = text.indexOf(CDATA_OPEN, start); - resultText += text.substring(start, end); - start = end + CDATA_OPEN.length(); - } - else if (text.indexOf(CDATA_CLOSE, start) > -1) { - end = text.indexOf(CDATA_CLOSE, start); - resultText += text.substring(start, end); - start = end + CDATA_CLOSE.length(); - } - else { - end = text.length(); - resultText += text.substring(start, end); - break; - } - } - return resultText; - } - - // END OF WORKAROUND CODE... - // ///////////////////////////////////////////////////////////////////////////////////// - /** - * determines if the type is a pure JSP type (not XML) - */ - protected boolean isJSP(String type) { - return ((type == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN || type == DOMJSPRegionContexts.JSP_EXPRESSION_OPEN || type == DOMJSPRegionContexts.JSP_DECLARATION_OPEN || type == DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN || type == DOMJSPRegionContexts.JSP_CONTENT || type == DOMJSPRegionContexts.JSP_EL_OPEN) && type != DOMRegionContext.XML_TAG_OPEN); - // checking XML_TAG_OPEN so <jsp:directive.xxx/> gets treated like - // other XML jsp tags - } - - /** - * translates the various XMLJSP type nodes - * - * @param regions - * the regions of the XMLNode - */ - protected void translateXMLNode(ITextRegionCollection container, Iterator regions) { - // contents must be valid XHTML, translate escaped CDATA into what it - // really is... - ITextRegion r = null; - if (regions.hasNext()) { - r = (ITextRegion) regions.next(); - // <jsp:directive.xxx > comes in as this - if (r.getType() == DOMRegionContext.XML_TAG_NAME || r.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) - - { - String fullTagName = container.getFullText(r).trim(); - if (fullTagName.indexOf(':') > -1) { - addTaglibVariables(fullTagName); // it may be a taglib - } - StringTokenizer st = new StringTokenizer(fullTagName, ":.", false); //$NON-NLS-1$ - if (st.hasMoreTokens() && st.nextToken().equals("jsp")) //$NON-NLS-1$ - { - if (st.hasMoreTokens()) { - String jspTagName = st.nextToken(); - if (jspTagName.equals("useBean")) //$NON-NLS-1$ - { - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=103004 - //advanceNextNode(); // get the content - if (getCurrentNode() != null) { - translateUseBean(container); // 'regions' - } - } - else if (jspTagName.equals("scriptlet")) //$NON-NLS-1$ - { - translateXMLJSPContent(SCRIPTLET); - } - else if (jspTagName.equals("expression")) //$NON-NLS-1$ - { - translateXMLJSPContent(EXPRESSION); - } - else if (jspTagName.equals("declaration")) //$NON-NLS-1$ - { - translateXMLJSPContent(DECLARATION); - } - else if (jspTagName.equals("directive")) //$NON-NLS-1$ - { - if (st.hasMoreTokens()) { - String directiveName = st.nextToken(); - if (directiveName.equals("taglib")) { //$NON-NLS-1$ - handleTaglib(); - return; - } - else if (directiveName.equals("include")) { //$NON-NLS-1$ - - String fileLocation = ""; //$NON-NLS-1$ - - // skip to required "file" attribute, - // should be safe because - // "file" is the only attribute for the - // include directive - while (r != null && regions.hasNext() && !r.getType().equals(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) { - r = (ITextRegion) regions.next(); - } - fileLocation = getAttributeValue(r, regions); - if (fileLocation != null) - handleIncludeFile(fileLocation); - } - else if (directiveName.equals("page")) { //$NON-NLS-1$ - - // 20040702 commenting this out - // bad if currentNode is referenced after - // here w/ the current list - // see: - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3035 - // setCurrentNode(getCurrentNode().getNext()); - if (getCurrentNode() != null) { - translatePageDirectiveAttributes(regions); // 'regions' - // are - // attributes - // for - // the - // directive - } - } - } - } - -// https://bugs.eclipse.org/bugs/show_bug.cgi?id=91281 -// else if (jspTagName.equals("include")) { //$NON-NLS-1$ - - // -// // <jsp:include page="filename") /> -// while (regions.hasNext()) { -// r = (ITextRegion) regions.next(); -// if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME && getCurrentNode().getText(r).equals("page")) { //$NON-NLS-1$ -// String filename = getAttributeValue(r, regions); -// handleIncludeFile(filename); -// break; -// } -// } -// } - - } - } - else { - // tag name is not jsp - // handle embedded jsp attributes... - ITextRegion embedded = null; - Iterator attrRegions = null; - ITextRegion attrChunk = null; - while (regions.hasNext()) { - embedded = (ITextRegion) regions.next(); - if (embedded instanceof ITextRegionContainer) { - // parse out container - attrRegions = ((ITextRegionContainer) embedded).getRegions().iterator(); - while (attrRegions.hasNext()) { - attrChunk = (ITextRegion) attrRegions.next(); - String type = attrChunk.getType(); - // CMVC 263661, embedded JSP in attribute - // support - // only want to translate one time per - // embedded region - // so we only translate on the JSP open tags - // (not content) - if (type == DOMJSPRegionContexts.JSP_EXPRESSION_OPEN || type == DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN || type == DOMJSPRegionContexts.JSP_DECLARATION_OPEN || type == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN || type == DOMJSPRegionContexts.JSP_EL_OPEN) { - // now call jsptranslate - translateEmbeddedJSPInAttribute((ITextRegionContainer) embedded); - } - } - } - } - } - } - } - } - - /* - * example: - * - * <jsp:scriptlet>scriptlet - * jsp-java content - * <![CDATA[ - * more jsp java - * ]]> - * jsp-java content... - * <![CDATA[ - * more jsp java - * ]]> - * </jsp:scriptlet> - * - * https://bugs.eclipse.org/bugs/show_bug.cgi?id=93366 - * https://bugs.eclipse.org/bugs/show_bug.cgi?id=88590 - * translate everything inbetween <scriptlet> tags, which may - * be more than one region (esp. CDATA) - * - */ - private void translateXMLJSPContent(int type) { - - IStructuredDocumentRegion sdr = getCurrentNode().getNext(); - int start = sdr.getStartOffset(); - int end = sdr.getEndOffset(); - String sdrText = ""; //$NON-NLS-1$ - - // read structured document regions until - // </jsp:scriptlet> or EOF - while(sdr != null && sdr.getType() != DOMRegionContext.XML_TAG_NAME) { - - // setup for next region - start = sdr.getStartOffset(); - sdrText = sdr.getText(); - - if(sdr.getType() == DOMRegionContext.XML_CDATA_TEXT){ - - // just to be safe, make sure CDATA start & end are there - if(sdrText.startsWith("<![CDATA[") && sdrText.endsWith("]]>")) { //$NON-NLS-1$ //$NON-NLS-2$ - - start = sdr.getStartOffset() + 9; // <![CDATA[ - end = sdr.getEndOffset() - 3; // ]]> - sdrText = sdrText.substring(9, sdrText.length() - 3); - writeToBuffer(type, sdrText, start, end); - } - } - else { - - // handle entity references - sdrText = EscapedTextUtil.getUnescapedText(sdrText); - end = sdr.getEndOffset(); - writeToBuffer(type, sdrText, start, end); - } - sdr = sdr.getNext(); - } - setCurrentNode(sdr); - setSourceReferencePoint(); - } - - private void writeToBuffer(int type, String content, int jspStart, int jspEnd) { - switch(type) { - case SCRIPTLET: - translateScriptletString(content, getCurrentNode(), jspStart, jspEnd-jspStart); - break; - case EXPRESSION: - translateExpressionString(content, getCurrentNode(), jspStart, jspEnd-jspStart); - break; - case DECLARATION: - translateDeclarationString(content, getCurrentNode(), jspStart, jspEnd-jspStart); - break; - } - } - - /** - * goes through comment regions, checks if any are an embedded JSP - * container if it finds one, it's sends the container into the - * translation routine - */ - protected void translateXMLCommentNode(IStructuredDocumentRegion node) { - Iterator it = node.getRegions().iterator(); - ITextRegion commentRegion = null; - while (it != null && it.hasNext()) { - commentRegion = (ITextRegion) it.next(); - if (commentRegion instanceof ITextRegionContainer) { - translateRegionContainer((ITextRegionContainer) commentRegion, EMBEDDED_JSP); // it's - // embedded - // jsp...iterate - // regions... - } - } - } - - /** - * determines which type of JSP node to translate - */ - protected void translateJSPNode(ITextRegion region, Iterator regions, String type, int JSPType) { - if (type == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN && regions != null) { - translateDirective(regions); - } - else { - ITextRegionCollection contentRegion = null; - if (JSPType == STANDARD_JSP && (setCurrentNode(getCurrentNode().getNext())) != null) { - contentRegion = getCurrentNode(); - } - else if (JSPType == EMBEDDED_JSP && region instanceof ITextRegionCollection) { - // CMVC 263661 - translateEmbeddedJSPInBlock((ITextRegionCollection) region); - // ensure the rest of this method won't be called - contentRegion = null; - } - if (contentRegion != null) { - if (type == DOMJSPRegionContexts.JSP_EXPRESSION_OPEN) { - translateExpression(contentRegion); - } - else if (type == DOMJSPRegionContexts.JSP_DECLARATION_OPEN) { - translateDeclaration(contentRegion); - } - else if (type == DOMJSPRegionContexts.JSP_CONTENT || type == DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN) { - translateScriptlet(contentRegion); - } - } - else { - // this is the case of an attribute w/ no region <p - // align="<%%>"> - setCursorOwner(getJSPTypeForRegion(region)); - } - } - } - - - private void translateEL(String elText, IStructuredDocumentRegion currentNode, int contentStart, int contentLength) { - if(null == elParser) { - elParser = JSPELParser.createParser(elText); - } else { - elParser.ReInit(elText); - } - - try { - ASTExpression expression = elParser.Expression(); - ELGenerator gen = new ELGenerator(); - gen.generate(expression, fUserELExpressions, fUserELRanges, this, currentNode, contentStart, contentLength); - } catch (ParseException e) { - Token curTok = e.currentToken; - int problemStartOffset; - int problemEndOffset; - Position pos = null; - problemStartOffset = contentStart + curTok.beginColumn; - problemEndOffset = contentStart + curTok.endColumn; - - pos = new Position(problemStartOffset, problemEndOffset - problemStartOffset + 1); - fELProblems.add(new ELProblem(pos, e.getLocalizedMessage())); - } catch (TokenMgrError te) { - Position pos = new Position(contentStart, contentLength); - fELProblems.add(new ELProblem(pos, JSPCoreMessages.JSPEL_Token)); - } - } - - /** - * Pass the ITextRegionCollection which is the embedded region - * - * @param iterator - */ - private void translateEmbeddedJSPInBlock(ITextRegionCollection collection) { - Iterator regions = collection.getRegions().iterator(); - ITextRegion region = null; - while (regions.hasNext()) { - region = (ITextRegion) regions.next(); - if (isJSP(region.getType())) - break; - region = null; - } - if (region != null) { - translateEmbeddedJSPInAttribute(collection); - } - } - - /* - * for example: <a href="index.jsp?p=<%=abc%>b=<%=xyz%>">abc</a> - */ - private void translateEmbeddedJSPInAttribute(ITextRegionCollection embeddedContainer) { - // THIS METHOD IS A FIX FOR CMVC 263661 (jsp embedded in attribute - // regions) - - // loop all regions - ITextRegionList embeddedRegions = embeddedContainer.getRegions(); - ITextRegion delim = null; - ITextRegion content = null; - String type = null; - for (int i = 0; i < embeddedRegions.size(); i++) { - - // possible delimiter, check later - delim = embeddedRegions.get(i); - type = delim.getType(); - - // check next region to see if it's content - if (i + 1 < embeddedRegions.size()) { - String regionType = embeddedRegions.get(i + 1).getType(); - if (regionType == DOMJSPRegionContexts.JSP_CONTENT || regionType == DOMJSPRegionContexts.JSP_EL_CONTENT) - content = embeddedRegions.get(i + 1); - - } - - if (content != null) { - int contentStart = embeddedContainer.getStartOffset(content); - int rStart = fCurrentNode.getStartOffset() + contentStart; - int rEnd = fCurrentNode.getStartOffset() + embeddedContainer.getEndOffset(content); - - boolean inThisRegion = rStart <= fSourcePosition && rEnd >= fSourcePosition; - // int jspPositionStart = fCurrentNode.getStartOffset() + - // contentStart; - - if (type == DOMJSPRegionContexts.JSP_EXPRESSION_OPEN) { - fLastJSPType = EXPRESSION; - translateExpressionString(embeddedContainer.getText(content), fCurrentNode, contentStart, content.getLength()); - } - else if (type == DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN) { - fLastJSPType = SCRIPTLET; - translateScriptletString(embeddedContainer.getText(content), fCurrentNode, contentStart, content.getLength()); - } - else if (type == DOMJSPRegionContexts.JSP_DECLARATION_OPEN) { - fLastJSPType = DECLARATION; - translateDeclarationString(embeddedContainer.getText(content), fCurrentNode, contentStart, content.getLength()); - } else if (type == DOMJSPRegionContexts.JSP_EL_OPEN) { - fLastJSPType = EXPRESSION; - translateEL(embeddedContainer.getText(content), fCurrentNode, contentStart, content.getLength()); - } - - // calculate relative offset in buffer - if (inThisRegion) { - setCursorOwner(fLastJSPType); - int currentBufferLength = getCursorOwner().length(); - setRelativeOffset((fSourcePosition - contentStart) + currentBufferLength); - if (fLastJSPType == EXPRESSION) { - // if an expression, add then length of the enclosing - // paren.. - setCursorInExpression(true); - setRelativeOffset(getRelativeOffset() + EXPRESSION_PREFIX.length()); - } - } - } - else { - type = null; - content = null; - } - } - } - - private int fLastJSPType = SCRIPTLET; - - /** - * JSPType is only used internally in this class to describe tye type of - * region to be translated - * - * @param region - * @return int - */ - private int getJSPTypeForRegion(ITextRegion region) { - String regionType = region.getType(); - int type = SCRIPTLET; - if (regionType == DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN) - type = SCRIPTLET; - else if (regionType == DOMJSPRegionContexts.JSP_EXPRESSION_OPEN) - type = EXPRESSION; - else if (regionType == DOMJSPRegionContexts.JSP_DECLARATION_OPEN) - type = DECLARATION; - else if (regionType == DOMJSPRegionContexts.JSP_CONTENT) - type = fLastJSPType; - // remember the last type, in case the next type that comes in is - // JSP_CONTENT - fLastJSPType = type; - return type; - } - - /** - * /* <%@ %> /* need to pass in the directive tag region - */ - protected void translateDirective(Iterator regions) { - ITextRegion r = null; - String regionText, attrValue = ""; //$NON-NLS-1$ - while (regions.hasNext() && (r = (ITextRegion) regions.next()) != null && r.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) { // could - // be - // XML_CONTENT - // = - // "", - // skips - // attrs? - regionText = getCurrentNode().getText(r); - if (regionText.indexOf("taglib") > -1) { //$NON-NLS-1$ - // add custom tag block markers here - handleTaglib(); - return; - } - else if (regionText.equals("include")) { //$NON-NLS-1$ - String fileLocation = ""; //$NON-NLS-1$ - // CMVC 258311 - // PMR 18368, B663 - // skip to required "file" attribute, should be safe because - // "file" is the only attribute for the include directive - while (r != null && regions.hasNext() && !r.getType().equals(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) { - r = (ITextRegion) regions.next(); - } - fileLocation = getAttributeValue(r, regions); - if (attrValue != null) - handleIncludeFile(fileLocation); - } - else if (regionText.indexOf("page") > -1) { //$NON-NLS-1$ - translatePageDirectiveAttributes(regions); - } - } - } - - /* - * This method should ideally only be called once per run through - * JSPTranslator This is intended for use by inner helper classes that - * need to add block markers to their own parsers. This method only adds - * markers that came from <@taglib> directives, (not <@include>), since - * include file taglibs are handled on the fly when they are encountered. * - * @param regions - */ - protected void handleTaglib() { - // get/create TLDCMDocument - TLDCMDocumentManager mgr = TaglibController.getTLDCMDocumentManager(fStructuredDocument); - if (mgr != null) { - List trackers = mgr.getCMDocumentTrackers(getCurrentNode().getEnd()); - Iterator it = trackers.iterator(); - CMDocumentTracker tracker = null; - Iterator taglibRegions = null; - IStructuredDocumentRegion sdRegion = null; - ITextRegion r = null; - while (it.hasNext()) { - tracker = (CMDocumentTracker) it.next(); - sdRegion = tracker.getStructuredDocumentRegion(); - // since may be call from another thread (like a background job) - // this check is to be safer - if(sdRegion != null && !sdRegion.isDeleted()) { - taglibRegions = sdRegion.getRegions().iterator(); - while (sdRegion != null && !sdRegion.isDeleted() && taglibRegions.hasNext()) { - r = (ITextRegion) taglibRegions.next(); - if (r.getType().equals(DOMJSPRegionContexts.JSP_DIRECTIVE_NAME)) { - if (sdRegion.getText(r).equals(JSP12TLDNames.TAGLIB)) { - addBlockMarkers(tracker.getDocument()); - } - } - } - } - } - } - } - - /* - * adds block markers to JSPTranslator's block marker list for all - * elements in doc @param doc - */ - protected void addBlockMarkers(CMDocument doc) { - if (doc.getElements().getLength() > 0) { - Iterator elements = doc.getElements().iterator(); - CMNode node = null; - while (elements.hasNext()) { - node = (CMNode) elements.next(); - getBlockMarkers().add(new BlockMarker(node.getNodeName(), null, DOMJSPRegionContexts.JSP_CONTENT, true)); - } - } - } - - /** - * If r is an attribute name region, this method will safely return the - * value for that attribute. - * - * @param r - * @param remainingRegions - * @return the value for the attribute name (r), or null if isn't one - */ - protected String getAttributeValue(ITextRegion r, Iterator remainingRegions) { - if (r.getType().equals(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) { - if (remainingRegions.hasNext() && (r = (ITextRegion) remainingRegions.next()) != null && r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS) { - if (remainingRegions.hasNext() && (r = (ITextRegion) remainingRegions.next()) != null && r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - // handle include for the filename - return StringUtils.stripQuotes(getCurrentNode().getText(r)); - } - } - } - return null; - } - - /** - * takes an emnumeration of the attributes of a directive tag - */ - protected void translatePageDirectiveAttributes(Iterator regions) { - ITextRegion r = null; - String attrName, attrValue; - // iterate all attributes - while (regions.hasNext() && (r = (ITextRegion) regions.next()) != null && r.getType() != DOMJSPRegionContexts.JSP_CLOSE) { - attrName = attrValue = null; - if (r.getType().equals(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) { - - attrName = getCurrentNode().getText(r).trim(); - if (attrName.length() > 0) { - if (regions.hasNext() && (r = (ITextRegion) regions.next()) != null && r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS) { - if (regions.hasNext() && (r = (ITextRegion) regions.next()) != null && r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - - attrValue = StringUtils.strip(getCurrentNode().getText(r)); - } - // has equals, but no value? - } - setDirectiveAttribute(attrName, attrValue); - } - } - } - } - - /** - * sets the appropriate page directive attribute - */ - protected void setDirectiveAttribute(String attrName, String attrValue) { - if (attrValue == null) - return; // uses default (if there was one) - if (attrName.equals("extends")) //$NON-NLS-1$ - { - fSuperclass = attrValue; - } - else if (attrName.equals("import")) //$NON-NLS-1$ - { - addImports(attrValue); - } - else if (attrName.equals("session")) //$NON-NLS-1$ - { - // fSession = ("true".equalsIgnoreCase(attrValue)); //$NON-NLS-1$ - } - else if (attrName.equals("buffer")) //$NON-NLS-1$ - { - // ignore for now - } - else if (attrName.equals("autoFlush")) //$NON-NLS-1$ - { - // ignore for now - } - else if (attrName.equals("isThreadSafe")) //$NON-NLS-1$ - { - // fThreadSafe = "true".equalsIgnoreCase(attrValue); //$NON-NLS-1$ - } - else if (attrName.equals("isErrorPage")) //$NON-NLS-1$ - { - fIsErrorPage = Boolean.valueOf(attrValue).booleanValue(); - } - } - - protected void handleIncludeFile(String filename) { - if (filename != null) { - String fileLocation = null; - if (getResolver() != null) { - fileLocation = (getIncludes().empty()) ? getResolver().getLocationByURI(StringUtils.strip(filename)) : getResolver().getLocationByURI(StringUtils.strip(filename), (String) getIncludes().peek()); - } - else { - // shouldn't happen - fileLocation = StringUtils.strip(filename); - } - // hopefully, a resolver is present and has returned a canonical - // file path - if (!getIncludes().contains(fileLocation) && getBaseLocation() != null && !fileLocation.equals(getBaseLocation())) { - getIncludes().push(fileLocation); - JSPIncludeRegionHelper helper = new JSPIncludeRegionHelper(this); - helper.parse(fileLocation); - helper.writeToBuffers(); - getIncludes().pop(); - } - } - } - - private URIResolver getResolver() { - return (fStructuredModel != null) ? fStructuredModel.getResolver() : null; - } - - /** - * - * @return java.lang.String - */ - private String getBaseLocation() { - if (getResolver() == null) - return null; - return getResolver().getFileBaseLocation(); - } - - private Stack getIncludes() { - if (fIncludes == null) - fIncludes = new Stack(); - return fIncludes; - } - - protected void translateExpressionString(String newText, ITextRegionCollection embeddedContainer, int jspPositionStart, int jspPositionLength) { - appendToBuffer(EXPRESSION_PREFIX, fUserCode, false, embeddedContainer); - appendToBuffer(newText, fUserCode, true, embeddedContainer, jspPositionStart, jspPositionLength); - appendToBuffer(EXPRESSION_SUFFIX, fUserCode, false, embeddedContainer); - } - - protected void translateDeclarationString(String newText, ITextRegionCollection embeddedContainer, int jspPositionStart, int jspPositionLength) { - appendToBuffer(newText, fUserDeclarations, true, embeddedContainer, jspPositionStart, jspPositionLength); - appendToBuffer(ENDL, fUserDeclarations, false, embeddedContainer); - } - - /** - * used by XMLJSPRegionHelper for included JSP files - * - * @param newText - * @param embeddedContainer - * @param jspPositionStart - * @param jspPositionLength - */ - protected void translateScriptletString(String newText, ITextRegionCollection embeddedContainer, int jspPositionStart, int jspPositionLength) { - appendToBuffer(newText, fUserCode, true, embeddedContainer, jspPositionStart, jspPositionLength); - } - - // the following 3 methods determine the cursor position - // <%= %> - protected void translateExpression(ITextRegionCollection region) { - String newText = getUnescapedRegionText(region, EXPRESSION); - appendToBuffer(EXPRESSION_PREFIX, fUserCode, false, fCurrentNode); - appendToBuffer(newText, fUserCode, true, fCurrentNode); - appendToBuffer(EXPRESSION_SUFFIX, fUserCode, false, fCurrentNode); - } - - // - // <%! %> - protected void translateDeclaration(ITextRegionCollection region) { - String newText = getUnescapedRegionText(region, DECLARATION); - appendToBuffer(newText, fUserDeclarations, true, fCurrentNode); - appendToBuffer(ENDL, fUserDeclarations, false, fCurrentNode); - } - - // - // <% %> - protected void translateScriptlet(ITextRegionCollection region) { - String newText = getUnescapedRegionText(region, SCRIPTLET); - appendToBuffer(newText, fUserCode, true, fCurrentNode); - } - - /** - * Append using a region, probably indirect mapping (eg. <%@page - * include=""%>) - * - * @param newText - * @param buffer - * @param addToMap - * @param jspReferenceRegion - */ - private void appendToBuffer(String newText, StringBuffer buffer, boolean addToMap, ITextRegionCollection jspReferenceRegion) { - int start = 0, length = 0; - if (jspReferenceRegion != null) { - start = jspReferenceRegion.getStartOffset(); - length = jspReferenceRegion.getLength(); - } - appendToBuffer(newText, buffer, addToMap, jspReferenceRegion, start, length, false); - } - - private void appendToBuffer(String newText, StringBuffer buffer, boolean addToMap, ITextRegionCollection jspReferenceRegion, int jspPositionStart, int jspPositionLength) { - appendToBuffer(newText, buffer, addToMap, jspReferenceRegion, jspPositionStart, jspPositionLength, true); - } - - /** - * Adds newText to the buffer passed in, and adds to translation mapping - * as specified by the addToMap flag. some special cases to consider (that - * may be affected by changes to this method): included files scriplets in - * an attribute value refactoring - * - * @param newText - * @param buffer - * @param addToMap - */ - private void appendToBuffer(String newText, StringBuffer buffer, boolean addToMap, ITextRegionCollection jspReferenceRegion, int jspPositionStart, int jspPositionLength, boolean isIndirect) { - - int origNewTextLength = newText.length(); - - // nothing to append - if (jspReferenceRegion == null) - return; - - // add a newline so translation looks cleaner - if (!newText.endsWith(ENDL)) - newText += ENDL; - - if (buffer == fUserCode) { - buffer.append(newText); - if (addToMap) { - if (isUsebeanTag(jspReferenceRegion)) { - try { - // requires special mapping - appendUseBeanToBuffer(newText, jspReferenceRegion, isIndirect); - } - catch (Exception e) { - // still working out kinks - Logger.logException(e); - } - } - else { - // all other cases - Position javaRange = new Position(fOffsetInUserCode, origNewTextLength); - Position jspRange = new Position(jspPositionStart, jspPositionLength); - - fCodeRanges.put(javaRange, jspRange); - if (isIndirect) - fIndirectRanges.put(javaRange, jspRange); - } - } - fOffsetInUserCode += newText.length(); - } - else if (buffer == fUserDeclarations) { - buffer.append(newText); - if (addToMap) { - Position javaRange = new Position(fOffsetInUserDeclarations, newText.length()); - Position jspRange = new Position(jspPositionStart, jspPositionLength); - - fDeclarationRanges.put(javaRange, jspRange); - if (isIndirect) - fIndirectRanges.put(javaRange, jspRange); - } - fOffsetInUserDeclarations += newText.length(); - } - } - - /** - * - * @param jspReferenceRegion - * @return - */ - private boolean isUsebeanTag(ITextRegionCollection jspReferenceRegion) { - ITextRegionList regions = jspReferenceRegion.getRegions(); - ITextRegion r = null; - boolean isUseBean = false; - for (int i = 0; i < regions.size(); i++) { - r = regions.get(i); - if (r.getType() == DOMRegionContext.XML_TAG_NAME && jspReferenceRegion.getText(r).equals("jsp:useBean")) { //$NON-NLS-1$ - isUseBean = true; - break; - } - } - return isUseBean; - } - - /** - * @param importName - * should be just the package plus the type eg. java.util.List - * or java.util.* - * @param jspReferenceRegion - * should be the <%@ page import = "java.util.List"%> region - * @param addToMap - */ - private void appendImportToBuffer(String importName, ITextRegionCollection jspReferenceRegion, boolean addToMap) { - String javaImportString = "import " + importName + ";" + ENDL; //$NON-NLS-1$ //$NON-NLS-2$ - fUserImports.append(javaImportString); - if (addToMap) { - addImportToMap(importName, jspReferenceRegion); - } - fOffsetInUserImports += javaImportString.length(); - } - - /** - * new text can be something like: "import java.lang.Object;\n" - * - * but the reference region could have been something like: <%@page - * import="java.lang.Object, java.io.*, java.util.List"%> - * - * so the exact mapping has to be calculated carefully. - * - * isIndirect means that the import came from an included file (if true) - * - * @param importName - * @param jspReferenceRegion - */ - private void addImportToMap(String importName, ITextRegionCollection jspReferenceRegion) { - - // massage text - // String jspText = importName.substring(importName.indexOf("import ") - // + 7, importName.indexOf(';')); - // String jspText = importName.trim(); - - // these positions will be updated below - Position javaRange = new Position(fOffsetInUserImports + 7, 1); - Position jspRange = new Position(jspReferenceRegion.getStart(), jspReferenceRegion.getLength()); - - // calculate JSP range by finding "import" attribute - ITextRegionList regions = jspReferenceRegion.getRegions(); - int size = regions.size(); - - int start = -1; - int length = -1; - - ITextRegion r = null; - for (int i = 0; i < size; i++) { - r = regions.get(i); - if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) - if (jspReferenceRegion.getText(r).trim().equals("import")) { //$NON-NLS-1$ - // get the attr value region - if (size > i + 2) { - r = regions.get(i + 2); - if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - - String jspImportText = jspReferenceRegion.getText(r); - - // the position in question (in the JSP) is what - // is bracketed below - // includes whitespace - // <%@page import="java.lang.Object,[ java.io.* ], - // java.util.List"%> - - // in the java file - // import [ java.io.* ]; - - start = jspImportText.indexOf(importName); - length = importName.length(); - - // safety, don't add to map if bad positioning - if (start == -1 || length < 1) - break; - - // update jsp range - jspRange.setOffset(jspReferenceRegion.getStartOffset(r) + start); - jspRange.setLength(length); - - // update java range - javaRange.setLength(length); - - break; - } - } - } - } - - // safety for bad ranges - if (start != -1 && length > 1) { - // put ranges in java -> jsp range map - fImportRanges.put(javaRange, jspRange); - } - } - - /** - * temp fix for 282295 until better mapping is in place - * - * @param newText - * @param jspReferenceRegion - */ - private void appendUseBeanToBuffer(String newText, ITextRegionCollection jspReferenceRegion, boolean isIndirect) throws Exception { - // java string looks like this (tokenized) - // Type id = new Classname();\n - // 0 1 2 3 4 - // or - // Type id = null;\n // if there is no classname - // 0 1 2 3 - - // ---------------------- - // calculate java ranges - // ---------------------- - StringTokenizer st = new StringTokenizer(newText, " ", false); //$NON-NLS-1$ - int i = 0; - String[] parsedJava = new String[st.countTokens()]; - while (st.hasMoreTokens()) - parsedJava[i++] = st.nextToken(); - - String type = parsedJava[0] != null ? parsedJava[0] : ""; //$NON-NLS-1$ - String id = parsedJava[1] != null ? parsedJava[1] : ""; //$NON-NLS-1$ - String className = parsedJava.length > 4 ? parsedJava[4] : ""; //$NON-NLS-1$ - - Position javaTypeRange = new Position(fOffsetInUserCode, type.length()); - Position javaIdRange = new Position(fOffsetInUserCode + type.length() + 1, id.length()); - Position javaClassRange = new Position(fOffsetInUserCode + type.length() + 1 + id.length() + 7, 0); - if (className.length() >= 4) { - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=86132 - int classNameLength = className.substring(0, className.indexOf('(')).length(); - javaClassRange = new Position(fOffsetInUserCode + type.length() + 1 + id.length() + 7, classNameLength); - } - - // --------------------- - // calculate jsp ranges - // --------------------- - ITextRegionList regions = jspReferenceRegion.getRegions(); - ITextRegion r = null; - String attrName = "", attrValue = ""; //$NON-NLS-1$ //$NON-NLS-2$ - int quoteOffset = 0; - Position jspTypeRange = null; - Position jspIdRange = null; - Position jspClassRange = null; - - for (int j = 0; j < regions.size(); j++) { - r = regions.get(j); - if (r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) { - attrName = jspReferenceRegion.getText(r); - if (regions.size() >= j + 2 && regions.get(j + 2).getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - // get attr value - r = regions.get(j + 2); - attrValue = jspReferenceRegion.getText(r); - - // may have quotes - quoteOffset = (attrValue.startsWith("\"") || attrValue.startsWith("'")) ? 1 : 0; //$NON-NLS-1$ //$NON-NLS-2$ - - if (attrName.equals("type")) //$NON-NLS-1$ - jspTypeRange = new Position(jspReferenceRegion.getStartOffset(r) + quoteOffset, StringUtils.stripQuotesLeaveInsideSpace(attrValue).length()); - else if (attrName.equals("id")) //$NON-NLS-1$ - jspIdRange = new Position(jspReferenceRegion.getStartOffset(r) + quoteOffset, StringUtils.stripQuotesLeaveInsideSpace(attrValue).length()); - else if (attrName.equals("class")) //$NON-NLS-1$ - jspClassRange = new Position(jspReferenceRegion.getStartOffset(r) + quoteOffset, StringUtils.stripQuotesLeaveInsideSpace(attrValue).length()); - } - } - } - - // put ranges in java -> jsp range map - if (!type.equals("") && jspTypeRange != null) { //$NON-NLS-1$ - fCodeRanges.put(javaTypeRange, jspTypeRange); - // note: don't update offsets for this map when result is built - // they'll be updated when code ranges offsets are updated - fUseBeanRanges.put(javaTypeRange, jspTypeRange); - if (isIndirect) - fIndirectRanges.put(javaTypeRange, jspTypeRange); - } - if (!id.equals("") && jspIdRange != null) { //$NON-NLS-1$ - fCodeRanges.put(javaIdRange, jspIdRange); - // note: don't update offsets for this map when result is built - // they'll be updated when code ranges offsets are updated - fUseBeanRanges.put(javaIdRange, jspTypeRange); - if (isIndirect) - fIndirectRanges.put(javaIdRange, jspTypeRange); - } - if (!className.equals("") && jspClassRange != null) { //$NON-NLS-1$ - fCodeRanges.put(javaClassRange, jspClassRange); - // note: don't update offsets for this map when result is built - // they'll be updated when code ranges offsets are updated - fUseBeanRanges.put(javaClassRange, jspTypeRange); - if (isIndirect) - fIndirectRanges.put(javaClassRange, jspTypeRange); - } - } - - /** - * Set the buffer to the current JSPType: STANDARD_JSP, EMBEDDED_JSP, - * DECLARATION, EXPRESSION, SCRIPTLET (for keepting track of cursor - * position when the final document is built) - * - * @param JSPType - * the JSP type that the cursor is in - */ - protected void setCursorOwner(int JSPType) { - switch (JSPType) { - case DECLARATION : - setCursorOwner(fUserDeclarations); - break; - case EXPRESSION : - case SCRIPTLET : - setCursorOwner(fUserCode); - break; - default : - setCursorOwner(fUserCode); - } - } - - /** - * this piece of code iterates through fCurrentNodes and clumps them - * together in a big text string - unescaping characters if they are not - * CDATA - simply appending if they are CDATA it stops iteration when it - * hits a node that is an XML_TAG_NAME (which should be the region closing - * tag) - */ - protected String getUnescapedRegionText(ITextRegionCollection stRegion, int JSPType) { - StringBuffer buffer = new StringBuffer(); - int start = stRegion.getStartOffset(); - int end = stRegion.getEndOffset(); - // adjustment necessary for embedded region containers - if (stRegion instanceof ITextRegionContainer && stRegion.getType() == DOMRegionContext.BLOCK_TEXT) { - if (stRegion.getRegions() != null && stRegion.getRegions().size() > 1) { - ITextRegion jspContent = stRegion.getRegions().get(1); // should - // be - // jspContent - // region - start = stRegion.getStartOffset(jspContent); - end = stRegion.getEndOffset(jspContent); - } - } - int CDATAOffset = 0; // number of characters lost in conversion - int bufferSize = 0; - if (stRegion.getType() == DOMJSPRegionContexts.JSP_CONTENT || stRegion.getType() == DOMRegionContext.BLOCK_TEXT // need - // this - // for - // embedded - // JSP - // regions - || stRegion.getType() == DOMRegionContext.XML_TAG_NAME) // need - // this - // in - // case - // there's - // no - // region... - { - fInCodeRegion = (start <= fSourcePosition && fSourcePosition <= end); - if (fInCodeRegion) { - setCursorOwner(JSPType); - setRelativeOffset((fSourcePosition - start) + getCursorOwner().length()); - if (JSPType == EXPRESSION) { - // if an expression, add then length of the enclosing - // paren.. - setCursorInExpression(true); - setRelativeOffset(getRelativeOffset() + EXPRESSION_PREFIX.length()); - } - } - ITextRegion jspContent = null; - if (stRegion.getRegions() != null && stRegion.getRegions().size() > 1) - jspContent = stRegion.getRegions().get(1); - return (jspContent != null) ? stRegion.getFullText(jspContent) : stRegion.getFullText(); // don't - // unescape - // if - // it's - // not - // an - // XMLJSP - // tag - } - else if (stRegion.getType() == DOMJSPRegionContexts.JSP_CLOSE) { - // need to determine cursor owner so that the fCurosorPosition - // will be - // correct even if there is no region after the cursor in the JSP - // file - setCursorOwner(JSPType); - } - // iterate XMLCONTENT and CDATA regions - // loop fCurrentNode until you hit </jsp:scriptlet> (or other closing - // tag name) - while (getCurrentNode() != null && getCurrentNode().getType() != DOMRegionContext.XML_TAG_NAME) // need - // to - // stop - // on - // the - // ending - // tag - // name... - { - start = getCurrentNode().getStartOffset(); - end = getCurrentNode().getEndOffset(); - bufferSize = buffer.length(); - CDATAOffset = unescapeRegion(getCurrentNode(), buffer); - fInCodeRegion = (start <= fSourcePosition && fSourcePosition <= end); - if (fInCodeRegion) { - setCursorOwner(JSPType); - // this offset is sort of complicated... - // it's composed of: - // 1. the length of the start of the current region up till - // where the cursor is - // 2. minus the number of characters lost in CDATA translation - // 3. plus the length of the escaped buffer before the current - // region, but - // is still within the jsp tag - setRelativeOffset((fSourcePosition - getCurrentNode().getStartOffset()) + getCursorOwner().length() - CDATAOffset + bufferSize); - if (JSPType == EXPRESSION) { - setCursorInExpression(true); - // if an expression, add then length of the enclosing - // paren.. - setRelativeOffset(getRelativeOffset() + EXPRESSION_PREFIX.length()); - } - } - if (getCurrentNode() != null) - advanceNextNode(); - } - return buffer.toString(); - } - - /** - * @param r - * the region to be unescaped (XMLContent, XML ENTITY - * REFERENCE, or CDATA) - * @param sb - * the stringbuffer to append the text to - * @return the number of characters removed in unescaping this text - */ - protected int unescapeRegion(ITextRegion r, StringBuffer sb) { - String s = ""; //$NON-NLS-1$ - int lengthBefore = 0, lengthAfter = 0, cdata_tags_length = 0; - if (r != null && (r.getType() == DOMRegionContext.XML_CONTENT || r.getType() == DOMRegionContext.XML_ENTITY_REFERENCE)) { - lengthBefore = (getCurrentNode() != r) ? getCurrentNode().getFullText(r).length() : getCurrentNode().getFullText().length(); - s = EscapedTextUtil.getUnescapedText(getCurrentNode(), r); - lengthAfter = s.length(); - sb.append(s); - } - else if (r != null && r.getType() == DOMRegionContext.XML_CDATA_TEXT) { - if (r instanceof ITextRegionContainer) // only interested in - // contents - { - // navigate to next region container (which should be a JSP - // region) - Iterator it = ((ITextRegionContainer) r).getRegions().iterator(); - ITextRegion temp = null; - while (it.hasNext()) { - temp = (ITextRegion) it.next(); - if (temp instanceof ITextRegionContainer || temp.getType() == DOMRegionContext.XML_CDATA_TEXT) { - sb.append(getCurrentNode().getFullText(temp)); - } - else if (temp.getType() == DOMRegionContext.XML_CDATA_OPEN || temp.getType() == DOMRegionContext.XML_CDATA_CLOSE) { - cdata_tags_length += temp.getLength(); - } - } - } - } - return (lengthBefore - lengthAfter + cdata_tags_length); - } - - // - // <jsp:useBean> - protected void translateUseBean(ITextRegionCollection container) { - ITextRegion r = null; - String attrName = null; - String attrValue = null; - String id = null; - String type = null; - String className = null; - - Iterator regions = container.getRegions().iterator(); - while (regions.hasNext() && (r = (ITextRegion) regions.next()) != null && (r.getType() != DOMRegionContext.XML_TAG_CLOSE || r.getType() != DOMRegionContext.XML_EMPTY_TAG_CLOSE)) { - - attrName = attrValue = null; - if (r.getType().equals(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) { - attrName = container.getText(r).trim(); - if (regions.hasNext() && (r = (ITextRegion) regions.next()) != null && r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS) { - if (regions.hasNext() && (r = (ITextRegion) regions.next()) != null && r.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - attrValue = StringUtils.stripQuotes(container.getText(r)); - } - // has equals, but no value? - } - // an attribute with no equals? - } - // (pa) might need different logic here if we wanna support more - if (attrName != null && attrValue != null) { - if (attrName.equals("id")) //$NON-NLS-1$ - id = attrValue; - else if (attrName.equals("class")) //$NON-NLS-1$ - className = attrValue; - else if (attrName.equals("type")) //$NON-NLS-1$ - type = attrValue; - } - - } - // has id w/ type and/or classname - // Type id = new Classname(); - // or - // Type id = null; // if there is no classname - if (id != null && (type != null || className != null)) { - if (type == null) - type = className; - String prefix = type + " " + id + " = "; //$NON-NLS-1$ //$NON-NLS-2$ - String suffix = "null;" + ENDL; //$NON-NLS-1$ - if (className != null) - suffix = "new " + className + "();" + ENDL; //$NON-NLS-1$ //$NON-NLS-2$ - - appendToBuffer(prefix + suffix, fUserCode, true, fCurrentNode); - } - } - - final public int getCursorPosition() { - return fCursorPosition; - } - - protected boolean isCursorInExpression() { - return fCursorInExpression; - } - - protected void setCursorInExpression(boolean in) { - fCursorInExpression = in; - } - - final public void setSourceCursor(int i) { - fSourcePosition = i; - } - - final public int getSourcePosition() { - return fSourcePosition; - } - - final public TLDCMDocumentManager getTLDCMDocumentManager() { - return TaglibController.getTLDCMDocumentManager(fStructuredDocument); - } - - final public void setRelativeOffset(int relativeOffset) { - this.fRelativeOffset = relativeOffset; - } - - final public int getRelativeOffset() { - return fRelativeOffset; - } - - private void setCursorOwner(StringBuffer cursorOwner) { - this.fCursorOwner = cursorOwner; - } - - final public StringBuffer getCursorOwner() { - return fCursorOwner; - } - - private IStructuredDocumentRegion setCurrentNode(IStructuredDocumentRegion currentNode) { - return this.fCurrentNode = currentNode; - } - - final public IStructuredDocumentRegion getCurrentNode() { - return fCurrentNode; - } - - public ArrayList getELProblems() { - return fELProblems; - } - - public IStructuredDocument getStructuredDocument() { - return fStructuredDocument; - } -}
\ No newline at end of file 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 deleted file mode 100644 index 6a7ae9d711..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java +++ /dev/null @@ -1,497 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jst.jsp.core.internal.Logger; -import org.eclipse.jst.jsp.core.internal.parser.JSPSourceParser; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.wst.sse.core.internal.ltk.parser.BlockMarker; -import org.eclipse.wst.sse.core.internal.ltk.parser.StructuredDocumentRegionHandler; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.core.internal.util.Debug; -import org.eclipse.wst.sse.core.internal.util.StringUtils; -import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; - - -/** - * Parser/helper class for JSPTranslator. Used for parsing XML-JSP regions (in a script block) - * A lot of logic borrowed from TLDCMDocumentManager. There should be only one XMLJSPRegionHelper per text file - * - * @author pavery - */ -class XMLJSPRegionHelper implements StructuredDocumentRegionHandler { - private final JSPTranslator fTranslator; - protected JSPSourceParser fLocalParser = null; - protected String fTextToParse = null; - // need this if not at the start of the document (eg. parsing just a script block) - protected int fStartOfTextToParse = 0; - // buffers for text that this class parses - protected List fScriptlets = new ArrayList(); - protected List fExpressions = new ArrayList(); - protected List fDeclarations = new ArrayList(); - // name of the open tag that was last handled (if we are interested in it) - protected String fTagname = null; - protected String fTextBefore = ""; //$NON-NLS-1$ - protected String fUnescapedText = ""; //$NON-NLS-1$ - protected String fStrippedText = ""; //$NON-NLS-1$ - // for reconciling cursor position later - int fPossibleOwner = JSPTranslator.SCRIPTLET; - - public XMLJSPRegionHelper(JSPTranslator translator) { - getLocalParser().addStructuredDocumentRegionHandler(this); - this.fTranslator = translator; - } - - protected JSPSourceParser getLocalParser() { - if (fLocalParser == null) - fLocalParser = new JSPSourceParser(); - return fLocalParser; - } - - public void addBlockMarker(BlockMarker marker) { - fLocalParser.addBlockMarker(marker); - } - - public void reset(String textToParse) { - reset(textToParse, 0); - } - - public void reset(String textToParse, int start) { - fStartOfTextToParse = start; - getLocalParser().reset(textToParse); - fTextToParse = textToParse; - } - - public void forceParse() { - getLocalParser().getDocumentRegions(); - fLocalParser = null; - } - - /* - * parse an entire file - */ - public void parse(String filename) { - // from outer class - List blockMarkers = this.fTranslator.getBlockMarkers(); - reset(getContents(filename)); - // this adds the current markers from the outer class list - // to this parser so parsing works correctly - for (int i = 0; i < blockMarkers.size(); i++) { - addBlockMarker((BlockMarker) blockMarkers.get(i)); - } - forceParse(); - } - - /* - * writes out scriptlet, expression, and declaration buffers - * to the ongoing buffers in the JSPTranslator (calls to outer JSPTranslator methods) - */ - public void writeToBuffers() { - IStructuredDocumentRegion currentNode = fTranslator.getCurrentNode(); - // currentNode should be the <%@page include="xxx"%> StructuredDocumentRegion - for (int i = 0; i < fScriptlets.size(); i++) { - this.fTranslator.translateScriptletString((String) fScriptlets.get(i), currentNode, currentNode.getStartOffset(), currentNode.getLength()); - } - for (int i = 0; i < fExpressions.size(); i++) { - this.fTranslator.translateExpressionString((String) fExpressions.get(i), currentNode, currentNode.getStartOffset(), currentNode.getLength()); - } - for (int i = 0; i < fDeclarations.size(); i++) { - this.fTranslator.translateDeclarationString((String) fDeclarations.get(i), currentNode, currentNode.getStartOffset(), currentNode.getLength()); - } - } - - /* - * listens to parser node parsed events - * adds to local scriplet, expression, declaration buffers - * determines which type of region the cursor is in, and adjusts cursor offset accordingly - */ - public void nodeParsed(IStructuredDocumentRegion sdRegion) { - - try { - - handleScopingIfNecessary(sdRegion); - - if (isJSPStartRegion(sdRegion)) { - String nameStr = getRegionName(sdRegion); - if (isJSPRegion(nameStr)) - fTagname = nameStr; - else - fTagname = null; - } - 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)) { - processScriptlet(sdRegion); - } - else if (isExpression(fTagname)) { - processExpression(sdRegion); - } - else if (isDeclaration(fTagname)) { - processDeclaration(sdRegion); - } - else { - 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; - } - // this updates cursor position - checkCursorInRegion(sdRegion); - } - catch (NullPointerException e) { - // logging this exception that I've seen a couple of times... - // seems to happen during shutdown of unit tests, at which - // point Logger has already been unloaded - try { - Logger.logException("XMLJSPRegionHelper: exception in node parsing", e); //$NON-NLS-1$ - } - catch (NoClassDefFoundError ex) { - // do nothing, since we're just ending - } - } - } - - private void handleScopingIfNecessary(IStructuredDocumentRegion sdRegion) { - - // fix to make sure custom tag block have their own scope - // we add '{' for custom tag open and '}' for custom tag close - // in the translation - if(sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_TAG_OPEN) { - if(!isSelfClosingTag(sdRegion)) { - String nameStr = getRegionName(sdRegion); - if(isPossibleCustomTag(nameStr)) { - startScope(nameStr); - } - } - } - else if(sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_END_TAG_OPEN) { - String nameStr = getRegionName(sdRegion); - if(isPossibleCustomTag(nameStr)) { - endScope(nameStr); - } - } - } - - private boolean isSelfClosingTag(ITextRegionCollection containerRegion) { - - if(containerRegion == null) - return false; - - ITextRegionList regions = containerRegion.getRegions(); - ITextRegion r = regions.get(regions.size()-1); - return r.getType() == DOMRegionContext.XML_EMPTY_TAG_CLOSE; - } - - private void startScope(String tagName) { - //IStructuredDocumentRegion currentNode = fTranslator.getCurrentNode(); - StringBuffer text = new StringBuffer(); - text.append("{ // <"); //$NON-NLS-1$ - text.append(tagName); - text.append(">\n"); //$NON-NLS-1$ - //this.fTranslator.translateScriptletString(text.toString(), currentNode, currentNode.getStartOffset(), currentNode.getLength()); //$NON-NLS-1$ - fScriptlets.add(text.toString()); - } - - private void endScope(String tagName) { - //IStructuredDocumentRegion currentNode = fTranslator.getCurrentNode(); - StringBuffer text = new StringBuffer(); - text.append("} // </"); //$NON-NLS-1$ - text.append(tagName); - text.append(">\n"); //$NON-NLS-1$ - //this.fTranslator.translateScriptletString(text.toString(), currentNode, currentNode.getStartOffset(), currentNode.getLength()); //$NON-NLS-1$ - fScriptlets.add(text.toString()); - } - - public void resetNodes() { - // do nothing - } - - private void checkCursorInRegion(IStructuredDocumentRegion sdRegion) { - // if cursor is in this region... - if (this.fTranslator.getSourcePosition() >= fStartOfTextToParse + sdRegion.getStartOffset() && this.fTranslator.getSourcePosition() <= fStartOfTextToParse + sdRegion.getEndOffset()) { - int endOfNameTag = sdRegion.getStartOffset(); - int offset = fTextBefore.length() - fStrippedText.length(); - // offset in addtion to what's already in the buffer - this.fTranslator.setRelativeOffset(this.fTranslator.getSourcePosition() - (fStartOfTextToParse + endOfNameTag) - offset); - // outer class method - this.fTranslator.setCursorOwner(fPossibleOwner); - // add length of what's already in the buffer - this.fTranslator.setRelativeOffset(this.fTranslator.getRelativeOffset() + this.fTranslator.getCursorOwner().length()); - if (fPossibleOwner == JSPTranslator.EXPRESSION) { - // add length of expression prefix if necessary... - this.fTranslator.setRelativeOffset(this.fTranslator.getRelativeOffset() + JSPTranslator.EXPRESSION_PREFIX.length()); - } - } - } - - protected void processDeclaration(IStructuredDocumentRegion sdRegion) { - prepareText(sdRegion); - fDeclarations.add(fStrippedText); - fPossibleOwner = JSPTranslator.DECLARATION; - } - - protected void processExpression(IStructuredDocumentRegion sdRegion) { - prepareText(sdRegion); - fExpressions.add(fStrippedText); - fPossibleOwner = JSPTranslator.EXPRESSION; - } - - protected void processScriptlet(IStructuredDocumentRegion sdRegion) { - prepareText(sdRegion); - fScriptlets.add(fStrippedText); - fPossibleOwner = JSPTranslator.SCRIPTLET; - } - - /* - * Substitutes values for entity references, strips CDATA tags, and keeps - * track of string length(s) for cursor position calculation later. - * @param sdRegion - */ - protected void prepareText(IStructuredDocumentRegion sdRegion) { - fTextBefore = fTextToParse.substring(sdRegion.getStartOffset(), sdRegion.getEndOffset()); - fUnescapedText = EscapedTextUtil.getUnescapedText(fTextBefore); - fStrippedText = this.fTranslator.stripCDATA(fUnescapedText); - } - - protected void processUseBean(IStructuredDocumentRegion sdRegion) { - if (fTagname != null && isUseBean(fTagname)) { - // previous region has the actual attributes - sdRegion = sdRegion.getPrevious(); - String beanClass, beanType, beanId, beanDecl = ""; //$NON-NLS-1$ - beanClass = getAttributeValue("class", sdRegion); //$NON-NLS-1$ - beanType = getAttributeValue("type", sdRegion); //$NON-NLS-1$ - beanId = getAttributeValue("id", sdRegion); //$NON-NLS-1$ - - if (beanId != null && (beanType != null || beanClass != null)) { - if (beanType.equals("")) //$NON-NLS-1$ - beanType = beanClass; - String prefix = beanType + " " + beanId + " = "; //$NON-NLS-1$ //$NON-NLS-2$ - String suffix = "null;\n"; //$NON-NLS-1$ - if (beanClass != null) - suffix = "new " + beanClass + "();\n"; //$NON-NLS-1$ //$NON-NLS-2$ - beanDecl = prefix + suffix; - } - - fScriptlets.add(beanDecl); - fPossibleOwner = JSPTranslator.SCRIPTLET; - } - } - - protected void processOtherRegions(IStructuredDocumentRegion sdRegion) { - processIncludeDirective(sdRegion); - processPageDirective(sdRegion); - } - - protected void processIncludeDirective(IStructuredDocumentRegion sdRegion) { - if (isIncludeDirective(fTagname)) { - // the directive name region itself contains the attrs... - if (sdRegion.getRegions().get(0).getType() == DOMRegionContext.XML_CONTENT) - sdRegion = sdRegion.getPrevious(); - String fileLocation = getAttributeValue("file", sdRegion); //$NON-NLS-1$ - this.fTranslator.handleIncludeFile(fileLocation); - } - else if (isPossibleCustomTag(fTagname)) { - // this custom tag may define variables - this.fTranslator.addTaglibVariables(fTagname); - } - else if (isTaglibDirective(fTagname)) { - // also add the ones created here to the parent document - String prefix = getAttributeValue("prefix", sdRegion); //$NON-NLS-1$ - List docs = this.fTranslator.getTLDCMDocumentManager().getCMDocumentTrackers(prefix, this.fTranslator.getCurrentNode().getEnd()); - Iterator it = docs.iterator(); - Iterator elements = null; - CMNode node = null; - CMDocument doc = null; - BlockMarker marker = null; - while (it.hasNext()) { - doc = (CMDocument) it.next(); - elements = doc.getElements().iterator(); - while (elements.hasNext()) { - node = (CMNode) elements.next(); - marker = new BlockMarker(node.getNodeName(), null, DOMJSPRegionContexts.JSP_CONTENT, true); - // global scope is OK because we have encountered this <@taglib> directive - // so it all markers from it should will be in scope - // add to this local parser - addBlockMarker(marker); - // add to outer class marker list, for - this.fTranslator.getBlockMarkers().add(marker); - } - } - } - } - - protected void processPageDirective(IStructuredDocumentRegion sdRegion) { - if (isPageDirective(fTagname)) { - while (sdRegion != null) { - if (sdRegion.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) - break; - sdRegion = sdRegion.getPrevious(); - } - String importValue = getAttributeValue("import", sdRegion); //$NON-NLS-1$ - if (importValue != "") { //$NON-NLS-1$ - // had to add "false" parameter to ensure these - // imports don't get added to jsp <-> java map (since they are from an included file) - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=81687 - this.fTranslator.addImports(importValue, false); - } - } - } - - /* - * convenience method to get an attribute value from attribute name - */ - protected String getAttributeValue(String attrName, IStructuredDocumentRegion sdRegion) { - String sdRegionText = fTextToParse.substring(sdRegion.getStartOffset(), sdRegion.getEndOffset()); - String textRegionText, attrValue = ""; //$NON-NLS-1$ - Iterator it = sdRegion.getRegions().iterator(); - ITextRegion nameRegion, valueRegion = null; - while (it.hasNext()) { - nameRegion = (ITextRegion) it.next(); - if (nameRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) { - textRegionText = sdRegionText.substring(nameRegion.getStart(), nameRegion.getEnd()); - if (textRegionText.equalsIgnoreCase(attrName)) { - while (it.hasNext()) { - valueRegion = (ITextRegion) it.next(); - if (valueRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - attrValue = sdRegionText.substring(valueRegion.getStart(), valueRegion.getEnd()); - break; // inner - } - } - break; // outer - } - } - } - return StringUtils.stripQuotes(attrValue); - } - - // these methods determine what content gets added to the local scriplet, expression, declaration buffers - /* - * return true for elements whose contents we might want to add to the java file we are building - */ - protected boolean isJSPStartRegion(IStructuredDocumentRegion sdRegion) { - return (sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_TAG_OPEN || sdRegion.getFirstRegion().getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN); - } - - protected boolean isJSPRegion(String tagName) { - return isDeclaration(tagName) || isExpression(tagName) || isScriptlet(tagName) || isUseBean(tagName) || isIncludeDirective(tagName) || isPossibleCustomTag(tagName) || isTaglibDirective(tagName) || isPageDirective(tagName); - } - - protected boolean isDeclaration(String tagName) { - return tagName.equalsIgnoreCase("jsp:declaration"); //$NON-NLS-1$ - } - - protected boolean isExpression(String tagName) { - return tagName.equalsIgnoreCase("jsp:expression"); //$NON-NLS-1$ - } - - protected boolean isScriptlet(String tagName) { - return tagName.equalsIgnoreCase("jsp:scriptlet"); //$NON-NLS-1$ - } - - protected boolean isUseBean(String tagName) { - return tagName.equalsIgnoreCase("jsp:useBean"); //$NON-NLS-1$ - } - - protected boolean isIncludeDirective(String tagName) { - return tagName.equalsIgnoreCase("jsp:directive.include"); //$NON-NLS-1$ - } - - protected boolean isPossibleCustomTag(String tagName) { - return tagName.indexOf(":") > 0 && !tagName.startsWith("jsp"); //$NON-NLS-1$ //$NON-NLS-2$ - } - - protected boolean isTaglibDirective(String tagName) { - return tagName.equalsIgnoreCase("jsp:directive.taglib"); //$NON-NLS-1$ - } - - protected boolean isPageDirective(String tagName) { - return tagName.equalsIgnoreCase("jsp:directive.page"); //$NON-NLS-1$ - } - - protected String getRegionName(IStructuredDocumentRegion sdRegion) { - - String nameStr = ""; //$NON-NLS-1$ - ITextRegionList regions = sdRegion.getRegions(); - for(int i=0; i<regions.size(); i++) { - ITextRegion r = regions.get(i); - if(r.getType() == DOMRegionContext.XML_TAG_NAME) { - nameStr = fTextToParse.substring(sdRegion.getStartOffset(r), sdRegion.getTextEndOffset(r)); - break; - } - } - return nameStr.trim(); - } - - /* - * get the contents of a file as a String - */ - protected String getContents(String fileName) { - StringBuffer s = new StringBuffer(); - int c = 0; - int count = 0; - InputStream is = null; - try { - IPath filePath = new Path(fileName); - IFile f = ResourcesPlugin.getWorkspace().getRoot().getFile(filePath); - if(f != null && !f.exists()) { - f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(filePath); - } - if (f != null && f.exists()) { - is = f.getContents(); - while ((c = is.read()) != -1) { - count++; - s.append((char) c); - } - } - } - catch (Exception e) { - if (Debug.debugStructuredDocument) - e.printStackTrace(); - } - finally { - try { - if (is != null) { - is.close(); - } - } - catch (Exception e) { - // nothing to do - } - } - return s.toString(); - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAddExpress.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAddExpress.java deleted file mode 100644 index a3c6a6eafc..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAddExpress.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTAddExpress.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTAddExpress extends SimpleNode { - public ASTAddExpress(int id) { - super(id); - } - - public ASTAddExpress(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAddExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAddExpression.java deleted file mode 100644 index c3b6eac73c..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAddExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTAddExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTAddExpression extends ASTOperatorExpression { - public ASTAddExpression(int id) { - super(id); - } - - public ASTAddExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAndExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAndExpression.java deleted file mode 100644 index befe402036..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTAndExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTAndExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTAndExpression extends ASTOperatorExpression { - public ASTAndExpression(int id) { - super(id); - } - - public ASTAndExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTChoiceExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTChoiceExpression.java deleted file mode 100644 index 779079e30b..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTChoiceExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTChoiceExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTChoiceExpression extends SimpleNode { - public ASTChoiceExpression(int id) { - super(id); - } - - public ASTChoiceExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTEqualityExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTEqualityExpression.java deleted file mode 100644 index 4a06113a00..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTEqualityExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTEqualityExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTEqualityExpression extends ASTOperatorExpression { - public ASTEqualityExpression(int id) { - super(id); - } - - public ASTEqualityExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTExpression.java deleted file mode 100644 index 9d93f38a2e..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTExpression extends SimpleNode { - public ASTExpression(int id) { - super(id); - } - - public ASTExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTFunctionInvocation.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTFunctionInvocation.java deleted file mode 100644 index a0cad90208..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTFunctionInvocation.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTFunctionInvocation.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTFunctionInvocation extends SimpleNode { - String fullFunctionName; - - public ASTFunctionInvocation(int id) { - super(id); - } - - public ASTFunctionInvocation(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } - -public String getFullFunctionName() { - return fullFunctionName; -} - -public void setFullFunctionName(String fullFunctionName) { - this.fullFunctionName = fullFunctionName; -} -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTGTNode.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTGTNode.java deleted file mode 100644 index d40005b68c..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTGTNode.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTGTNode.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTGTNode extends SimpleNode { - public ASTGTNode(int id) { - super(id); - } - - public ASTGTNode(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTImplicitObject.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTImplicitObject.java deleted file mode 100644 index 1049ad52d4..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTImplicitObject.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTImplicitObject.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTImplicitObject extends SimpleNode { - public ASTImplicitObject(int id) { - super(id); - } - - public ASTImplicitObject(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTLiteral.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTLiteral.java deleted file mode 100644 index fb334f433c..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTLiteral.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTLiteral.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTLiteral extends SimpleNode { - public ASTLiteral(int id) { - super(id); - } - - public ASTLiteral(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTMultiplyExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTMultiplyExpression.java deleted file mode 100644 index 3d8f600610..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTMultiplyExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTMultiplyExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTMultiplyExpression extends ASTOperatorExpression { - public ASTMultiplyExpression(int id) { - super(id); - } - - public ASTMultiplyExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTOperatorExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTOperatorExpression.java deleted file mode 100644 index 3da6b77f57..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTOperatorExpression.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -import java.util.ArrayList; -import java.util.List; - -public class ASTOperatorExpression extends SimpleNode { - protected ArrayList operatorTokens = new ArrayList(); - - public ASTOperatorExpression(int i) { - super(i); - } - - public ASTOperatorExpression(JSPELParser p, int i) { - this(i); - parser = p; - } - - public void addOperatorToken(Token opToken) { - operatorTokens.add(opToken); - } - - public List getOperatorTokens() { - return operatorTokens; - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTOrExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTOrExpression.java deleted file mode 100644 index f3bb76c4aa..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTOrExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTOrExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTOrExpression extends ASTOperatorExpression { - public ASTOrExpression(int id) { - super(id); - } - - public ASTOrExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTRelationalExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTRelationalExpression.java deleted file mode 100644 index 30238463ff..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTRelationalExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTRelationalExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTRelationalExpression extends ASTOperatorExpression { - public ASTRelationalExpression(int id) { - super(id); - } - - public ASTRelationalExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTStart.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTStart.java deleted file mode 100644 index 3a117e5c61..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTStart.java +++ /dev/null @@ -1,28 +0,0 @@ -/* Gopyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTStart extends SimpleNode { - public ASTStart(int id) { - super(id); - } - - public ASTStart(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTUnaryExpression.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTUnaryExpression.java deleted file mode 100644 index 86870a33db..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTUnaryExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTUnaryExpression.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTUnaryExpression extends SimpleNode { - public ASTUnaryExpression(int id) { - super(id); - } - - public ASTUnaryExpression(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValue.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValue.java deleted file mode 100644 index fd6a36c84a..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValue.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTValue.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTValue extends SimpleNode { - public ASTValue(int id) { - super(id); - } - - public ASTValue(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValuePrefix.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValuePrefix.java deleted file mode 100644 index 1f2bf03f81..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValuePrefix.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTValuePrefix.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTValuePrefix extends SimpleNode { - public ASTValuePrefix(int id) { - super(id); - } - - public ASTValuePrefix(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValueSuffix.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValueSuffix.java deleted file mode 100644 index 2317267337..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ASTValueSuffix.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. ASTValueSuffix.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class ASTValueSuffix extends SimpleNode { - - protected Token propertyNameToken; - - public ASTValueSuffix(int id) { - super(id); - } - - public ASTValueSuffix(JSPELParser p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } - -public Token getPropertyNameToken() { - return propertyNameToken; -} - -public void setPropertyNameToken(Token propertyNameToken) { - this.propertyNameToken = propertyNameToken; -} -} 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 deleted file mode 100644 index 665e09f9f8..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGenerator.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -import java.util.Map; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslator; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection; - -/** - * The code checker for the jsf/jsp EL. - */ -public final class ELGenerator { - /** - * Constructor. - * - * @param locator A valid ELLocator instance, may not be null. - */ - public ELGenerator() { - } // constructor - - - /** - * Check the netuiel AST and set diagnostics as necessary. - * @param translator TODO - * @param jspReferenceRegion TODO - * @param contentStart - * @param contentLength - */ - public void generate(ASTExpression root, StringBuffer result, Map codeMap, JSPTranslator translator, ITextRegionCollection jspReferenceRegion, int contentStart, int contentLength) { - ELGeneratorVisitor visitor = new ELGeneratorVisitor(result, codeMap, translator, jspReferenceRegion, contentStart); - root.jjtAccept(visitor, null); - } -} 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 deleted file mode 100644 index dfd3cd27bc..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java +++ /dev/null @@ -1,427 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.jface.text.Position; -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.internal.java.JSPTranslator; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection; - -public class ELGeneratorVisitor implements JSPELParserVisitor { - - private static final String ENDL = "\n"; //$NON-NLS-1$ - - private static final String fExpressionHeader1 = "public String _elExpression"; //$NON-NLS-1$ - private static final String fExpressionHeader2 = "()" + ENDL + //$NON-NLS-1$ - "\t\tthrows java.io.IOException, javax.servlet.ServletException {" + ENDL + //$NON-NLS-1$ - "javax.servlet.jsp.PageContext pageContext = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map param = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map paramValues = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map header = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map headerValues = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map cookie = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map initParam = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map pageScope = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map requestScope = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map sessionScope = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map applicationScope = null;" + ENDL + //$NON-NLS-1$ - "return \"\"+"; //$NON-NLS-1$ - - private static final String fJspImplicitObjects[] = { "pageContext" }; //$NON-NLS-1$ - - private static final String fJspImplicitMaps[] = { "param", "paramValues", "header", "headerValues", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - "cookie", "initParam", "pageScope", "requestScope", "sessionScope", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "applicationScope" }; //$NON-NLS-1$ - - private static final HashMap fJSPImplicitObjectMap = new HashMap(fJspImplicitObjects.length); - static { - for(int i = 0; i < fJspImplicitObjects.length; i++) { - fJSPImplicitObjectMap.put(fJspImplicitObjects[i], new Boolean(true)); - } - - for(int i = 0; i < fJspImplicitMaps.length; i++) { - fJSPImplicitObjectMap.put(fJspImplicitMaps[i], new Boolean(false)); - } - } - - private static final String fFooter = " ;" + ENDL + "}" + ENDL; //$NON-NLS-1$ //$NON-NLS-2$ - - private StringBuffer fResult; - private Map fCodeMap; - private int fOffsetInUserCode; - private int methodCounter = 0; - private JSPTranslator fTranslator = null; - private int fContentStart; - private static Map fOperatorMap; - - // this flag lets us know if we were unable to generate for some reason. One possible reason is that the expression - // contains a reference to a variable for which information is only available at runtime. - private boolean fCanGenerate = true; - - /** - * Tranlsation of XML-style operators to java - */ - static { - fOperatorMap = new HashMap(); - fOperatorMap.put("gt", ">"); //$NON-NLS-1$ //$NON-NLS-2$ - fOperatorMap.put("lt", "<"); //$NON-NLS-1$ //$NON-NLS-2$ - fOperatorMap.put("ge", ">="); //$NON-NLS-1$ //$NON-NLS-2$ - fOperatorMap.put("le", "<="); //$NON-NLS-1$ //$NON-NLS-2$ - fOperatorMap.put("mod", "%"); //$NON-NLS-1$ //$NON-NLS-2$ - fOperatorMap.put("eq", "=="); //$NON-NLS-1$ //$NON-NLS-2$ - } - - /** - * The constructor squirrels away a few things we'll need later - * - * @param result - * @param codeMap - * @param translator - * @param jspReferenceRegion - * @param contentStart - */ - public ELGeneratorVisitor(StringBuffer result, Map codeMap, JSPTranslator translator, ITextRegionCollection jspReferenceRegion, int contentStart) - { - fResult = result; - fCodeMap = codeMap; - fOffsetInUserCode = result.length(); - fContentStart = contentStart; - fTranslator = translator; - } - - /** - * Append a token to the output stream. Automatically calculating mapping. - * - * @param token - */ - private void append(Token token) - { - append(token.image, token.beginColumn - 1, token.endColumn); - } - - /** - * Append a translation for the corresponding input token. - * - * @param translated - * @param token - */ - private void append(String translated, Token token) - { - append(translated, token.beginColumn - 1, token.endColumn); - } - - /** - * Append a string explicitly giving the input mapping. - * - * @param newText - * @param jspPositionStart - * @param jspPositionEnd - */ - private void append(String newText, int jspPositionStart, int jspPositionEnd) - { - fResult.append(newText); - Position javaRange = new Position(fOffsetInUserCode, newText.length()); - Position jspRange = new Position(fContentStart + jspPositionStart, jspPositionEnd - jspPositionStart); - - fCodeMap.put(javaRange, jspRange); - fOffsetInUserCode += newText.length(); - } - - /** - * Append text that will be unmapped and therefore will not be available for completion. - * - * @param newText - */ - private void append(String newText) - { - fResult.append(newText); - fOffsetInUserCode += newText.length(); - } - - /** - * Generate a function invocation. - * - * @param fullFunctionName - * @return - */ - protected String genFunction(String fullFunctionName) { - TLDCMDocumentManager docMgr = TaglibController.getTLDCMDocumentManager(fTranslator.getStructuredDocument()); - int colonIndex = fullFunctionName.indexOf(':'); - String prefix = fullFunctionName.substring(0, colonIndex); - String functionName = fullFunctionName.substring(colonIndex + 1); - if (docMgr == null) - return null; - - Iterator taglibs = docMgr.getCMDocumentTrackers(fTranslator.getCurrentNode().getStartOffset()).iterator(); - while (taglibs.hasNext()) { - TaglibTracker tracker = (TaglibTracker)taglibs.next(); - if(tracker.getPrefix().equals(prefix)) { - CMDocumentImpl doc = (CMDocumentImpl)tracker.getDocument(); - - List functions = doc.getFunctions(); - for(Iterator it = functions.iterator(); it.hasNext(); ) { - TLDFunction function = (TLDFunction)it.next(); - if(function.getName().equals(functionName)) { - return function.getClassName() + "." + function.getName(); //$NON-NLS-1$ - } - } - } - } - return null; - } - - /** - * Handle a simple node -- fallback - */ - public Object visit(SimpleNode node, Object data) { - return(node.childrenAccept(this, data)); - } - - /** - * Handle top-level expression - */ - public Object visit(ASTExpression node, Object data) { - int start = node.getFirstToken().beginColumn - 1; - int end = node.lastToken.endColumn - 1; - append(fExpressionHeader1, start, start); - append(Integer.toString(methodCounter++), start, start); - append(fExpressionHeader2, start, start); - - Object retval = node.childrenAccept(this, data); - - append(fFooter, end, end); - - // something is preventing good code generation so empty out the result and the map. - if(!fCanGenerate) { - fResult.delete(0, fResult.length()); - fCodeMap.clear(); - } - return retval; - } - - /** - * Generically generate an operator node. - * - * @param node - * @param data - */ - private void generateOperatorNode(ASTOperatorExpression node, Object data) { - for(int i = 0; i < node.children.length; i++) { - node.children[i].jjtAccept(this, data); - if( node.children.length - i > 1) { - appendOperator((Token)node.getOperatorTokens().get(i)); - } - } - } - - /** - * Append an operator to the output stream after translation (if any) - * - * @param token - * @return - */ - private String appendOperator(Token token) { - String tokenImage = token.image.trim(); - String translated = (String)fOperatorMap.get(tokenImage); - if(null != translated) { - append(translated, token); - } else { - append(token); - } - return(translated); - } - - /** - * Handle or Expression - */ - public Object visit(ASTOrExpression node, Object data) { - generateOperatorNode(node, data); - return(null); - } - - - /** - * Handle and expression - */ - public Object visit(ASTAndExpression node, Object data) { - generateOperatorNode(node, data); - return(null); - } - - - /** - * Handle equality - */ - public Object visit(ASTEqualityExpression node, Object data) { - generateOperatorNode(node, data); - return(null); - } - - - /** - * Handle Relational - */ - public Object visit(ASTRelationalExpression node, Object data) { - generateOperatorNode(node, data); - return(null); - } - - - /** - * Handle addition - */ - public Object visit(ASTAddExpression node, Object data) { - generateOperatorNode(node, data); - return(null); - } - - - /** - * Handle multiply - */ - public Object visit(ASTMultiplyExpression node, Object data) { - generateOperatorNode(node, data); - return(null); - } - - - /** - * Choice Expression (ternary operator) - */ - public Object visit(ASTChoiceExpression node, Object data) { - node.children[0].jjtAccept(this, data); - append("?"); //$NON-NLS-1$ - node.children[1].jjtAccept(this, data); - append(":"); //$NON-NLS-1$ - node.children[2].jjtAccept(this,data); - return null; - } - - - /** - * Handle unary - */ - public Object visit(ASTUnaryExpression node, Object data) { - if(JSPELParserConstants.EMPTY == node.firstToken.kind) { - append("((null == "); //$NON-NLS-1$ - node.childrenAccept(this, data); - append(") || ("); //$NON-NLS-1$ - node.childrenAccept(this, data); - append(").isEmpty())"); //$NON-NLS-1$ - } else if(JSPELParserConstants.NOT1 == node.firstToken.kind || JSPELParserConstants.NOT2 == node.firstToken.kind) { - append("(!"); //$NON-NLS-1$ - node.childrenAccept(this, data); - append(")"); //$NON-NLS-1$ - } else if(JSPELParserConstants.MINUS == node.firstToken.kind) { - append("(-"); //$NON-NLS-1$ - node.childrenAccept(this, data); - append(")"); //$NON-NLS-1$ - } else { - node.childrenAccept(this, data); - } - return null; - } - - - /** - * Value node - */ - public Object visit(ASTValue node, Object data) { - return node.childrenAccept(this, data); - } - - - /** - * Value Prefix - */ - public Object visit(ASTValuePrefix node, Object data) { - // this is a raw identifier. May sure it's an implicit object. - // This is the primary plae where modification is needed to - // support JSF backing beans. - if(null == node.children) { - if(isCompletingObject(node.firstToken.image)) { - append(node.firstToken); - } else { - fCanGenerate = false; - } - return(null); - } - return node.childrenAccept(this, data); - } - - - /** - * Function for testing implicit objects. - * - * @param image - * @return - */ - private boolean isCompletingObject(String image) { - Boolean value = (Boolean)fJSPImplicitObjectMap.get(image); - return null == value ? false : value.booleanValue(); - } - - /** - * Value suffix - */ - public Object visit(ASTValueSuffix node, Object data) { - if(JSPELParserConstants.LBRACKET == node.firstToken.kind) { - fCanGenerate = false; - } else if(null != node.getPropertyNameToken()) { - Token suffix = node.getPropertyNameToken(); - String ucaseName = suffix.image.substring(0, 1).toUpperCase() + suffix.image.substring(1, suffix.image.length()); - append(node.firstToken); - append("get" + ucaseName + "()", suffix); //$NON-NLS-1$ //$NON-NLS-2$ - } else { - append(node.firstToken); - } - return null; - } - - - /** - * Function invocation - */ - public Object visit(ASTFunctionInvocation node, Object data) { - String functionTranslation = genFunction(node.getFullFunctionName()); - if(null != functionTranslation) - { - append(functionTranslation + "(", node.getFirstToken()); //$NON-NLS-1$ - for(int i = 0; i < node.children.length; i++) { - node.children[i].jjtAccept(this, data); - if( node.children.length - i > 1){ - append(","); //$NON-NLS-1$ - } - } - append(")"); //$NON-NLS-1$ - } - return null; - } - - /** - * Literal - */ - public Object visit(ASTLiteral node, Object data) { - // TODO any further translation needed? - append(node.firstToken); - return null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/FindFunctionInvocationVisitor.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/FindFunctionInvocationVisitor.java deleted file mode 100644 index e05c5622de..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/FindFunctionInvocationVisitor.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class FindFunctionInvocationVisitor implements JSPELParserVisitor { - protected int fCursorPosition; - - public FindFunctionInvocationVisitor(int cursorPosition) - { - fCursorPosition = cursorPosition; - } - - protected boolean isEnclosing(SimpleNode node) { - return(node.firstToken.beginColumn < fCursorPosition && node.lastToken.endColumn >= fCursorPosition); - } - - - protected Object visitEnclosingChild(SimpleNode node, Object data) { - if(null == node.children) - return null; - - for(int i = 0; i < node.children.length; i++) { - if(isEnclosing(node)) - return node.children[i].jjtAccept(this, data); - } - return null; - } - - public Object visit(SimpleNode node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTOrExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTAndExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTEqualityExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTRelationalExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTAddExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTMultiplyExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTChoiceExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTUnaryExpression node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTValue node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTValuePrefix node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTValueSuffix node, Object data) { - return visitEnclosingChild(node, data); - } - - public Object visit(ASTFunctionInvocation node, Object data) { - Object nestedInvocation = visitEnclosingChild(node, data); - if(null != nestedInvocation) - return nestedInvocation; - return node; - } - - public Object visit(ASTLiteral node, Object data) { - return visitEnclosingChild(node, data); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JJTJSPELParserState.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JJTJSPELParserState.java deleted file mode 100644 index 6e7436c2c9..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JJTJSPELParserState.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. JJTJSPELParserState.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -class JJTJSPELParserState { - private java.util.Stack nodes; - private java.util.Stack marks; - - private int sp; // number of nodes on stack - private int mk; // current mark - private boolean node_created; - - JJTJSPELParserState() { - nodes = new java.util.Stack(); - marks = new java.util.Stack(); - sp = 0; - mk = 0; - } - - /* Determines whether the current node was actually closed and - pushed. This should only be called in the final user action of a - node scope. */ - boolean nodeCreated() { - return node_created; - } - - /* Call this to reinitialize the node stack. It is called - automatically by the parser's ReInit() method. */ - void reset() { - nodes.removeAllElements(); - marks.removeAllElements(); - sp = 0; - mk = 0; - } - - /* Returns the root node of the AST. It only makes sense to call - this after a successful parse. */ - Node rootNode() { - return (Node)nodes.elementAt(0); - } - - /* Pushes a node on to the stack. */ - void pushNode(Node n) { - nodes.push(n); - ++sp; - } - - /* Returns the node on the top of the stack, and remove it from the - stack. */ - Node popNode() { - if (--sp < mk) { - mk = ((Integer)marks.pop()).intValue(); - } - return (Node)nodes.pop(); - } - - /* Returns the node currently on the top of the stack. */ - Node peekNode() { - return (Node)nodes.peek(); - } - - /* Returns the number of children on the stack in the current node - scope. */ - int nodeArity() { - return sp - mk; - } - - - void clearNodeScope(Node n) { - while (sp > mk) { - popNode(); - } - mk = ((Integer)marks.pop()).intValue(); - } - - - void openNodeScope(Node n) { - marks.push(new Integer(mk)); - mk = sp; - n.jjtOpen(); - } - - - /* A definite node is constructed from a specified number of - children. That number of nodes are popped from the stack and - made the children of the definite node. Then the definite node - is pushed on to the stack. */ - void closeNodeScope(Node n, int num) { - mk = ((Integer)marks.pop()).intValue(); - while (num-- > 0) { - Node c = popNode(); - c.jjtSetParent(n); - n.jjtAddChild(c, num); - } - n.jjtClose(); - pushNode(n); - node_created = true; - } - - - /* A conditional node is constructed if its condition is true. All - the nodes that have been pushed since the node was opened are - made children of the the conditional node, which is then pushed - on to the stack. If the condition is false the node is not - constructed and they are left on the stack. */ - void closeNodeScope(Node n, boolean condition) { - if (condition) { - int a = nodeArity(); - mk = ((Integer)marks.pop()).intValue(); - while (a-- > 0) { - Node c = popNode(); - c.jjtSetParent(n); - n.jjtAddChild(c, a); - } - n.jjtClose(); - pushNode(n); - node_created = true; - } else { - mk = ((Integer)marks.pop()).intValue(); - node_created = false; - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPEL.jj b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPEL.jj deleted file mode 100644 index 0e383b4047..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPEL.jj +++ /dev/null @@ -1,675 +0,0 @@ -*******************************************************************************
- * Copyright (c) 2005 BEA Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * BEA Systems - initial implementation
- *
- *******************************************************************************/
-/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. JSPEL.jj */
-/*@egen*//* I know that haing some of these options on one line is rude but
- * if we don't do that the line number reported from javacc are off
- * which, trust me, is far more annoying. --tcarroll@bea.com
- */
-options {
- JAVA_UNICODE_ESCAPE = false;
- UNICODE_INPUT = true;
- STATIC = false;
- OPTIMIZE_TOKEN_MANAGER = true;
-}
-
-PARSER_BEGIN(JSPELParser)
-
-package org.eclipse.jst.jsp.core.internal.java.jspel;
-
-public class JSPELParser/*@bgen(jjtree)*/implements JSPELParserTreeConstants/*@egen*/ {/*@bgen(jjtree)*/
- protected JJTJSPELParserState jjtree = new JJTJSPELParserState();
-
-/*@egen*/
-
- void jjtreeOpenNodeScope(Node n)
- {
- ((SimpleNode)n).setFirstToken(getToken(1));
- }
-
- void jjtreeCloseNodeScope(Node n)
- {
- ((SimpleNode)n).setLastToken(getToken(0));
- }
-
- public static JSPELParser createParser(java.lang.String input) {
- java.io.StringReader reader = new java.io.StringReader(input);
- return new JSPELParser(reader);
- }
-
- public void ReInit(java.lang.String input) {
- java.io.StringReader reader = new java.io.StringReader(input);
- ReInit(reader);
- }
-
-}
-
-PARSER_END(JSPELParser)
-
-SKIP :
-{
- " "
-| "\t"
-| "\n"
-| "\r"
-}
-
-TOKEN :
-{
-/* Literals */
- < INTEGER_LITERAL: ["0"-"9"] (["0"-"9"])* >
-|
- < FLOATING_POINT_LITERAL:
- (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)?
- | "." (["0"-"9"])+ (<EXPONENT>)?
- | (["0"-"9"])+ <EXPONENT>
- >
-|
- < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
-|
- < STRING_LITERAL:
- ("\"" ((~["\"","\\"]) | ("\\" ( ["\\","\""] )))* "\"") |
- ("\'" ((~["\'","\\"]) | ("\\" ( ["\\","\'"] )))* "\'")
- >
-|
- < BADLY_ESCAPED_STRING_LITERAL:
- ("\"" (~["\"","\\"])* ("\\" ( ~["\\","\""] ))) |
- ("\'" (~["\'","\\"])* ("\\" ( ~["\\","\'"] )))
- >
-
-/* Reserved Words and Symbols */
-| < TRUE: "true" >
-| < FALSE: "false" >
-| < NULL: "null" >
-| < DOT: "." >
-| < GT1: ">" >
-| < GT2: "gt" >
-| < LT1: "<" >
-| < LT2: "lt" >
-| < EQ1: "==" >
-| < EQ2: "eq" >
-| < LE1: "<=" >
-| < LE2: "le" >
-| < GE1: ">=" >
-| < GE2: "ge" >
-| < NEQ1: "!=" >
-| < NEQ2: "ne" >
-| < LPAREN: "(" >
-| < RPAREN: ")" >
-| < COMMA: "," >
-| < COLON: ":" >
-| < LBRACKET: "[" >
-| < RBRACKET: "]" >
-| < PLUS: "+" >
-| < MINUS: "-" >
-| < MULTIPLY: "*" >
-| < DIVIDE1: "/" >
-| < DIVIDE2: "div" >
-| < MODULUS1: "%" >
-| < MODULUS2: "mod" >
-| < NOT1: "not" >
-| < NOT2: "!" >
-| < AND1: "and" >
-| < AND2: "&&" >
-| < OR1: "or" >
-| < OR2: "||" >
-| < EMPTY: "empty" >
-| < COND: "?" >
-
-/* Identifiers */
-
-| < IDENTIFIER: (<LETTER>|<IMPL_OBJ_START>) (<LETTER>|<DIGIT>)* >
-| < #IMPL_OBJ_START: "#" >
-|
- < #LETTER:
- [
- "$",
- "A"-"Z",
- "_",
- "a"-"z",
- "\u00c0"-"\u00d6",
- "\u00d8"-"\u00f6",
- "\u00f8"-"\u00ff",
- "\u0100"-"\u1fff",
- "\u3040"-"\u318f",
- "\u3300"-"\u337f",
- "\u3400"-"\u3d2d",
- "\u4e00"-"\u9fff",
- "\uf900"-"\ufaff"
- ]
- >
-|
- < #DIGIT:
- [
- "0"-"9",
- "\u0660"-"\u0669",
- "\u06f0"-"\u06f9",
- "\u0966"-"\u096f",
- "\u09e6"-"\u09ef",
- "\u0a66"-"\u0a6f",
- "\u0ae6"-"\u0aef",
- "\u0b66"-"\u0b6f",
- "\u0be7"-"\u0bef",
- "\u0c66"-"\u0c6f",
- "\u0ce6"-"\u0cef",
- "\u0d66"-"\u0d6f",
- "\u0e50"-"\u0e59",
- "\u0ed0"-"\u0ed9",
- "\u1040"-"\u1049"
- ]
- >
-}
-
-ASTExpression Expression() : {/*@bgen(jjtree) Expression */
- ASTExpression jjtn000 = new ASTExpression(JJTEXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) Expression */
- try {
-/*@egen*/
- (LOOKAHEAD("?") ChoiceExpression() | OrExpression())/*@bgen(jjtree)*/
- {
- jjtree.closeNodeScope(jjtn000, true);
- jjtc000 = false;
- jjtreeCloseNodeScope(jjtn000);
- }
-/*@egen*/ { return jjtn000; }/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void OrExpression() :
-{/*@bgen(jjtree) #OrExpression(> 1) */
- ASTOrExpression jjtn000 = new ASTOrExpression(JJTOREXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/
- Token t;
-}
-{/*@bgen(jjtree) #OrExpression(> 1) */
- try {
-/*@egen*/
- AndExpression() ((t = <OR1> | t = <OR2>) { jjtn000.addOperatorToken(t); }
- AndExpression())*/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void AndExpression() :
-{/*@bgen(jjtree) #AndExpression(> 1) */
- ASTAndExpression jjtn000 = new ASTAndExpression(JJTANDEXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/
- Token t;
-}
-{/*@bgen(jjtree) #AndExpression(> 1) */
- try {
-/*@egen*/
- EqualityExpression() ((t = <AND1> | t = <AND2>) { jjtn000.addOperatorToken(t); }
- EqualityExpression())*/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void EqualityExpression() :
-{/*@bgen(jjtree) #EqualityExpression(> 1) */
- ASTEqualityExpression jjtn000 = new ASTEqualityExpression(JJTEQUALITYEXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/
- Token t;
-}
-{/*@bgen(jjtree) #EqualityExpression(> 1) */
- try {
-/*@egen*/
- RelationalExpression()
- ((t = <EQ1> | t = <EQ2> | t = <NEQ1> | t = <NEQ2>) { jjtn000.addOperatorToken(t); }
- RelationalExpression())*/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void RelationalExpression() :
-{/*@bgen(jjtree) #RelationalExpression(> 1) */
- ASTRelationalExpression jjtn000 = new ASTRelationalExpression(JJTRELATIONALEXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/
- Token t;
-}
-{/*@bgen(jjtree) #RelationalExpression(> 1) */
- try {
-/*@egen*/
- AddExpression()
- (
- (t = <LT1> | t = <LT2> | t = <GT1> | t = <GT2> | t = <GE1> | t = <GE2> | t = <LE1> | t = <LE2>) { jjtn000.addOperatorToken(t); }
- AddExpression()
- )*/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void AddExpression() :
-{/*@bgen(jjtree) #AddExpression(> 1) */
- ASTAddExpression jjtn000 = new ASTAddExpression(JJTADDEXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/
- Token t;
-}
-{/*@bgen(jjtree) #AddExpression(> 1) */
- try {
-/*@egen*/
- MultiplyExpression() ((t = <PLUS> | t = <MINUS>) { jjtn000.addOperatorToken(t); }
- MultiplyExpression())*/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void MultiplyExpression() :
-{/*@bgen(jjtree) #MultiplyExpression(> 1) */
- ASTMultiplyExpression jjtn000 = new ASTMultiplyExpression(JJTMULTIPLYEXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/
- Token t;
-}
-{/*@bgen(jjtree) #MultiplyExpression(> 1) */
- try {
-/*@egen*/
- UnaryExpression() (
- ( t = <MULTIPLY> | t = <DIVIDE1> | t = <DIVIDE2> | t = <MODULUS1> | t = <MODULUS2>) { jjtn000.addOperatorToken(t); }
- UnaryExpression()
- )*/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void ChoiceExpression() : {/*@bgen(jjtree) ChoiceExpression */
- ASTChoiceExpression jjtn000 = new ASTChoiceExpression(JJTCHOICEEXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) ChoiceExpression */
- try {
-/*@egen*/
- OrExpression() <COND> OrExpression() <COLON> OrExpression()/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void UnaryExpression() : {/*@bgen(jjtree) UnaryExpression */
- ASTUnaryExpression jjtn000 = new ASTUnaryExpression(JJTUNARYEXPRESSION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) UnaryExpression */
- try {
-/*@egen*/
- ((<NOT1> | <NOT2> | <MINUS> | <EMPTY>) UnaryExpression())
- | Value()/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-
-}
-
-void Value() : {/*@bgen(jjtree) Value */
- ASTValue jjtn000 = new ASTValue(JJTVALUE);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) Value */
- try {
-/*@egen*/
- ValuePrefix() (ValueSuffix())*/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void ValuePrefix() : {/*@bgen(jjtree) ValuePrefix */
- ASTValuePrefix jjtn000 = new ASTValuePrefix(JJTVALUEPREFIX);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) ValuePrefix */
- try {
-/*@egen*/
- Literal() | (<LPAREN> Expression() <RPAREN>) | LOOKAHEAD(3) FunctionInvocation() | <IDENTIFIER>/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void ValueSuffix() :
-{/*@bgen(jjtree) ValueSuffix */
- ASTValueSuffix jjtn000 = new ASTValueSuffix(JJTVALUESUFFIX);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/
- Token t = null;
-}
-{/*@bgen(jjtree) ValueSuffix */
- try {
-/*@egen*/
- (<DOT> (t = <IDENTIFIER>)?)/*@bgen(jjtree)*/
- {
- jjtree.closeNodeScope(jjtn000, true);
- jjtc000 = false;
- jjtreeCloseNodeScope(jjtn000);
- }
-/*@egen*/ { jjtn000.setPropertyNameToken(t); }
- | (<LBRACKET> Expression() <RBRACKET>)/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void FunctionInvocation() :
-{/*@bgen(jjtree) FunctionInvocation */
- ASTFunctionInvocation jjtn000 = new ASTFunctionInvocation(JJTFUNCTIONINVOCATION);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/
- Token prefix = null, name = null;
-}
-{/*@bgen(jjtree) FunctionInvocation */
- try {
-/*@egen*/
- (prefix = <IDENTIFIER> <COLON>) { jjtn000.setFullFunctionName(prefix.image + ":"); }
- (name = <IDENTIFIER>)? {
- if(null != prefix && null != name)
- jjtn000.setFullFunctionName(prefix.image + ":" + (null == name ? "" : name.image));
- else if(null != name)
- jjtn000.setFullFunctionName(name.image);
- }
- (<LPAREN> Expression() (<COMMA> Expression())* try { (<RPAREN>) } catch (Exception e) {} )?/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void Literal() : {/*@bgen(jjtree) Literal */
- ASTLiteral jjtn000 = new ASTLiteral(JJTLITERAL);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) Literal */
- try {
-/*@egen*/
- <TRUE> | <FALSE> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <STRING_LITERAL> | <NULL>/*@bgen(jjtree)*/
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPEL.jjt b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPEL.jjt deleted file mode 100644 index 9fd40d9242..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPEL.jjt +++ /dev/null @@ -1,281 +0,0 @@ -*******************************************************************************
- * Copyright (c) 2005 BEA Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * BEA Systems - initial implementation
- *
- *******************************************************************************/
-/* I know that having some of these options on one line is rude but
- * if we don't do that the line number reported from javacc are off
- * which, trust me, is far more annoying. --tcarroll@bea.com
- */
-options {
- JAVA_UNICODE_ESCAPE = false;
- UNICODE_INPUT = true;
- STATIC = false;
- OPTIMIZE_TOKEN_MANAGER = true; MULTI = true; VISITOR = true; NODE_PACKAGE = "org.eclipse.jst.jsp.core.internal.java.jspel"; NODE_SCOPE_HOOK = true;
-}
-
-PARSER_BEGIN(JSPELParser)
-
-package org.eclipse.jst.jsp.core.internal.java.jspel;
-
-public class JSPELParser {
-
- void jjtreeOpenNodeScope(Node n)
- {
- ((SimpleNode)n).setFirstToken(getToken(1));
- }
-
- void jjtreeCloseNodeScope(Node n)
- {
- ((SimpleNode)n).setLastToken(getToken(0));
- }
-
- public static JSPELParser createParser(java.lang.String input) {
- java.io.StringReader reader = new java.io.StringReader(input);
- return new JSPELParser(reader);
- }
-
- public void ReInit(java.lang.String input) {
- java.io.StringReader reader = new java.io.StringReader(input);
- ReInit(reader);
- }
-
-}
-
-PARSER_END(JSPELParser)
-
-SKIP :
-{
- " "
-| "\t"
-| "\n"
-| "\r"
-}
-
-TOKEN :
-{
-/* Literals */
- < INTEGER_LITERAL: ["0"-"9"] (["0"-"9"])* >
-|
- < FLOATING_POINT_LITERAL:
- (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)?
- | "." (["0"-"9"])+ (<EXPONENT>)?
- | (["0"-"9"])+ <EXPONENT>
- >
-|
- < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
-|
- < STRING_LITERAL:
- ("\"" ((~["\"","\\"]) | ("\\" ( ["\\","\""] )))* "\"") |
- ("\'" ((~["\'","\\"]) | ("\\" ( ["\\","\'"] )))* "\'")
- >
-|
- < BADLY_ESCAPED_STRING_LITERAL:
- ("\"" (~["\"","\\"])* ("\\" ( ~["\\","\""] ))) |
- ("\'" (~["\'","\\"])* ("\\" ( ~["\\","\'"] )))
- >
-
-/* Reserved Words and Symbols */
-| < TRUE: "true" >
-| < FALSE: "false" >
-| < NULL: "null" >
-| < DOT: "." >
-| < GT1: ">" >
-| < GT2: "gt" >
-| < LT1: "<" >
-| < LT2: "lt" >
-| < EQ1: "==" >
-| < EQ2: "eq" >
-| < LE1: "<=" >
-| < LE2: "le" >
-| < GE1: ">=" >
-| < GE2: "ge" >
-| < NEQ1: "!=" >
-| < NEQ2: "ne" >
-| < LPAREN: "(" >
-| < RPAREN: ")" >
-| < COMMA: "," >
-| < COLON: ":" >
-| < LBRACKET: "[" >
-| < RBRACKET: "]" >
-| < PLUS: "+" >
-| < MINUS: "-" >
-| < MULTIPLY: "*" >
-| < DIVIDE1: "/" >
-| < DIVIDE2: "div" >
-| < MODULUS1: "%" >
-| < MODULUS2: "mod" >
-| < NOT1: "not" >
-| < NOT2: "!" >
-| < AND1: "and" >
-| < AND2: "&&" >
-| < OR1: "or" >
-| < OR2: "||" >
-| < EMPTY: "empty" >
-| < COND: "?" >
-
-/* Identifiers */
-
-| < IDENTIFIER: (<LETTER>|<IMPL_OBJ_START>) (<LETTER>|<DIGIT>)* >
-| < #IMPL_OBJ_START: "#" >
-|
- < #LETTER:
- [
- "\u0024",
- "\u0041"-"\u005a",
- "\u005f",
- "\u0061"-"\u007a",
- "\u00c0"-"\u00d6",
- "\u00d8"-"\u00f6",
- "\u00f8"-"\u00ff",
- "\u0100"-"\u1fff",
- "\u3040"-"\u318f",
- "\u3300"-"\u337f",
- "\u3400"-"\u3d2d",
- "\u4e00"-"\u9fff",
- "\uf900"-"\ufaff"
- ]
- >
-|
- < #DIGIT:
- [
- "\u0030"-"\u0039",
- "\u0660"-"\u0669",
- "\u06f0"-"\u06f9",
- "\u0966"-"\u096f",
- "\u09e6"-"\u09ef",
- "\u0a66"-"\u0a6f",
- "\u0ae6"-"\u0aef",
- "\u0b66"-"\u0b6f",
- "\u0be7"-"\u0bef",
- "\u0c66"-"\u0c6f",
- "\u0ce6"-"\u0cef",
- "\u0d66"-"\u0d6f",
- "\u0e50"-"\u0e59",
- "\u0ed0"-"\u0ed9",
- "\u1040"-"\u1049"
- ]
- >
-}
-
-ASTExpression Expression() : {}
-{
- (LOOKAHEAD("?") ChoiceExpression() | OrExpression()) { return jjtThis; }
-}
-
-void OrExpression() #OrExpression(>1) :
-{
- Token t;
-}
-{
- AndExpression() ((t = <OR1> | t = <OR2>) { jjtThis.addOperatorToken(t); }
- AndExpression())*
-}
-
-void AndExpression() #AndExpression(>1) :
-{
- Token t;
-}
-{
- EqualityExpression() ((t = <AND1> | t = <AND2>) { jjtThis.addOperatorToken(t); }
- EqualityExpression())*
-}
-
-void EqualityExpression() #EqualityExpression(>1) :
-{
- Token t;
-}
-{
- RelationalExpression()
- ((t = <EQ1> | t = <EQ2> | t = <NEQ1> | t = <NEQ2>) { jjtThis.addOperatorToken(t); }
- RelationalExpression())*
-}
-
-void RelationalExpression() #RelationalExpression(>1) :
-{
- Token t;
-}
-{
- AddExpression()
- (
- (t = <LT1> | t = <LT2> | t = <GT1> | t = <GT2> | t = <GE1> | t = <GE2> | t = <LE1> | t = <LE2>) { jjtThis.addOperatorToken(t); }
- AddExpression()
- )*
-}
-
-void AddExpression() #AddExpression(>1) :
-{
- Token t;
-}
-{
- MultiplyExpression() ((t = <PLUS> | t = <MINUS>) { jjtThis.addOperatorToken(t); }
- MultiplyExpression())*
-}
-
-void MultiplyExpression() #MultiplyExpression(>1) :
-{
- Token t;
-}
-{
- UnaryExpression() (
- ( t = <MULTIPLY> | t = <DIVIDE1> | t = <DIVIDE2> | t = <MODULUS1> | t = <MODULUS2>) { jjtThis.addOperatorToken(t); }
- UnaryExpression()
- )*
-}
-
-void ChoiceExpression() : {}
-{
- OrExpression() <COND> OrExpression() <COLON> OrExpression()
-}
-
-void UnaryExpression() : {}
-{
- ((<NOT1> | <NOT2> | <MINUS> | <EMPTY>) UnaryExpression())
- | Value()
-
-}
-
-void Value() : {}
-{
- ValuePrefix() (ValueSuffix())*
-}
-
-void ValuePrefix() : {}
-{
- Literal() | (<LPAREN> Expression() <RPAREN>) | LOOKAHEAD(3) FunctionInvocation() | <IDENTIFIER>
-}
-
-void ValueSuffix() :
-{
- Token t = null;
-}
-{
- (<DOT> (t = <IDENTIFIER>)?) { jjtThis.setPropertyNameToken(t); }
- | (<LBRACKET> Expression() <RBRACKET>)
-}
-
-void FunctionInvocation() :
-{
- Token prefix = null, name = null;
-}
-{
- (prefix = <IDENTIFIER> <COLON>) { jjtThis.setFullFunctionName(prefix.image + ":"); }
- (name = <IDENTIFIER>)? {
- if(null != prefix && null != name)
- jjtThis.setFullFunctionName(prefix.image + ":" + (null == name ? "" : name.image));
- else if(null != name)
- jjtThis.setFullFunctionName(name.image);
- }
- (<LPAREN> Expression() (<COMMA> Expression())* try { (<RPAREN>) } catch (Exception e) {} )?
-}
-
-void Literal() : {}
-{
- <TRUE> | <FALSE> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <STRING_LITERAL> | <NULL>
-}
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParser.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParser.java deleted file mode 100644 index 5c01bae7fd..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParser.java +++ /dev/null @@ -1,1158 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree&JavaCC: Do not edit this line. JSPELParser.java */ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class JSPELParser/*@bgen(jjtree)*/implements JSPELParserTreeConstants, JSPELParserConstants {/*@bgen(jjtree)*/ - protected JJTJSPELParserState jjtree = new JJTJSPELParserState(); - void jjtreeOpenNodeScope(Node n) - { - ((SimpleNode)n).setFirstToken(getToken(1)); - } - - void jjtreeCloseNodeScope(Node n) - { - ((SimpleNode)n).setLastToken(getToken(0)); - } - - public static JSPELParser createParser(java.lang.String input) { - java.io.StringReader reader = new java.io.StringReader(input); - return new JSPELParser(reader); - } - - public void ReInit(java.lang.String input) { - java.io.StringReader reader = new java.io.StringReader(input); - ReInit(reader); - } - - final public ASTExpression Expression() throws ParseException { - /*@bgen(jjtree) Expression */ - ASTExpression jjtn000 = new ASTExpression(JJTEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000); - try { - if (jj_2_1(2147483647)) { - ChoiceExpression(); - } else { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - case STRING_LITERAL: - case TRUE: - case FALSE: - case NULL: - case LPAREN: - case MINUS: - case NOT1: - case NOT2: - case EMPTY: - case IDENTIFIER: - OrExpression(); - break; - default: - jj_la1[0] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtreeCloseNodeScope(jjtn000); - {if (true) return jjtn000;} - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } - } - throw new Error("Missing return statement in function"); - } - - final public void OrExpression() throws ParseException { - /*@bgen(jjtree) #OrExpression(> 1) */ - ASTOrExpression jjtn000 = new ASTOrExpression(JJTOREXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000);Token t; - try { - AndExpression(); - label_1: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case OR1: - case OR2: - - break; - default: - jj_la1[1] = jj_gen; - break label_1; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case OR1: - t = jj_consume_token(OR1); - break; - case OR2: - t = jj_consume_token(OR2); - break; - default: - jj_la1[2] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.addOperatorToken(t); - AndExpression(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void AndExpression() throws ParseException { - /*@bgen(jjtree) #AndExpression(> 1) */ - ASTAndExpression jjtn000 = new ASTAndExpression(JJTANDEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000);Token t; - try { - EqualityExpression(); - label_2: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case AND1: - case AND2: - - break; - default: - jj_la1[3] = jj_gen; - break label_2; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case AND1: - t = jj_consume_token(AND1); - break; - case AND2: - t = jj_consume_token(AND2); - break; - default: - jj_la1[4] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.addOperatorToken(t); - EqualityExpression(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void EqualityExpression() throws ParseException { - /*@bgen(jjtree) #EqualityExpression(> 1) */ - ASTEqualityExpression jjtn000 = new ASTEqualityExpression(JJTEQUALITYEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000);Token t; - try { - RelationalExpression(); - label_3: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case EQ1: - case EQ2: - case NEQ1: - case NEQ2: - - break; - default: - jj_la1[5] = jj_gen; - break label_3; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case EQ1: - t = jj_consume_token(EQ1); - break; - case EQ2: - t = jj_consume_token(EQ2); - break; - case NEQ1: - t = jj_consume_token(NEQ1); - break; - case NEQ2: - t = jj_consume_token(NEQ2); - break; - default: - jj_la1[6] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.addOperatorToken(t); - RelationalExpression(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void RelationalExpression() throws ParseException { - /*@bgen(jjtree) #RelationalExpression(> 1) */ - ASTRelationalExpression jjtn000 = new ASTRelationalExpression(JJTRELATIONALEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000);Token t; - try { - AddExpression(); - label_4: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case GT1: - case GT2: - case LT1: - case LT2: - case LE1: - case LE2: - case GE1: - case GE2: - - break; - default: - jj_la1[7] = jj_gen; - break label_4; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case LT1: - t = jj_consume_token(LT1); - break; - case LT2: - t = jj_consume_token(LT2); - break; - case GT1: - t = jj_consume_token(GT1); - break; - case GT2: - t = jj_consume_token(GT2); - break; - case GE1: - t = jj_consume_token(GE1); - break; - case GE2: - t = jj_consume_token(GE2); - break; - case LE1: - t = jj_consume_token(LE1); - break; - case LE2: - t = jj_consume_token(LE2); - break; - default: - jj_la1[8] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.addOperatorToken(t); - AddExpression(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void AddExpression() throws ParseException { - /*@bgen(jjtree) #AddExpression(> 1) */ - ASTAddExpression jjtn000 = new ASTAddExpression(JJTADDEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000);Token t; - try { - MultiplyExpression(); - label_5: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case PLUS: - case MINUS: - - break; - default: - jj_la1[9] = jj_gen; - break label_5; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case PLUS: - t = jj_consume_token(PLUS); - break; - case MINUS: - t = jj_consume_token(MINUS); - break; - default: - jj_la1[10] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.addOperatorToken(t); - MultiplyExpression(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void MultiplyExpression() throws ParseException { - /*@bgen(jjtree) #MultiplyExpression(> 1) */ - ASTMultiplyExpression jjtn000 = new ASTMultiplyExpression(JJTMULTIPLYEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000);Token t; - try { - UnaryExpression(); - label_6: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case MULTIPLY: - case DIVIDE1: - case DIVIDE2: - case MODULUS1: - case MODULUS2: - - break; - default: - jj_la1[11] = jj_gen; - break label_6; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case MULTIPLY: - t = jj_consume_token(MULTIPLY); - break; - case DIVIDE1: - t = jj_consume_token(DIVIDE1); - break; - case DIVIDE2: - t = jj_consume_token(DIVIDE2); - break; - case MODULUS1: - t = jj_consume_token(MODULUS1); - break; - case MODULUS2: - t = jj_consume_token(MODULUS2); - break; - default: - jj_la1[12] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.addOperatorToken(t); - UnaryExpression(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void ChoiceExpression() throws ParseException { - /*@bgen(jjtree) ChoiceExpression */ - ASTChoiceExpression jjtn000 = new ASTChoiceExpression(JJTCHOICEEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000); - try { - OrExpression(); - jj_consume_token(COND); - OrExpression(); - jj_consume_token(COLON); - OrExpression(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void UnaryExpression() throws ParseException { - /*@bgen(jjtree) UnaryExpression */ - ASTUnaryExpression jjtn000 = new ASTUnaryExpression(JJTUNARYEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case MINUS: - case NOT1: - case NOT2: - case EMPTY: - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NOT1: - jj_consume_token(NOT1); - break; - case NOT2: - jj_consume_token(NOT2); - break; - case MINUS: - jj_consume_token(MINUS); - break; - case EMPTY: - jj_consume_token(EMPTY); - break; - default: - jj_la1[13] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - UnaryExpression(); - break; - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - case STRING_LITERAL: - case TRUE: - case FALSE: - case NULL: - case LPAREN: - case IDENTIFIER: - Value(); - break; - default: - jj_la1[14] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void Value() throws ParseException { - /*@bgen(jjtree) Value */ - ASTValue jjtn000 = new ASTValue(JJTVALUE); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000); - try { - ValuePrefix(); - label_7: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case DOT: - case LBRACKET: - - break; - default: - jj_la1[15] = jj_gen; - break label_7; - } - ValueSuffix(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void ValuePrefix() throws ParseException { - /*@bgen(jjtree) ValuePrefix */ - ASTValuePrefix jjtn000 = new ASTValuePrefix(JJTVALUEPREFIX); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - case STRING_LITERAL: - case TRUE: - case FALSE: - case NULL: - Literal(); - break; - case LPAREN: - jj_consume_token(LPAREN); - Expression(); - jj_consume_token(RPAREN); - break; - default: - jj_la1[16] = jj_gen; - if (jj_2_2(3)) { - FunctionInvocation(); - } else { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - jj_consume_token(IDENTIFIER); - break; - default: - jj_la1[17] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void ValueSuffix() throws ParseException { - /*@bgen(jjtree) ValueSuffix */ - ASTValueSuffix jjtn000 = new ASTValueSuffix(JJTVALUESUFFIX); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000);Token t = null; - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case DOT: - jj_consume_token(DOT); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - t = jj_consume_token(IDENTIFIER); - break; - default: - jj_la1[18] = jj_gen; - - } - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtreeCloseNodeScope(jjtn000); - jjtn000.setPropertyNameToken(t); - break; - case LBRACKET: - jj_consume_token(LBRACKET); - Expression(); - jj_consume_token(RBRACKET); - break; - default: - jj_la1[19] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void FunctionInvocation() throws ParseException { - /*@bgen(jjtree) FunctionInvocation */ - ASTFunctionInvocation jjtn000 = new ASTFunctionInvocation(JJTFUNCTIONINVOCATION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000);Token prefix = null, name = null; - try { - prefix = jj_consume_token(IDENTIFIER); - jj_consume_token(COLON); - jjtn000.setFullFunctionName(prefix.image + ":"); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - name = jj_consume_token(IDENTIFIER); - break; - default: - jj_la1[20] = jj_gen; - - } - if(null != prefix && null != name) - jjtn000.setFullFunctionName(prefix.image + ":" + (null == name ? "" : name.image)); - else if(null != name) - jjtn000.setFullFunctionName(name.image); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case LPAREN: - jj_consume_token(LPAREN); - Expression(); - label_8: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case COMMA: - - break; - default: - jj_la1[21] = jj_gen; - break label_8; - } - jj_consume_token(COMMA); - Expression(); - } - try { - jj_consume_token(RPAREN); - } catch (Exception e) { - - } - break; - default: - jj_la1[22] = jj_gen; - - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final public void Literal() throws ParseException { - /*@bgen(jjtree) Literal */ - ASTLiteral jjtn000 = new ASTLiteral(JJTLITERAL); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - jjtreeOpenNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case TRUE: - jj_consume_token(TRUE); - break; - case FALSE: - jj_consume_token(FALSE); - break; - case INTEGER_LITERAL: - jj_consume_token(INTEGER_LITERAL); - break; - case FLOATING_POINT_LITERAL: - jj_consume_token(FLOATING_POINT_LITERAL); - break; - case STRING_LITERAL: - jj_consume_token(STRING_LITERAL); - break; - case NULL: - jj_consume_token(NULL); - break; - default: - jj_la1[23] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } - } - } - - final private boolean jj_2_1(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_1(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(0, xla); } - } - - final private boolean jj_2_2(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_2(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(1, xla); } - } - - final private boolean jj_3R_10() { - if (jj_scan_token(LPAREN)) return true; - return false; - } - - final private boolean jj_3R_9() { - if (jj_scan_token(IDENTIFIER)) return true; - if (jj_scan_token(COLON)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(47)) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_10()) jj_scanpos = xsp; - return false; - } - - final private boolean jj_3_2() { - if (jj_3R_9()) return true; - return false; - } - - final private boolean jj_3_1() { - if (jj_scan_token(COND)) return true; - return false; - } - - public JSPELParserTokenManager token_source; - SimpleCharStream jj_input_stream; - public Token token, jj_nt; - private int jj_ntk; - private Token jj_scanpos, jj_lastpos; - private int jj_la; - public boolean lookingAhead = false; -// private boolean jj_semLA; - private int jj_gen; - final private int[] jj_la1 = new int[24]; - static private int[] jj_la1_0; - static private int[] jj_la1_1; - static { - jj_la1_0(); - jj_la1_1(); - } - private static void jj_la1_0() { - jj_la1_0 = new int[] {0x4001d60,0x0,0x0,0x0,0x0,0x30c0000,0x30c0000,0xf3c000,0xf3c000,0x0,0x0,0x0,0x0,0x0,0x4001d60,0x40002000,0x4001d60,0x0,0x0,0x40002000,0x0,0x10000000,0x4000000,0x1d60,}; - } - private static void jj_la1_1() { - jj_la1_1 = new int[] {0xa182,0x1800,0x1800,0x600,0x600,0x0,0x0,0x0,0x0,0x3,0x3,0x7c,0x7c,0x2182,0xa182,0x0,0x0,0x8000,0x8000,0x0,0x8000,0x0,0x0,0x0,}; - } - final private JJCalls[] jj_2_rtns = new JJCalls[2]; - private boolean jj_rescan = false; - private int jj_gc = 0; - - public JSPELParser(java.io.InputStream stream) { - jj_input_stream = new SimpleCharStream(stream, 1, 1); - token_source = new JSPELParserTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 24; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(java.io.InputStream stream) { - jj_input_stream.ReInit(stream, 1, 1); - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jjtree.reset(); - jj_gen = 0; - for (int i = 0; i < 24; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public JSPELParser(java.io.Reader stream) { - jj_input_stream = new SimpleCharStream(stream, 1, 1); - token_source = new JSPELParserTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 24; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(java.io.Reader stream) { - jj_input_stream.ReInit(stream, 1, 1); - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jjtree.reset(); - jj_gen = 0; - for (int i = 0; i < 24; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public JSPELParser(JSPELParserTokenManager tm) { - token_source = tm; - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 24; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(JSPELParserTokenManager tm) { - token_source = tm; - token = new Token(); - jj_ntk = -1; - jjtree.reset(); - jj_gen = 0; - for (int i = 0; i < 24; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - final private Token jj_consume_token(int kind) throws ParseException { - Token oldToken; - if ((oldToken = token).next != null) token = token.next; - else token = token.next = token_source.getNextToken(); - jj_ntk = -1; - if (token.kind == kind) { - jj_gen++; - if (++jj_gc > 100) { - jj_gc = 0; - for (int i = 0; i < jj_2_rtns.length; i++) { - JJCalls c = jj_2_rtns[i]; - while (c != null) { - if (c.gen < jj_gen) c.first = null; - c = c.next; - } - } - } - return token; - } - token = oldToken; - jj_kind = kind; - throw generateParseException(); - } - - static private final class LookaheadSuccess extends java.lang.Error { - private static final long serialVersionUID = 1L; - } - final private LookaheadSuccess jj_ls = new LookaheadSuccess(); - final private boolean jj_scan_token(int kind) { - if (jj_scanpos == jj_lastpos) { - jj_la--; - if (jj_scanpos.next == null) { - jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); - } else { - jj_lastpos = jj_scanpos = jj_scanpos.next; - } - } else { - jj_scanpos = jj_scanpos.next; - } - if (jj_rescan) { - int i = 0; Token tok = token; - while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } - if (tok != null) jj_add_error_token(kind, i); - } - if (jj_scanpos.kind != kind) return true; - if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; - return false; - } - - final public Token getNextToken() { - if (token.next != null) token = token.next; - else token = token.next = token_source.getNextToken(); - jj_ntk = -1; - jj_gen++; - return token; - } - - final public Token getToken(int index) { - Token t = lookingAhead ? jj_scanpos : token; - for (int i = 0; i < index; i++) { - if (t.next != null) t = t.next; - else t = t.next = token_source.getNextToken(); - } - return t; - } - - final private int jj_ntk() { - if ((jj_nt=token.next) == null) - return (jj_ntk = (token.next=token_source.getNextToken()).kind); - else - return (jj_ntk = jj_nt.kind); - } - - private java.util.Vector jj_expentries = new java.util.Vector(); - private int[] jj_expentry; - private int jj_kind = -1; - private int[] jj_lasttokens = new int[100]; - private int jj_endpos; - - private void jj_add_error_token(int kind, int pos) { - if (pos >= 100) return; - if (pos == jj_endpos + 1) { - jj_lasttokens[jj_endpos++] = kind; - } else if (jj_endpos != 0) { - jj_expentry = new int[jj_endpos]; - for (int i = 0; i < jj_endpos; i++) { - jj_expentry[i] = jj_lasttokens[i]; - } - boolean exists = false; - for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { - int[] oldentry = (int[])(e.nextElement()); - if (oldentry.length == jj_expentry.length) { - exists = true; - for (int i = 0; i < jj_expentry.length; i++) { - if (oldentry[i] != jj_expentry[i]) { - exists = false; - break; - } - } - if (exists) break; - } - } - if (!exists) jj_expentries.addElement(jj_expentry); - if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; - } - } - - public ParseException generateParseException() { - jj_expentries.removeAllElements(); - boolean[] la1tokens = new boolean[51]; - for (int i = 0; i < 51; i++) { - la1tokens[i] = false; - } - if (jj_kind >= 0) { - la1tokens[jj_kind] = true; - jj_kind = -1; - } - for (int i = 0; i < 24; i++) { - if (jj_la1[i] == jj_gen) { - for (int j = 0; j < 32; j++) { - if ((jj_la1_0[i] & (1<<j)) != 0) { - la1tokens[j] = true; - } - if ((jj_la1_1[i] & (1<<j)) != 0) { - la1tokens[32+j] = true; - } - } - } - } - for (int i = 0; i < 51; i++) { - if (la1tokens[i]) { - jj_expentry = new int[1]; - jj_expentry[0] = i; - jj_expentries.addElement(jj_expentry); - } - } - jj_endpos = 0; - jj_rescan_token(); - jj_add_error_token(0, 0); - int[][] exptokseq = new int[jj_expentries.size()][]; - for (int i = 0; i < jj_expentries.size(); i++) { - exptokseq[i] = (int[])jj_expentries.elementAt(i); - } - return new ParseException(token, exptokseq, tokenImage); - } - - final public void enable_tracing() { - } - - final public void disable_tracing() { - } - - final private void jj_rescan_token() { - jj_rescan = true; - for (int i = 0; i < 2; i++) { - JJCalls p = jj_2_rtns[i]; - do { - if (p.gen > jj_gen) { - jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; - switch (i) { - case 0: jj_3_1(); break; - case 1: jj_3_2(); break; - } - } - p = p.next; - } while (p != null); - } - jj_rescan = false; - } - - final private void jj_save(int index, int xla) { - JJCalls p = jj_2_rtns[index]; - while (p.gen > jj_gen) { - if (p.next == null) { p = p.next = new JJCalls(); break; } - p = p.next; - } - p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; - } - - static final class JJCalls { - int gen; - Token first; - int arg; - JJCalls next; - } - -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserConstants.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserConstants.java deleted file mode 100644 index 1f4e3ad908..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserConstants.java +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree&JavaCC: Do not edit this line. JSPELParserConstants.java */ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public interface JSPELParserConstants { - - int EOF = 0; - int INTEGER_LITERAL = 5; - int FLOATING_POINT_LITERAL = 6; - int EXPONENT = 7; - int STRING_LITERAL = 8; - int BADLY_ESCAPED_STRING_LITERAL = 9; - int TRUE = 10; - int FALSE = 11; - int NULL = 12; - int DOT = 13; - int GT1 = 14; - int GT2 = 15; - int LT1 = 16; - int LT2 = 17; - int EQ1 = 18; - int EQ2 = 19; - int LE1 = 20; - int LE2 = 21; - int GE1 = 22; - int GE2 = 23; - int NEQ1 = 24; - int NEQ2 = 25; - int LPAREN = 26; - int RPAREN = 27; - int COMMA = 28; - int COLON = 29; - int LBRACKET = 30; - int RBRACKET = 31; - int PLUS = 32; - int MINUS = 33; - int MULTIPLY = 34; - int DIVIDE1 = 35; - int DIVIDE2 = 36; - int MODULUS1 = 37; - int MODULUS2 = 38; - int NOT1 = 39; - int NOT2 = 40; - int AND1 = 41; - int AND2 = 42; - int OR1 = 43; - int OR2 = 44; - int EMPTY = 45; - int COND = 46; - int IDENTIFIER = 47; - int IMPL_OBJ_START = 48; - int LETTER = 49; - int DIGIT = 50; - - int DEFAULT = 0; - - String[] tokenImage = { - "<EOF>", - "\" \"", - "\"\\t\"", - "\"\\n\"", - "\"\\r\"", - "<INTEGER_LITERAL>", - "<FLOATING_POINT_LITERAL>", - "<EXPONENT>", - "<STRING_LITERAL>", - "<BADLY_ESCAPED_STRING_LITERAL>", - "\"true\"", - "\"false\"", - "\"null\"", - "\".\"", - "\">\"", - "\"gt\"", - "\"<\"", - "\"lt\"", - "\"==\"", - "\"eq\"", - "\"<=\"", - "\"le\"", - "\">=\"", - "\"ge\"", - "\"!=\"", - "\"ne\"", - "\"(\"", - "\")\"", - "\",\"", - "\":\"", - "\"[\"", - "\"]\"", - "\"+\"", - "\"-\"", - "\"*\"", - "\"/\"", - "\"div\"", - "\"%\"", - "\"mod\"", - "\"not\"", - "\"!\"", - "\"and\"", - "\"&&\"", - "\"or\"", - "\"||\"", - "\"empty\"", - "\"?\"", - "<IDENTIFIER>", - "\"#\"", - "<LETTER>", - "<DIGIT>", - }; - -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserTokenManager.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserTokenManager.java deleted file mode 100644 index 50fe376374..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserTokenManager.java +++ /dev/null @@ -1,852 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree&JavaCC: Do not edit this line. JSPELParserTokenManager.java */ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class JSPELParserTokenManager implements JSPELParserConstants -{ - public java.io.PrintStream debugStream = System.out; - public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; } -private final int jjStopStringLiteralDfa_0(int pos, long active0) -{ - switch (pos) - { - case 0: - if ((active0 & 0x2ad002aa9c00L) != 0L) - { - jjmatchedKind = 47; - return 6; - } - if ((active0 & 0x2000L) != 0L) - return 1; - return -1; - case 1: - if ((active0 & 0x22d000001c00L) != 0L) - { - jjmatchedKind = 47; - jjmatchedPos = 1; - return 6; - } - if ((active0 & 0x80002aa8000L) != 0L) - return 6; - return -1; - case 2: - if ((active0 & 0x200000001c00L) != 0L) - { - jjmatchedKind = 47; - jjmatchedPos = 2; - return 6; - } - if ((active0 & 0x2d000000000L) != 0L) - return 6; - return -1; - case 3: - if ((active0 & 0x200000000800L) != 0L) - { - jjmatchedKind = 47; - jjmatchedPos = 3; - return 6; - } - if ((active0 & 0x1400L) != 0L) - return 6; - return -1; - default : - return -1; - } -} -private final int jjStartNfa_0(int pos, long active0) -{ - return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1); -} -private final int jjStopAtPos(int pos, int kind) -{ - jjmatchedKind = kind; - jjmatchedPos = pos; - return pos + 1; -} -private final int jjStartNfaWithStates_0(int pos, int kind, int state) -{ - jjmatchedKind = kind; - jjmatchedPos = pos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return pos + 1; } - return jjMoveNfa_0(state, pos + 1); -} -private final int jjMoveStringLiteralDfa0_0() -{ - switch(curChar) - { - case 33: - jjmatchedKind = 40; - return jjMoveStringLiteralDfa1_0(0x1000000L); - case 37: - return jjStopAtPos(0, 37); - case 38: - return jjMoveStringLiteralDfa1_0(0x40000000000L); - case 40: - return jjStopAtPos(0, 26); - case 41: - return jjStopAtPos(0, 27); - case 42: - return jjStopAtPos(0, 34); - case 43: - return jjStopAtPos(0, 32); - case 44: - return jjStopAtPos(0, 28); - case 45: - return jjStopAtPos(0, 33); - case 46: - return jjStartNfaWithStates_0(0, 13, 1); - case 47: - return jjStopAtPos(0, 35); - case 58: - return jjStopAtPos(0, 29); - case 60: - jjmatchedKind = 16; - return jjMoveStringLiteralDfa1_0(0x100000L); - case 61: - return jjMoveStringLiteralDfa1_0(0x40000L); - case 62: - jjmatchedKind = 14; - return jjMoveStringLiteralDfa1_0(0x400000L); - case 63: - return jjStopAtPos(0, 46); - case 91: - return jjStopAtPos(0, 30); - case 93: - return jjStopAtPos(0, 31); - case 97: - return jjMoveStringLiteralDfa1_0(0x20000000000L); - case 100: - return jjMoveStringLiteralDfa1_0(0x1000000000L); - case 101: - return jjMoveStringLiteralDfa1_0(0x200000080000L); - case 102: - return jjMoveStringLiteralDfa1_0(0x800L); - case 103: - return jjMoveStringLiteralDfa1_0(0x808000L); - case 108: - return jjMoveStringLiteralDfa1_0(0x220000L); - case 109: - return jjMoveStringLiteralDfa1_0(0x4000000000L); - case 110: - return jjMoveStringLiteralDfa1_0(0x8002001000L); - case 111: - return jjMoveStringLiteralDfa1_0(0x80000000000L); - case 116: - return jjMoveStringLiteralDfa1_0(0x400L); - case 124: - return jjMoveStringLiteralDfa1_0(0x100000000000L); - default : - return jjMoveNfa_0(0, 0); - } -} -private final int jjMoveStringLiteralDfa1_0(long active0) -{ - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(0, active0); - return 1; - } - switch(curChar) - { - case 38: - if ((active0 & 0x40000000000L) != 0L) - return jjStopAtPos(1, 42); - break; - case 61: - if ((active0 & 0x40000L) != 0L) - return jjStopAtPos(1, 18); - else if ((active0 & 0x100000L) != 0L) - return jjStopAtPos(1, 20); - else if ((active0 & 0x400000L) != 0L) - return jjStopAtPos(1, 22); - else if ((active0 & 0x1000000L) != 0L) - return jjStopAtPos(1, 24); - break; - case 97: - return jjMoveStringLiteralDfa2_0(active0, 0x800L); - case 101: - if ((active0 & 0x200000L) != 0L) - return jjStartNfaWithStates_0(1, 21, 6); - else if ((active0 & 0x800000L) != 0L) - return jjStartNfaWithStates_0(1, 23, 6); - else if ((active0 & 0x2000000L) != 0L) - return jjStartNfaWithStates_0(1, 25, 6); - break; - case 105: - return jjMoveStringLiteralDfa2_0(active0, 0x1000000000L); - case 109: - return jjMoveStringLiteralDfa2_0(active0, 0x200000000000L); - case 110: - return jjMoveStringLiteralDfa2_0(active0, 0x20000000000L); - case 111: - return jjMoveStringLiteralDfa2_0(active0, 0xc000000000L); - case 113: - if ((active0 & 0x80000L) != 0L) - return jjStartNfaWithStates_0(1, 19, 6); - break; - case 114: - if ((active0 & 0x80000000000L) != 0L) - return jjStartNfaWithStates_0(1, 43, 6); - return jjMoveStringLiteralDfa2_0(active0, 0x400L); - case 116: - if ((active0 & 0x8000L) != 0L) - return jjStartNfaWithStates_0(1, 15, 6); - else if ((active0 & 0x20000L) != 0L) - return jjStartNfaWithStates_0(1, 17, 6); - break; - case 117: - return jjMoveStringLiteralDfa2_0(active0, 0x1000L); - case 124: - if ((active0 & 0x100000000000L) != 0L) - return jjStopAtPos(1, 44); - break; - default : - break; - } - return jjStartNfa_0(0, active0); -} -private final int jjMoveStringLiteralDfa2_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(0, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(1, active0); - return 2; - } - switch(curChar) - { - case 100: - if ((active0 & 0x4000000000L) != 0L) - return jjStartNfaWithStates_0(2, 38, 6); - else if ((active0 & 0x20000000000L) != 0L) - return jjStartNfaWithStates_0(2, 41, 6); - break; - case 108: - return jjMoveStringLiteralDfa3_0(active0, 0x1800L); - case 112: - return jjMoveStringLiteralDfa3_0(active0, 0x200000000000L); - case 116: - if ((active0 & 0x8000000000L) != 0L) - return jjStartNfaWithStates_0(2, 39, 6); - break; - case 117: - return jjMoveStringLiteralDfa3_0(active0, 0x400L); - case 118: - if ((active0 & 0x1000000000L) != 0L) - return jjStartNfaWithStates_0(2, 36, 6); - break; - default : - break; - } - return jjStartNfa_0(1, active0); -} -private final int jjMoveStringLiteralDfa3_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(1, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(2, active0); - return 3; - } - switch(curChar) - { - case 101: - if ((active0 & 0x400L) != 0L) - return jjStartNfaWithStates_0(3, 10, 6); - break; - case 108: - if ((active0 & 0x1000L) != 0L) - return jjStartNfaWithStates_0(3, 12, 6); - break; - case 115: - return jjMoveStringLiteralDfa4_0(active0, 0x800L); - case 116: - return jjMoveStringLiteralDfa4_0(active0, 0x200000000000L); - default : - break; - } - return jjStartNfa_0(2, active0); -} -private final int jjMoveStringLiteralDfa4_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(2, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(3, active0); - return 4; - } - switch(curChar) - { - case 101: - if ((active0 & 0x800L) != 0L) - return jjStartNfaWithStates_0(4, 11, 6); - break; - case 121: - if ((active0 & 0x200000000000L) != 0L) - return jjStartNfaWithStates_0(4, 45, 6); - break; - default : - break; - } - return jjStartNfa_0(3, active0); -} -private final void jjCheckNAdd(int state) -{ - if (jjrounds[state] != jjround) - { - jjstateSet[jjnewStateCnt++] = state; - jjrounds[state] = jjround; - } -} -private final void jjAddStates(int start, int end) -{ - do { - jjstateSet[jjnewStateCnt++] = jjnextStates[start]; - } while (start++ != end); -} -private final void jjCheckNAddTwoStates(int state1, int state2) -{ - jjCheckNAdd(state1); - jjCheckNAdd(state2); -} -private final void jjCheckNAddStates(int start, int end) -{ - do { - jjCheckNAdd(jjnextStates[start]); - } while (start++ != end); -} -//private final void jjCheckNAddStates(int start) -//{ -// jjCheckNAdd(jjnextStates[start]); -// jjCheckNAdd(jjnextStates[start + 1]); -//} -static final long[] jjbitVec0 = { - 0x1ff00000fffffffeL, 0xffffffffffffc000L, 0xffffffffL, 0x600000000000000L -}; -static final long[] jjbitVec2 = { - 0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL -}; -static final long[] jjbitVec3 = { - 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL -}; -static final long[] jjbitVec4 = { - 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L -}; -static final long[] jjbitVec5 = { - 0xffffffffffffffffL, 0xffffffffffffffffL, 0x0L, 0x0L -}; -static final long[] jjbitVec6 = { - 0x3fffffffffffL, 0x0L, 0x0L, 0x0L -}; -static final long[] jjbitVec7 = { - 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL -}; -static final long[] jjbitVec8 = { - 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL -}; -private final int jjMoveNfa_0(int startState, int curPos) -{ - int startsAt = 0; - jjnewStateCnt = 35; - int i = 1; - jjstateSet[0] = startState; - int kind = 0x7fffffff; - for (;;) - { - if (++jjround == 0x7fffffff) - ReInitRounds(); - if (curChar < 64) - { - long l = 1L << curChar; - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - if ((0x3ff000000000000L & l) != 0L) - { - if (kind > 5) - kind = 5; - jjCheckNAddStates(0, 4); - } - else if ((0x1800000000L & l) != 0L) - { - if (kind > 47) - kind = 47; - jjCheckNAdd(6); - } - else if (curChar == 39) - jjCheckNAddStates(5, 9); - else if (curChar == 34) - jjCheckNAddStates(10, 14); - else if (curChar == 46) - jjCheckNAdd(1); - break; - case 1: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 6) - kind = 6; - jjCheckNAddTwoStates(1, 2); - break; - case 3: - if ((0x280000000000L & l) != 0L) - jjCheckNAdd(4); - break; - case 4: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 6) - kind = 6; - jjCheckNAdd(4); - break; - case 5: - if ((0x1800000000L & l) == 0L) - break; - if (kind > 47) - kind = 47; - jjCheckNAdd(6); - break; - case 6: - if ((0x3ff001000000000L & l) == 0L) - break; - if (kind > 47) - kind = 47; - jjCheckNAdd(6); - break; - case 7: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 5) - kind = 5; - jjCheckNAddStates(0, 4); - break; - case 8: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 5) - kind = 5; - jjCheckNAdd(8); - break; - case 9: - if ((0x3ff000000000000L & l) != 0L) - jjCheckNAddTwoStates(9, 10); - break; - case 10: - if (curChar != 46) - break; - if (kind > 6) - kind = 6; - jjCheckNAddTwoStates(11, 12); - break; - case 11: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 6) - kind = 6; - jjCheckNAddTwoStates(11, 12); - break; - case 13: - if ((0x280000000000L & l) != 0L) - jjCheckNAdd(14); - break; - case 14: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 6) - kind = 6; - jjCheckNAdd(14); - break; - case 15: - if ((0x3ff000000000000L & l) != 0L) - jjCheckNAddTwoStates(15, 16); - break; - case 17: - if ((0x280000000000L & l) != 0L) - jjCheckNAdd(18); - break; - case 18: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 6) - kind = 6; - jjCheckNAdd(18); - break; - case 19: - if (curChar == 34) - jjCheckNAddStates(10, 14); - break; - case 20: - if ((0xfffffffbffffffffL & l) != 0L) - jjCheckNAddStates(15, 17); - break; - case 22: - if (curChar == 34) - jjCheckNAddStates(15, 17); - break; - case 23: - if (curChar == 34 && kind > 8) - kind = 8; - break; - case 24: - if ((0xfffffffbffffffffL & l) != 0L) - jjCheckNAddTwoStates(24, 25); - break; - case 26: - if ((0xfffffffbffffffffL & l) != 0L && kind > 9) - kind = 9; - break; - case 27: - if (curChar == 39) - jjCheckNAddStates(5, 9); - break; - case 28: - if ((0xffffff7fffffffffL & l) != 0L) - jjCheckNAddStates(18, 20); - break; - case 30: - if (curChar == 39) - jjCheckNAddStates(18, 20); - break; - case 31: - if (curChar == 39 && kind > 8) - kind = 8; - break; - case 32: - if ((0xffffff7fffffffffL & l) != 0L) - jjCheckNAddTwoStates(32, 33); - break; - case 34: - if ((0xffffff7fffffffffL & l) != 0L && kind > 9) - kind = 9; - break; - default : break; - } - } while(i != startsAt); - } - else if (curChar < 128) - { - long l = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - case 6: - if ((0x7fffffe87fffffeL & l) == 0L) - break; - if (kind > 47) - kind = 47; - jjCheckNAdd(6); - break; - case 2: - if ((0x2000000020L & l) != 0L) - jjAddStates(21, 22); - break; - case 12: - if ((0x2000000020L & l) != 0L) - jjAddStates(23, 24); - break; - case 16: - if ((0x2000000020L & l) != 0L) - jjAddStates(25, 26); - break; - case 20: - if ((0xffffffffefffffffL & l) != 0L) - jjCheckNAddStates(15, 17); - break; - case 21: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 22; - break; - case 22: - if (curChar == 92) - jjCheckNAddStates(15, 17); - break; - case 24: - if ((0xffffffffefffffffL & l) != 0L) - jjAddStates(27, 28); - break; - case 25: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 26; - break; - case 26: - case 34: - if ((0xffffffffefffffffL & l) != 0L && kind > 9) - kind = 9; - break; - case 28: - if ((0xffffffffefffffffL & l) != 0L) - jjCheckNAddStates(18, 20); - break; - case 29: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 30; - break; - case 30: - if (curChar == 92) - jjCheckNAddStates(18, 20); - break; - case 32: - if ((0xffffffffefffffffL & l) != 0L) - jjAddStates(29, 30); - break; - case 33: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 34; - break; - default : break; - } - } while(i != startsAt); - } - else - { - int hiByte = curChar >> 8; - int i1 = hiByte >> 6; - long l1 = 1L << (hiByte & 077); - int i2 = (curChar & 0xff) >> 6; - long l2 = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - case 6: - if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) - break; - if (kind > 47) - kind = 47; - jjCheckNAdd(6); - break; - case 20: - if (jjCanMove_1(hiByte, i1, i2, l1, l2)) - jjAddStates(15, 17); - break; - case 24: - if (jjCanMove_1(hiByte, i1, i2, l1, l2)) - jjAddStates(27, 28); - break; - case 26: - case 34: - if (jjCanMove_1(hiByte, i1, i2, l1, l2) && kind > 9) - kind = 9; - break; - case 28: - if (jjCanMove_1(hiByte, i1, i2, l1, l2)) - jjAddStates(18, 20); - break; - case 32: - if (jjCanMove_1(hiByte, i1, i2, l1, l2)) - jjAddStates(29, 30); - break; - default : break; - } - } while(i != startsAt); - } - if (kind != 0x7fffffff) - { - jjmatchedKind = kind; - jjmatchedPos = curPos; - kind = 0x7fffffff; - } - ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 35 - (jjnewStateCnt = startsAt))) - return curPos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return curPos; } - } -} -static final int[] jjnextStates = { - 8, 9, 10, 15, 16, 28, 29, 31, 32, 33, 20, 21, 23, 24, 25, 20, - 21, 23, 28, 29, 31, 3, 4, 13, 14, 17, 18, 24, 25, 32, 33, -}; -private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2) -{ - switch(hiByte) - { - case 0: - return ((jjbitVec2[i2] & l2) != 0L); - case 48: - return ((jjbitVec3[i2] & l2) != 0L); - case 49: - return ((jjbitVec4[i2] & l2) != 0L); - case 51: - return ((jjbitVec5[i2] & l2) != 0L); - case 61: - return ((jjbitVec6[i2] & l2) != 0L); - default : - if ((jjbitVec0[i1] & l1) != 0L) - return true; - return false; - } -} -private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2) -{ - switch(hiByte) - { - case 0: - return ((jjbitVec8[i2] & l2) != 0L); - default : - if ((jjbitVec7[i1] & l1) != 0L) - return true; - return false; - } -} -public static final String[] jjstrLiteralImages = { -"", null, null, null, null, null, null, null, null, null, "\164\162\165\145", -"\146\141\154\163\145", "\156\165\154\154", "\56", "\76", "\147\164", "\74", "\154\164", "\75\75", -"\145\161", "\74\75", "\154\145", "\76\75", "\147\145", "\41\75", "\156\145", "\50", -"\51", "\54", "\72", "\133", "\135", "\53", "\55", "\52", "\57", "\144\151\166", -"\45", "\155\157\144", "\156\157\164", "\41", "\141\156\144", "\46\46", "\157\162", -"\174\174", "\145\155\160\164\171", "\77", null, null, null, null, }; -public static final String[] lexStateNames = { - "DEFAULT", -}; -static final long[] jjtoToken = { - 0xffffffffff61L, -}; -static final long[] jjtoSkip = { - 0x1eL, -}; -protected SimpleCharStream input_stream; -private final int[] jjrounds = new int[35]; -private final int[] jjstateSet = new int[70]; -protected char curChar; -public JSPELParserTokenManager(SimpleCharStream stream) -{ - if (SimpleCharStream.staticFlag) - throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer."); - input_stream = stream; -} -public JSPELParserTokenManager(SimpleCharStream stream, int lexState) -{ - this(stream); - SwitchTo(lexState); -} -public void ReInit(SimpleCharStream stream) -{ - jjmatchedPos = jjnewStateCnt = 0; - curLexState = defaultLexState; - input_stream = stream; - ReInitRounds(); -} -private final void ReInitRounds() -{ - int i; - jjround = 0x80000001; - for (i = 35; i-- > 0;) - jjrounds[i] = 0x80000000; -} -public void ReInit(SimpleCharStream stream, int lexState) -{ - ReInit(stream); - SwitchTo(lexState); -} -public void SwitchTo(int lexState) -{ - if (lexState >= 1 || lexState < 0) - throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE); - else - curLexState = lexState; -} - -protected Token jjFillToken() -{ - Token t = Token.newToken(jjmatchedKind); - t.kind = jjmatchedKind; - String im = jjstrLiteralImages[jjmatchedKind]; - t.image = (im == null) ? input_stream.GetImage() : im; - t.beginLine = input_stream.getBeginLine(); - t.beginColumn = input_stream.getBeginColumn(); - t.endLine = input_stream.getEndLine(); - t.endColumn = input_stream.getEndColumn(); - return t; -} - -int curLexState = 0; -int defaultLexState = 0; -int jjnewStateCnt; -int jjround; -int jjmatchedPos; -int jjmatchedKind; - -public Token getNextToken() -{ - Token matchedToken; - int curPos = 0; - - EOFLoop : - for (;;) - { - try - { - curChar = input_stream.BeginToken(); - } - catch(java.io.IOException e) - { - jjmatchedKind = 0; - matchedToken = jjFillToken(); - return matchedToken; - } - - try { input_stream.backup(0); - while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L) - curChar = input_stream.BeginToken(); - } - catch (java.io.IOException e1) { continue EOFLoop; } - jjmatchedKind = 0x7fffffff; - jjmatchedPos = 0; - curPos = jjMoveStringLiteralDfa0_0(); - if (jjmatchedKind != 0x7fffffff) - { - if (jjmatchedPos + 1 < curPos) - input_stream.backup(curPos - jjmatchedPos - 1); - if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) - { - matchedToken = jjFillToken(); - return matchedToken; - } - else - { - continue EOFLoop; - } - } - int error_line = input_stream.getEndLine(); - int error_column = input_stream.getEndColumn(); - String error_after = null; - boolean EOFSeen = false; - try { input_stream.readChar(); input_stream.backup(1); } - catch (java.io.IOException e1) { - EOFSeen = true; - error_after = curPos <= 1 ? "" : input_stream.GetImage(); - if (curChar == '\n' || curChar == '\r') { - error_line++; - error_column = 0; - } - else - error_column++; - } - if (!EOFSeen) { - input_stream.backup(1); - error_after = curPos <= 1 ? "" : input_stream.GetImage(); - } - throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR); - } -} - -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserTreeConstants.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserTreeConstants.java deleted file mode 100644 index 55a6e47482..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserTreeConstants.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. JSPELParserTreeConstants.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public interface JSPELParserTreeConstants -{ - public int JJTEXPRESSION = 0; - public int JJTOREXPRESSION = 1; - public int JJTANDEXPRESSION = 2; - public int JJTEQUALITYEXPRESSION = 3; - public int JJTRELATIONALEXPRESSION = 4; - public int JJTADDEXPRESSION = 5; - public int JJTMULTIPLYEXPRESSION = 6; - public int JJTCHOICEEXPRESSION = 7; - public int JJTUNARYEXPRESSION = 8; - public int JJTVALUE = 9; - public int JJTVALUEPREFIX = 10; - public int JJTVALUESUFFIX = 11; - public int JJTFUNCTIONINVOCATION = 12; - public int JJTLITERAL = 13; - - - public String[] jjtNodeName = { - "Expression", - "OrExpression", - "AndExpression", - "EqualityExpression", - "RelationalExpression", - "AddExpression", - "MultiplyExpression", - "ChoiceExpression", - "UnaryExpression", - "Value", - "ValuePrefix", - "ValueSuffix", - "FunctionInvocation", - "Literal", - }; -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserVisitor.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserVisitor.java deleted file mode 100644 index ffcf4941b8..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELParserVisitor.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. JSPELParserVisitor.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public interface JSPELParserVisitor -{ - public Object visit(SimpleNode node, Object data); - public Object visit(ASTExpression node, Object data); - public Object visit(ASTOrExpression node, Object data); - public Object visit(ASTAndExpression node, Object data); - public Object visit(ASTEqualityExpression node, Object data); - public Object visit(ASTRelationalExpression node, Object data); - public Object visit(ASTAddExpression node, Object data); - public Object visit(ASTMultiplyExpression node, Object data); - public Object visit(ASTChoiceExpression node, Object data); - public Object visit(ASTUnaryExpression node, Object data); - public Object visit(ASTValue node, Object data); - public Object visit(ASTValuePrefix node, Object data); - public Object visit(ASTValueSuffix node, Object data); - public Object visit(ASTFunctionInvocation node, Object data); - 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/Node.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/Node.java deleted file mode 100644 index b8a186e4c4..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/Node.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. Node.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -/* All AST nodes must implement this interface. It provides basic - machinery for constructing the parent and child relationships - between nodes. */ - -public interface Node { - - /** This method is called after the node has been made the current - node. It indicates that child nodes can now be added to it. */ - public void jjtOpen(); - - /** This method is called after all the child nodes have been - added. */ - public void jjtClose(); - - /** This pair of methods are used to inform the node of its - parent. */ - public void jjtSetParent(Node n); - public Node jjtGetParent(); - - /** This method tells the node to add its argument to the node's - list of children. */ - public void jjtAddChild(Node n, int i); - - /** This method returns a child node. The children are numbered - from zero, left to right. */ - public Node jjtGetChild(int i); - - /** Return the number of children the node has. */ - public int jjtGetNumChildren(); - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data); -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ParseException.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ParseException.java deleted file mode 100644 index ecd5087075..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ParseException.java +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -/** - * This exception is thrown when parse errors are encountered. - * You can explicitly create objects of this exception type by - * calling the method generateParseException in the generated - * parser. - * - * You can modify this class to customize your error reporting - * mechanisms so long as you retain the public fields. - */ -public class ParseException extends Exception { - - /** - * Default <code>serialVersionUID</code> - */ - private static final long serialVersionUID = 1L; - -/** - * This constructor is used by the method "generateParseException" - * in the generated parser. Calling this constructor generates - * a new object of this type with the fields "currentToken", - * "expectedTokenSequences", and "tokenImage" set. The boolean - * flag "specialConstructor" is also set to true to indicate that - * this constructor was used to create this object. - * This constructor calls its super class with the empty string - * to force the "toString" method of parent class "Throwable" to - * print the error message in the form: - * ParseException: <result of getMessage> - */ - public ParseException(Token currentTokenVal, - int[][] expectedTokenSequencesVal, - String[] tokenImageVal - ) - { - super(""); - specialConstructor = true; - currentToken = currentTokenVal; - expectedTokenSequences = expectedTokenSequencesVal; - tokenImage = tokenImageVal; - } - - /** - * The following constructors are for use by you for whatever - * purpose you can think of. Constructing the exception in this - * manner makes the exception behave in the normal way - i.e., as - * documented in the class "Throwable". The fields "errorToken", - * "expectedTokenSequences", and "tokenImage" do not contain - * relevant information. The JavaCC generated code does not use - * these constructors. - */ - - public ParseException() { - super(); - specialConstructor = false; - } - - public ParseException(String message) { - super(message); - specialConstructor = false; - } - - /** - * This variable determines which constructor was used to create - * this object and thereby affects the semantics of the - * "getMessage" method (see below). - */ - protected boolean specialConstructor; - - /** - * This is the last token that has been consumed successfully. If - * this object has been created due to a parse error, the token - * followng this token will (therefore) be the first error token. - */ - public Token currentToken; - - /** - * Each entry in this array is an array of integers. Each array - * of integers represents a sequence of tokens (by their ordinal - * values) that is expected at this point of the parse. - */ - public int[][] expectedTokenSequences; - - /** - * This is a reference to the "tokenImage" array of the generated - * parser within which the parse error occurred. This array is - * defined in the generated ...Constants interface. - */ - public String[] tokenImage; - - /** - * This method has the standard behavior when this object has been - * created using the standard constructors. Otherwise, it uses - * "currentToken" and "expectedTokenSequences" to generate a parse - * error message and returns it. If this object has been created - * due to a parse error, and you do not catch it (it gets thrown - * from the parser), then this method is called during the printing - * of the final stack trace, and hence the correct error message - * gets displayed. - */ - public String getMessage() { - if (!specialConstructor) { - return super.getMessage(); - } - String expected = ""; - int maxSize = 0; - for (int i = 0; i < expectedTokenSequences.length; i++) { - if (maxSize < expectedTokenSequences[i].length) { - maxSize = expectedTokenSequences[i].length; - } - for (int j = 0; j < expectedTokenSequences[i].length; j++) { - expected += tokenImage[expectedTokenSequences[i][j]] + " "; - } - if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { - expected += "..."; - } - expected += eol + " "; - } - String retval = "Encountered \""; - Token tok = currentToken.next; - for (int i = 0; i < maxSize; i++) { - if (i != 0) retval += " "; - if (tok.kind == 0) { - retval += tokenImage[0]; - break; - } - retval += add_escapes(tok.image); - tok = tok.next; - } - retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; - retval += "." + eol; - if (expectedTokenSequences.length == 1) { - retval += "Was expecting:" + eol + " "; - } else { - retval += "Was expecting one of:" + eol + " "; - } - retval += expected; - return retval; - } - - /** - * The end of line string for this machine. - */ - protected String eol = System.getProperty("line.separator", "\n"); - - /** - * Used to convert raw characters to their escaped version - * when these raw version cannot be used as part of an ASCII - * string literal. - */ - protected String add_escapes(String str) { - StringBuffer retval = new StringBuffer(); - char ch; - for (int i = 0; i < str.length(); i++) { - switch (str.charAt(i)) - { - case 0 : - continue; - case '\b': - retval.append("\\b"); - continue; - case '\t': - retval.append("\\t"); - continue; - case '\n': - retval.append("\\n"); - continue; - case '\f': - retval.append("\\f"); - continue; - case '\r': - retval.append("\\r"); - continue; - case '\"': - retval.append("\\\""); - continue; - case '\'': - retval.append("\\\'"); - continue; - case '\\': - retval.append("\\\\"); - continue; - default: - if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { - String s = "0000" + Integer.toString(ch, 16); - retval.append("\\u" + s.substring(s.length() - 4, s.length())); - } else { - retval.append(ch); - } - continue; - } - } - return retval.toString(); - } - -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/SimpleCharStream.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/SimpleCharStream.java deleted file mode 100644 index 8021b4b992..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/SimpleCharStream.java +++ /dev/null @@ -1,412 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 3.0 */ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -/** - * An implementation of interface CharStream, where the stream is assumed to - * contain only ASCII characters (without unicode processing). - */ - -public class SimpleCharStream -{ - public static final boolean staticFlag = false; - int bufsize; - int available; - int tokenBegin; - public int bufpos = -1; - protected int bufline[]; - protected int bufcolumn[]; - - protected int column = 0; - protected int line = 1; - - protected boolean prevCharIsCR = false; - protected boolean prevCharIsLF = false; - - protected java.io.Reader inputStream; - - protected char[] buffer; - protected int maxNextCharInd = 0; - protected int inBuf = 0; - - protected void ExpandBuff(boolean wrapAround) - { - char[] newbuffer = new char[bufsize + 2048]; - int newbufline[] = new int[bufsize + 2048]; - int newbufcolumn[] = new int[bufsize + 2048]; - - try - { - if (wrapAround) - { - System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); - System.arraycopy(buffer, 0, newbuffer, - bufsize - tokenBegin, bufpos); - buffer = newbuffer; - - System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); - System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); - bufline = newbufline; - - System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); - System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); - bufcolumn = newbufcolumn; - - maxNextCharInd = (bufpos += (bufsize - tokenBegin)); - } - else - { - System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); - buffer = newbuffer; - - System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); - bufline = newbufline; - - System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); - bufcolumn = newbufcolumn; - - maxNextCharInd = (bufpos -= tokenBegin); - } - } - catch (Throwable t) - { - throw new Error(t.getMessage()); - } - - - bufsize += 2048; - available = bufsize; - tokenBegin = 0; - } - - protected void FillBuff() throws java.io.IOException - { - if (maxNextCharInd == available) - { - if (available == bufsize) - { - if (tokenBegin > 2048) - { - bufpos = maxNextCharInd = 0; - available = tokenBegin; - } - else if (tokenBegin < 0) - bufpos = maxNextCharInd = 0; - else - ExpandBuff(false); - } - else if (available > tokenBegin) - available = bufsize; - else if ((tokenBegin - available) < 2048) - ExpandBuff(true); - else - available = tokenBegin; - } - - int i; - try { - if ((i = inputStream.read(buffer, maxNextCharInd, - available - maxNextCharInd)) == -1) - { - inputStream.close(); - throw new java.io.IOException(); - } - else - maxNextCharInd += i; - return; - } - catch(java.io.IOException e) { - --bufpos; - backup(0); - if (tokenBegin == -1) - tokenBegin = bufpos; - throw e; - } - } - - public char BeginToken() throws java.io.IOException - { - tokenBegin = -1; - char c = readChar(); - tokenBegin = bufpos; - - return c; - } - - protected void UpdateLineColumn(char c) - { - column++; - - if (prevCharIsLF) - { - prevCharIsLF = false; - line += (column = 1); - } - else if (prevCharIsCR) - { - prevCharIsCR = false; - if (c == '\n') - { - prevCharIsLF = true; - } - else - line += (column = 1); - } - - switch (c) - { - case '\r' : - prevCharIsCR = true; - break; - case '\n' : - prevCharIsLF = true; - break; - case '\t' : - column--; - column += (8 - (column & 07)); - break; - default : - break; - } - - bufline[bufpos] = line; - bufcolumn[bufpos] = column; - } - - public char readChar() throws java.io.IOException - { - if (inBuf > 0) - { - --inBuf; - - if (++bufpos == bufsize) - bufpos = 0; - - return buffer[bufpos]; - } - - if (++bufpos >= maxNextCharInd) - FillBuff(); - - char c = buffer[bufpos]; - - UpdateLineColumn(c); - return (c); - } - - /** - * @deprecated - * @see #getEndColumn - */ - - public int getColumn() { - return bufcolumn[bufpos]; - } - - /** - * @deprecated - * @see #getEndLine - */ - - public int getLine() { - return bufline[bufpos]; - } - - public int getEndColumn() { - return bufcolumn[bufpos]; - } - - public int getEndLine() { - return bufline[bufpos]; - } - - public int getBeginColumn() { - return bufcolumn[tokenBegin]; - } - - public int getBeginLine() { - return bufline[tokenBegin]; - } - - public void backup(int amount) { - - inBuf += amount; - if ((bufpos -= amount) < 0) - bufpos += bufsize; - } - - public SimpleCharStream(java.io.Reader dstream, int startline, - int startcolumn, int buffersize) - { - inputStream = dstream; - line = startline; - column = startcolumn - 1; - - available = bufsize = buffersize; - buffer = new char[buffersize]; - bufline = new int[buffersize]; - bufcolumn = new int[buffersize]; - } - - public SimpleCharStream(java.io.Reader dstream, int startline, - int startcolumn) - { - this(dstream, startline, startcolumn, 4096); - } - - public SimpleCharStream(java.io.Reader dstream) - { - this(dstream, 1, 1, 4096); - } - public void ReInit(java.io.Reader dstream, int startline, - int startcolumn, int buffersize) - { - inputStream = dstream; - line = startline; - column = startcolumn - 1; - - if (buffer == null || buffersize != buffer.length) - { - available = bufsize = buffersize; - buffer = new char[buffersize]; - bufline = new int[buffersize]; - bufcolumn = new int[buffersize]; - } - prevCharIsLF = prevCharIsCR = false; - tokenBegin = inBuf = maxNextCharInd = 0; - bufpos = -1; - } - - public void ReInit(java.io.Reader dstream, int startline, - int startcolumn) - { - ReInit(dstream, startline, startcolumn, 4096); - } - - public void ReInit(java.io.Reader dstream) - { - ReInit(dstream, 1, 1, 4096); - } - public SimpleCharStream(java.io.InputStream dstream, int startline, - int startcolumn, int buffersize) - { - this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); - } - - public SimpleCharStream(java.io.InputStream dstream, int startline, - int startcolumn) - { - this(dstream, startline, startcolumn, 4096); - } - - public SimpleCharStream(java.io.InputStream dstream) - { - this(dstream, 1, 1, 4096); - } - - public void ReInit(java.io.InputStream dstream, int startline, - int startcolumn, int buffersize) - { - ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); - } - - public void ReInit(java.io.InputStream dstream) - { - ReInit(dstream, 1, 1, 4096); - } - public void ReInit(java.io.InputStream dstream, int startline, - int startcolumn) - { - ReInit(dstream, startline, startcolumn, 4096); - } - public String GetImage() - { - if (bufpos >= tokenBegin) - return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); - else - return new String(buffer, tokenBegin, bufsize - tokenBegin) + - new String(buffer, 0, bufpos + 1); - } - - public char[] GetSuffix(int len) - { - char[] ret = new char[len]; - - if ((bufpos + 1) >= len) - System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); - else - { - System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, - len - bufpos - 1); - System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); - } - - return ret; - } - - public void Done() - { - buffer = null; - bufline = null; - bufcolumn = null; - } - - /** - * Method to adjust line and column numbers for the start of a token. - */ - public void adjustBeginLineColumn(int newLine, int newCol) - { - int start = tokenBegin; - int len; - - if (bufpos >= tokenBegin) - { - len = bufpos - tokenBegin + inBuf + 1; - } - else - { - len = bufsize - tokenBegin + bufpos + 1 + inBuf; - } - - int i = 0, j = 0, k = 0; - int nextColDiff = 0, columnDiff = 0; - - while (i < len && - bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) - { - bufline[j] = newLine; - nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; - bufcolumn[j] = newCol + columnDiff; - columnDiff = nextColDiff; - i++; - } - - if (i < len) - { - bufline[j] = newLine++; - bufcolumn[j] = newCol + columnDiff; - - while (i++ < len) - { - if (bufline[j = start % bufsize] != bufline[++start % bufsize]) - bufline[j] = newLine++; - else - bufline[j] = newLine; - } - } - - line = bufline[j]; - column = bufcolumn[j]; - } - -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/SimpleNode.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/SimpleNode.java deleted file mode 100644 index aac473f95a..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/SimpleNode.java +++ /dev/null @@ -1,116 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JJTree: Do not edit this line. SimpleNode.java */ - -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class SimpleNode implements Node { - protected Node parent; - protected Node[] children; - protected int id; - protected JSPELParser parser; - protected Token firstToken; - protected Token lastToken; - - public SimpleNode(int i) { - id = i; - } - - public SimpleNode(JSPELParser p, int i) { - this(i); - parser = p; - } - - public void jjtOpen() { - } - - public void jjtClose() { - } - - public void jjtSetParent(Node n) { parent = n; } - public Node jjtGetParent() { return parent; } - - public void jjtAddChild(Node n, int i) { - if (children == null) { - children = new Node[i + 1]; - } else if (i >= children.length) { - Node c[] = new Node[i + 1]; - System.arraycopy(children, 0, c, 0, children.length); - children = c; - } - children[i] = n; - } - - public Node jjtGetChild(int i) { - return children[i]; - } - - public int jjtGetNumChildren() { - return (children == null) ? 0 : children.length; - } - - /** Accept the visitor. **/ - public Object jjtAccept(JSPELParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } - - /** Accept the visitor. **/ - public Object childrenAccept(JSPELParserVisitor visitor, Object data) { - if (children != null) { - for (int i = 0; i < children.length; ++i) { - children[i].jjtAccept(visitor, data); - } - } - return data; - } - - /* You can override these two methods in subclasses of SimpleNode to - customize the way the node appears when the tree is dumped. If - your output uses more than one line you should override - toString(String), otherwise overriding toString() is probably all - you need to do. */ - - public String toString() { return JSPELParserTreeConstants.jjtNodeName[id]; } - public String toString(String prefix) { return prefix + toString(); } - - /* Override this method if you want to customize how the node dumps - out its children. */ - - public void dump(String prefix) { - System.out.println(toString(prefix)); - if (children != null) { - for (int i = 0; i < children.length; ++i) { - SimpleNode n = (SimpleNode)children[i]; - if (n != null) { - n.dump(prefix + " "); - } - } - } - } - - public Token getFirstToken() { - return firstToken; - } - - public void setFirstToken(Token firstToken) { - this.firstToken = firstToken; - } - - public Token getLastToken() { - return lastToken; - } - - public void setLastToken(Token lastToken) { - this.lastToken = lastToken; - } -} - diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/Token.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/Token.java deleted file mode 100644 index 7159820f62..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/Token.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -/** - * Describes the input token stream. - */ - -public class Token { - - /** - * An integer that describes the kind of this token. This numbering - * system is determined by JavaCCParser, and a table of these numbers is - * stored in the file ...Constants.java. - */ - public int kind; - - /** - * beginLine and beginColumn describe the position of the first character - * of this token; endLine and endColumn describe the position of the - * last character of this token. - */ - public int beginLine, beginColumn, endLine, endColumn; - - /** - * The string image of the token. - */ - public String image; - - /** - * A reference to the next regular (non-special) token from the input - * stream. If this is the last token from the input stream, or if the - * token manager has not read tokens beyond this one, this field is - * set to null. This is true only if this token is also a regular - * token. Otherwise, see below for a description of the contents of - * this field. - */ - public Token next; - - /** - * This field is used to access special tokens that occur prior to this - * token, but after the immediately preceding regular (non-special) token. - * If there are no such special tokens, this field is set to null. - * When there are more than one such special token, this field refers - * to the last of these special tokens, which in turn refers to the next - * previous special token through its specialToken field, and so on - * until the first special token (whose specialToken field is null). - * The next fields of special tokens refer to other special tokens that - * immediately follow it (without an intervening regular token). If there - * is no such token, this field is null. - */ - public Token specialToken; - - /** - * Returns the image. - */ - public String toString() - { - return image; - } - - /** - * Returns a new Token object, by default. However, if you want, you - * can create and return subclass objects based on the value of ofKind. - * Simply add the cases to the switch for all those special cases. - * For example, if you have a subclass of Token called IDToken that - * you want to create if ofKind is ID, simlpy add something like : - * - * case MyParserConstants.ID : return new IDToken(); - * - * to the following switch statement. Then you can cast matchedToken - * variable to the appropriate type and use it in your lexical actions. - */ - public static final Token newToken(int ofKind) - { - switch(ofKind) - { - default : return new Token(); - } - } - -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/TokenMgrError.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/TokenMgrError.java deleted file mode 100644 index 1a53dc2638..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/TokenMgrError.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 BEA Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * BEA Systems - initial implementation - * - *******************************************************************************/ -/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */ -package org.eclipse.jst.jsp.core.internal.java.jspel; - -public class TokenMgrError extends Error -{ - /* - * Ordinals for various reasons why an Error of this type can be thrown. - */ - - /** - * Default <code>serialVersionUID</code> - */ - private static final long serialVersionUID = 1L; - -/** - * Lexical error occured. - */ - static final int LEXICAL_ERROR = 0; - - /** - * An attempt wass made to create a second instance of a static token manager. - */ - static final int STATIC_LEXER_ERROR = 1; - - /** - * Tried to change to an invalid lexical state. - */ - static final int INVALID_LEXICAL_STATE = 2; - - /** - * Detected (and bailed out of) an infinite loop in the token manager. - */ - static final int LOOP_DETECTED = 3; - - /** - * Indicates the reason why the exception is thrown. It will have - * one of the above 4 values. - */ - int errorCode; - - /** - * Replaces unprintable characters by their espaced (or unicode escaped) - * equivalents in the given string - */ - protected static final String addEscapes(String str) { - StringBuffer retval = new StringBuffer(); - char ch; - for (int i = 0; i < str.length(); i++) { - switch (str.charAt(i)) - { - case 0 : - continue; - case '\b': - retval.append("\\b"); - continue; - case '\t': - retval.append("\\t"); - continue; - case '\n': - retval.append("\\n"); - continue; - case '\f': - retval.append("\\f"); - continue; - case '\r': - retval.append("\\r"); - continue; - case '\"': - retval.append("\\\""); - continue; - case '\'': - retval.append("\\\'"); - continue; - case '\\': - retval.append("\\\\"); - continue; - default: - if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { - String s = "0000" + Integer.toString(ch, 16); - retval.append("\\u" + s.substring(s.length() - 4, s.length())); - } else { - retval.append(ch); - } - continue; - } - } - return retval.toString(); - } - - /** - * Returns a detailed message for the Error when it is thrown by the - * token manager to indicate a lexical error. - * Parameters : - * EOFSeen : indicates if EOF caused the lexicl error - * curLexState : lexical state in which this error occured - * errorLine : line number when the error occured - * errorColumn : column number when the error occured - * errorAfter : prefix that was seen before this error occured - * curchar : the offending character - * Note: You can customize the lexical error message by modifying this method. - */ - protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) { - return("Lexical error at line " + - errorLine + ", column " + - errorColumn + ". Encountered: " + - (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") + - "after : \"" + addEscapes(errorAfter) + "\""); - } - - /** - * You can also modify the body of this method to customize your error messages. - * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not - * of end-users concern, so you can return something like : - * - * "Internal Error : Please file a bug report .... " - * - * from this method for such cases in the release version of your parser. - */ - public String getMessage() { - return super.getMessage(); - } - - /* - * Constructors of various flavors follow. - */ - - public TokenMgrError() { - } - - public TokenMgrError(String message, int reason) { - super(message); - errorCode = reason; - } - - public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) { - this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/fixparser.sed b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/fixparser.sed deleted file mode 100644 index 1aa5e62fec..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/fixparser.sed +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/sed
-
-#
-# The SSE generally uses compiler setting to turn most warnings into errors.
-# This is a little problematic for JavaCC generated files. We don't want
-# to distribute a customized version of JavaCC nor is there any "template"
-# mechanism. So, this simple sed script goes through the generated token
-# manager and fixes a few things. If JavaCC changes the generated code,
-# it's likely that this script will no longer do the right thing. Ditto with
-# any version of JavaCC besides 3.2. Also, there's no guarantee that this
-# script will even work with an arbitrary JavaCC grammar. It's only been tested
-# with the current JSP EL grammar.
-#
-# Author: Ted A. Carroll (tcarroll@bea.com)
-#
-
-s/static private final class LookaheadSuccess extends java.lang.Error { }/static private final class LookaheadSuccess extends java.lang.Error { \n private static final long serialVersionUID = 1L; \n }/g
-
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/fixtm.sed b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/fixtm.sed deleted file mode 100644 index 5c1dea401e..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/fixtm.sed +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/sed
-
-#
-# The SSE generally uses compiler setting to turn most warnings into errors.
-# This is a little problematic for JavaCC generated files. We don't want
-# to distribute a customized version of JavaCC nor is there any "template"
-# mechanism. So, this simple sed script goes through the generated token
-# manager and fixes a few things. If JavaCC changes the generated code,
-# it's likely that this script will no longer do the right thing. Ditto with
-# any version of JavaCC besides 3.2. Also, there's no guarantee that this
-# script will even work with an arbitrary JavaCC grammar. It's only been tested
-# with the current JSP EL grammar.
-#
-# Author: Ted A. Carroll (tcarroll@bea.com)
-#
-
-s/(int)(curChar >> 8)/curChar >> 8/g
-
-/^public Token getNextToken()/, /EOFLoop/{
- /int kind;/ {d}
- /Token specialToken = null;/{d}
-}
-
-/^private final int jjMoveNfa_0(int startState, int curPos)/, /for(;;)/{
- s/int j, kind = 0x7fffffff;/int kind = 0x7fffffff;/g
- /int\[\] nextStates;/{d}
-}
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/go.sh b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/go.sh deleted file mode 100644 index b3d5aaa43c..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/go.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/sh
-
-# Set JAVACC_HOME to the installation directory of javacc 3.2
-$JAVACC_HOME/bin/jjtree.bat JSPEL.jjt
-$JAVACC_HOME/bin/javacc.bat JSPEL.jj
-sed -f fixtm.sed -i.bak JSPELParserTokenManager.java
-diff -w JSPELParserTokenManager.java JSPELParserTokenManager.java.bak
-sed -f fixparser.sed -i.bak JSPELParser.java
-diff -w JSPELParser.java JSPELParser.java.bak
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/IndexWorkspaceJob.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/IndexWorkspaceJob.java deleted file mode 100644 index 7b9ac0dc44..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/IndexWorkspaceJob.java +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.resources.IResourceProxyVisitor; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jst.jsp.core.internal.JSPCoreMessages; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; - -/** - * Re-indexes the entire workspace. - * Ensures the JSP Index is in a stable state before performing a search. - * (like after a crash or if previous indexing was canceled) - * - * @author pavery - */ -public class IndexWorkspaceJob extends Job { - - // for debugging - static final boolean DEBUG; - static { - String value= Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspindexmanager"); //$NON-NLS-1$ - DEBUG= value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - /** - * Visitor that retrieves jsp project paths for all jsp files in the workspace, - * and adds the files to be indexed as they are encountered - */ - private class JSPFileVisitor implements IResourceProxyVisitor { - private List files = new ArrayList(); - - // monitor from the Job - IProgressMonitor fInnerMonitor = null; - public JSPFileVisitor(IProgressMonitor monitor) { - this.fInnerMonitor = monitor; - } - - public boolean visit(IResourceProxy proxy) throws CoreException { - - // check job canceled - if (this.fInnerMonitor != null && this.fInnerMonitor.isCanceled()) { - setCanceledState(); - return false; - } - - // check search support canceled - if(JSPSearchSupport.getInstance().isCanceled()) { - setCanceledState(); - return false; - } - - if (proxy.getType() == IResource.FILE) { - - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3553 - // check this before description - // check name before actually getting the file (less work) - if(getJspContentType().isAssociatedWith(proxy.getName())) { - IFile file = (IFile) proxy.requestResource(); - if(file.exists()) { - - if(DEBUG) - System.out.println("(+) IndexWorkspaceJob adding file: " + file.getName()); //$NON-NLS-1$ - // this call will check the ContentTypeDescription, so don't need to do it here. - //JSPSearchSupport.getInstance().addJspFile(file); - this.files.add(file); - this.fInnerMonitor.subTask(proxy.getName()); - - // don't search deeper for files - return false; - } - } - } - return true; - } - - public final IFile[] getFiles() { - return (IFile[])this.files.toArray(new IFile[this.files.size()]); - } - } - - private IContentType fContentTypeJSP = null; - - public IndexWorkspaceJob() { - // pa_TODO may want to say something like "Rebuilding JSP Index" to be more - // descriptive instead of "Updating JSP Index" since they are 2 different things - super(JSPCoreMessages.JSPIndexManager_0); - setPriority(Job.LONG); - setSystem(true); - } - - IContentType getJspContentType() { - if(this.fContentTypeJSP == null) - this.fContentTypeJSP = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSP); - return this.fContentTypeJSP; - } - - /** - * @see org eclipse.core.internal.jobs.InternalJob#run(org.eclipse.core.runtime.IProgressMonitor) - * for similar method - */ - protected IStatus run(IProgressMonitor monitor) { - - IStatus status = Status.OK_STATUS; - - if(monitor.isCanceled()) { - setCanceledState(); - return Status.CANCEL_STATUS; - } - - if(DEBUG) - System.out.println(" ^ IndexWorkspaceJob started: "); //$NON-NLS-1$ - - long start = System.currentTimeMillis(); - - try { - JSPFileVisitor visitor = new JSPFileVisitor(monitor); - // collect all jsp files - ResourcesPlugin.getWorkspace().getRoot().accept(visitor, IResource.DEPTH_INFINITE); - // request indexing - // this is pretty much like faking an entire workspace resource delta - JSPIndexManager.getInstance().indexFiles(visitor.getFiles()); - } - catch (CoreException e) { - if(DEBUG) - e.printStackTrace(); - } - finally { - if(monitor != null) - monitor.done(); - } - long finish = System.currentTimeMillis(); - if(DEBUG) - System.out.println(" ^ IndexWorkspaceJob finished\n total time running: " + (finish - start)); //$NON-NLS-1$ - - return status; - } - - void setCanceledState() { - JSPIndexManager.getInstance().setIndexState(JSPIndexManager.S_CANCELED); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPIndexManager.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPIndexManager.java deleted file mode 100644 index 13d74a16f3..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPIndexManager.java +++ /dev/null @@ -1,612 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.resources.IResourceDeltaVisitor; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Plugin; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.jdt.internal.core.JavaModelManager; -import org.eclipse.jdt.internal.core.index.Index; -import org.eclipse.jdt.internal.core.search.indexing.IndexManager; -import org.eclipse.jst.jsp.core.internal.JSPCoreMessages; -import org.eclipse.jst.jsp.core.internal.JSPCorePlugin; -import org.eclipse.jst.jsp.core.internal.Logger; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.osgi.util.NLS; -import org.osgi.framework.Bundle; - -/** - * Responsible for keeping the JSP index up to date. - * - * @author pavery - */ -public class JSPIndexManager implements IResourceChangeListener { - - // for debugging - static final boolean DEBUG; - static { - String value = Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspindexmanager"); //$NON-NLS-1$ - DEBUG = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - private static final String PKEY_INDEX_STATE = "jspIndexState"; //$NON-NLS-1$ - - final IndexWorkspaceJob indexingJob = new IndexWorkspaceJob(); - - - - // set to S_UPDATING once a resource change comes in - // set to S_STABLE if: - // - we know we aren't interested in the resource change - // - or the ProcessFilesJob completes - // set to S_CANCELED if an indexing job is canceled - // set to S_REBUILDING if re-indexing the entire workspace - - // the int '0' is reserved for the default value if a preference is not - // there - /** index is reliable to use */ - public static final int S_STABLE = 1; - /** index is being updated (from a resource delta) */ - public static final int S_UPDATING = 2; - /** entire index is being rebuilt */ - public static final int S_REBUILDING = 3; - /** - * indexing job was canceled in the middle of it, index needs to be - * rebuilt - */ - public static final int S_CANCELED = 4; - - /** symbolic name for OSGI framework */ - private final String OSGI_FRAMEWORK_ID = "org.eclipse.osgi"; //$NON-NLS-1$ - - /** - * Collects JSP files from a resource delta. - */ - private class JSPResourceVisitor implements IResourceDeltaVisitor { - // using hash map ensures only one of each file - // must be reset before every use - private HashMap jspFiles = null; - - public JSPResourceVisitor() { - this.jspFiles = new HashMap(); - } - - public boolean visit(IResourceDelta delta) throws CoreException { - - // in case JSP search was canceled (eg. when closing the editor) - if (JSPSearchSupport.getInstance().isCanceled() || frameworkIsShuttingDown()) { - setCanceledState(); - return false; - } - - try { - if (!isHiddenResource(delta.getFullPath())) { - - int kind = delta.getKind(); - boolean added = (kind & IResourceDelta.ADDED) == IResourceDelta.ADDED; - boolean isInterestingChange = false; - if ((kind & IResourceDelta.CHANGED) == IResourceDelta.CHANGED) { - int flags = delta.getFlags(); - // ignore things like marker changes - isInterestingChange = (flags & IResourceDelta.CONTENT) == IResourceDelta.CONTENT || (flags & IResourceDelta.REPLACED) == IResourceDelta.REPLACED; - } - boolean removed = (kind & IResourceDelta.REMOVED) == IResourceDelta.REMOVED; - if (added || isInterestingChange) { - - visitAdded(delta); - } - else if (removed) { - visitRemoved(delta); - } - } - } - catch (Exception e) { - // need to set state here somehow, and reindex - // otherwise index will be unreliable - if (DEBUG) - Logger.logException("Delta analysis may not be complete", e); //$NON-NLS-1$ - } - // if the delta has children, continue to add/remove files - return true; - } - - private void visitRemoved(IResourceDelta delta) { - // handle cleanup - if (delta.getResource() != null) { - IResource r = delta.getResource(); - if (r.getType() == IResource.FOLDER && r.exists()) { - deleteIndex((IFile) r); - } - } - } - - private void visitAdded(IResourceDelta delta) { - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3553 - // quick check if it's even JSP related to improve - // performance - // checking name from the delta before getting - // resource because it's lighter - int numSegments = delta.getFullPath().segmentCount(); - String filename = delta.getFullPath().segment(numSegments - 1); - if (getJspContentType().isAssociatedWith(filename)) { - IResource r = delta.getResource(); - if (r != null && r.exists() && r.getType() == IResource.FILE) { - this.jspFiles.put(r.getFullPath(), r); - } - } - } - - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=93463 - private boolean isHiddenResource(IPath p) { - String[] segments = p.segments(); - for (int i = 0; i < segments.length; i++) { - if (segments[i].startsWith(".")) //$NON-NLS-1$ - return true; - } - return false; - } - - private void deleteIndex(IFile folder) { - // cleanup index - IndexManager im = JavaModelManager.getJavaModelManager().getIndexManager(); - IPath folderPath = folder.getFullPath(); - IPath indexLocation = JSPSearchSupport.getInstance().computeIndexLocation(folderPath); - im.removeIndex(indexLocation); - // im.indexLocations.removeKey(folderPath); - // im.indexLocations.removeValue(indexLocation); - File f = indexLocation.toFile(); - f.delete(); - } - - public IFile[] getFiles() { - return (IFile[]) this.jspFiles.values().toArray(new IFile[this.jspFiles.size()]); - } - - public void reset() { - this.jspFiles.clear(); - } - } - - // end class JSPResourceVisitor - - /** - * schedules JSP files for indexing by Java core - */ - private class ProcessFilesJob extends Job { - List fileList = null; - private final int maximumToRemember = 50; - - ProcessFilesJob(String taskName) { - super(taskName); - fileList = new ArrayList(); - } - - synchronized void process(IFile[] files) { - for (int i = 0; i < files.length; i++) { - fileList.add(files[i]); - } - if (DEBUG) { - System.out.println("JSPIndexManager queuing " + files.length + " files"); //$NON-NLS-2$ //$NON-NLS-1$ - } - schedule(20); - } - - synchronized IFile[] getFiles() { - IFile[] files = (IFile[]) fileList.toArray(new IFile[fileList.size()]); - if (fileList.size() > maximumToRemember) { - fileList = new ArrayList(); - } - else { - fileList.clear(); - } - return files; - } - - protected IStatus run(IProgressMonitor monitor) { - // System.out.println("indexer monitor" + monitor); - if (isCanceled(monitor) || frameworkIsShuttingDown()) { - setCanceledState(); - return Status.CANCEL_STATUS; - } - - long start = System.currentTimeMillis(); - - try { - IFile[] filesToBeProcessed = getFiles(); - if (DEBUG) { - System.out.println("JSPIndexManager indexing " + filesToBeProcessed.length + " files"); //$NON-NLS-2$ //$NON-NLS-1$ - } - // API indicates that monitor is never null - monitor.beginTask("", filesToBeProcessed.length); //$NON-NLS-1$ - JSPSearchSupport ss = JSPSearchSupport.getInstance(); - String processingNFiles = ""; //$NON-NLS-1$ - - - for (int i = 0; i < filesToBeProcessed.length; i++) { - - if (isCanceled(monitor) || frameworkIsShuttingDown()) { - setCanceledState(); - return Status.CANCEL_STATUS; - } - try { - ss.addJspFile(filesToBeProcessed[i]); - // JSP Indexer processing n files - processingNFiles = NLS.bind(JSPCoreMessages.JSPIndexManager_2, new String[]{Integer.toString((filesToBeProcessed.length - i))}); - monitor.subTask(processingNFiles + " - " + filesToBeProcessed[i].getName()); //$NON-NLS-1$ - monitor.worked(1); - - if (DEBUG) { - System.out.println("JSPIndexManager Job added file: " + filesToBeProcessed[i].getName()); //$NON-NLS-1$ - } - } - catch (Exception e) { - // RATLC00284776 - // ISSUE: we probably shouldn't be catching EVERY - // exception, but - // the framework only allows to return IStatus in - // order to communicate - // that something went wrong, which means the loop - // won't complete, and we would hit the same problem - // the next time. - // - // a possible solution is to keep track of the - // exceptions logged - // and only log a certain amt of the same one, - // otherwise skip it. - if (!frameworkIsShuttingDown()) { - String filename = filesToBeProcessed[i] != null ? filesToBeProcessed[i].getFullPath().toString() : ""; //$NON-NLS-1$ - Logger.logException("JSPIndexer problem indexing:" + filename, e); //$NON-NLS-1$ - } - } - } // end for - } - finally { - // just in case something didn't follow API (monitor is null) - if (monitor != null) - monitor.done(); - } - - long finish = System.currentTimeMillis(); - long diff = finish - start; - if (DEBUG) { - fTotalTime += diff; - System.out.println("============================================================================"); //$NON-NLS-1$ - System.out.println("this time: " + diff + " cumulative time for resource changed: " + fTotalTime); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("============================================================================"); //$NON-NLS-1$ - } - return Status.OK_STATUS; - } - - private boolean isCanceled(IProgressMonitor runMonitor) { - - boolean canceled = false; - // check specific monitor passed into run method (the progress - // group in this case) - // check main search support canceled - if (runMonitor != null && runMonitor.isCanceled()) - canceled = true; - else if (JSPSearchSupport.getInstance().isCanceled()) { - canceled = true; - if (runMonitor != null) { - runMonitor.setCanceled(true); - } - } - return canceled; - } - } - - // end class ProcessFilesJob - - private static JSPIndexManager fSingleton = null; - private JSPResourceVisitor fVisitor = null; - private IContentType fContentTypeJSP = null; - - static long fTotalTime = 0; - - // Job for processing resource delta - ProcessFilesJob processFilesJob = null; - - private JSPIndexManager() { - processFilesJob = new ProcessFilesJob(JSPCoreMessages.JSPIndexManager_0); - // only show in verbose mode - processFilesJob.setSystem(true); - processFilesJob.setPriority(Job.LONG); - processFilesJob.addJobChangeListener(new JobChangeAdapter() { - public void done(IJobChangeEvent event) { - super.done(event); - setStableState(); - } - }); - } - - public synchronized static JSPIndexManager getInstance() { - - if (fSingleton == null) - fSingleton = new JSPIndexManager(); - return fSingleton; - } - - /** - * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) - */ - public void resourceChanged(IResourceChangeEvent event) { - - // ignore resource changes if already rebuilding - if (getIndexState() == S_REBUILDING) - return; - // previously canceled, needs entire index rebuild - if (getIndexState() == S_CANCELED) { - rebuildIndex(); - return; - } - - // set flag, so we know if a job is going to be started - // and the state will eventually be set back to S_STABLE - boolean beganProcess = false; - setUpdatingState(); - - IResourceDelta delta = event.getDelta(); - if (delta != null) { - // only care about adds or changes right now... - int kind = delta.getKind(); - boolean added = (kind & IResourceDelta.ADDED) == IResourceDelta.ADDED; - boolean changed = (kind & IResourceDelta.CHANGED) == IResourceDelta.CHANGED; - if (added || changed) { - - // only analyze the full (starting at root) delta hierarchy - if (delta.getFullPath().toString().equals("/")) { //$NON-NLS-1$ - try { - JSPResourceVisitor v = getVisitor(); - // clear from last run - v.reset(); - // count files, possibly do this in a job too... - // don't include PHANTOM resources - delta.accept(v, false); - - // process files from this delta - IFile[] files = v.getFiles(); - if (files.length > 0) { - // processFiles(files); - indexFiles(files); - beganProcess = true; - } - } - catch (CoreException e) { - // need to set state here somehow, and reindex - // otherwise index will be unreliable - if (DEBUG) - Logger.logException(e); - } - catch (Exception e) { - // need to set state here somehow, and reindex - // otherwise index will be unreliable - if (DEBUG) - Logger.logException(e); - } - } - } - - } - // if we never kicked off process, job won't set back to stable - // so we set it here - if (!beganProcess) { - setStableState(); - } - } - - public synchronized void setIndexState(int state) { - if (DEBUG) { - System.out.println("JSPIndexManager setting index state to: " + state2String(state)); //$NON-NLS-1$ - } - Plugin jspModelPlugin = JSPCorePlugin.getDefault(); - jspModelPlugin.getPluginPreferences().setValue(PKEY_INDEX_STATE, state); - jspModelPlugin.savePluginPreferences(); - - } - - private String state2String(int state) { - String s = "UNKNOWN"; //$NON-NLS-1$ - switch (state) { - case (S_STABLE) : - s = "S_STABLE"; //$NON-NLS-1$ - break; - case (S_UPDATING) : - s = "S_UPDATING"; //$NON-NLS-1$ - break; - case (S_CANCELED) : - s = "S_CANCELED"; //$NON-NLS-1$ - break; - case (S_REBUILDING) : - s = "S_REBUILDING"; //$NON-NLS-1$ - break; - } - return s; - } - - public int getIndexState() { - return JSPCorePlugin.getDefault().getPluginPreferences().getInt(PKEY_INDEX_STATE); - } - - public void setUpdatingState() { - if (getIndexState() != S_CANCELED) - setIndexState(S_UPDATING); - } - - public void setCanceledState() { - setIndexState(JSPIndexManager.S_CANCELED); - } - - // ca - public void setStableState() { - if (getIndexState() != S_CANCELED) - setIndexState(S_STABLE); - } - - public void setRebuildingState() { - setIndexState(S_REBUILDING); - } - - public synchronized void rebuildIndexIfNeeded() { - if (getIndexState() != S_STABLE) { - rebuildIndex(); - } - } - - private void rebuildIndex() { - - if (DEBUG) - System.out.println("*** JSP Index unstable, requesting re-indexing"); //$NON-NLS-1$ - - indexingJob.addJobChangeListener(new JobChangeAdapter() { - public void aboutToRun(IJobChangeEvent event) { - super.aboutToRun(event); - setRebuildingState(); - } - - public void done(IJobChangeEvent event) { - super.done(event); - setStableState(); - indexingJob.removeJobChangeListener(this); - } - }); - indexingJob.schedule(); - - } - - /** - * Creates and schedules a Job to process collected files. All JSP - * indexing should be done through this method or processFiles(IFile file) - * - * @param files - */ - public final void indexFiles(IFile[] files) { - // don't use this rule - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=4931 - // processFiles.setRule(new IndexFileRule()); - processFilesJob.process(files); - } - - - /** - * Package protected for access by inner Job class in resourceChanged(...) - * - * @return - */ - JSPResourceVisitor getVisitor() { - - if (this.fVisitor == null) { - this.fVisitor = new JSPResourceVisitor(); - } - return this.fVisitor; - } - - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=5091 - // makes sure IndexManager is aware of our indexes - public void saveIndexes() { - IndexManager indexManager = JavaModelManager.getJavaModelManager().getIndexManager(); - IPath jspModelWorkingLocation = JSPSearchSupport.getInstance().getModelJspPluginWorkingLocation(); - - File folder = new File(jspModelWorkingLocation.toOSString()); - String[] files = folder.list(); - String locay = ""; //$NON-NLS-1$ - Index index = null; - try { - for (int i = 0; i < files.length; i++) { - if (files[i].toLowerCase().endsWith(".index")) { //$NON-NLS-1$ - locay = jspModelWorkingLocation.toString() + "/" + files[i]; //$NON-NLS-1$ - // reuse index file - index = new Index(locay, "Index for " + locay, true); //$NON-NLS-1$ - indexManager.saveIndex(index); - } - } - } - catch (Exception e) { - // we should be shutting down, want to shut down quietly - if (DEBUG) - e.printStackTrace(); - } - } - - IContentType getJspContentType() { - if (this.fContentTypeJSP == null) - this.fContentTypeJSP = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSP); - return this.fContentTypeJSP; - } - - /** - * A check to see if the OSGI framework is shutting down. - * - * @return true if the System Bundle is stopped (ie. the framework is - * shutting down) - */ - boolean frameworkIsShuttingDown() { - // in the Framework class there's a note: - // set the state of the System Bundle to STOPPING. - // this must be done first according to section 4.19.2 from the OSGi - // R3 spec. - boolean shuttingDown = Platform.getBundle(OSGI_FRAMEWORK_ID).getState() == Bundle.STOPPING; - if (DEBUG && shuttingDown) { - System.out.println("JSPIndexManager: system is shutting down!"); //$NON-NLS-1$ - } - return shuttingDown; - } - - - public void shutdown() { - int maxwait = 5000; - if (processFilesJob != null) { - processFilesJob.cancel(); - } - // attempt to make sure this indexing job is litterally - // done before continuing, since we are shutting down - waitTillNotRunning(maxwait, processFilesJob); - - if (indexingJob != null) { - indexingJob.cancel(); - } - waitTillNotRunning(maxwait, processFilesJob); - } - - private void waitTillNotRunning(int maxSeconds, Job job) { - int pauseTime = 10; - int maxtries = maxSeconds / pauseTime; - int count = 0; - while (count++ < maxtries && job.getState() == Job.RUNNING) { - try { - Thread.sleep(pauseTime); - // System.out.println("count: " + count + " max: " + - // maxtries); - } - catch (InterruptedException e) { - Logger.logException(e); - } - } - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPPathIndexer.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPPathIndexer.java deleted file mode 100644 index 3919f96c37..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPPathIndexer.java +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import java.util.HashMap; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.resources.IResourceProxyVisitor; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.content.IContentDescription; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jdt.core.search.IJavaSearchScope; -import org.eclipse.jdt.core.search.SearchPattern; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; - -/** - * pa_TODO Still need to take into consideration: - * - focus in workspace - * - search pattern - * - * @author pavery - */ -public class JSPPathIndexer { - - // for debugging - static final boolean DEBUG; - static { - String value= Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspsearch"); //$NON-NLS-1$ - DEBUG= value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - // visitor that retrieves jsp project paths for all jsp files in the workspace - class JSPFileVisitor implements IResourceProxyVisitor { - // hash map forces only one of each file - private HashMap fPaths = new HashMap(); - IJavaSearchScope fScope = null; - SearchPattern fPattern = null; - - public JSPFileVisitor(SearchPattern pattern, IJavaSearchScope scope) { - this.fPattern = pattern; - this.fScope = scope; - } - - public boolean visit(IResourceProxy proxy) throws CoreException { - - if(JSPSearchSupport.getInstance().isCanceled()) - return false; - - if (proxy.getType() == IResource.FILE) { - - IContentType contentTypeJSP = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSP); - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3553 - // check this before description - // check name before actually getting the file (less work) - if(contentTypeJSP.isAssociatedWith(proxy.getName())) { - - IFile file = (IFile)proxy.requestResource(); - IContentDescription contentDescription = file.getContentDescription(); - String ctId = null; - if (contentDescription != null) { - ctId = contentDescription.getContentType().getId(); - } - if (ContentTypeIdForJSP.ContentTypeID_JSP.equals(ctId)) { - if (this.fScope.encloses(proxy.requestFullPath().toString())) { - - if (DEBUG) - System.out.println("adding selected index path:" + file.getParent().getFullPath()); //$NON-NLS-1$ - - fPaths.put(file.getParent().getFullPath(), JSPSearchSupport.getInstance().computeIndexLocation(file.getParent().getFullPath())); - } - } - } - // don't search deeper for files - return false; - } - return true; - } - - public IPath[] getPaths() { - return (IPath[]) fPaths.values().toArray(new IPath[fPaths.size()]); - } - } - - public IPath[] getVisibleJspPaths(SearchPattern pattern, IJavaSearchScope scope) { - - JSPFileVisitor jspFileVisitor = new JSPFileVisitor(pattern, scope); - try { - ResourcesPlugin.getWorkspace().getRoot().accept(jspFileVisitor, 0); - } - catch (CoreException e) { - e.printStackTrace(); - } - return jspFileVisitor.getPaths(); - } -} - diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchDocument.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchDocument.java deleted file mode 100644 index 1db9f99aad..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchDocument.java +++ /dev/null @@ -1,230 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jdt.core.search.SearchParticipant; -import org.eclipse.jface.text.Position; -import org.eclipse.jst.jsp.core.internal.Logger; -import org.eclipse.jst.jsp.core.internal.java.IJSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapterFactory; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationExtension; -import org.eclipse.wst.sse.core.internal.exceptions.UnsupportedCharsetExceptionWithDetail; -import org.eclipse.wst.sse.core.internal.provisional.IModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.StructuredModelManager; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; - - -/** - * Created with a .jsp file, but should appear to be a .java file for indexing - * and searching purposes. There are purposely few fields in this class, and - * those fields are lightweight since it's possible for many JSP search - * documents to exist in memory at one time (eg. after importing a project - * with a large number of JSP files) - * - * @author pavery - */ -public class JSPSearchDocument { - - private String UNKNOWN_PATH = "**path unknown**"; //$NON-NLS-1$ - private String fJSPPathString = UNKNOWN_PATH; - private String fCUPath = UNKNOWN_PATH; - private SearchParticipant fParticipant = null; - - /** - * @param file - * @param participant - * @throws CoreException - */ - public JSPSearchDocument(String filePath, SearchParticipant participant) { - - this.fJSPPathString = filePath; - this.fParticipant = participant; - } - - public SearchParticipant getParticipant() { - return this.fParticipant; - } - - /** - * @see org.eclipse.jdt.core.search.SearchDocument#getCharContents() - */ - public char[] getCharContents() { - JSPTranslation trans = getJSPTranslation(); - return trans != null ? trans.getJavaText().toCharArray() : new char[0]; - } - - public String getJavaText() { - return new String(getCharContents()); - } - - private IModelManager getModelManager() { - return StructuredModelManager.getModelManager(); - } - - /** - * It's not recommended for clients to hold on to this JSPTranslation - * since it's kind of large. If possible, hold on to the - * JSPSearchDocument, which is more of a lightweight proxy. - * - * @return the JSPTranslation for the jsp file, or null if it's an - * unsupported file. - */ - public final JSPTranslationExtension getJSPTranslation() { - JSPTranslationExtension translation = null; - IFile jspFile = getFile(); - if (!JSPSearchSupport.isJsp(jspFile)) - return translation; - - IDOMModel xmlModel = null; - try { - // get existing model for read, then get document from it - IModelManager modelManager = getModelManager(); - if (modelManager != null) { - xmlModel = (IDOMModel) modelManager.getModelForRead(jspFile); - } - // handle unsupported - if (xmlModel != null) { - setupAdapterFactory(xmlModel); - IDOMDocument doc = xmlModel.getDocument(); - JSPTranslationAdapter adapter = (JSPTranslationAdapter) doc.getAdapterFor(IJSPTranslation.class); - translation = adapter.getJSPTranslation(); - } - } - catch (IOException e) { - Logger.logException(e); - } - catch (CoreException e) { - Logger.logException(e); - } - catch (UnsupportedCharsetExceptionWithDetail e) { - // no need to log this. Just consider it an invalid file for our - // purposes. - // Logger.logException(e); - } - finally { - if (xmlModel != null) - xmlModel.releaseFromRead(); - } - return translation; - } - - /** - * add the factory for JSPTranslationAdapter here - * - * @param sm - */ - private void setupAdapterFactory(IStructuredModel sm) { - JSPTranslationAdapterFactory factory = new JSPTranslationAdapterFactory(); - sm.getFactoryRegistry().addFactory(factory); - } - - /** - * the path to the Java compilation unit - * - * @see org.eclipse.jdt.core.search.SearchDocument#getPath() - */ - public String getPath() { - JSPTranslation trans = getJSPTranslation(); - // caching the path since it's expensive to get translation - if (this.fCUPath == null || this.fCUPath == UNKNOWN_PATH) { - if (trans != null) - this.fCUPath = trans.getJavaPath(); - } - return fCUPath != null ? fCUPath : UNKNOWN_PATH; - } - - public int getJspOffset(int javaOffset) { - // copied from JSPTranslation - int result = -1; - int offsetInRange = 0; - Position jspPos, javaPos = null; - JSPTranslation trans = getJSPTranslation(); - if (trans != null) { - HashMap java2jspMap = trans.getJava2JspMap(); - - // iterate all mapped java ranges - Iterator it = java2jspMap.keySet().iterator(); - while (it.hasNext()) { - javaPos = (Position) it.next(); - // need to count the last position as included - if (!javaPos.includes(javaOffset) && !(javaPos.offset + javaPos.length == javaOffset)) - continue; - - offsetInRange = javaOffset - javaPos.offset; - jspPos = (Position) java2jspMap.get(javaPos); - - if (jspPos != null) - result = jspPos.offset + offsetInRange; - else { - Logger.log(Logger.ERROR, "jspPosition was null!" + javaOffset); //$NON-NLS-1$ - } - break; - } - } - return result; - } - - public IFile getFile() { - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - IPath jspPath = new Path(this.fJSPPathString); - IFile jspFile = root.getFile(jspPath); - if (!jspFile.exists()) { - // possibly outside workspace - jspFile = root.getFileForLocation(jspPath); - } - return jspFile; - } - - public void release() { - // nothing to do now since JSPTranslation is created on the fly - } - - /** - * for debugging - */ - public String toString() { - return "[JSPSearchDocument:" + this.fJSPPathString + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jdt.core.search.SearchDocument#getEncoding() - */ - public String getEncoding() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jdt.core.search.SearchDocument#getByteContents() - */ - public byte[] getByteContents() { - // TODO Auto-generated method stub - return null; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchParticipant.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchParticipant.java deleted file mode 100644 index 45e02e98d7..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchParticipant.java +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jdt.core.search.IJavaSearchScope; -import org.eclipse.jdt.core.search.SearchDocument; -import org.eclipse.jdt.core.search.SearchEngine; -import org.eclipse.jdt.core.search.SearchParticipant; -import org.eclipse.jdt.core.search.SearchPattern; -import org.eclipse.jdt.core.search.SearchRequestor; - -/** - * Integration of JSP w/ java search. - * - * @author pavery - */ -public class JSPSearchParticipant extends SearchParticipant { - - // for debugging - private static final boolean DEBUG = calculateValue(); - - private static boolean calculateValue() { - String value = Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspsearch"); //$NON-NLS-1$ - boolean debug = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - return debug; - } - - /** - * Important to never return null here or else Java search participation - * will break. - */ - public SearchDocument getDocument(String documentPath) { - - SearchDocument sDoc = JSPSearchSupport.getInstance().getSearchDocument(documentPath); - - if (sDoc == null) { - // return a dummy doc here so search participation doesn't break - return new NullSearchDocument(documentPath); - } - return sDoc; - } - - public String getDescription() { - return "JSP"; //$NON-NLS-1$ - } - - public IPath[] selectIndexes(SearchPattern pattern, IJavaSearchScope scope) { - JSPPathIndexer indexer = new JSPPathIndexer(); - return indexer.getVisibleJspPaths(pattern, scope); - } - - public void indexDocument(SearchDocument document, IPath indexPath) { - if (!(document instanceof JavaSearchDocumentDelegate)) - return; - - // use Java search indexing - SearchEngine.getDefaultSearchParticipant().indexDocument(document, indexPath); - } - - public void locateMatches(SearchDocument[] indexMatches, SearchPattern pattern, IJavaSearchScope scope, SearchRequestor requestor, IProgressMonitor monitor) throws CoreException { - - if (monitor != null && monitor.isCanceled()) - return; - - // filter out null matches - List filtered = new ArrayList(); - SearchDocument match = null; - for (int i = 0; i < indexMatches.length; i++) { - if (DEBUG) - System.out.println("found possible matching JavaSearchDocumentDelegate: " + indexMatches[i]); //$NON-NLS-1$ - match = indexMatches[i]; - if (match != null) { - // some matches may be null, or if the index is out of date, - // the file may not even exist - if (match instanceof JavaSearchDocumentDelegate && ((JavaSearchDocumentDelegate) match).getFile().exists()) - filtered.add(match); - } - } - - indexMatches = (SearchDocument[]) filtered.toArray(new SearchDocument[filtered.size()]); - SearchEngine.getDefaultSearchParticipant().locateMatches(indexMatches, pattern, scope, requestor, monitor); - } - - /** - * @see org.eclipse.jdt.core.search.SearchParticipant#beginSearching() - */ - public void beginSearching() { - // nothing to do - } - - /** - * @see org.eclipse.jdt.core.search.SearchParticipant#doneSearching() - */ - public void doneSearching() { - // nothing to do - } - - /** - * @see org.eclipse.jdt.core.search.SearchParticipant#getDocument(org.eclipse.core.resources.IFile) - */ - public SearchDocument getDocument(IFile file) { - // never gets called? - return null; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchScope.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchScope.java deleted file mode 100644 index 49cc26de4f..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchScope.java +++ /dev/null @@ -1,127 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.runtime.IPath; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.search.IJavaSearchScope; - -/** - * Used to constrain JSP/java search to certain paths and elements. - * @author pavery - */ -public class JSPSearchScope implements IJavaSearchScope { - - private boolean fEnclosesAll = false; - private List fResourcePaths = null; - private List fJavaElements = null; - - public JSPSearchScope() { - // empty constructor just returns true for everything - // everything is in scope - this.fEnclosesAll = true; - init(); - } - - public JSPSearchScope(String[] resourceStringPath) { - init(); - fResourcePaths.addAll(Arrays.asList(resourceStringPath)); - } - - public JSPSearchScope(IJavaElement[] javaElement) { - init(); - fJavaElements.addAll(Arrays.asList(javaElement)); - } - - private void init() { - this.fResourcePaths = new ArrayList(); - this.fJavaElements = new ArrayList(); - } - - public boolean encloses(String resourcePathString) { - - if (this.fEnclosesAll) - return true; - else if (enclosesPath(resourcePathString)) - return true; - - return false; - } - - public boolean encloses(IJavaElement element) { - - // pa_TOD implement - if (this.fEnclosesAll) - return true; - - return true; - } - - public boolean encloses(IResourceProxy element) { - - if (this.fEnclosesAll) - return true; - else if (enclosesPath(element.requestFullPath().toOSString())) - return true; - - return true; - } - - public void addPath(String path) { - this.fResourcePaths.add(path); - } - - public void addElement(IJavaElement element) { - this.fJavaElements.add(element); - } - - private boolean enclosesPath(String possible) { - - String[] paths = (String[]) fResourcePaths.toArray(new String[fResourcePaths.size()]); - for (int i = 0; i < paths.length; i++) { - if (possible.equals(paths[i])) - return true; - } - return false; - } - - public String getDescription() { - - return "JSPSearchScope"; //$NON-NLS-1$ - } - - public IPath[] enclosingProjectsAndJars() { - - // pa_TODO - return null; - } - - public boolean includesBinaries() { - return false; - } - - public boolean includesClasspaths() { - return false; - } - - public void setIncludesBinaries(boolean includesBinaries) { - // do nothing - } - - public void setIncludesClasspaths(boolean includesClasspaths) { - // do nothing - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchSupport.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchSupport.java deleted file mode 100644 index 4ae1be5e13..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JSPSearchSupport.java +++ /dev/null @@ -1,565 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import java.util.zip.CRC32; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.search.IJavaSearchConstants; -import org.eclipse.jdt.core.search.IJavaSearchScope; -import org.eclipse.jdt.core.search.SearchDocument; -import org.eclipse.jdt.core.search.SearchEngine; -import org.eclipse.jdt.core.search.SearchPattern; -import org.eclipse.jdt.core.search.SearchRequestor; -import org.eclipse.jdt.internal.core.JavaModelManager; -import org.eclipse.jst.jsp.core.internal.JSPCoreMessages; -import org.eclipse.jst.jsp.core.internal.JSPCorePlugin; -import org.eclipse.jst.jsp.core.internal.Logger; -import org.eclipse.jst.jsp.core.internal.java.JSP2ServletNameUtil; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; - -/** - * Central access to java indexing and search. All contact between JDT indexing - * and Searching should be done through here. - * - * Clients should access the methods of this class via the single instance via - * <code>getInstance()</code>. - * - * @author pavery - */ -public class JSPSearchSupport { - - // for debugging - static final boolean DEBUG; - static { - String value = Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspsearch"); //$NON-NLS-1$ - DEBUG = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - private static JSPSearchSupport singleton = null; - - private JSPSearchParticipant fParticipant = null; - - private IPath fJspPluginLocation = null; - - // pa_TODO may be slow (esp for indexing entire workspace) - private final CRC32 fChecksumCalculator = new CRC32(); - - /** main cancel montior for all search support */ - private final IProgressMonitor fMonitor = new NullProgressMonitor(); - - private JSPSearchSupport() { - // force use of single instance - } - - /** - * This operation ensures that the live resource's search markers show up in - * the open editor. It also allows the ability to pass in a ProgressMonitor - */ - private class SearchJob extends Job implements IJavaSearchConstants { - - String fSearchText = ""; //$NON-NLS-1$ - - IJavaSearchScope fScope = null; - - int fSearchFor = FIELD; - - int fLimitTo = ALL_OCCURRENCES; - - int fMatchMode = SearchPattern.R_PATTERN_MATCH; - - boolean fIsCaseSensitive = false; - - SearchRequestor fRequestor = null; - - IJavaElement fElement = null; - - // constructor w/ java element - public SearchJob(IJavaElement element, IJavaSearchScope scope, SearchRequestor requestor) { - - super(JSPCoreMessages.JSP_Search + element.getElementName()); - this.fElement = element; - this.fScope = scope; - this.fRequestor = requestor; - } - - // constructor w/ search text - public SearchJob(String searchText, IJavaSearchScope scope, int searchFor, int limitTo, int matchMode, boolean isCaseSensitive, SearchRequestor requestor) { - - super(JSPCoreMessages.JSP_Search + searchText); - this.fSearchText = searchText; - this.fScope = scope; - this.fSearchFor = searchFor; - this.fLimitTo = limitTo; - this.fMatchMode = matchMode; - this.fIsCaseSensitive = isCaseSensitive; - this.fRequestor = requestor; - } - - public IStatus run(IProgressMonitor jobMonitor) { - - if (jobMonitor != null && jobMonitor.isCanceled()) - return Status.CANCEL_STATUS; - if (JSPSearchSupport.getInstance().isCanceled()) - return Status.CANCEL_STATUS; - - SearchPattern javaSearchPattern = null; - // if an element is available, use that to create search pattern - // (eg. LocalVariable) - // otherwise use the text and other paramters - if (this.fElement != null) - javaSearchPattern = SearchPattern.createPattern(this.fElement, this.fLimitTo); - else - javaSearchPattern = SearchPattern.createPattern(this.fSearchText, this.fSearchFor, this.fLimitTo, this.fMatchMode); - - if (javaSearchPattern != null) { - JSPSearchParticipant[] participants = { getSearchParticipant() }; - SearchEngine engine = new SearchEngine(); - try { - if (jobMonitor != null) - jobMonitor.beginTask("", IProgressMonitor.UNKNOWN); //$NON-NLS-1$ - engine.search(javaSearchPattern, participants, this.fScope, this.fRequestor, jobMonitor); - } catch (CoreException e) { - if (DEBUG) - Logger.logException(e); - } - // non-CoreExceptions will permanently stall the Worker thread - catch (Exception e) { - if (DEBUG) - Logger.logException(e); - } finally { - if (jobMonitor != null) - jobMonitor.done(); - } - } - return Status.OK_STATUS; - } - } - - // end SearchJob - /** - * Runnable forces caller to wait until finished (as opposed to using a Job) - */ - private class SearchRunnable implements IWorkspaceRunnable, IJavaSearchConstants { - - String fSearchText = ""; //$NON-NLS-1$ - - IJavaSearchScope fScope = null; - - int fSearchFor = FIELD; - - int fLimitTo = ALL_OCCURRENCES; - - int fMatchMode = SearchPattern.R_PATTERN_MATCH; - - boolean fIsCaseSensitive = false; - - SearchRequestor fRequestor = null; - - IJavaElement fElement = null; - - // constructor w/ java element - public SearchRunnable(IJavaElement element, IJavaSearchScope scope, SearchRequestor requestor) { - - this.fElement = element; - this.fScope = scope; - this.fRequestor = requestor; - } - - // constructor w/ search text - public SearchRunnable(String searchText, IJavaSearchScope scope, int searchFor, int limitTo, int matchMode, boolean isCaseSensitive, SearchRequestor requestor) { - - this.fSearchText = searchText; - this.fScope = scope; - this.fSearchFor = searchFor; - this.fLimitTo = limitTo; - this.fMatchMode = matchMode; - this.fIsCaseSensitive = isCaseSensitive; - this.fRequestor = requestor; - } - - public void run(IProgressMonitor monitor) throws CoreException { - - if (monitor != null && monitor.isCanceled()) - return; - if (JSPSearchSupport.getInstance().isCanceled()) - return; - - SearchPattern javaSearchPattern = null; - // if an element is available, use that to create search pattern - // (eg. LocalVariable) - // otherwise use the text and other paramters - if (this.fElement != null) - javaSearchPattern = SearchPattern.createPattern(this.fElement, fLimitTo); - else - javaSearchPattern = SearchPattern.createPattern(fSearchText, fSearchFor, fLimitTo, fMatchMode); - - if (javaSearchPattern != null) { - JSPSearchParticipant[] participants = { getSearchParticipant() }; - SearchEngine engine = new SearchEngine(); - try { - if (monitor != null) - monitor.beginTask("", 0); //$NON-NLS-1$ - engine.search(javaSearchPattern, participants, fScope, fRequestor, monitor); - } catch (CoreException e) { - Logger.logException(e); - //throw e; - } - // non-CoreExceptions will permanently stall the Worker thread - catch (Exception e) { - Logger.logException(e); - } finally { - if (monitor != null) - monitor.done(); - } - } - } - } - - // end SearchRunnable - - /** - * Clients should access the methods of this class via the single instance - * via getInstance() - * - * @return - */ - public synchronized static JSPSearchSupport getInstance() { - - if (singleton == null) - singleton = new JSPSearchSupport(); - return singleton; - } - - /** - * Utility method to check if a file is a jsp file (since this is done - * frequently) - */ - public static boolean isJsp(IFile file) { - // (pa) 20051025 removing deep content type check - // because this method is called frequently - // and IO is expensive - boolean isJsp = false; -// InputStream is = null; -// try { - if (file != null && file.exists()) { - - IContentType contentTypeJSP = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSP); - // check this before description, it's less expensive - if (contentTypeJSP.isAssociatedWith(file.getName())) { - isJsp = true; -// IContentDescription contentDescription = file.getContentDescription(); -// // it can be null -// if (contentDescription == null) { -// is = file.getContents(); -// contentDescription = Platform.getContentTypeManager().getDescriptionFor(is, file.getName(), new QualifiedName[] { IContentDescription.CHARSET }); -// } -// if (contentDescription != null) { -// String fileCtId = contentDescription.getContentType().getId(); -// isJsp = (fileCtId != null && ContentTypeIdForJSP.ContentTypeID_JSP.equals(fileCtId)); -// } - } - } -// } catch (IOException e) { -// // ignore, assume it's invalid JSP -// } catch (CoreException e) { -// // ignore, assume it's invalid JSP -// } finally { -// // must close input stream in case others need it -// if (is != null) -// try { -// is.close(); -// } catch (Exception e) { -// // not sure how to recover at this point -// } -// } - return isJsp; - } - - /** - * schedules a search document representing this JSP file for indexing (by - * the java indexer) - * - * @param file - * the JSP file - * @return true if indexing was successful, false otherwise - * @throws CoreException - */ - public SearchDocument addJspFile(IFile file) { - if (JSPSearchSupport.getInstance().isCanceled()) { - return null; - } - - if (DEBUG) - System.out.println("adding JSP file:" + file.getFullPath()); //$NON-NLS-1$ - - // create - SearchDocument delegate = createSearchDocument(file); - // null if not a jsp file - if (delegate != null) { - try { - getSearchParticipant().scheduleDocumentIndexing(delegate, computeIndexLocation(file.getParent().getFullPath())); - } catch (Exception e) { - // ensure that failure here doesn't keep other documents from - // being indexed - // if peformed in a batch call (like JSPIndexManager) - if (DEBUG) - e.printStackTrace(); - } - } - - if (DEBUG) - System.out.println("scheduled" + delegate + "for indexing"); //$NON-NLS-1$ //$NON-NLS-2$ - - return delegate; - } - - /** - * Perform a java search w/ the given parameters. Runs in a background Job - * (results may still come in after this method call) - * - * @param searchText - * the string of text to search on - * @param searchFor - * IJavaSearchConstants.TYPE, METHOD, FIELD, PACKAGE, etc... - * @param limitTo - * IJavaSearchConstants.DECLARATIONS, - * IJavaSearchConstants.REFERENCES, - * IJavaSearchConstants.IMPLEMENTORS, or - * IJavaSearchConstants.ALL_OCCURRENCES - * @param matchMode - * allow * wildcards or not - * @param isCaseSensitive - * @param requestor - * passed in to accept search matches (and do "something" with - * them) - */ - public void search(String searchText, IJavaSearchScope scope, int searchFor, int limitTo, int matchMode, boolean isCaseSensitive, SearchRequestor requestor) { - - JSPIndexManager.getInstance().rebuildIndexIfNeeded(); - - SearchJob job = new SearchJob(searchText, scope, searchFor, limitTo, matchMode, isCaseSensitive, requestor); - setCanceled(false); - job.setUser(true); - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=5032 - // pops up user operation blocked dialog if you perform a long search, - // then open a file because it locks the workspace - //job.setRule(ResourcesPlugin.getWorkspace().getRoot()); - job.schedule(); - } - - /** - * Search for an IJavaElement, constrained by the given parameters. Runs in - * a background Job (results may still come in after this method call) - * - * @param element - * @param scope - * @param requestor - */ - public void search(IJavaElement element, IJavaSearchScope scope, SearchRequestor requestor) { - - JSPIndexManager.getInstance().rebuildIndexIfNeeded(); - - SearchJob job = new SearchJob(element, scope, requestor); - setCanceled(false); - job.setUser(true); - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=5032 - //job.setRule(ResourcesPlugin.getWorkspace().getRoot()); - job.schedule(); - } - - /** - * Search for an IJavaElement, constrained by the given parameters. Runs in - * an IWorkspace runnable (results will be reported by the end of this - * method) - * - * @param element - * @param scope - * @param requestor - */ - public void searchRunnable(IJavaElement element, IJavaSearchScope scope, SearchRequestor requestor) { - - JSPIndexManager.getInstance().rebuildIndexIfNeeded(); - - SearchRunnable searchRunnable = new SearchRunnable(element, scope, requestor); - try { - setCanceled(false); - ResourcesPlugin.getWorkspace().run(searchRunnable, JSPSearchSupport.getInstance().getProgressMonitor()); - } catch (CoreException e) { - e.printStackTrace(); - } - } - - /** - * @param jspFile - * @return SearchDocument if the file is not null, exists, and is a JSP - * file, otherwise null. - */ - private SearchDocument createSearchDocument(IFile jspFile) { - - JavaSearchDocumentDelegate delegate = null; - if (jspFile != null && jspFile.exists() && isJsp(jspFile)) { - - delegate = new JavaSearchDocumentDelegate(new JSPSearchDocument(jspFile.getFullPath().toString(), getSearchParticipant())); - } - return delegate; - - } - - /** - * Centralized place to access JSPSearchDocuments (used by - * JSPSearchParticipant and JSPSearchRequestor) - * - * @param searchDocPath - * @param doc - * @return the JSPSearchDocument or null if one is not found - */ - public SearchDocument getSearchDocument(String searchDocPath) { - - SearchDocument delegate = null; - IFile f = fileForCUPath(searchDocPath); - if (f != null) { - delegate = createSearchDocument(f); - } else { - // handle failure case... (file deleted maybe?) - } - return delegate; - } - - /** - * Unmangles the searchDocPath and returns the corresponding JSP file. - * - * @param searchDocPath - */ - private IFile fileForCUPath(String searchDocPath) { - - String[] split = searchDocPath.split("/"); //$NON-NLS-1$ - String classname = split[split.length - 1]; - - // ignore anything but .java matches (like .class binary matches) - if(!searchDocPath.endsWith(".java")) { //$NON-NLS-1$ - return null; - } - - String filePath = JSP2ServletNameUtil.unmangle(classname); - - // try absolute path - IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(filePath)); - // workspace relative then - if(f == null) { - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=86009 - // must have a project name as well - // which would mean >= 2 path segments - IPath path = new Path(filePath); - if(path.segmentCount() >= 2) { - f = ResourcesPlugin.getWorkspace().getRoot().getFile(path); - } - } - return f; - } - - JSPSearchParticipant getSearchParticipant() { - - if (this.fParticipant == null) - this.fParticipant = new JSPSearchParticipant(); - return this.fParticipant; - } - - // This is called from JSPPathIndexer - // pa_TODO - //how can we make sure participant indexLocations are updated at startup? - public final IPath computeIndexLocation(IPath containerPath) { - - String indexLocation = null; - // we don't want to inadvertently use a JDT Index - // we want to be sure to use the Index from the JSP location - //Object obj = indexLocations.get(containerPath); - //if (obj != null) { - // indexLocation = (String) obj; - //} else { - // create index entry - String pathString = containerPath.toOSString(); - this.fChecksumCalculator.reset(); - this.fChecksumCalculator.update(pathString.getBytes()); - String fileName = Long.toString(this.fChecksumCalculator.getValue()) + ".index"; //$NON-NLS-1$ - // this is the only difference from - // IndexManager#computeIndexLocation(...) - indexLocation = getModelJspPluginWorkingLocation().append(fileName).toOSString(); - - // pa_TODO need to add to java path too, so JDT search support knows - // there should be a non internal way to do this. - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=77564 - JavaModelManager.getJavaModelManager().getIndexManager().indexLocations.put(containerPath, indexLocation); - //} - return new Path(indexLocation); - } - - // copied from JDT IndexManager - public IPath getModelJspPluginWorkingLocation() { - - if (this.fJspPluginLocation != null) - return this.fJspPluginLocation; - - IPath stateLocation = JSPCorePlugin.getDefault().getStateLocation(); - - // pa_TODO workaround for - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=62267 - // copied from IndexManager - String device = stateLocation.getDevice(); - if (device != null && device.charAt(0) == '/') - stateLocation = stateLocation.setDevice(device.substring(1)); - - return this.fJspPluginLocation = stateLocation; - } - - /** - * JSP Indexing and Search jobs check this - * - * @return - */ - public synchronized final void setCanceled(boolean cancel) { - //System.out.println("search support monitor" + fMonitor); - fMonitor.setCanceled(cancel); - } - - /** - * JSP Indexing and Search jobs check this - * - * @return - */ - public synchronized final boolean isCanceled() { - - return fMonitor.isCanceled(); - } - - /** - * JSP Indexing and Search jobs check this - * - * @return - */ - public final IProgressMonitor getProgressMonitor() { - - return this.fMonitor; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JavaSearchDocumentDelegate.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JavaSearchDocumentDelegate.java deleted file mode 100644 index 83f13d1940..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/JavaSearchDocumentDelegate.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jdt.core.search.SearchDocument; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationExtension; - - -/** - * Wrapper method to set getPath() path to be the path of the compilation unit - * for the jsp file. (since it's a final method, it needs to be set via constructor) - * - * @author pavery - */ -public class JavaSearchDocumentDelegate extends SearchDocument { - - private JSPSearchDocument fJSPSearchDoc = null; - - public JavaSearchDocumentDelegate(JSPSearchDocument jspSearchDoc) { - - super(jspSearchDoc.getPath(), jspSearchDoc.getParticipant()); - this.fJSPSearchDoc = jspSearchDoc; - } - - public byte[] getByteContents() { - - return this.fJSPSearchDoc.getByteContents(); - } - - public char[] getCharContents() { - - return this.fJSPSearchDoc.getCharContents(); - } - - public String getJavaText() { - return this.fJSPSearchDoc.getJavaText(); - } - - public String getEncoding() { - - return this.fJSPSearchDoc.getEncoding(); - } - - public IFile getFile() { - - return this.fJSPSearchDoc.getFile(); - } - - public JSPTranslationExtension getJspTranslation() { - - return this.fJSPSearchDoc.getJSPTranslation(); - } - - public int getJspOffset(int javaOffset) { - - return this.fJSPSearchDoc.getJspOffset(javaOffset); - } - - public void release() { - this.fJSPSearchDoc.release(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/NullSearchDocument.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/NullSearchDocument.java deleted file mode 100644 index ad99a1023d..0000000000 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/search/NullSearchDocument.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.core.internal.java.search; - -import org.eclipse.jdt.core.search.SearchDocument; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslator; - - - -/** - * An empty servlet, safe for Java search participation - * - * @author pavery - */ -public class NullSearchDocument extends SearchDocument { - - StringBuffer fEmptyServletBuffer = null; - - public NullSearchDocument(String documentPath) { - super(documentPath, new JSPSearchParticipant()); //$NON-NLS-1$ - this.fEmptyServletBuffer = new JSPTranslator().getEmptyTranslation(); - } - - public byte[] getByteContents() { - return this.fEmptyServletBuffer.toString().getBytes(); - } - - public char[] getCharContents() { - return this.fEmptyServletBuffer.toString().toCharArray(); - } - - public String getEncoding() { - return null; - } - -} |