kinman 2003/09/19 11:30:10 Modified: jasper2/src/share/org/apache/jasper/compiler Generator.java JspUtil.java Log: - When a tag handler class is an inner class, it is specified in the TLD in binary form (Outer$Inner). It needs to be converted to canonical form (Outer.Inner) when generating Java files. Revision Changes Path 1.210 +21 -15 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.209 retrieving revision 1.210 diff -u -r1.209 -r1.210 --- Generator.java 18 Sep 2003 23:12:39 -0000 1.209 +++ Generator.java 19 Sep 2003 18:30:09 -0000 1.210 @@ -1048,7 +1048,7 @@ if (beanInfo.checkVariable(name)) { // Bean is defined using useBean, introspect at compile time Class bean = beanInfo.getBeanType(name); - String beanName = bean.getName(); + String beanName = JspUtil.getCanonicalName(bean); java.lang.reflect.Method meth = JspRuntimeLibrary.getReadMethod(bean, property); String methodName = meth.getName(); @@ -2121,21 +2121,23 @@ declareScriptingVars(n, VariableInfo.AT_BEGIN); saveScriptingVars(n, VariableInfo.AT_BEGIN); - out.printin(tagHandlerClass.getName()); + String tagHandlerClassName = + JspUtil.getCanonicalName(tagHandlerClass); + out.printin(tagHandlerClassName); out.print(" "); out.print(tagHandlerVar); out.print(" = "); if (isPoolingEnabled) { out.print("("); - out.print(tagHandlerClass.getName()); + out.print(tagHandlerClassName); out.print(") "); out.print(n.getTagHandlerPoolName()); out.print(".get("); - out.print(tagHandlerClass.getName()); + out.print(tagHandlerClassName); out.println(".class);"); } else { out.print("new "); - out.print(tagHandlerClass.getName()); + out.print(tagHandlerClassName); out.println("();"); } @@ -2333,12 +2335,14 @@ declareScriptingVars(n, VariableInfo.AT_BEGIN); saveScriptingVars(n, VariableInfo.AT_BEGIN); - out.printin(tagHandlerClass.getName()); + String tagHandlerClassName = + JspUtil.getCanonicalName(tagHandlerClass); + out.printin(tagHandlerClassName); out.print(" "); out.print(tagHandlerVar); out.print(" = "); out.print("new "); - out.print(tagHandlerClass.getName()); + out.print(tagHandlerClassName); out.println("();"); generateSetters(n, tagHandlerVar, handlerInfo, true); @@ -2853,16 +2857,17 @@ } if (propEditorClass != null) { + String className = JspUtil.getCanonicalName(c); return "(" - + c.getName() + + className + ")org.apache.jasper.runtime.JspRuntimeLibrary.getValueFromBeanInfoPropertyEditor(" - + c.getName() + + className + ".class, \"" + attrName + "\", " + quoted + ", " - + propEditorClass.getName() + + JspUtil.getCanonicalName(propEditorClass) + ".class)"; } else if (c == String.class) { return quoted; @@ -2901,10 +2906,11 @@ } else if (c == Object.class) { return "new String(" + quoted + ")"; } else { + String className = JspUtil.getCanonicalName(c); return "(" - + c.getName() + + className + ")org.apache.jasper.runtime.JspRuntimeLibrary.getValueFromPropertyEditorManager(" - + c.getName() + + className + ".class, \"" + attrName + "\", " 1.45 +28 -3 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspUtil.java Index: JspUtil.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspUtil.java,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- JspUtil.java 14 Aug 2003 05:02:53 -0000 1.44 +++ JspUtil.java 19 Sep 2003 18:30:10 -0000 1.45 @@ -1102,5 +1102,30 @@ } return resultType.toString(); } + + /** + * Compute the canonical name from a Class instance. Note that a + * simple replacment of '$' with '.' of a binary name would not work, + * as '$' is a legal Java Identifier character. + * @param c A instance of java.lang.Class + * @return The canonical name of c. + */ + public static String getCanonicalName(Class c) { + + String binaryName = c.getName(); + c = c.getDeclaringClass(); + + if (c == null) { + return binaryName; + } + + StringBuffer buf = new StringBuffer(binaryName); + do { + buf.setCharAt(c.getName().length(), '.'); + c = c.getDeclaringClass(); + } while ( c != null); + + return buf.toString(); + } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]