baliuka 02/03/07 14:02:23
Modified: simplestore/src/java/org/apache/commons/simplestore/tools
Enhancer.java
simplestore/src/test/org/apache/commons/simplestore
TestEnhancer.java
Log:
Bug fixes for enhancer
Revision Changes Path
1.11 +11 -24
jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/tools/Enhancer.java
Index: Enhancer.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/tools/Enhancer.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Enhancer.java 6 Mar 2002 14:00:07 -0000 1.10
+++ Enhancer.java 7 Mar 2002 22:02:23 -0000 1.11
@@ -63,7 +63,7 @@
/**
*@author Juozas Baliuka <a href="mailto:[EMAIL PROTECTED]">
* [EMAIL PROTECTED]</a>
- *@version $Id: Enhancer.java,v 1.10 2002/03/06 14:00:07 baliuka Exp $
+ *@version $Id: Enhancer.java,v 1.11 2002/03/07 22:02:23 baliuka Exp $
*/
public class Enhancer implements org.apache.bcel.Constants{
@@ -84,8 +84,8 @@
static final String CONSTRUCTOR_NAME = "<init>";
static final String FIELD_NAME = "h";
static final String SOURCE_FILE = "<generated>";
- static final String ENHAVCED_CLASS_SUFIX = "$$EnhancedBySimplestore$$";
- static final String ENHAVCED_CLASS_PREFIX = "org.apache.";
+ static final String CLASS_SUFIX = "$$EnhancedBySimplestore$$";
+ static final String CLASS_PREFIX = "org.apache.";
private static int addAfterConstructionRef(ConstantPoolGen cp){
return cp.addMethodref( Enhancer.class.getName() ,"handleConstruction",
@@ -112,7 +112,7 @@
private static java.util.Map cache = new java.util.WeakHashMap();
/** Creates a new instance of Enchancer */
- private Enhancer() {
+ protected Enhancer() {
}
public static void setMethodInterceptor(Object enhanced, MethodInterceptor
ih)throws Throwable{
@@ -153,32 +153,17 @@
return
enhance(cls,null,interfaces,ih,Thread.currentThread().getContextClassLoader());
}
- static class Handler implements java.lang.reflect.InvocationHandler{
- MethodInterceptor ih;
- Handler(MethodInterceptor ih){
- this.ih = ih;
- }
-
- public Object invoke(Object obj, java.lang.reflect.Method method, Object[]
args) throws java.lang.Throwable {
- return ih.afterReturn( obj, method, args, null, false, null, null );
- }
-
- }
public synchronized static Object enhance(Class cls,String class_name,Class
interfaces[], MethodInterceptor ih,ClassLoader loader)throws Throwable {
- // Use Standard way if we don't need to enhance any Class
- if( ( Object.class.equals(cls) || cls == null ) && class_name == null ){
- return java.lang.reflect.Proxy.newProxyInstance(loader,interfaces, new
Handler(ih) );
- }
if( cls == null ){
- cls = Object.class;
+ cls = Enhancer.class;
}
if( class_name == null ){
- class_name = cls.getName() + ENHAVCED_CLASS_SUFIX;
+ class_name = cls.getName() + CLASS_SUFIX;
if(class_name.startsWith("java")){
- class_name = ENHAVCED_CLASS_PREFIX + class_name;
+ class_name = CLASS_PREFIX + class_name;
}
}
@@ -212,7 +197,8 @@
}
map.put(cls,result);
}
- return result.getConstructor(new Class[]{ MethodInterceptor.class} ).
+ return result.getConstructor(new Class[]{Class.forName(
+ MethodInterceptor.class.getName(),true,loader)} ).
newInstance(new Object[]{ih});
}
@@ -275,9 +261,10 @@
il.append( new ALOAD(0) );
il.append(factory.createFieldAccess(cg.getClassName(),FIELD_NAME,new
ObjectType(INTERCEPTOR_CLASS),GETFIELD));
il.append( new ALOAD(0) );
- il.append( new ALOAD( argArray ) );
+ il.append( new ALOAD( argArray ) );
il.append( new INVOKESTATIC( addAfterConstructionRef(cp) ));
il.append( new RETURN() );
+
cg.addMethod( getMethod( costructor ) );
}
1.5 +6 -1
jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestEnhancer.java
Index: TestEnhancer.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestEnhancer.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TestEnhancer.java 6 Mar 2002 14:00:07 -0000 1.4
+++ TestEnhancer.java 7 Mar 2002 22:02:23 -0000 1.5
@@ -64,7 +64,7 @@
/**
*@author Juozas Baliuka <a href="mailto:[EMAIL PROTECTED]">
* [EMAIL PROTECTED]</a>
- *@version $Id: TestEnhancer.java,v 1.4 2002/03/06 14:00:07 baliuka Exp $
+ *@version $Id: TestEnhancer.java,v 1.5 2002/03/07 22:02:23 baliuka Exp $
*/
public class TestEnhancer extends TestCase {
@@ -95,6 +95,10 @@
}
public void testEnhance()throws Throwable{
//test enchance vector:
+ Object obj = Enhancer.enhance( null, "TESTEnhancer",new
Class[]{TestPersistent.class},null,
+ Thread.currentThread().getContextClassLoader()
+ );
+
java.util.Vector vector = (java.util.Vector)Enhancer.enhance(
java.util.Vector.class,
null,
@@ -142,6 +146,7 @@
});
//TODO : Add meanigful asserts
+ System.out.println( Enhancer.getMethodInterceptor(vector) );
String value = "VALUE";
vector.add(null);
vector.elements();
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>