[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" %>