You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2002/07/17 22:06:59 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler Generator.java JspDocumentParser.java Node.java Parser.java
luehe 2002/07/17 13:06:59
Modified: jasper2/src/share/org/apache/jasper/compiler Generator.java
JspDocumentParser.java Node.java Parser.java
Log:
Do not declare tag handler pools for SimpleTag handlers.
Revision Changes Path
1.40 +43 -72 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
Index: Generator.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- Generator.java 17 Jul 2002 00:35:30 -0000 1.39
+++ Generator.java 17 Jul 2002 20:06:58 -0000 1.40
@@ -196,15 +196,16 @@
* already contained in it.
*/
public void visit(Node.CustomTag n) throws JasperException {
-
- String name = createTagHandlerPoolName(n.getPrefix(),
- n.getShortName(),
- n.getAttributes());
- n.setTagHandlerPoolName(name);
- if (!names.contains(name)) {
- names.add(name);
- }
+ if (!n.implementsSimpleTag()) {
+ String name = createTagHandlerPoolName(n.getPrefix(),
+ n.getShortName(),
+ n.getAttributes());
+ n.setTagHandlerPoolName(name);
+ if (!names.contains(name)) {
+ names.add(name);
+ }
+ }
visitBody(n);
}
@@ -1453,11 +1454,9 @@
TagHandlerInfo handlerInfo = (TagHandlerInfo)
handlerInfosByShortName.get(n.getShortName());
if (handlerInfo == null) {
- handlerInfo = new TagHandlerInfo(
- n,
- n.getTagInfo().getTagClassName(),
- ctxt.getClassLoader(),
- err);
+ handlerInfo = new TagHandlerInfo(n,
+ n.getTagHandlerClass(),
+ err);
handlerInfosByShortName.put(n.getShortName(), handlerInfo);
}
@@ -1467,22 +1466,14 @@
String tagEvalVar = "_jspx_eval_" + baseVar;
String tagHandlerVar = "_jspx_th_" + baseVar;
- Class tagHandlerClass = handlerInfo.getTagHandlerClass();
- boolean implementsIterationTag =
- IterationTag.class.isAssignableFrom(tagHandlerClass);
- boolean implementsBodyTag =
- BodyTag.class.isAssignableFrom(tagHandlerClass);
- boolean implementsTryCatchFinally =
- TryCatchFinally.class.isAssignableFrom(tagHandlerClass);
- boolean implementsSimpleTag =
- SimpleTag.class.isAssignableFrom(tagHandlerClass);
+ Class tagHandlerClass = n.getTagHandlerClass();
// If the tag contains no scripting element, generate its codes
// to a method.
ServletWriter outSave = null;
MethodsBuffer methodsBufferSave = null;
Node.ChildInfo ci = n.getChildInfo();
- if (implementsSimpleTag
+ if (n.implementsSimpleTag()
|| (ci.isScriptless() && !ci.hasScriptingVars())) {
// The tag handler and its body code can reside in a separate
// method if it is scriptless and does not have any scripting
@@ -1532,17 +1523,14 @@
generateLocalVariables( out, n );
}
- if (implementsSimpleTag) {
- generateCustomDoTag(n, handlerInfo, tagHandlerVar,
- implementsTryCatchFinally);
+ if (n.implementsSimpleTag()) {
+ generateCustomDoTag(n, handlerInfo, tagHandlerVar);
} else {
/*
* Classic tag handler: Generate code for start element, body,
* and end element
*/
- generateCustomStart(n, handlerInfo, tagHandlerVar, tagEvalVar,
- implementsIterationTag, implementsBodyTag,
- implementsTryCatchFinally);
+ generateCustomStart(n, handlerInfo, tagHandlerVar, tagEvalVar);
// visit body
String tmpParent = parent;
@@ -1553,12 +1541,10 @@
parent = tmpParent;
isSimpleTagHandler = tmpIsSimpleTagHandler;
- generateCustomEnd(n, tagHandlerVar, tagEvalVar,
- implementsIterationTag, implementsBodyTag,
- implementsTryCatchFinally);
+ generateCustomEnd(n, tagHandlerVar, tagEvalVar);
}
- if (implementsSimpleTag
+ if (n.implementsSimpleTag()
|| (ci.isScriptless() && !ci.hasScriptingVars())) {
// Generate end of method
if (methodNesting > 0) {
@@ -1700,10 +1686,7 @@
private void generateCustomStart(Node.CustomTag n,
TagHandlerInfo handlerInfo,
String tagHandlerVar,
- String tagEvalVar,
- boolean implementsIterationTag,
- boolean implementsBodyTag,
- boolean implementsTryCatchFinally)
+ String tagEvalVar)
throws JasperException {
Class tagHandlerClass = handlerInfo.getTagHandlerClass();
@@ -1745,7 +1728,7 @@
generateSetters(n, tagHandlerVar, handlerInfo, false);
- if (implementsTryCatchFinally) {
+ if (n.implementsTryCatchFinally()) {
out.printil("try {");
out.pushIndent();
}
@@ -1756,7 +1739,7 @@
out.println(".doStartTag();");
// Synchronize AT_BEGIN and NESTED scripting variables
- if (!implementsBodyTag) {
+ if (!n.implementsBodyTag()) {
syncScriptingVariables(n, VariableInfo.AT_BEGIN);
syncScriptingVariables(n, VariableInfo.NESTED);
}
@@ -1767,7 +1750,7 @@
out.println(" != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {");
out.pushIndent();
- if (implementsBodyTag) {
+ if (n.implementsBodyTag()) {
out.printin("if (");
out.print(tagEvalVar);
out.println(" != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) {");
@@ -1787,7 +1770,7 @@
out.printil("}");
}
- if (implementsIterationTag) {
+ if (n.implementsIterationTag()) {
out.printil("do {");
out.pushIndent();
}
@@ -1796,21 +1779,18 @@
private void generateCustomEnd(Node.CustomTag n,
String tagHandlerVar,
- String tagEvalVar,
- boolean implementsIterationTag,
- boolean implementsBodyTag,
- boolean implementsTryCatchFinally) {
+ String tagEvalVar) {
VariableInfo[] varInfos = n.getVariableInfos();
TagVariableInfo[] tagVarInfos = n.getTagVariableInfos();
- if ((n.getBody() != null) && implementsIterationTag) {
+ if ((n.getBody() != null) && n.implementsIterationTag()) {
out.printin("int evalDoAfterBody = ");
out.print(tagHandlerVar);
out.println(".doAfterBody();");
// Synchronize AT_BEGIN and NESTED scripting variables
- if (implementsBodyTag) {
+ if (n.implementsBodyTag()) {
syncScriptingVariables(n, VariableInfo.AT_BEGIN);
syncScriptingVariables(n, VariableInfo.NESTED);
}
@@ -1825,7 +1805,7 @@
}
if (n.getBody() != null) {
- if (implementsBodyTag) {
+ if (n.implementsBodyTag()) {
out.printin("if (");
out.print(tagEvalVar);
out.println(" != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE)");
@@ -1850,7 +1830,7 @@
syncScriptingVariables(n, VariableInfo.AT_END);
// TryCatchFinally
- if (implementsTryCatchFinally) {
+ if (n.implementsTryCatchFinally()) {
out.popIndent(); // try
out.printil("} catch (Throwable _jspx_exception) {");
out.pushIndent();
@@ -1870,7 +1850,7 @@
out.println(");");
}
- if (implementsTryCatchFinally) {
+ if (n.implementsTryCatchFinally()) {
out.popIndent();
out.println("}");
}
@@ -1884,8 +1864,7 @@
private void generateCustomDoTag(Node.CustomTag n,
TagHandlerInfo handlerInfo,
- String tagHandlerVar,
- boolean implementsTryCatchFinally)
+ String tagHandlerVar)
throws JasperException {
Class tagHandlerClass = handlerInfo.getTagHandlerClass();
@@ -1914,7 +1893,7 @@
generateSetters(n, tagHandlerVar, handlerInfo, true);
- if (implementsTryCatchFinally) {
+ if (n.implementsTryCatchFinally()) {
out.printil("try {");
out.pushIndent();
}
@@ -1957,7 +1936,7 @@
syncScriptingVariables(n, VariableInfo.AT_END);
// TryCatchFinally
- if (implementsTryCatchFinally) {
+ if (n.implementsTryCatchFinally()) {
out.popIndent(); // try
out.printil("} catch (Throwable _jspx_exception) {");
out.pushIndent();
@@ -2596,23 +2575,15 @@
/**
* Constructor.
*
- * @param n The custom tag whose tag handler is to be loaded and
+ * @param n The custom tag whose tag handler class is to be
* introspected
- * @param tagClassName Name of tag handler class to load
- * @param loader Class loader to use
+ * @param tagHandlerClass Tag handler class
* @param err Error dispatcher
*/
- TagHandlerInfo(Node n, String tagClassName, ClassLoader loader,
- ErrorDispatcher err) throws JasperException {
-
- // Load the tag handler class with the given name
- tagHandlerClass = null;
- try {
- tagHandlerClass = loader.loadClass(tagClassName);
- } catch (Exception e) {
- err.jspError(n, "jsp.error.unable.loadclass", tagClassName, e);
- }
-
+ TagHandlerInfo(Node n, Class tagHandlerClass, ErrorDispatcher err)
+ throws JasperException
+ {
+ this.tagHandlerClass = tagHandlerClass;
this.methodMaps = new Hashtable();
this.propertyEditorMaps = new Hashtable();
@@ -2636,7 +2607,7 @@
}
} catch (IntrospectionException ie) {
err.jspError(n, "jsp.error.introspect.taghandler",
- tagClassName, ie);
+ tagHandlerClass.getName(), ie);
}
}
1.6 +12 -4 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java
Index: JspDocumentParser.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- JspDocumentParser.java 16 Jul 2002 19:30:51 -0000 1.5
+++ JspDocumentParser.java 17 Jul 2002 20:06:58 -0000 1.6
@@ -427,9 +427,17 @@
throw new SAXException(err.getString("jsp.error.bad_tag",
shortName, prefix));
}
+ Class tagHandlerClass = null;
+ try {
+ tagHandlerClass
+ = ctxt.getClassLoader().loadClass(tagInfo.getTagClassName());
+ } catch (Exception e) {
+ throw new SAXException(err.getString("jsp.error.unable.loadclass",
+ shortName, prefix));
+ }
return new Node.CustomTag(attrs, start, qName, prefix, shortName,
- tagInfo, parent);
+ tagInfo, tagHandlerClass, parent);
}
/*
1.17 +39 -4 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java
Index: Node.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- Node.java 16 Jul 2002 19:30:51 -0000 1.16
+++ Node.java 17 Jul 2002 20:06:59 -0000 1.17
@@ -789,22 +789,37 @@
private TagData tagData;
private String tagHandlerPoolName;
private TagInfo tagInfo;
+ private Class tagHandlerClass;
private VariableInfo[] varInfos;
private int customNestingLevel;
private boolean hasUnnestedIdAttribute;
private ChildInfo childInfo;
+ private boolean implementsIterationTag;
+ private boolean implementsBodyTag;
+ private boolean implementsTryCatchFinally;
+ private boolean implementsSimpleTag;
public CustomTag(Attributes attrs, Mark start, String name,
String prefix, String shortName,
- TagInfo tagInfo, Node parent) {
+ TagInfo tagInfo, Class tagHandlerClass, Node parent) {
super(attrs, start, parent);
this.name = name;
this.prefix = prefix;
this.shortName = shortName;
this.tagInfo = tagInfo;
+ this.tagHandlerClass = tagHandlerClass;
this.customNestingLevel = computeCustomNestingLevel();
this.hasUnnestedIdAttribute = determineHasUnnestedIdAttribute();
this.childInfo = new ChildInfo();
+
+ this.implementsIterationTag =
+ IterationTag.class.isAssignableFrom(tagHandlerClass);
+ this.implementsBodyTag =
+ BodyTag.class.isAssignableFrom(tagHandlerClass);
+ this.implementsTryCatchFinally =
+ TryCatchFinally.class.isAssignableFrom(tagHandlerClass);
+ this.implementsSimpleTag =
+ SimpleTag.class.isAssignableFrom(tagHandlerClass);
}
public void accept(Visitor v) throws JasperException {
@@ -863,6 +878,26 @@
public TagInfo getTagInfo() {
return tagInfo;
+ }
+
+ public Class getTagHandlerClass() {
+ return tagHandlerClass;
+ }
+
+ public boolean implementsIterationTag() {
+ return implementsIterationTag;
+ }
+
+ public boolean implementsBodyTag() {
+ return implementsBodyTag;
+ }
+
+ public boolean implementsTryCatchFinally() {
+ return implementsTryCatchFinally;
+ }
+
+ public boolean implementsSimpleTag() {
+ return implementsSimpleTag;
}
public TagVariableInfo[] getTagVariableInfos() {
1.9 +16 -6 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java
Index: Parser.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Parser.java 16 Jul 2002 19:30:51 -0000 1.8
+++ Parser.java 17 Jul 2002 20:06:59 -0000 1.9
@@ -866,6 +866,7 @@
* CustomActionScriptlessContent ::= ScriptlessOptionalBody
*/
private boolean parseCustomTag(Node parent) throws JasperException {
+
if (reader.peekChar() != '<') {
return false;
}
@@ -892,7 +893,15 @@
if (tagInfo == null) {
err.jspError(start, "jsp.error.bad_tag", shortTagName, prefix);
}
-
+ Class tagHandlerClass = null;
+ try {
+ tagHandlerClass
+ = ctxt.getClassLoader().loadClass(tagInfo.getTagClassName());
+ } catch (Exception e) {
+ err.jspError(start, "jsp.error.unable.loadclass", shortTagName,
+ prefix);
+ }
+
// Parse 'CustomActionBody' production:
// At this point we are committed - if anything fails, we produce
// a translation error.
@@ -904,7 +913,7 @@
// Parse 'CustomActionEnd' production:
if (reader.matches("/>")) {
new Node.CustomTag(attrs, start, tagName, prefix, shortTagName,
- tagInfo, parent);
+ tagInfo, tagHandlerClass, parent);
return true;
}
@@ -919,7 +928,8 @@
shortTagName).getBodyContent();
Node tagNode = new Node.CustomTag(attrs, start, tagName, prefix,
- shortTagName, tagInfo, parent);
+ shortTagName, tagInfo,
+ tagHandlerClass, parent);
parseOptionalBody( tagNode, tagName, bc );
return true;
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>