[jboss-cvs] JBossAS SVN: r78208 - in projects/aop/trunk/aop: src/main/org/jboss/aop and 8 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Sep 8 16:42:06 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-09-08 16:42:06 -0400 (Mon, 08 Sep 2008)
New Revision: 78208

Added:
   projects/aop/trunk/aop/src/resources/test/synthetic/
   projects/aop/trunk/aop/src/resources/test/synthetic/jboss-aop.xml
   projects/aop/trunk/aop/src/resources/test/synthetic/manual-aop.xml
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/Mixin.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/MixinInterface.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/POJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/Proxied.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SimpleInterceptor.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SomeInterface.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SyntheticTestCase.java
Modified:
   projects/aop/trunk/aop/.classpath
   projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/CallerInfoAdder.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ClassicCallerInfoAdder.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ClassicInstrumentor.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorExecutionTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerInfoAdder.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorConstructionTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorConstructorExecutionTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorFieldAccessTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorMethodExecutionTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/NonOptimizedMethodExecutionTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/OptimizedMethodExecutionTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/TransformerCommon.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ClassProxyFactory.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ProxyFactory.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyFactory.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/NamedDomainTestCase.java
Log:
[JBAOP-635] Add synthetic attribute to methods and fields that have been woven in

Modified: projects/aop/trunk/aop/.classpath
===================================================================
--- projects/aop/trunk/aop/.classpath	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/.classpath	2008-09-08 20:42:06 UTC (rev 78208)
@@ -11,7 +11,7 @@
 	<classpathentry kind="lib" path="docs"/>
 	<classpathentry kind="lib" path="/thirdparty/jboss/profiler/jvmti/lib/jboss-profiler-jvmti.jar"/>
 	<classpathentry kind="lib" path="/thirdparty/jboss/common-logging-spi/lib/jboss-logging-spi.jar" sourcepath="/thirdparty/jboss/common-logging-spi/lib/jboss-logging-spi-sources.jar"/>
-	<classpathentry kind="lib" path="/thirdparty/javassist/lib/javassist.jar"/>
+	<classpathentry kind="lib" path="/thirdparty/javassist/lib/javassist.jar" sourcepath="/thirdparty/javassist/lib/javassist-sources.jar"/>
 	<classpathentry kind="lib" path="/thirdparty/jboss/test/lib/jboss-test.jar" sourcepath="/thirdparty/jboss/test/lib/jboss-test-src.zip"/>
 	<classpathentry kind="lib" path="/thirdparty/jboss/common-core/lib/jboss-common-core.jar" sourcepath="/thirdparty/jboss/common-core/lib/jboss-common-core-sources.jar"/>
 	<classpathentry kind="lib" path="src/resources"/>

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -322,7 +322,7 @@
                   ArrayList<String> list = splitString(invisibleAnnotations, ",");
                   manager.setIncludedInvisibleAnnotations(list);
                }
-
+               
                String instrument = System.getProperty("jboss.aop.instrumentor", null);
                InstrumentorFactory.initialise(instrument);
 

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/CallerInfoAdder.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/CallerInfoAdder.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/CallerInfoAdder.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -85,8 +85,10 @@
          String init) throws NotFoundException, CannotCompileException
    {
       CtField.Initializer initializer = (init != null ) ? CtField.Initializer.byExpr(init) : null;
-      TransformerCommon.addInfoField(instrumentor, typeName, fieldName, infoModifier, addTo, addInfoAsWeakReference(), initializer);
+      TransformerCommon.addInfoField(instrumentor, typeName, fieldName, infoModifier, addTo, addInfoAsWeakReference(), initializer, markInfoAsSynthetic());
    }
 
    protected abstract boolean addInfoAsWeakReference();
+   
+   protected abstract boolean markInfoAsSynthetic();
 }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ClassicCallerInfoAdder.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ClassicCallerInfoAdder.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ClassicCallerInfoAdder.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -67,4 +67,9 @@
    {
       return true;
    }
+   
+   protected boolean markInfoAsSynthetic()
+   {
+      return true;
+   }
 }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ClassicInstrumentor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ClassicInstrumentor.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ClassicInstrumentor.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -124,6 +124,7 @@
          modifier &= ~AccessFlag.ABSTRACT; 
       }
       nmethod.setModifiers(modifier);
+      addSyntheticAttribute(nmethod);
       clazz.addMethod(nmethod);
       
       
@@ -188,6 +189,7 @@
                                          "    return " + ClassicInstrumentor.HELPER_FIELD_NAME + ";" +
                                          "}",
                                          clazz);
+      addSyntheticAttribute(getter);
       clazz.addMethod(getter);
    }
    
@@ -208,6 +210,7 @@
                                  "    } " +
                                  "}",
                                  clazz);
+         addSyntheticAttribute(getter);
          clazz.addMethod(getter);
 
          CtMethod setter = CtNewMethod.make("public void _setInstanceAdvisor(org.jboss.aop.InstanceAdvisor newAdvisor)" +
@@ -217,6 +220,7 @@
                                  "    } " +
                                  "}",
                                  clazz);
+         addSyntheticAttribute(setter);
          clazz.addMethod(setter);
 
 }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -78,7 +78,7 @@
          catch(NotFoundException e)
          {
          }
