[574786] JSP EL translator must account for Jakarta EE 9 package change
diff --git a/web/bundles/org.eclipse.jst.jsp.core/META-INF/MANIFEST.MF b/web/bundles/org.eclipse.jst.jsp.core/META-INF/MANIFEST.MF index 21d3961..a1ea487 100644 --- a/web/bundles/org.eclipse.jst.jsp.core/META-INF/MANIFEST.MF +++ b/web/bundles/org.eclipse.jst.jsp.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.jst.jsp.core;singleton:=true -Bundle-Version: 1.4.0.qualifier +Bundle-Version: 1.4.100.qualifier Bundle-Activator: org.eclipse.jst.jsp.core.internal.JSPCorePlugin Bundle-Vendor: %providerName Bundle-Localization: plugin
diff --git a/web/bundles/org.eclipse.jst.jsp.core/pom.xml b/web/bundles/org.eclipse.jst.jsp.core/pom.xml index 2046350..0779833 100644 --- a/web/bundles/org.eclipse.jst.jsp.core/pom.xml +++ b/web/bundles/org.eclipse.jst.jsp.core/pom.xml
@@ -21,6 +21,6 @@ <groupId>org.eclipse.webtools.sourceediting</groupId> <artifactId>org.eclipse.jst.jsp.core</artifactId> - <version>1.4.0-SNAPSHOT</version> + <version>1.4.100-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> </project>
diff --git a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contenttype/DeploymentDescriptorPropertyCache.java b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contenttype/DeploymentDescriptorPropertyCache.java index 8d613da..ba8d459 100644 --- a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contenttype/DeploymentDescriptorPropertyCache.java +++ b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contenttype/DeploymentDescriptorPropertyCache.java
@@ -18,6 +18,7 @@ import java.io.StringReader; import java.lang.ref.Reference; import java.lang.ref.SoftReference; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -687,7 +688,7 @@ /** * Map of project names to a structure representing the available Servlet API. */ - Map<String, ServletAPIDescriptor> apiVersions = new HashMap<>(); + Map<String, Reference<ServletAPIDescriptor>> apiVersions = new HashMap<>(); final static Object LOCK = new Object(); @@ -1040,14 +1041,15 @@ * Build Path, <code>null</code> if none was discoverable. */ public ServletAPIDescriptor getServletAPIVersion(IProject project) { - ServletAPIDescriptor descriptor = apiVersions.get(project.getName()); + Reference<ServletAPIDescriptor> ref = apiVersions.get(project.getName()); + ServletAPIDescriptor descriptor = ref != null ? ref.get() : null; if (descriptor == null) { descriptor = discoverServletAPIVersion(project); if (descriptor != null) { - apiVersions.put(project.getName(), descriptor); + apiVersions.put(project.getName(), new SoftReference<>(descriptor)); } else { - apiVersions.put(project.getName(), ServletAPIDescriptor.DEFAULT); + apiVersions.put(project.getName(), new WeakReference<>(ServletAPIDescriptor.DEFAULT)); descriptor = ServletAPIDescriptor.DEFAULT; } }
diff --git a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contenttype/ServletAPIDescriptor.java b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contenttype/ServletAPIDescriptor.java index 22927ce..5aecef3 100644 --- a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contenttype/ServletAPIDescriptor.java +++ b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contenttype/ServletAPIDescriptor.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 IBM Corporation and others. + * Copyright (c) 2020, 2021 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -18,7 +18,7 @@ * project. Typically this will have been discovered against actual libraries. */ public class ServletAPIDescriptor { - public static ServletAPIDescriptor DEFAULT = new ServletAPIDescriptor("javax.servlet", 4); + public static ServletAPIDescriptor DEFAULT = new ServletAPIDescriptor("jakarta.servlet", 5); public ServletAPIDescriptor(String rootPackage, float apiVersion) { super();
diff --git a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java index ef72691..f530633 100644 --- a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java +++ b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/JSPTranslator.java
@@ -130,7 +130,7 @@ * @see #writeRanges(ObjectOutput, HashMap) * @see #readRanges(ObjectInput) */ - private static final long serialVersionUID = 3L; + private static final long serialVersionUID = 4L; /** for debugging */ private static final boolean DEBUG = Boolean.valueOf(Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspjavamapping")).booleanValue(); //$NON-NLS-1$ @@ -1335,7 +1335,7 @@ /** * - * @return the status of the translator's progrss monitor, false if the + * @return the status of the translator's progress monitor, false if the * monitor is null */ private boolean isCanceled() { @@ -1908,7 +1908,7 @@ // id // Iterate over all declared extensions of this extension point. - // A single plugin may extend the extension point more than once, + // A single plug-in may extend the extension point more than once, // although it's not recommended. IConfigurationElement bestTranslator = null; IExtension[] extensions = extensionPoint.getExtensions();
diff --git a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java index 868f5c5..dd9aaf6 100644 --- a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java +++ b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/ELGeneratorVisitor.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2011 BEA Systems and others. + * Copyright (c) 2005, 2021 BEA Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -26,7 +26,9 @@ import java.util.Map.Entry; import java.util.Set; +import org.eclipse.core.filebuffers.FileBuffers; import org.eclipse.core.filebuffers.ITextFileBuffer; +import org.eclipse.core.filebuffers.ITextFileBufferManager; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; @@ -47,10 +49,13 @@ 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.contenttype.DeploymentDescriptorPropertyCache; +import org.eclipse.jst.jsp.core.internal.contenttype.ServletAPIDescriptor; import org.eclipse.jst.jsp.core.internal.preferences.JSPCorePreferenceNames; import org.eclipse.jst.jsp.core.jspel.ELProblem; import org.eclipse.osgi.util.NLS; import org.eclipse.wst.sse.core.internal.FileBufferModelManager; +import org.eclipse.wst.sse.core.internal.Logger; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection; @@ -63,35 +68,9 @@ 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, javax.servlet.jsp.JspException {" + 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 fExpressionHeader2_param = "()" + ENDL + //$NON-NLS-1$ - "\t\tthrows java.io.IOException, javax.servlet.ServletException, javax.servlet.jsp.JspException {" + ENDL + //$NON-NLS-1$ - "javax.servlet.jsp.PageContext pageContext = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, String> param = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, String[]> paramValues = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, String> header = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, String[]> headerValues = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, javax.servlet.http.Cookie> cookie = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, String> initParam = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, Object> pageScope = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, Object> requestScope = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, Object> sessionScope = null;" + ENDL + //$NON-NLS-1$ - "java.util.Map<String, Object> applicationScope = null;" + ENDL + //$NON-NLS-1$ - "return \"\"+( "; //$NON-NLS-1$ + private String fExpressionHeader2 = null; + private String fExpressionHeader2_param = null; private static final String fJspImplicitObjects[] = { "pageContext" }; //$NON-NLS-1$ @@ -138,11 +117,11 @@ private boolean fUseParameterizedTypes; - private List fELProblems; + private List<ELProblem> fELProblems; private IScopeContext[] fScopeContexts = null; /** - * Tranlsation of XML-style operators to java + * Translation of XML-style operators to java */ static { fOperatorMap = new HashMap(); @@ -176,8 +155,9 @@ fCurrentNode = currentNode; fGeneratedFunctionStart = -1; //set when generating function definition fUseParameterizedTypes = compilerSupportsParameterizedTypes(); - fELProblems = new ArrayList(); + fELProblems = new ArrayList<>(); fScopeContexts = getScopeContexts(); + initForAPIContext(document); } /** @@ -229,6 +209,55 @@ fOffsetInUserCode += newText.length(); } + + ServletAPIDescriptor initForAPIContext(IStructuredDocument document) { + ServletAPIDescriptor apiContext = ServletAPIDescriptor.DEFAULT; + ITextFileBufferManager textFileBufferManager = FileBuffers.getTextFileBufferManager(); + if (textFileBufferManager != null) { + ITextFileBuffer textFileBuffer = textFileBufferManager.getTextFileBuffer(document); + if (textFileBuffer != null) { + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(textFileBuffer.getLocation().segment(0)); + apiContext = DeploymentDescriptorPropertyCache.getInstance().getServletAPIVersion(project); + } + else { + Logger.log(Logger.ERROR, "No file buffer for document " + document); + } + } + else { + Logger.log(Logger.ERROR, "Missing text file buffer manager"); + } + fExpressionHeader2 = "()" + ENDL + //$NON-NLS-1$ + "\t\tthrows java.io.IOException, "+apiContext.getRootPackage()+".ServletException, "+apiContext.getRootPackage()+".jsp.JspException {" + ENDL + //$NON-NLS-1$ + apiContext.getRootPackage()+".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$ + + fExpressionHeader2_param = "()" + ENDL + //$NON-NLS-1$ + "\t\tthrows java.io.IOException, "+apiContext.getRootPackage()+".ServletException, "+apiContext.getRootPackage()+".jsp.JspException {" + ENDL + //$NON-NLS-1$ + apiContext.getRootPackage()+".jsp.PageContext pageContext = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, String> param = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, String[]> paramValues = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, String> header = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, String[]> headerValues = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, "+apiContext.getRootPackage()+".http.Cookie> cookie = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, String> initParam = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, Object> pageScope = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, Object> requestScope = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, Object> sessionScope = null;" + ENDL + //$NON-NLS-1$ + "java.util.Map<String, Object> applicationScope = null;" + ENDL + //$NON-NLS-1$ + "return \"\"+( "; //$NON-NLS-1$ + return apiContext; + } + /** * Generate a function invocation. * @@ -243,9 +272,9 @@ if (docMgr == null) return null; - Iterator taglibs = docMgr.getCMDocumentTrackers(fCurrentNode.getStartOffset()).iterator(); + Iterator<TaglibTracker> taglibs = docMgr.getCMDocumentTrackers(fCurrentNode.getStartOffset()).iterator(); while (taglibs.hasNext()) { - TaglibTracker tracker = (TaglibTracker)taglibs.next(); + TaglibTracker tracker = taglibs.next(); if(tracker.getPrefix().equals(prefix)) { CMDocumentImpl doc = (CMDocumentImpl)tracker.getDocument(); @@ -606,7 +635,7 @@ /** * @return the {@link ELProblem}s found by this visitor */ - public List getELProblems() { + public List<ELProblem> getELProblems() { return fELProblems; }
diff --git a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELTranslator.java b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELTranslator.java index a853cf9..a1fc317 100644 --- a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELTranslator.java +++ b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/jspel/JSPELTranslator.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2010 BEA Systems and others. + * Copyright (c) 2005, 2021 BEA Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -50,12 +50,12 @@ */ private JSPELParser elParser = null; - public List translateEL(String elText, String delim, + public List<ELProblem> translateEL(String elText, String delim, IStructuredDocumentRegion currentNode, int contentStart, int contentLength, StringBuffer fUserELExpressions, HashMap fUserELRanges, IStructuredDocument document) { - ArrayList elProblems = new ArrayList(); + List<ELProblem> elProblems = new ArrayList<>(); try { synchronized(this) { @@ -67,7 +67,7 @@ ASTExpression expression = elParser.Expression(); ELGenerator gen = new ELGenerator(); - List generatorELProblems = gen.generate(expression, currentNode, fUserELExpressions, fUserELRanges, document, currentNode, contentStart, contentLength); + List<ELProblem> generatorELProblems = gen.generate(expression, currentNode, fUserELExpressions, fUserELRanges, document, currentNode, contentStart, contentLength); elProblems.addAll(generatorELProblems); } } catch (ParseException e) {
diff --git a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/jspel/IJSPELTranslator.java b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/jspel/IJSPELTranslator.java index 24592fc..9b734bc 100644 --- a/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/jspel/IJSPELTranslator.java +++ b/web/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/jspel/IJSPELTranslator.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2006 BEA Systems and others. + * Copyright (c) 2005, 2021 BEA Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -39,7 +39,7 @@ * @param document The structured document. * @return A list of ELProblems that describes any syntactic issues found. */ - public List translateEL(String elText, + public List<ELProblem> translateEL(String elText, String delim, IStructuredDocumentRegion currentNode, int contentStart,
diff --git a/web/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF b/web/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF index 80ff2a5..8c9243b 100644 --- a/web/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF +++ b/web/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name.0 Bundle-SymbolicName: org.eclipse.jst.jsp.ui.tests; singleton:=true -Bundle-Version: 1.1.0.qualifier +Bundle-Version: 1.1.1.qualifier Bundle-Activator: org.eclipse.jst.jsp.ui.tests.JSPUITestsPlugin Bundle-Vendor: %Bundle-Vendor.0 Bundle-Localization: plugin
diff --git a/web/tests/org.eclipse.jst.jsp.ui.tests/pom.xml b/web/tests/org.eclipse.jst.jsp.ui.tests/pom.xml index 06bc441..dc96e87 100644 --- a/web/tests/org.eclipse.jst.jsp.ui.tests/pom.xml +++ b/web/tests/org.eclipse.jst.jsp.ui.tests/pom.xml
@@ -21,7 +21,7 @@ <groupId>org.eclipse.webtools.sourceediting</groupId> <artifactId>org.eclipse.jst.jsp.ui.tests</artifactId> - <version>1.1.0-SNAPSHOT</version> + <version>1.1.1-SNAPSHOT</version> <packaging>eclipse-test-plugin</packaging> <properties>
diff --git a/web/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/ShowTranslationHandler.java b/web/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/ShowTranslationHandler.java index 1a17704..ec444eb 100644 --- a/web/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/ShowTranslationHandler.java +++ b/web/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/ShowTranslationHandler.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2017 IBM Corporation and others. + * Copyright (c) 2008, 2021 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -25,11 +25,10 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.core.compiler.IProblem; import org.eclipse.jdt.ui.JavaUI; +import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.Position; import org.eclipse.jface.text.source.Annotation; import org.eclipse.jface.text.source.IAnnotationModel; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jst.jsp.core.internal.java.IJSPProblem; import org.eclipse.jst.jsp.core.internal.java.IJSPTranslation; import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter; @@ -44,9 +43,10 @@ import org.eclipse.ui.progress.UIJob; import org.eclipse.ui.texteditor.AnnotationTypeLookup; import org.eclipse.ui.texteditor.ITextEditor; +import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; +import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; /** @@ -72,63 +72,83 @@ * .ExecutionEvent) */ public Object execute(final ExecutionEvent event) throws ExecutionException { - ISelection selection = HandlerUtil.getCurrentSelection(event); - if (selection instanceof IStructuredSelection) { - List list = ((IStructuredSelection) selection).toList(); - if (!list.isEmpty()) { - if (list.get(0) instanceof IDOMNode) { - final IDOMModel model = ((IDOMNode) list.get(0)).getModel(); - INodeAdapter adapter = model.getDocument().getAdapterFor(IJSPTranslation.class); - if (adapter != null) { - Job opener = new UIJob("Opening JSP Java Translation") { - public IStatus runInUIThread(IProgressMonitor monitor) { - JSPTranslationAdapter translationAdapter = (JSPTranslationAdapter) model.getDocument().getAdapterFor(IJSPTranslation.class); - final JSPTranslationExtension translation = translationAdapter.getJSPTranslation(); + IEditorPart activeEditor = HandlerUtil.getActiveEditor(event); + if (activeEditor != null) { + ITextEditor textEditor = activeEditor.getAdapter(ITextEditor.class); + if (textEditor != null) { + IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput()); + IStructuredModel baseModel = null; + try { + baseModel = StructuredModelManager.getModelManager().getExistingModelForRead(document); + if (baseModel instanceof IDOMModel) { + final IDOMModel model = (IDOMModel) baseModel; + INodeAdapter adapter = model.getDocument().getAdapterFor(IJSPTranslation.class); + if (adapter != null) { + Job opener = new UIJob("Opening JSP Java Translation") { + public IStatus runInUIThread(IProgressMonitor monitor) { + JSPTranslationAdapter translationAdapter = (JSPTranslationAdapter) model.getDocument().getAdapterFor(IJSPTranslation.class); + final JSPTranslationExtension translation = translationAdapter.getJSPTranslation(); - // create an IEditorInput for the Java editor - final IStorageEditorInput input = new JSPTranslationEditorInput(model); - try { - IEditorPart editor = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), input, JavaUI.ID_CU_EDITOR, true); - // Now add the problems we found - if (editor instanceof ITextEditor) { - IAnnotationModel annotationModel = ((ITextEditor) editor).getDocumentProvider().getAnnotationModel(input); - translation.reconcileCompilationUnit(); - List problemsList = translation.getProblems(); - IProblem[] problems = (IProblem[]) problemsList.toArray(new IProblem[problemsList.size()]); - AnnotationTypeLookup lookup = new AnnotationTypeLookup(); - for (int i = 0; i < problems.length; i++) { - if (problems[i] instanceof IJSPProblem) - continue; - int length = problems[i].getSourceEnd() - problems[i].getSourceStart() + 1; - Position position = new Position(problems[i].getSourceStart(), length); - Annotation annotation = null; - String type = lookup.getAnnotationType(IMarker.PROBLEM, IMarker.SEVERITY_INFO); - if (problems[i].isError()) { - type = lookup.getAnnotationType(IMarker.PROBLEM, IMarker.SEVERITY_ERROR); - } - else if (problems[i].isWarning()) { - type = lookup.getAnnotationType(IMarker.PROBLEM, IMarker.SEVERITY_WARNING); - } - annotation = new Annotation(type, false, problems[i].getMessage()); - if (annotation != null) { - annotationModel.addAnnotation(annotation, position); + // create an IEditorInput for the Java + // editor + final IStorageEditorInput input = new JSPTranslationEditorInput(model); + try { + IEditorPart editor = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), input, JavaUI.ID_CU_EDITOR, true); + // Now add the problems we found + if (editor instanceof ITextEditor) { + IAnnotationModel annotationModel = ((ITextEditor) editor).getDocumentProvider().getAnnotationModel(input); + translation.reconcileCompilationUnit(); + List problemsList = translation.getProblems(); + IProblem[] problems = (IProblem[]) problemsList.toArray(new IProblem[problemsList.size()]); + AnnotationTypeLookup lookup = new AnnotationTypeLookup(); + for (int i = 0; i < problems.length; i++) { + if (problems[i] instanceof IJSPProblem) + continue; + int length = problems[i].getSourceEnd() - problems[i].getSourceStart() + 1; + Position position = new Position(problems[i].getSourceStart(), length); + Annotation annotation = null; + String type = lookup.getAnnotationType(IMarker.PROBLEM, IMarker.SEVERITY_INFO); + if (problems[i].isError()) { + type = lookup.getAnnotationType(IMarker.PROBLEM, IMarker.SEVERITY_ERROR); + } + else if (problems[i].isWarning()) { + type = lookup.getAnnotationType(IMarker.PROBLEM, IMarker.SEVERITY_WARNING); + } + annotation = new Annotation(type, false, problems[i].getMessage()); + if (annotation != null) { + annotationModel.addAnnotation(annotation, position); + } } } } + catch (PartInitException e) { + e.printStackTrace(); + Display.getCurrent().beep(); + } + return Status.OK_STATUS; } - catch (PartInitException e) { - e.printStackTrace(); - Display.getCurrent().beep(); - } - return Status.OK_STATUS; - } - }; - opener.setSystem(false); - opener.setUser(true); - opener.schedule(); + }; + opener.setSystem(false); + opener.setUser(true); + opener.schedule(); + } + } + else { + Logger.log(Logger.ERROR, "Not an IDOMModel"); + } + } + finally { + if (baseModel != null) { + baseModel.releaseFromRead(); } } } + else { + Logger.log(Logger.ERROR, "No text editor found"); + } + } + else { + Logger.log(Logger.ERROR, "No active editor found"); } return null; }