hlship      2003/08/05 15:06:58

  Modified:    hivemind/src/java/org/apache/commons/hivemind/service/impl
                        AbstractServiceInterceptorFactory.java
                        ClassFactoryImpl.java
                        LoggingInterceptorFactory.java
  Log:
  Fix some problems with code generation concerning object arrays.
  
  Revision  Changes    Path
  1.5       +18 -2     
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/AbstractServiceInterceptorFactory.java
  
  Index: AbstractServiceInterceptorFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/AbstractServiceInterceptorFactory.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractServiceInterceptorFactory.java    5 Aug 2003 14:07:17 -0000       1.4
  +++ AbstractServiceInterceptorFactory.java    5 Aug 2003 22:06:58 -0000       1.5
  @@ -90,7 +90,7 @@
           Class serviceInterfaceClass = stack.getServiceInterface();
           Module module = stack.getServiceExtensionPoint().getModule();
   
  -        String name ="$Interceptor_" + Long.toHexString(System.currentTimeMillis()) 
+ "$" + _uid++;
  +        String name = "$Interceptor_" + 
Long.toHexString(System.currentTimeMillis()) + "$" + _uid++;
   
           ClassFab classFab = _factory.newClass(name, getInterceptorSuperclass(), 
module);
   
  @@ -218,5 +218,21 @@
                   m.getParameterTypes(),
                   m.getExceptionTypes());
           }
  +    }
  +
  +    /**
  +     * Convienience for converting a class into a proper name, compatibile
  +     * with [EMAIL PROTECTED] org.apache.commons.hivemind.service.MethodFab}.  It 
is important
  +     * that array types be converted properly, for array types,
  +     * getName() returns the incorrect value, but this method
  +     * returns the correct value.
  +     *
  +     */
  +    protected String getClassName(Class inputClass)
  +    {
  +        if (inputClass.isArray())
  +            return getClassName(inputClass.getComponentType()) + "[]";
  +
  +        return inputClass.getName();
       }
   }
  
  
  
  1.3       +21 -4     
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/ClassFactoryImpl.java
  
  Index: ClassFactoryImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/ClassFactoryImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ClassFactoryImpl.java     5 Aug 2003 14:07:18 -0000       1.2
  +++ ClassFactoryImpl.java     5 Aug 2003 22:06:58 -0000       1.3
  @@ -112,14 +112,16 @@
   
       public CtClass getClass(ClassPool pool, Class inputClass)
       {
  +        String name = getName(inputClass);
  +        
           try
           {
  -            return pool.get(inputClass.getName());
  +            return pool.get(name);
           }
           catch (NotFoundException ex)
           {
               throw new ApplicationRuntimeException(
  -                HiveMind.format("ClassFactoryImpl.unable-to-lookup", inputClass, 
ex.getMessage()),
  +                HiveMind.format("ClassFactoryImpl.unable-to-lookup", name, 
ex.getMessage()),
                   ex);
           }
       }
  @@ -147,7 +149,7 @@
       {
           String id = module.getModuleId();
   
  -        ClassPool result = (ClassPool) _poolMap.get(id);
  +        ClassPool result = (ClassPool)_poolMap.get(id);
   
           if (result == null)
           {
  @@ -163,5 +165,20 @@
           }
   
           return result;
  +    }
  +
  +    /**
  +     * Javassist needs the class name to be as it appears in code, even for arrays.
  +     * Invoking getName() on Class instance representing an array returns the 
itnernal
  +     * format (i.e, "[...;" or something).  This returns it as it would appear in
  +     * Java code.
  +     *
  +     */
  +    private String getName(Class inputClass)
  +    {
  +        if (inputClass.isArray())
  +            return getName(inputClass.getComponentType()) + "[]";
  +
  +        return inputClass.getName();
       }
   }
  
  
  
  1.4       +9 -9      
jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/LoggingInterceptorFactory.java
  
  Index: LoggingInterceptorFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/LoggingInterceptorFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LoggingInterceptorFactory.java    9 Jul 2003 11:27:24 -0000       1.3
  +++ LoggingInterceptorFactory.java    5 Aug 2003 22:06:58 -0000       1.4
  @@ -107,20 +107,20 @@
           StringBuffer buffer = new StringBuffer(100);
   
           buffer.append("{\n\n");
  -        
  +
           buffer.append("boolean debug = _isDebugEnabled();\n\n");
   
           buffer.append("if (debug) _logEntry(" + QUOTE);
           buffer.append(methodName);
           buffer.append(QUOTE + ", $args);\n\n");
   
  -             if (!isVoid)
  -             {
  -                     // May need work, for arrays and such.
  -                     buffer.append(returnType);
  -                     buffer.append(" result = ");
  -             }
  -             
  +        if (!isVoid)
  +        {
  +            // May need work, for arrays and such.
  +            buffer.append(getClassName(returnType));
  +            buffer.append(" result = ");
  +        }
  +
           buffer.append("_inner.");
           buffer.append(methodName);
           buffer.append("($$);\n\n");
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to