-         TransformerCommon.addInfoField(instrumentor, CONSTRUCTION_INFO_CLASS_NAME, name, modifiers, addTo, addInfoAsWeakReference(), init);
+         TransformerCommon.addInfoField(instrumentor, CONSTRUCTION_INFO_CLASS_NAME, name, modifiers, addTo, addInfoAsWeakReference(), init, markInfoAsSynthetic());
          
       }
       return name;
@@ -88,6 +88,11 @@
    {
       return true;
    }
+   
+   protected boolean markInfoAsSynthetic()
+   {
+      return true;
+   }
 
    public static String getConstructionInfoFieldName(String classname, int index)
    {

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorExecutionTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorExecutionTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorExecutionTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -112,7 +112,7 @@
          catch(NotFoundException e)
          {
          }
-         TransformerCommon.addInfoField(instrumentor, CONSTRUCTOR_INFO_CLASS_NAME, infoName, modifiers, addTo, addInfoAsWeakReference(), init);
+         TransformerCommon.addInfoField(instrumentor, CONSTRUCTOR_INFO_CLASS_NAME, infoName, modifiers, addTo, addInfoAsWeakReference(), init, markInfoAsSynthetic());
 
       }
       return infoName;
@@ -123,6 +123,11 @@
       return true;
    }
    
+   protected boolean markInfoAsSynthetic()
+   {
+      return true;
+   }
+
    public static String getConstructorInfoFieldName(String classname, int index)
    {
       if (classname.indexOf('.') >= 0)throw new RuntimeException("Simple name should be used: " + classname);
@@ -491,6 +496,7 @@
       CtMethod wmethod = CtNewMethod.make(type, constructorFactory(name), constructor.getParameterTypes(), exceptions, null, clazz);
       wmethod.setModifiers(mod);
       setTemporaryWrapperCode(type, wmethod);
+      Instrumentor.addSyntheticAttribute(wmethod);
       clazz.addMethod(wmethod);
       
       // copy attribute signature

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -386,7 +386,7 @@
    protected String addFieldReadInfoFieldWithAccessors(int modifiers, CtClass addTo, CtField field, CtField.Initializer init) throws NotFoundException, CannotCompileException
    {
       String name = getFieldReadInfoFieldName(field.getName());
-      TransformerCommon.addInfoField(instrumentor, FIELD_INFO_CLASS_NAME, name, modifiers, addTo, addInfoAsWeakReference(), init);
+      TransformerCommon.addInfoField(instrumentor, FIELD_INFO_CLASS_NAME, name, modifiers, addTo, addInfoAsWeakReference(), init, markInfoAsSynthetic());
       return name;
    }
    
@@ -401,7 +401,7 @@
    protected String addFieldWriteInfoField(int modifiers, CtClass addTo, CtField field, CtField.Initializer init) throws NotFoundException, CannotCompileException
    {
       String name = getFieldWriteInfoFieldName(field.getName());
-      TransformerCommon.addInfoField(instrumentor, FIELD_INFO_CLASS_NAME, name, modifiers, addTo, addInfoAsWeakReference(), init);
+      TransformerCommon.addInfoField(instrumentor, FIELD_INFO_CLASS_NAME, name, modifiers, addTo, addInfoAsWeakReference(), init, markInfoAsSynthetic());
       return name;
    }
    
@@ -410,6 +410,11 @@
       return true;
    }
 
+   protected boolean markInfoAsSynthetic()
+   {
+      return true;
+   }
+
    public static String getFieldReadInfoFieldName(String fieldName)
    {
       return "aop$FieldInfo_r_" + fieldName;
@@ -551,6 +556,7 @@
       code += "; return var;}";
       CtMethod rmethod = CtNewMethod.make(ftype, wrapperName, readParam, null, code, clazz);
       rmethod.setModifiers(mod);
+      Instrumentor.addSyntheticAttribute(rmethod);
       clazz.addMethod(rmethod);
       
       return rmethod;
@@ -581,6 +587,7 @@
 
       CtMethod wmethod = CtNewMethod.make(CtClass.voidType, wrapperName, writeParam, null, "{}", clazz);
       wmethod.setModifiers(mod);
+      Instrumentor.addSyntheticAttribute(wmethod);
       clazz.addMethod(wmethod);
       
       SignatureAttribute ai = (SignatureAttribute) field.getFieldInfo2().getAttribute(SignatureAttribute.tag);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerInfoAdder.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerInfoAdder.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorCallerInfoAdder.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -73,4 +73,10 @@
    {
       return false;
    }
+
+   
+   protected boolean markInfoAsSynthetic()
+   {
+      return true;
+   }
 }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorConstructionTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorConstructionTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorConstructionTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -91,10 +91,17 @@
       generateConstructionInfoField(constructor, index);
    }
 
+   @Override
    protected boolean addInfoAsWeakReference()
    {
       return false;
    }
+   
+   @Override
+   protected boolean markInfoAsSynthetic()
+   {
+      return false;
+   }
 
    public static String constructionFactory(String className)
    {
@@ -128,6 +135,7 @@
             constructor.getExceptionTypes(),
             body,
             genadvisor);
+      Instrumentor.addSyntheticAttribute(wrapper);
       genadvisor.addMethod(wrapper);
       return wrapper;
    }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorConstructorExecutionTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorConstructorExecutionTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorConstructorExecutionTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -49,11 +49,18 @@
       super(instrumentor);
    }
 
+   @Override
    protected boolean addInfoAsWeakReference()
    {
       return false;
    }
 
