[jboss-cvs] javassist/src/main/javassist/util/proxy ...

Shigeru Chiba chiba at is.titech.ac.jp
Thu Sep 18 13:32:08 EDT 2008


  User: chiba   
  Date: 08/09/18 13:32:08

  Modified:    src/main/javassist/util/proxy   RuntimeSupport.java
                        ProxyFactory.java
  Log:
  for fixing JASSIST-66
  
  Revision  Changes    Path
  1.7       +20 -0     javassist/src/main/javassist/util/proxy/RuntimeSupport.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: RuntimeSupport.java
  ===================================================================
  RCS file: /cvsroot/jboss/javassist/src/main/javassist/util/proxy/RuntimeSupport.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -b -r1.6 -r1.7
  --- RuntimeSupport.java	11 Mar 2008 11:00:28 -0000	1.6
  +++ RuntimeSupport.java	18 Sep 2008 17:32:08 -0000	1.7
  @@ -39,6 +39,26 @@
       };
   
       /**
  +     * Finds two methods specified by the parameters and stores them
  +     * into the given array.
  +     *
  +     * @throws RuntimeException     if the methods are not found.
  +     * @see javassist.util.proxy.ProxyFactory
  +     */
  +    public static void find2Methods(Object self, String superMethod,
  +                                    String thisMethod, int index,
  +                                    String desc, java.lang.reflect.Method[] methods)
  +    {
  +        synchronized (methods) {
  +            if (methods[index] == null) {
  +                methods[index + 1] = thisMethod == null ? null
  +                                     : findMethod(self, thisMethod, desc);
  +                methods[index] = findSuperMethod(self, superMethod, desc);
  +            }
  +        }
  +    }
  +
  +    /**
        * Finds a method with the given name and descriptor.
        * It searches only the class of self.
        *
  
  
  
  1.30      +28 -5     javassist/src/main/javassist/util/proxy/ProxyFactory.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ProxyFactory.java
  ===================================================================
  RCS file: /cvsroot/jboss/javassist/src/main/javassist/util/proxy/ProxyFactory.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -b -r1.29 -r1.30
  --- ProxyFactory.java	17 Jul 2008 04:17:08 -0000	1.29
  +++ ProxyFactory.java	18 Sep 2008 17:32:08 -0000	1.30
  @@ -827,7 +827,7 @@
           /*
            * if (methods[index * 2] == null) {
            *   methods[index * 2]
  -         *     = RuntimeSupport.findMethod(this, <overridden name>, <desc>);
  +         *     = RuntimeSupport.findSuperMethod(this, <overridden name>, <desc>);
            *   methods[index * 2 + 1]
            *     = RuntimeSupport.findMethod(this, <delegator name>, <desc>);
            *     or = null // the original method is abstract.
  @@ -840,7 +840,10 @@
           int arrayVar = args + 1;
           code.addGetstatic(thisClassName, HOLDER, HOLDER_TYPE);
           code.addAstore(arrayVar);
  -        code.addAload(arrayVar);
  +
  +        callFind2Methods(code, meth.getName(), delegatorName, origIndex, desc, arrayVar);
  +
  +        /* code.addAload(arrayVar);
           code.addIconst(origIndex);
           code.addOpcode(Opcode.AALOAD);
           code.addOpcode(Opcode.IFNONNULL);
  @@ -851,7 +854,8 @@
           callFindMethod(code, "findMethod", arrayVar, delIndex, delegatorName, desc);
   
           int pc2 = code.currentPc();
  -        code.write16bit(pc, pc2 - pc + 1);
  +        code.write16bit(pc, pc2 - pc + 1);*/
  +
           code.addAload(0);
           code.addGetfield(thisClassName, HANDLER, HANDLER_TYPE);
           code.addAload(0);
  @@ -874,10 +878,10 @@
   
           CodeAttribute ca = code.toCodeAttribute();
           forwarder.setCodeAttribute(ca);
  -        StackMapTable.Writer writer = new StackMapTable.Writer(32);
  +        /*StackMapTable.Writer writer = new StackMapTable.Writer(32);
           writer.appendFrame(pc2, new int[] { StackMapTable.OBJECT },
                              new int[] { cp.addClassInfo(HOLDER_TYPE) });
  -        ca.setAttribute(writer.toStackMapTable(cp));
  +        ca.setAttribute(writer.toStackMapTable(cp));*/
           return forwarder;
       }
   
  @@ -1010,6 +1014,25 @@
           code.addOpcode(Opcode.AASTORE);
       }
   
  +    private static void callFind2Methods(Bytecode code, String superMethod, String thisMethod,
  +                                         int index, String desc, int arrayVar) {
  +        String findClass = RuntimeSupport.class.getName();
  +        String findDesc
  +            = "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/reflect/Method;)V";
  +
  +        code.addAload(0);
  +        code.addLdc(superMethod);
  +        if (thisMethod == null)
  +            code.addOpcode(Opcode.ACONST_NULL);
  +        else
  +            code.addLdc(thisMethod);
  +
  +        code.addIconst(index);
  +        code.addLdc(desc);
  +        code.addAload(arrayVar);
  +        code.addInvokestatic(findClass, "find2Methods", findDesc);
  +    }
  +
       private static void addUnwrapper(Bytecode code, Class type) {
           if (type.isPrimitive()) {
               if (type == Void.TYPE)
  
  
  



More information about the jboss-cvs-commits mailing list