You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pi...@locus.apache.org on 2000/11/01 21:25:55 UTC
cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler TagBeginGenerator.java TagEndGenerator.java TagGeneratorBase.java TagLibraryInfoImpl.java
pierred 00/11/01 12:25:52
Modified: jasper/src/share/org/apache/jasper/compiler
TagBeginGenerator.java TagEndGenerator.java
TagGeneratorBase.java TagLibraryInfoImpl.java
Log:
Part 2 for the support of the following new JSP 1.2 feature:
"Added elements to the TLD to avoid having to write TagExtraInfo
classes in the most common cases"
TagLibraryInfoImpl.java
- proper handling of <scope> element
TagGeneratorBase.java
TagBeginGenerator.java
TagEndGenerator.java
- Now supports TagVariableInfo as well as VariableInfo
Revision Changes Path
1.6 +9 -5 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagBeginGenerator.java
Index: TagBeginGenerator.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagBeginGenerator.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TagBeginGenerator.java 2000/10/17 22:59:01 1.5
+++ TagBeginGenerator.java 2000/11/01 20:25:07 1.6
@@ -64,6 +64,7 @@
import javax.servlet.jsp.tagext.TagInfo;
import javax.servlet.jsp.tagext.TagAttributeInfo;
import javax.servlet.jsp.tagext.VariableInfo;
+import javax.servlet.jsp.tagext.TagVariableInfo;
import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.BodyTag;
@@ -318,9 +319,10 @@
generateSetters(writer, parent);
VariableInfo[] vi = ti.getVariableInfo(tagData);
+ TagVariableInfo[] tvi = ti.getTagVariableInfos();
// Just declare AT_BEGIN here...
- declareVariables(writer, vi, true, false, VariableInfo.AT_BEGIN);
+ declareVariables(writer, vi, tvi, tagData, true, false, VariableInfo.AT_BEGIN);
writer.println("try {");
writer.pushIndent();
@@ -330,10 +332,11 @@
writer.println("int "+evalVar+" = "
+thVarName+".doStartTag();");
- boolean implementsBodyTag = BodyTag.class.isAssignableFrom(tc.getTagHandlerClass());
+ boolean implementsBodyTag =
+ BodyTag.class.isAssignableFrom(tc.getTagHandlerClass());
// Need to update AT_BEGIN variables here
- declareVariables(writer, vi, false, true, VariableInfo.AT_BEGIN);
+ declareVariables(writer, vi, tvi, tagData, false, true, VariableInfo.AT_BEGIN);
// FIXME: I'm not too sure if this is the right approach. I don't like
// throwing English language strings into the generated servlet.
@@ -376,9 +379,9 @@
writer.println("do {");
writer.pushIndent();
// Need to declare and update NESTED variables here
- declareVariables(writer, vi, true, true, VariableInfo.NESTED);
+ declareVariables(writer, vi, tvi, tagData, true, true, VariableInfo.NESTED);
// Need to update AT_BEGIN variables here
- declareVariables(writer, vi, false, true, VariableInfo.AT_BEGIN);
+ declareVariables(writer, vi, tvi, tagData, false, true, VariableInfo.AT_BEGIN);
}
public void generate(ServletWriter writer, Class phase)
@@ -387,3 +390,4 @@
generateServiceMethodStatements(writer);
}
}
+
1.5 +7 -4 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagEndGenerator.java
Index: TagEndGenerator.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagEndGenerator.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TagEndGenerator.java 2000/11/01 00:53:59 1.4
+++ TagEndGenerator.java 2000/11/01 20:25:08 1.5
@@ -61,6 +61,7 @@
import javax.servlet.jsp.tagext.TagLibraryInfo;
import javax.servlet.jsp.tagext.TagInfo;
import javax.servlet.jsp.tagext.VariableInfo;
+import javax.servlet.jsp.tagext.TagVariableInfo;
import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.IterationTag;
@@ -105,8 +106,10 @@
String thVarName = tvd.tagHandlerInstanceName;
String evalVarName = tvd.tagEvalVarName;
- VariableInfo[] vi = ti.getVariableInfo(new TagData(
- JspUtil.attrsToHashtable(attrs)));
+ TagData tagData =
+ new TagData(JspUtil.attrsToHashtable(attrs));
+ VariableInfo[] vi = ti.getVariableInfo(tagData);
+ TagVariableInfo[] tvi = ti.getTagVariableInfos();
Class tagHandlerClass =
libraries.getTagCache(prefix, shortTagName).getTagHandlerClass();
@@ -124,7 +127,7 @@
else
writer.println("} while (false);");
- declareVariables(writer, vi, false, true, VariableInfo.AT_BEGIN);
+ declareVariables(writer, vi, tvi, tagData, false, true, VariableInfo.AT_BEGIN);
if (implementsBodyTag) {
writer.popIndent(); // try
@@ -185,6 +188,6 @@
writer.println("}");
// Need to declare and update AT_END variables here.
- declareVariables(writer, vi, true, true, VariableInfo.AT_END);
+ declareVariables(writer, vi, tvi, tagData, true, true, VariableInfo.AT_END);
}
}
1.2 +46 -13 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagGeneratorBase.java
Index: TagGeneratorBase.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagGeneratorBase.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TagGeneratorBase.java 2000/08/12 00:52:08 1.1
+++ TagGeneratorBase.java 2000/11/01 20:25:08 1.2
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagGeneratorBase.java,v 1.1 2000/08/12 00:52:08 pierred Exp $
- * $Revision: 1.1 $
- * $Date: 2000/08/12 00:52:08 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagGeneratorBase.java,v 1.2 2000/11/01 20:25:08 pierred Exp $
+ * $Revision: 1.2 $
+ * $Date: 2000/11/01 20:25:08 $
*
* ====================================================================
*
@@ -64,7 +64,9 @@
import java.util.Stack;
import java.util.Hashtable;
+import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.VariableInfo;
+import javax.servlet.jsp.tagext.TagVariableInfo;
/**
* Common stuff for use with TagBegin and TagEndGenerators.
@@ -134,18 +136,49 @@
}
}
- protected void declareVariables(ServletWriter writer, VariableInfo[] vi,
- boolean declare, boolean update, int scope)
+ protected void declareVariables(ServletWriter writer,
+ VariableInfo[] vi,
+ TagVariableInfo[] tvi,
+ TagData tagData,
+ boolean declare, boolean update, int scope)
{
- if (vi != null)
- for(int i = 0; i < vi.length; i++)
+ if (vi != null) {
+ for(int i = 0; i < vi.length; i++) {
if (vi[i].getScope() == scope) {
- if (vi[i].getDeclare() == true && declare == true)
- writer.println(vi[i].getClassName()+" "+vi[i].getVarName()+" = null;");
- if (update == true)
- writer.println(vi[i].getVarName()+" = ("+
- vi[i].getClassName()+") pageContext.findAttribute("
- +writer.quoteString(vi[i].getVarName())+");");
+ if (vi[i].getDeclare() && declare) {
+ writer.println(vi[i].getClassName() +
+ " " + vi[i].getVarName() +
+ " = null;");
+ }
+ if (update) {
+ writer.println(vi[i].getVarName() + " = (" +
+ vi[i].getClassName() +
+ ") pageContext.findAttribute(" +
+ writer.quoteString(vi[i].getVarName())+");");
+ }
}
+ }
+ } else if (tvi != null) {
+ for(int i = 0; i < tvi.length; i++) {
+ String name;
+ if (tvi[i].getNameGiven() != null) {
+ name = tvi[i].getNameGiven();
+ } else {
+ name = tagData.getAttributeString(tvi[i].getNameFromAttribute());
+ }
+ if (tvi[i].getScope() == scope) {
+ if (tvi[i].getDeclare() && declare) {
+ writer.println(tvi[i].getClassName() +
+ " " + name + " = null;");
+ }
+ if (update) {
+ writer.println(name + " = (" +
+ tvi[i].getClassName() +
+ ") pageContext.findAttribute(" +
+ writer.quoteString(name) + ");");
+ }
+ }
+ }
+ }
}
}
1.11 +14 -4 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java
Index: TagLibraryInfoImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- TagLibraryInfoImpl.java 2000/10/31 23:51:16 1.10
+++ TagLibraryInfoImpl.java 2000/11/01 20:25:09 1.11
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v 1.10 2000/10/31 23:51:16 pierred Exp $
- * $Revision: 1.10 $
- * $Date: 2000/10/31 23:51:16 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v 1.11 2000/11/01 20:25:09 pierred Exp $
+ * $Revision: 1.11 $
+ * $Date: 2000/11/01 20:25:09 $
*
* The Apache Software License, Version 1.1
*
@@ -373,6 +373,8 @@
largeIcon = t.getData();
} else if (tname.equals("variable")) {
if (teiclass != null) {
+ // teiclass comes first in the tag element
+ // only need to make the check here
throw new JasperException(
Constants.getString("tld.error.variableNotAllowed"));
}
@@ -394,6 +396,7 @@
= new TagVariableInfo[variableVector.size()];
variableVector.copyInto(tagVariableInfos);
+
TagExtraInfo tei = null;
if (teiclass != null && !teiclass.equals(""))
@@ -515,7 +518,14 @@
} else if (tname.equals("scope")) {
Text t = (Text) e.getFirstChild();
if (t != null) {
- scope = Integer.valueOf(t.getData()).intValue();
+ String s = t.getData();
+ if ("NESTED".equals(s)) {
+ scope = VariableInfo.NESTED;
+ } else if ("AT_BEGIN".equals(s)) {
+ scope = VariableInfo.AT_BEGIN;
+ } else if ("AT_END".equals(s)) {
+ scope = VariableInfo.AT_END;
+ }
}
} else
Constants.message("jsp.warning.unknown.element.in.variable",