+   @Override
+   protected boolean markInfoAsSynthetic()
+   {
+      return false;
+   }
+
    protected void generateConstructorInfoField(CtClass clazz, CtConstructor constructor, int index) throws CannotCompileException, NotFoundException
    {
       String ciname = addConstructorInfoField(
@@ -123,6 +130,7 @@
       wmethod.setModifiers(mod);
       wmethod.setBody("{return (("  +  GeneratedAdvisorInstrumentor.getAdvisorFQN(clazz) +
             ")" + Instrumentor.HELPER_FIELD_NAME + ")." + getInnerWrapperMethodName(constructor) + "($$);}");
+      Instrumentor.addSyntheticAttribute(wmethod);
       clazz.addMethod(wmethod);
 
       // prepare ForWrapping

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorFieldAccessTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorFieldAccessTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorFieldAccessTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -123,11 +123,18 @@
       return finame;
    }
 
+   @Override
    protected boolean addInfoAsWeakReference()
    {
       return false;
    }
 
+   @Override
+   protected boolean markInfoAsSynthetic()
+   {
+      return false;
+   }
+
    private void addReadJoinPoint(CtField field, String finame, int index) throws CannotCompileException, NotFoundException
    {
       CtClass joinpoint = createReadJoinPointClass(field, finame, index);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -572,15 +572,17 @@
             Instrumentor.HELPER_FIELD_NAME,
             clazz);
       classAdvisor.setModifiers(Modifier.PRIVATE | Modifier.STATIC | Modifier.TRANSIENT);
+      addSyntheticAttribute(classAdvisor);
       clazz.addField(classAdvisor, CtField.Initializer.byExpr("new " + getAdvisorFQN(clazz) + "()"));
-//      clazz.addField(classAdvisor, CtField.Initializer.byExpr("this.getClass().getClassLoader().loadClass(" + getAdvisorFQN(clazz) + ").newInstance()"));
 
       CtMethod getAdvisor = CtNewMethod.getter("_getAdvisor", classAdvisor);
       getAdvisor.setModifiers(Modifier.PUBLIC);
+      addSyntheticAttribute(getAdvisor);
       clazz.addMethod(getAdvisor);
 
       CtMethod getClassAdvisor = CtNewMethod.getter(GET_CLASS_ADVISOR, classAdvisor);
       getClassAdvisor.setModifiers(Modifier.PUBLIC | Modifier.STATIC);
+      addSyntheticAttribute(getClassAdvisor);
       clazz.addMethod(getClassAdvisor);
 
       if (isBaseClass(clazz))
@@ -590,6 +592,7 @@
             CURRENT_ADVISOR,
             clazz);
          currentAdvisor.setModifiers(Modifier.VOLATILE | Modifier.PROTECTED | Modifier.TRANSIENT);
+         addSyntheticAttribute(currentAdvisor);
          clazz.addField(currentAdvisor, CtField.Initializer.byExpr("_getAdvisor()"));
 
          String body =
@@ -608,6 +611,7 @@
                EMPTY_EXCEPTIONS,
                body,
                clazz);
+         addSyntheticAttribute(getCurrentAdvisor);
          clazz.addMethod(getCurrentAdvisor);
 
          CtField instanceAdvisor = new CtField(
@@ -615,6 +619,7 @@
                INSTANCE_ADVISOR,
                clazz);
          instanceAdvisor.setModifiers(Modifier.PROTECTED | Modifier.TRANSIENT);
+         addSyntheticAttribute(instanceAdvisor);
          clazz.addField(instanceAdvisor);
       }
 
@@ -644,6 +649,7 @@
                new CtClass[0],
                body,
                clazz);
+         addSyntheticAttribute(getInstanceAdvisor);
          clazz.addMethod(getInstanceAdvisor);
       }
       catch (Exception e)

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorMethodExecutionTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorMethodExecutionTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorMethodExecutionTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -61,11 +61,18 @@
       return miname;
    }
 
+   @Override
    protected boolean addInfoAsWeakReference()
    {
       return false;
    }
 
+   @Override
+   protected boolean markInfoAsSynthetic()
+   {
+      return false;
+   }
+
    public static String getJoinPointFieldName(MethodTransformation trans)
    {
       return MethodJoinPointGenerator.getGeneratedJoinPointFieldName(trans.getOriginalName(), trans.getHash());
@@ -130,6 +137,7 @@
       moveAnnotationsAndCopySignature(original, wmethod);
 
       original.setName(wrappedName);
+      Instrumentor.addSyntheticAttribute(original);
       wmethod.setName(originalName);
 
       MethodTransformation trans = new MethodTransformation(instrumentor, clazz, original, originalName, wmethod, wrappedName, hash);
@@ -227,6 +235,7 @@
       moveAnnotationsAndCopySignature(original, wmethod);
 
       original.setName(wrappedName);
+      Instrumentor.addSyntheticAttribute(original);
       wmethod.setName(originalName);
 
       MethodTransformation trans = new MethodTransformation(instrumentor, clazz, original, originalName, wmethod, wrappedName, hash);
@@ -287,6 +296,7 @@
       trans.getClazz().addMethod(wmethod);
       moveAnnotationsAndCopySignature(trans.getMethod(), wmethod);
       trans.getMethod().setName(wrappedName);
+      Instrumentor.addSyntheticAttribute(trans.getMethod());
       wmethod.setName(originalName);
 
       trans.setWMethod(wmethod, wrappedName);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -36,14 +36,18 @@
 import javassist.CtClass;
 import javassist.CtConstructor;
 import javassist.CtField;
+import javassist.CtMember;
 import javassist.CtMethod;
 import javassist.CtNewMethod;
 import javassist.Modifier;
 import javassist.NotFoundException;
 import javassist.SerialVersionUID;
 import javassist.bytecode.AnnotationsAttribute;
+import javassist.bytecode.ClassFile;
+import javassist.bytecode.ConstPool;
 import javassist.bytecode.FieldInfo;
 import javassist.bytecode.MethodInfo;
+import javassist.bytecode.SyntheticAttribute;
 
 import org.jboss.aop.Advised;
 import org.jboss.aop.Advisor;
@@ -256,6 +260,16 @@
                                                clazz);
       newMethod.setModifiers(Modifier.PUBLIC);
       clazz.addMethod(newMethod);
