[189924] JSP Java translation ignores page directive's session attribute (3.0)
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF index 82a340d..24c55ec 100644 --- a/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF +++ b/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.0.100.qualifier +Bundle-Version: 1.0.200.qualifier Bundle-ClassPath: jspuitests.jar Bundle-Activator: org.eclipse.jst.jsp.ui.tests.JSPUITestsPlugin Bundle-Vendor: %Bundle-Vendor.0
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/JSPTranslationTest.java b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/JSPTranslationTest.java index 3393772..7b9ad8f 100644 --- a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/JSPTranslationTest.java +++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/JSPTranslationTest.java
@@ -14,6 +14,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.HashMap; +import java.util.Iterator; import junit.framework.TestCase; @@ -21,18 +22,33 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; 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.ICompilationUnit; +import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IMethod; +import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.core.dom.AST; +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.ASTParser; +import org.eclipse.jdt.core.dom.ASTVisitor; +import org.eclipse.jdt.core.dom.SimpleType; +import org.eclipse.jdt.core.dom.VariableDeclarationFragment; +import org.eclipse.jdt.core.dom.VariableDeclarationStatement; import org.eclipse.jface.text.Position; import org.eclipse.jst.jsp.core.internal.domdocument.DOMModelForJSP; 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.modelhandler.ModelHandlerForJSP; +import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; import org.eclipse.jst.jsp.ui.tests.other.ScannerUnitTests; import org.eclipse.jst.jsp.ui.tests.util.FileUtil; import org.eclipse.jst.jsp.ui.tests.util.ProjectUnzipUtility; +import org.eclipse.jst.jsp.ui.tests.util.ProjectUtil; import org.eclipse.osgi.service.datalocation.Location; import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.provisional.IModelManager; @@ -78,6 +94,77 @@ fProjUtil.unzipAndImport(zipFile, platformLocation.getURL().getPath()); fProjUtil.initJavaProject("INCLUDES_TESTS"); } + + public void testPageDirectiveSessionVariableInFile() throws JavaModelException { + String jspTestFilePathString = "INCLUDES_TESTS/test189924.jsp"; + ProjectUtil.copyBundleEntryIntoWorkspace("/testfiles/189924/test189924.jsp", jspTestFilePathString); + IPath jspTestFilePath = new Path(jspTestFilePathString); + IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(jspTestFilePath); + + verifyTranslationHasNoSessionVariables(file); + } + private void verifyTranslationHasNoSessionVariables(IFile file) throws JavaModelException { + IDOMModel model = null; + try { + model = (IDOMModel) getStructuredModelForRead(file); + setupAdapterFactory(model); + + JSPTranslationAdapter adapter = (JSPTranslationAdapter) model.getDocument().getAdapterFor(IJSPTranslation.class); + ICompilationUnit cu = adapter.getJSPTranslation().getCompilationUnit(); + cu.makeConsistent(new NullProgressMonitor()); + IType[] types = cu.getAllTypes(); + for (int i = 0; i < types.length; i++) { + IJavaElement[] members = types[i].getChildren(); + for (int k = 0; k < members.length; k++) { + // check fields for name "session" + if (members[k].getElementType() == IJavaElement.FIELD) { + assertFalse("field named \"session\" exists", members[k].getElementName().equals(JSP11Namespace.ATTR_NAME_SESSION)); + } + /* + * check "public void + * _jspService(javax.servlet.http.HttpServletRequest + * request, javax.servlet.http.HttpServletResponse + * response)" for local variables named "session" + */ + else if (members[k].getElementType() == IJavaElement.METHOD && members[k].getElementName().startsWith("_jspService")) { + ICompilationUnit compilationUnit = ((IMethod) members[k]).getCompilationUnit(); + compilationUnit.makeConsistent(new NullProgressMonitor()); + ASTParser parser = ASTParser.newParser(AST.JLS3); + parser.setSource(cu); + ASTNode node = parser.createAST(null); + node.accept(new ASTVisitor() { + public boolean visit(VariableDeclarationStatement node) { + Iterator fragments = node.fragments().iterator(); + while (fragments.hasNext()) { + VariableDeclarationFragment fragment = (VariableDeclarationFragment) fragments.next(); + if (fragment.getName().getFullyQualifiedName().equals(JSP11Namespace.ATTR_NAME_SESSION)) { + String typeName = ((SimpleType) node.getType()).getName().getFullyQualifiedName(); + assertFalse("local variable of type \"javax.servlet.http.HttpSession\" and named \"session\" exists", typeName.equals("javax.servlet.http.HttpSession")); + } + } + return super.visit(node); + } + }); + } + } + } + } + finally { + if (model != null) + model.releaseFromRead(); + } + } + + public void testPageDirectiveSessionVariableInSegment() throws JavaModelException { + String jspTestFilePathString = "INCLUDES_TESTS/test189924.jsp"; + ProjectUtil.copyBundleEntryIntoWorkspace("/testfiles/189924/test189924.jsp", jspTestFilePathString); + jspTestFilePathString = "INCLUDES_TESTS/includer.jsp"; + ProjectUtil.copyBundleEntryIntoWorkspace("/testfiles/189924/includer.jsp", jspTestFilePathString); + IPath jspTestFilePath = new Path(jspTestFilePathString); + IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(jspTestFilePath); + + verifyTranslationHasNoSessionVariables(file); + } public void testTranslatePositions() { @@ -318,8 +405,7 @@ * @param sm */ private void setupAdapterFactory(IStructuredModel sm) { - JSPTranslationAdapterFactory factory = new JSPTranslationAdapterFactory(); - sm.getFactoryRegistry().addFactory(factory); + ModelHandlerForJSP.ensureTranslationAdapterFactory(sm); } /**
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_text.bin b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_text.bin index d704363..20eb369 100644 --- a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_text.bin +++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_text.bin
@@ -12,11 +12,11 @@ public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { javax.servlet.jsp.PageContext pageContext = null; -javax.servlet.http.HttpSession session = null; javax.servlet.ServletContext application = null; javax.servlet.ServletConfig config = null; javax.servlet.jsp.JspWriter out = null; Object page = null; +javax.servlet.http.HttpSession session = null; try { String localIncludedString = globalIncludedString;
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_xml_jsp.bin b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_xml_jsp.bin index 4e46230..a0c7faf 100644 --- a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_xml_jsp.bin +++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_xml_jsp.bin
@@ -11,11 +11,11 @@ public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { javax.servlet.jsp.PageContext pageContext = null; -javax.servlet.http.HttpSession session = null; javax.servlet.ServletContext application = null; javax.servlet.ServletConfig config = null; javax.servlet.jsp.JspWriter out = null; Object page = null; +javax.servlet.http.HttpSession session = null; try { String consec1 = "test";
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_xml_jsp_cdata.bin b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_xml_jsp_cdata.bin index e045acc..4657f58 100644 --- a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_xml_jsp_cdata.bin +++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/contentassist/translated_xml_jsp_cdata.bin
@@ -6,11 +6,11 @@ public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { javax.servlet.jsp.PageContext pageContext = null; -javax.servlet.http.HttpSession session = null; javax.servlet.ServletContext application = null; javax.servlet.ServletConfig config = null; javax.servlet.jsp.JspWriter out = null; Object page = null; +javax.servlet.http.HttpSession session = null; try {
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/189924/includer.jsp b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/189924/includer.jsp new file mode 100644 index 0000000..0f4c9d5 --- /dev/null +++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/189924/includer.jsp
@@ -0,0 +1 @@ +<%@include file="test189924.jsp" %> \ No newline at end of file
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/189924/test189924.jsp b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/189924/test189924.jsp new file mode 100644 index 0000000..b9e32d1 --- /dev/null +++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/189924/test189924.jsp
@@ -0,0 +1,2 @@ + +<%@page session = "false" %>