[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