+      
+      //The following depends on javassist internals
+      ClassFile cf = clazz.getClassFile();
+      List<MethodInfo> infos = cf.getMethods();
+      MethodInfo info = infos.get(infos.size() - 2);
+      if (info.getName().startsWith("_added_m$"))
+      {
+         addSyntheticAttribute(info);
+      }
+      
       return newMethod;
    }
 
@@ -315,6 +329,7 @@
       int modifiers = Modifier.PRIVATE;
       if (mixin.isTransient()) modifiers = modifiers | Modifier.TRANSIENT;
       field.setModifiers(modifiers);
+      addSyntheticAttribute(field);
       clazz.addField(field, CtField.Initializer.byExpr(initializer));
       HashSet<Long> addedMethods = new HashSet<Long>();
 
@@ -900,6 +915,7 @@
       CtClass type = forName(typeName);
       CtField field = new CtField(type, name, clazz);
       field.setModifiers(Modifier.PRIVATE | Modifier.STATIC);
+      Instrumentor.addSyntheticAttribute(field);
       clazz.addField(field, initializer);
 
       return field;
@@ -915,6 +931,7 @@
       CtClass type = forName(typeName);
       CtField field = new CtField(type, name, clazz);
       field.setModifiers(Modifier.PROTECTED | Modifier.TRANSIENT);
+      Instrumentor.addSyntheticAttribute(field);
       if (initializer != null)
       {
          clazz.addField(field, initializer);
@@ -1054,7 +1071,32 @@
       return shouldReplaceArrayAccess;
    }
 
+   public static void addSyntheticAttribute(CtMethod method)
+   {
+      MethodInfo info = method.getMethodInfo();
+      addSyntheticAttribute(info);
+   }
+   
+   public static void addSyntheticAttribute(MethodInfo info)
+   {
+      ConstPool cp = info.getConstPool();
+      info.addAttribute(new SyntheticAttribute(cp));
+   }
 
