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: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>