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]

Reply via email to