+   public static void addSyntheticAttribute(CtConstructor ctor)
+   {
+      MethodInfo info = ctor.getMethodInfo();
+      ConstPool cp = info.getConstPool();
+      info.addAttribute(new SyntheticAttribute(cp));
+   }
+
+   public static void addSyntheticAttribute(CtField field)
+   {
+      FieldInfo info = field.getFieldInfo();
+      ConstPool cp = info.getConstPool();
+      info.addAttribute(new SyntheticAttribute(cp));
+   }
+
    /**
     * Converts all processed classes to make wrapping of the appropriate joinpoints.
     * This method must be called if some dynamic transformation ocurred (i. e. a

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -85,7 +85,7 @@
    protected String addMethodInfoField(int modifiers, CtClass addTo, MethodTransformation trans, CtField.Initializer init) throws NotFoundException, CannotCompileException
    {
       String name = getMethodInfoFieldName(trans.getOriginalName(), trans.getHash());
-      TransformerCommon.addInfoField(instrumentor, METHOD_INFO_CLASS_NAME, name, modifiers, addTo, addInfoAsWeakReference(), init);
+      TransformerCommon.addInfoField(instrumentor, METHOD_INFO_CLASS_NAME, name, modifiers, addTo, addInfoAsWeakReference(), init, markInfoAsSynthetic());
 
       return name;
    }
@@ -95,6 +95,11 @@
       return true;
    }
 
+   protected boolean markInfoAsSynthetic()
+   {
+      return true;
+   }
+
    public static String getMethodNameHash(String methodName, long methodHash)
    {
       String hash;

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/NonOptimizedMethodExecutionTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/NonOptimizedMethodExecutionTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/NonOptimizedMethodExecutionTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -55,6 +55,7 @@
       trans.getClazz().addMethod(wmethod);
       moveAnnotationsAndCopySignature(trans.getMethod(), wmethod);
       trans.getMethod().setName(wrappedName);
+      instrumentor.addSyntheticAttribute(trans.getMethod());
       wmethod.setName(originalName);
       
       trans.setWMethod(wmethod, wrappedName);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/OptimizedMethodExecutionTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/OptimizedMethodExecutionTransformer.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/OptimizedMethodExecutionTransformer.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -58,6 +58,7 @@
       moveAnnotationsAndCopySignature(trans.getMethod(), wmethod);
       String optimizedInvocation = OptimizedMethodInvocations.createOptimizedInvocationClass(trans.getInstrumentor(), trans.getClazz(), trans.getMethod(), wmethod);
       trans.getMethod().setName(wrappedName);
+      Instrumentor.addSyntheticAttribute(trans.getMethod());
       wmethod.setName(originalName);
 
       trans.setWMethod(wmethod, wrappedName);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/TransformerCommon.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/TransformerCommon.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/TransformerCommon.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -162,15 +162,15 @@
    }
 
    protected static void addInfoField(Instrumentor instrumentor, String infoClassName, String infoName,
-         int modifiers, CtClass addTo, boolean weak, CtField.Initializer init) throws NotFoundException, CannotCompileException
+         int modifiers, CtClass addTo, boolean weak, CtField.Initializer init, boolean synthetic) throws NotFoundException, CannotCompileException
    {
       if (weak)
       {
-         addWeakReferenceInfoField(instrumentor, infoClassName, infoName, modifiers, addTo, init);
+         addWeakReferenceInfoField(instrumentor, infoClassName, infoName, modifiers, addTo, init, synthetic);
       }
       else
       {
-         addStrongReferenceInfoField(instrumentor, infoClassName, infoName, modifiers, addTo, init);
+         addStrongReferenceInfoField(instrumentor, infoClassName, infoName, modifiers, addTo, init, synthetic);
       }
    }
 
@@ -185,20 +185,28 @@
    }
 
    private static void addWeakReferenceInfoField(Instrumentor instrumentor, String infoClassName, String infoName,
-         int modifiers, CtClass addTo, CtField.Initializer init) throws NotFoundException, CannotCompileException
+         int modifiers, CtClass addTo, CtField.Initializer init, boolean synthetic) throws NotFoundException, CannotCompileException
    {
       CtClass type = instrumentor.forName(WEAK_REFERENCE);
       CtField field = new CtField(type, infoName, addTo);
       field.setModifiers(modifiers);
+      if (synthetic)
+      {
+         Instrumentor.addSyntheticAttribute(field);
+      }
       addTo.addField(field, init);
    }
 
    private static void addStrongReferenceInfoField(Instrumentor instrumentor, String infoClassName, String infoName,
-         int modifiers, CtClass addTo, CtField.Initializer init) throws NotFoundException, CannotCompileException
+         int modifiers, CtClass addTo, CtField.Initializer init, boolean synthetic) throws NotFoundException, CannotCompileException
    {
       CtClass type = instrumentor.forName(infoClassName);
       CtField field = new CtField(type, infoName, addTo);
       field.setModifiers(modifiers);
+      if (synthetic)
+      {
+         Instrumentor.addSyntheticAttribute(field);
+      }
       addTo.addField(field, init);
    }
 

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ClassProxyFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ClassProxyFactory.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ClassProxyFactory.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -35,6 +35,7 @@
 import org.jboss.aop.ClassAdvisor;
 import org.jboss.aop.ClassInstanceAdvisor;
 import org.jboss.aop.InstanceAdvisor;
+import org.jboss.aop.instrument.Instrumentor;
 import org.jboss.aop.instrument.TransformerCommon;
 import org.jboss.aop.util.JavassistMethodHashing;
 import org.jboss.aop.util.reference.MethodPersistentReference;
@@ -171,6 +172,7 @@
       
       mixinField = new CtField(mixinField.getType(), "mixins", proxy);
       mixinField.setModifiers(Modifier.PRIVATE);
+      Instrumentor.addSyntheticAttribute(mixinField);
       proxy.addField(mixinField);
       instanceAdvisor = new CtField(instanceAdvisor.getType(), "instanceAdvisor", proxy);
       instanceAdvisor.setModifiers(Modifier.PRIVATE);
@@ -180,18 +182,22 @@
                                           "   throws java.io.IOException\n" +
                                           "   {\n" +
                                           "   }", proxy);
+      Instrumentor.addSyntheticAttribute(writeEx);
       CtMethod readEx = CtNewMethod.make("   public void readExternal(java.io.ObjectInput in)\n" +
                                          "   throws java.io.IOException, ClassNotFoundException\n" +
                                          "   {\n" +
                                          "   }", proxy);
+      Instrumentor.addSyntheticAttribute(readEx);
       CtMethod getInstanceAdvisor = CtNewMethod.make("   public org.jboss.aop.InstanceAdvisor _getInstanceAdvisor()\n" +
                                                      "   {\n" +
                                                      "      return instanceAdvisor;\n" +
                                                      "   }", proxy);
+      Instrumentor.addSyntheticAttribute(getInstanceAdvisor);
       CtMethod setInstanceAdvisor = CtNewMethod.make("   public void _setInstanceAdvisor(org.jboss.aop.InstanceAdvisor newAdvisor)\n" +
                                                      "   {\n" +
                                                      "      instanceAdvisor = (org.jboss.aop.ClassInstanceAdvisor) newAdvisor;\n" +
                                                      "   }", proxy);
+      Instrumentor.addSyntheticAttribute(setInstanceAdvisor);
       CtMethod dynamicInvoke = CtNewMethod.make("   public org.jboss.aop.joinpoint.InvocationResponse _dynamicInvoke(org.jboss.aop.joinpoint.Invocation invocation)\n" +
                                                 "   throws Throwable\n" +
                                                 "   {\n" +
@@ -199,18 +205,18 @@
                                                 "      org.jboss.aop.advice.Interceptor[] aspects = instanceAdvisor.getInterceptors();\n" +
                                                 "      return new org.jboss.aop.joinpoint.InvocationResponse(invocation.invokeNext(aspects));\n" +
                                                 "   }", proxy);
-
+      Instrumentor.addSyntheticAttribute(dynamicInvoke);
       CtMethod setMixins = CtNewMethod.make("   public void setMixins(org.jboss.aop.proxy.ProxyMixin[] mixins)\n" +
                                             "   {\n" +
                                             "      this.mixins = mixins;\n" +
                                             "   }", proxy);
-
+      Instrumentor.addSyntheticAttribute(setMixins);
       CtMethod writeReplace = CtNewMethod.make("   public Object writeReplace() throws java.io.ObjectStreamException\n" +
                                                "   {\n" +
                                                "      return new org.jboss.aop.proxy.MarshalledClassProxy(this.getClass().getSuperclass(), mixins, instanceAdvisor);\n" +
                                                "   }", proxy);
+      Instrumentor.addSyntheticAttribute(writeReplace);
 
-
       proxy.addMethod(writeEx);
       proxy.addMethod(readEx);
       proxy.addMethod(getInstanceAdvisor);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ProxyFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ProxyFactory.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/ProxyFactory.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -30,6 +30,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.ClassInstanceAdvisor;
 import org.jboss.aop.InstanceAdvisor;
+import org.jboss.aop.instrument.Instrumentor;
 import org.jboss.aop.instrument.TransformerCommon;
 import org.jboss.aop.util.JavassistMethodHashing;
 import org.jboss.aop.util.reference.MethodPersistentReference;
@@ -155,9 +156,11 @@
       CtClass map = pool.get("java.util.Map");
       CtField methodMap = new CtField(map, "methodMap", proxy);
       methodMap.setModifiers(Modifier.PRIVATE | Modifier.STATIC);
+      Instrumentor.addSyntheticAttribute(methodMap);
       proxy.addField(methodMap);
       CtMethod getMethodMap = CtNewMethod.getter("getMethodMap", methodMap);
       getMethodMap.setModifiers(Modifier.PUBLIC);
+      Instrumentor.addSyntheticAttribute(getMethodMap);
       proxy.addMethod(getMethodMap);
 
       HashSet<String> addedInterfaces = new HashSet<String>();

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyFactory.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyFactory.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -57,6 +57,7 @@
 import org.jboss.aop.ClassContainer;
 import org.jboss.aop.InstanceAdvised;
 import org.jboss.aop.MethodInfo;
+import org.jboss.aop.instrument.Instrumentor;
 import org.jboss.aop.instrument.TransformerCommon;
 import org.jboss.aop.introduction.InterfaceIntroduction;
 import org.jboss.aop.util.JavassistMethodHashing;
@@ -442,6 +443,7 @@
       CtClass fieldType = (type == null) ? templateField.getType() : type;
       CtField field = new CtField(fieldType, name, proxy);
       field.setModifiers(templateField.getModifiers());
+      Instrumentor.addSyntheticAttribute(field);
       proxy.addField(field);
       return field;
    }
@@ -451,6 +453,7 @@
       CtMethod templateMethod = template.getDeclaredMethod(name);
       CtMethod method = CtNewMethod.make(templateMethod.getReturnType(), name, templateMethod.getParameterTypes(), templateMethod.getExceptionTypes(), body, proxy);
       method.setModifiers(templateMethod.getModifiers());
+      Instrumentor.addSyntheticAttribute(method);
       proxy.addMethod(method);
       hardcodedMethods.add(JavassistMethodHashing.methodHash(method));
       return method;
@@ -512,6 +515,7 @@
       superCall.append(");");
       
       defaultCtor = CtNewConstructor.make(EMPTY_CTCLASS_ARRAY, EMPTY_CTCLASS_ARRAY, "{" + superCall.toString() + "}", proxy);
+      Instrumentor.addSyntheticAttribute(defaultCtor);
       proxy.addConstructor(defaultCtor);
    }
 
@@ -815,6 +819,7 @@
                {
                   CtMethod m = CtNewMethod.make(methods[i].getReturnType(), methods[i].getName(), methods[i].getParameterTypes(), methods[i].getExceptionTypes(), body, proxy);
                   m.setModifiers(Modifier.PUBLIC);
+                  Instrumentor.addSyntheticAttribute(m);
                   proxy.addMethod(m);
                }
             }

Added: projects/aop/trunk/aop/src/resources/test/synthetic/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/synthetic/jboss-aop.xml	                        (rev 0)
+++ projects/aop/trunk/aop/src/resources/test/synthetic/jboss-aop.xml	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,31 @@
+<aop>
+   <interceptor class="org.jboss.test.aop.synthetic.SimpleInterceptor"/>
+   <bind pointcut="execution(org.jboss.test.aop.synthetic.POJO->new())">
+      <interceptor-ref name="org.jboss.test.aop.synthetic.SimpleInterceptor"/>
+   </bind>
+   <bind pointcut="execution(* org.jboss.test.aop.synthetic.POJO->someMethod())">
+      <interceptor-ref name="org.jboss.test.aop.synthetic.SimpleInterceptor"/>
+   </bind>
+   <bind pointcut="execution(* org.jboss.test.aop.synthetic.POJO->staticMethod())">
+      <interceptor-ref name="org.jboss.test.aop.synthetic.SimpleInterceptor"/>
+   </bind>
+   <bind pointcut="field(* org.jboss.test.aop.synthetic.POJO->field)">
+      <interceptor-ref name="org.jboss.test.aop.synthetic.SimpleInterceptor"/>
+   </bind>
+   <bind pointcut="field(* org.jboss.test.aop.synthetic.POJO->staticField)">
+      <interceptor-ref name="org.jboss.test.aop.synthetic.SimpleInterceptor"/>
+   </bind>
+   <introduction class="org.jboss.test.aop.synthetic.POJO">
+      <mixin transient="false">
+         <interfaces>
+            org.jboss.test.aop.synthetic.MixinInterface
+         </interfaces>
+         <class>org.jboss.test.aop.synthetic.Mixin</class>
+      </mixin>
+   </introduction>
+   <introduction class="org.jboss.test.aop.synthetic.POJO">
+      <interfaces>
+         org.jboss.test.aop.synthetic.SomeInterface
+      </interfaces>
+   </introduction>
+</aop>

Added: projects/aop/trunk/aop/src/resources/test/synthetic/manual-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/synthetic/manual-aop.xml	                        (rev 0)
+++ projects/aop/trunk/aop/src/resources/test/synthetic/manual-aop.xml	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,5 @@
+<aop>
+   <bind pointcut="execution(* org.jboss.test.aop.synthetic.Proxied->someMethod())">
+      <interceptor-ref name="org.jboss.test.aop.synthetic.SimpleInterceptor"/>
+   </bind>
+</aop>

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/NamedDomainTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/NamedDomainTestCase.java	2008-09-08 20:39:38 UTC (rev 78207)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/NamedDomainTestCase.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -21,6 +21,8 @@
 */ 
 package org.jboss.test.aop.nameddomain;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.net.URL;
 
 import junit.framework.Test;
