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>