@@ -85,6 +87,15 @@
       
       AspectManager foundInstanceDomain = manager.findManagerByName(fqn);
       assertSame(instanceDomain, foundInstanceDomain);
+      
+      for (Field field : pojo.getClass().getDeclaredFields())
+      {
+         System.out.println("F " + field.getName() + " - " + field.isSynthetic());
+      }
+      for (Method method : pojo.getClass().getDeclaredMethods())
+      {
+         System.out.println("M " + method.getName() + " - " + method.isSynthetic());
+      }
    }
    
    public void testProxiedNamedDomains() throws Exception

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/Mixin.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/Mixin.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/Mixin.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,34 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.synthetic;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class Mixin implements MixinInterface
+{
+   public void mixinMethod()
+   {
+   }
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/MixinInterface.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/MixinInterface.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/MixinInterface.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.synthetic;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface MixinInterface
+{
+   void mixinMethod();
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/POJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/POJO.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/POJO.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,65 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.synthetic;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class POJO
+{
+   public int field;
+   public int notAdvisedField;
+   public static int staticField;
+   public static int notAdvisedStaticField;
+   
+   public POJO()
+   {
+      
+   }
+   
+   public POJO(int i)
+   {
+      
+   }
+   
+   public void someMethod()
+   {
+      
+   }
+   
+   public static void staticMethod()
+   {
+      
+   }
+   
+   public void notAdvised()
+   {
+      
+   }
+   
+   public static void staticNotAdvised()
+   {
+      
+   }
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/Proxied.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/Proxied.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/Proxied.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,35 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.synthetic;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class Proxied
+{
+   public void someMethod()
+   {
+      
+   }
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SimpleInterceptor.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SimpleInterceptor.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SimpleInterceptor.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,46 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.synthetic;
+
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.Invocation;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class SimpleInterceptor implements Interceptor
+{
+   public static boolean intercepted;
+   public String getName()
+   {
+      return this.getClass().getName();
+   }
+
+   public Object invoke(Invocation invocation) throws Throwable
+   {
+      intercepted = true;
+      return invocation.invokeNext();
+   }
+   
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SomeInterface.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SomeInterface.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SomeInterface.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.synthetic;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface SomeInterface
+{
+   void introducedMethod();
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SyntheticTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SyntheticTestCase.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/synthetic/SyntheticTestCase.java	2008-09-08 20:42:06 UTC (rev 78208)
@@ -0,0 +1,214 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.synthetic;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.HashSet;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+import org.jboss.aop.AspectXmlLoader;
+import org.jboss.aop.proxy.container.AOPProxyFactoryMixin;
+import org.jboss.aop.proxy.container.AOPProxyFactoryParameters;
+import org.jboss.aop.proxy.container.GeneratedAOPProxyFactory;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.aop.AOPTestDelegate;
+import org.jboss.test.aop.AOPTestWithSetup;
+
+/**
+ * Tests that fields and methods introduced by JBoss AOP have the synthetic attribute set
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class SyntheticTestCase extends AOPTestWithSetup
+{
+   public static void main(String[] args)
+   {
+      TestRunner.run(suite());
+   }
+
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("SyntheticTestCase");
+      suite.addTestSuite(SyntheticTestCase.class);
+      return suite;
+   }
+
+   public SyntheticTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+   {
+      //Don't use security for this test
+      AOPTestDelegate delegate = new AOPTestDelegate(clazz);
+      return delegate;
+   }
+   
+   public void testWovenSynthetic()
+   {
+      HashSet<String> fieldsAndMethods = new HashSet<String>();
+      fieldsAndMethods.add("field");
+      fieldsAndMethods.add("notAdvisedField");
+      fieldsAndMethods.add("staticField");
+      fieldsAndMethods.add("notAdvisedStaticField");
+      fieldsAndMethods.add("someMethod");
+      fieldsAndMethods.add("staticMethod");
+      fieldsAndMethods.add("notAdvised");
+      fieldsAndMethods.add("staticNotAdvised");
+      fieldsAndMethods.add("introducedMethod");
+      fieldsAndMethods.add("mixinMethod");
+      
+      
+      //Check that we are woven first, and that the correct interceptions occur
+      SimpleInterceptor.intercepted = false;
+      POJO temp = new POJO(1);
+      assertFalse(SimpleInterceptor.intercepted);
+      temp.notAdvised();
+      assertFalse(SimpleInterceptor.intercepted);
+      temp.notAdvisedField = 1;
+      assertFalse(SimpleInterceptor.intercepted);
+      assertEquals(1, temp.notAdvisedField);
+      assertFalse(SimpleInterceptor.intercepted);
+      POJO.staticNotAdvised();
+      assertFalse(SimpleInterceptor.intercepted);
+      POJO.notAdvisedStaticField = 1;
+      assertFalse(SimpleInterceptor.intercepted);
+      assertEquals(1, POJO.notAdvisedStaticField);
+      assertFalse(SimpleInterceptor.intercepted);
+         
+      SimpleInterceptor.intercepted = false;
+      POJO pojo = new POJO();
+      assertTrue(SimpleInterceptor.intercepted);
+      
+      SimpleInterceptor.intercepted = false;
+      pojo.someMethod();
+      assertTrue(SimpleInterceptor.intercepted);
+      
+      SimpleInterceptor.intercepted = false;
+      POJO.staticMethod();
+      assertTrue(SimpleInterceptor.intercepted);
+      
+      SimpleInterceptor.intercepted = false;
+      pojo.field = 1;
+      assertTrue(SimpleInterceptor.intercepted);
+      
+      SimpleInterceptor.intercepted = false;
+      assertEquals(1, pojo.field);
+      assertTrue(SimpleInterceptor.intercepted);
+      
+      SimpleInterceptor.intercepted = false;
+      POJO.staticField = 2;
+      assertTrue(SimpleInterceptor.intercepted);
+      
+      SimpleInterceptor.intercepted = false;
+      assertEquals(2, POJO.staticField);
+      assertTrue(SimpleInterceptor.intercepted);
+      
+//      @SuppressWarnings("unused")
+//      MixinInterface mi = (MixinInterface)pojo;
+//      @SuppressWarnings("unused")
+//      SomeInterface si = (SomeInterface)pojo;
+
+      //Now check that we have the synthetic attributes
+      for (Constructor<?> ctor : pojo.getClass().getDeclaredConstructors())
+      {
+         assertFalse(ctor.toString() + " should not be synthetic", ctor.isSynthetic());
+      }
+      for (Field field : pojo.getClass().getDeclaredFields())
+      {
+         if (fieldsAndMethods.contains(field.getName()))
+         {
+            assertFalse(field.toString() + " should not be synthetic", field.isSynthetic());
+         }
+         else
+         {
+            assertTrue(field.toString() + " should be synthetic", field.isSynthetic());
+         }
+      }
+      for (Method method : pojo.getClass().getDeclaredMethods())
+      {
+         if (fieldsAndMethods.contains(method.getName()))
+         {
+            assertFalse(method.toString() + " should not be synthetic", method.isSynthetic());
+         }
+         else
+         {
+            assertTrue(method.toString() + " should be synthetic", method.isSynthetic());
+         }
+      }
+   }
+   
+   public void testProxiedSynthetic() throws Exception
+   {
+      HashSet<String> fieldsAndMethods = new HashSet<String>();
+      fieldsAndMethods.add("someMethod");
+      fieldsAndMethods.add("introducedMethod");
+      fieldsAndMethods.add("mixinMethod");
+
+      Proxied tgt = new Proxied();//Load the class before we deploy the xml that will cause weaving
+      
+      URL url = getURLRelativeToProjectRoot("/src/resources/test/synthetic/manual-aop.xml");
+      AspectXmlLoader.deployXML(url);
+      
+      AOPProxyFactoryParameters params = new AOPProxyFactoryParameters();
+      params.setTarget(tgt);
+      params.setInterfaces(new Class[] {SomeInterface.class});
+      params.setMixins(new AOPProxyFactoryMixin[] {new AOPProxyFactoryMixin(Mixin.class, new Class<?>[] {MixinInterface.class})});
+      GeneratedAOPProxyFactory factory = new GeneratedAOPProxyFactory();
+      Proxied proxied = (Proxied)factory.createAdvisedProxy(params);
+      
+      SimpleInterceptor.intercepted = false;
+      proxied.someMethod();
+      assertTrue(SimpleInterceptor.intercepted);
+      
+      @SuppressWarnings("unused")
+      MixinInterface mi = (MixinInterface)proxied;
+      @SuppressWarnings("unused")
+      SomeInterface si = (SomeInterface)proxied;
+
+      for (Field field : proxied.getClass().getDeclaredFields())
+      {
+         assertTrue(field.toString() + " should be synthetic", field.isSynthetic());
+      }
+      for (Method method : proxied.getClass().getDeclaredMethods())
+      {
+         if (fieldsAndMethods.contains(method.getName()))
+         {
+            assertFalse(method.toString() + " should not be synthetic", method.isSynthetic());
+         }
+         else
+         {
+            assertTrue(method.toString() + " should be synthetic", method.isSynthetic());
+         }
+      }
+      
+   }
+
+}




More information about the jboss-cvs-commits mailing list