[jboss-cvs] JBossAS SVN: r61147 - in projects/aop/trunk/aop: src/main/org/jboss/aop and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 6 14:12:07 EST 2007
Author: kabir.khan at jboss.com
Date: 2007-03-06 14:12:07 -0500 (Tue, 06 Mar 2007)
New Revision: 61147
Added:
projects/aop/trunk/aop/src/resources/test/inforesolve/
projects/aop/trunk/aop/src/resources/test/inforesolve/jboss-aop.xml
projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/
projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/InfoResolveAnnotationTestCase.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/POJO.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/ResolveAnnotationAspect.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/TestAnnotation.java
Modified:
projects/aop/trunk/aop/build-tests-jdk50.xml
projects/aop/trunk/aop/src/main/org/jboss/aop/ConByMethodInfo.java
projects/aop/trunk/aop/src/main/org/jboss/aop/ConstructionInfo.java
projects/aop/trunk/aop/src/main/org/jboss/aop/ConstructorInfo.java
projects/aop/trunk/aop/src/main/org/jboss/aop/FieldInfo.java
projects/aop/trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java
projects/aop/trunk/aop/src/main/org/jboss/aop/MethodByConInfo.java
projects/aop/trunk/aop/src/main/org/jboss/aop/MethodByMethodInfo.java
projects/aop/trunk/aop/src/main/org/jboss/aop/MethodInfo.java
Log:
[JBAOP-314] Resolve annotations from JoinPointInfo so that we can have annotation overrides etc. with before/after/throwing advice
Modified: projects/aop/trunk/aop/build-tests-jdk50.xml
===================================================================
--- projects/aop/trunk/aop/build-tests-jdk50.xml 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/build-tests-jdk50.xml 2007-03-06 19:12:07 UTC (rev 61147)
@@ -365,6 +365,10 @@
<param name="test" value="nameddomain"/>
<param name="caller" value="javaagent-genadvisor-tests"/>
</antcall>
+ <antcall target="_run-javaagent-test" inheritRefs="true">
+ <param name="test" value="inforesolve"/>
+ <param name="caller" value="javaagent-genadvisor-tests"/>
+ </antcall>
<!-- Add tests in _base-tests unless they should only be run in this weaving mode -->
<antcall target="_base-jdk50-tests" inheritRefs="true">
@@ -537,6 +541,10 @@
<!-- Tests only applicable for this weaving mode -->
<antcall target="_run-precompiled-test" inheritRefs="true">
+ <param name="test" value="inforesolve"/>
+ <param name="caller" value="precompiled-genadvisor-tests"/>
+ </antcall>
+ <antcall target="_run-precompiled-test" inheritRefs="true">
<param name="test" value="beforeafter"/>
<param name="caller" value="precompiled-genadvisor-tests"/>
</antcall>
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/ConByMethodInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/ConByMethodInfo.java 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/ConByMethodInfo.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -26,6 +26,7 @@
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.ConstructorCalledByMethodJoinpoint;
+import org.jboss.aop.joinpoint.IConByMethodInfo;
import org.jboss.aop.joinpoint.Joinpoint;
import org.jboss.aop.util.MethodHashing;
@@ -34,7 +35,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision$
*/
-public class ConByMethodInfo extends CallerConstructorInfo
+public class ConByMethodInfo extends CallerConstructorInfo
{
private final long callingMethodHash;
private final Method callingMethod;
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/ConstructionInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/ConstructionInfo.java 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/ConstructionInfo.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -24,6 +24,7 @@
import java.lang.reflect.Constructor;
import org.jboss.aop.joinpoint.ConstructorJoinpoint;
+import org.jboss.aop.joinpoint.IConstructionInfo;
import org.jboss.aop.joinpoint.Joinpoint;
import org.jboss.aop.util.MethodHashing;
@@ -33,7 +34,7 @@
* @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
* @version $Revision$
*/
-public class ConstructionInfo extends JoinPointInfo
+public class ConstructionInfo extends JoinPointInfo
{
private Constructor constructor;
private int index;
@@ -106,4 +107,18 @@
{
return index;
}
+
+ public Object resolveAnnotation(Class annotation)
+ {
+ Object val = super.resolveAnnotation(annotation);
+ if (val != null) return val;
+
+ if (getAdvisor() != null)
+ {
+ val = getAdvisor().resolveAnnotation(constructor, annotation);
+ if (val != null) return val;
+ }
+
+ return null;
+ }
}
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/ConstructorInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/ConstructorInfo.java 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/ConstructorInfo.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -25,6 +25,7 @@
import java.lang.reflect.Method;
import org.jboss.aop.joinpoint.ConstructorJoinpoint;
+import org.jboss.aop.joinpoint.IConstructorInfo;
import org.jboss.aop.joinpoint.Joinpoint;
import org.jboss.aop.util.MethodHashing;
@@ -34,7 +35,7 @@
* @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
* @version $Revision$
*/
-public class ConstructorInfo extends JoinPointInfo
+public class ConstructorInfo extends JoinPointInfo
{
private Method wrapper;
private Constructor constructor;
@@ -116,4 +117,20 @@
{
return index;
}
+
+
+ public Object resolveAnnotation(Class annotation)
+ {
+ Object val = super.resolveAnnotation(annotation);
+ if (val != null) return val;
+
+ if (getAdvisor() != null)
+ {
+ val = getAdvisor().resolveAnnotation(constructor, annotation);
+ if (val != null) return val;
+ }
+
+ return null;
+ }
+
}
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/FieldInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/FieldInfo.java 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/FieldInfo.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -21,15 +21,14 @@
*/
package org.jboss.aop;
-import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
-import org.jboss.aop.SecurityActions.SetAccessibleAction;
import org.jboss.aop.joinpoint.FieldJoinpoint;
+import org.jboss.aop.joinpoint.IFieldInfo;
import org.jboss.aop.joinpoint.Joinpoint;
import org.jboss.aop.util.MethodHashing;
@@ -39,7 +38,7 @@
* @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
* @version $Revision$
*/
-public class FieldInfo extends JoinPointInfo
+public class FieldInfo extends JoinPointInfo
{
private int index;
private Field advisedField;
@@ -149,6 +148,20 @@
return read;
}
+ public Object resolveAnnotation(Class annotation)
+ {
+ Object val = super.resolveAnnotation(annotation);
+ if (val != null) return val;
+
+ if (getAdvisor() != null)
+ {
+ val = getAdvisor().resolveAnnotation(advisedField, annotation);
+ if (val != null) return val;
+ }
+
+ return null;
+ }
+
private Field doGet(Class clazz, String name)throws NoSuchFieldException
{
Field field = null;
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -23,7 +23,6 @@
import java.lang.ref.WeakReference;
import java.util.ArrayList;
-import java.util.Arrays;
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Joinpoint;
@@ -136,4 +135,24 @@
protected abstract Joinpoint internalGetJoinpoint();
public abstract JoinPointInfo copy();
+
+ public Object resolveClassMetaData(Object key, Object attr)
+ {
+ return getAdvisor().getClassMetaData().getMetaData(key, attr);
+ }
+
+ public Object resolveClassAnnotation(Class annotation)
+ {
+ Advisor advisor = getAdvisor();
+ if (advisor != null)
+ {
+ return advisor.resolveAnnotation(annotation);
+ }
+ return null;
+ }
+
+ public Object resolveAnnotation(Class annotation)
+ {
+ return null;
+ }
}
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/MethodByConInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/MethodByConInfo.java 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/MethodByConInfo.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -25,6 +25,7 @@
import java.lang.reflect.Method;
import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.IMethodByConInfo;
import org.jboss.aop.joinpoint.Joinpoint;
import org.jboss.aop.joinpoint.MethodCalledByConstructorJoinpoint;
@@ -33,7 +34,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision$
*/
-public class MethodByConInfo extends CallerMethodInfo
+public class MethodByConInfo extends CallerMethodInfo
{
private final int callingIndex;
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/MethodByMethodInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/MethodByMethodInfo.java 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/MethodByMethodInfo.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -24,6 +24,7 @@
import java.lang.reflect.Method;
import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.IMethodByMethodInfo;
import org.jboss.aop.joinpoint.Joinpoint;
import org.jboss.aop.joinpoint.MethodCalledByMethodJoinpoint;
import org.jboss.aop.util.MethodHashing;
@@ -33,7 +34,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision$
*/
-public class MethodByMethodInfo extends CallerMethodInfo
+public class MethodByMethodInfo extends CallerMethodInfo
{
private final long callingMethodHash;
private final Method callingMethod;
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/MethodInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/MethodInfo.java 2007-03-06 17:53:44 UTC (rev 61146)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/MethodInfo.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -21,17 +21,17 @@
*/
package org.jboss.aop;
+import org.jboss.aop.joinpoint.IMethodInfo;
import org.jboss.aop.joinpoint.Joinpoint;
import org.jboss.aop.joinpoint.MethodJoinpoint;
import org.jboss.aop.util.MethodHashing;
import java.lang.reflect.Method;
-import java.util.Arrays;
/**
* This class is here to eliminate a hash lookup in invokeMethod
*/
-public class MethodInfo extends JoinPointInfo
+public class MethodInfo extends JoinPointInfo
{
private Method advisedMethod;
private Method unadvisedMethod;
@@ -116,4 +116,20 @@
sb.append("]");
return sb.toString();
}
+
+ public Object resolveAnnotation(Class annotation)
+ {
+ Object val = super.resolveAnnotation(annotation);
+ if (val != null)
+ {
+ return val;
+ }
+
+ Advisor advisor = getAdvisor();
+ if (advisor != null)
+ {
+ return getAdvisor().resolveAnnotation(hash, advisedMethod, annotation);
+ }
+ return null;
+ }
}
Added: projects/aop/trunk/aop/src/resources/test/inforesolve/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/inforesolve/jboss-aop.xml (rev 0)
+++ projects/aop/trunk/aop/src/resources/test/inforesolve/jboss-aop.xml 2007-03-06 19:12:07 UTC (rev 61147)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<aop>
+ <aspect class="org.jboss.test.aop.inforesolve.ResolveAnnotationAspect" scope="PER_VM"/>
+
+ <bind pointcut="all(org.jboss.test.aop.inforesolve.POJO)">
+ <before name="before" aspect="org.jboss.test.aop.inforesolve.ResolveAnnotationAspect"/>
+ </bind>
+</aop>
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/InfoResolveAnnotationTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/InfoResolveAnnotationTestCase.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/InfoResolveAnnotationTestCase.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -0,0 +1,82 @@
+/*
+* 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.inforesolve;
+
+import org.jboss.aop.ConstructorInfo;
+import org.jboss.aop.FieldInfo;
+import org.jboss.aop.MethodInfo;
+import org.jboss.test.aop.AOPTestWithSetup;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class InfoResolveAnnotationTestCase extends AOPTestWithSetup
+{
+ public InfoResolveAnnotationTestCase(String arg0)
+ {
+ super(arg0);
+ }
+
+ public void testResolveAnnotationsFromInfo() throws Exception
+ {
+ ResolveAnnotationAspect.clear();
+ POJO pojo = new POJO();
+ assertNotNull(pojo);
+ check(ConstructorInfo.class, "class", "ctor");
+
+ ResolveAnnotationAspect.clear();
+ pojo.field = 100;
+ check(FieldInfo.class, "class", "field");
+
+ ResolveAnnotationAspect.clear();
+ assertEquals(100, pojo.field);
+ check(FieldInfo.class, "class", "field");
+
+ ResolveAnnotationAspect.clear();
+ POJO.staticField = 101;
+ check(FieldInfo.class, "class", "staticField");
+
+ ResolveAnnotationAspect.clear();
+ assertEquals(101, POJO.staticField);
+ check(FieldInfo.class, "class", "staticField");
+
+ ResolveAnnotationAspect.clear();
+ assertEquals(201, pojo.method(200));
+ check(MethodInfo.class, "class", "method");
+
+ ResolveAnnotationAspect.clear();
+ assertEquals(302, pojo.staticMethod(300));
+ check(MethodInfo.class, "class", "staticMethod");
+ }
+
+ private void check(Class expectedInfoClazz, String expectedClassString, String expectedJoinPointString)
+ {
+ assertNotNull(ResolveAnnotationAspect.info);
+ assertEquals(expectedInfoClazz, ResolveAnnotationAspect.info.getClass());
+ assertNotNull(ResolveAnnotationAspect.classAnnotation);
+ assertEquals(expectedClassString, ResolveAnnotationAspect.classAnnotation.value());
+ assertNotNull(ResolveAnnotationAspect.joinpointAnnotation);
+ assertEquals(expectedJoinPointString, ResolveAnnotationAspect.joinpointAnnotation.value());
+ }
+}
\ No newline at end of file
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/POJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/POJO.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/POJO.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -0,0 +1,53 @@
+/*
+* 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.inforesolve;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at TestAnnotation("class")
+public class POJO
+{
+ @TestAnnotation("field")
+ int field;
+ @TestAnnotation("staticField")
+ static int staticField;
+
+ @TestAnnotation("ctor")
+ public POJO()
+ {
+ }
+
+ @TestAnnotation("method")
+ public int method(int i)
+ {
+ return ++i;
+ }
+
+ @TestAnnotation("staticMethod")
+ public int staticMethod(int i)
+ {
+ return i+2;
+ }
+}
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/ResolveAnnotationAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/ResolveAnnotationAspect.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/ResolveAnnotationAspect.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -0,0 +1,57 @@
+/*
+* 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.inforesolve;
+
+import org.jboss.aop.JoinPointInfo;
+import org.jboss.aop.advice.annotation.JoinPoint;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ResolveAnnotationAspect
+{
+ public static JoinPointInfo info;
+ public static TestAnnotation classAnnotation;
+ public static TestAnnotation joinpointAnnotation;
+
+ public static void clear()
+ {
+ info = null;
+ classAnnotation = null;
+ joinpointAnnotation = null;
+ }
+
+ public void before(@JoinPoint JoinPointInfo info)
+ {
+ this.info = info;
+ if (info == null)
+ {
+ //This is an error but will be picked up by the test
+ return;
+ }
+
+ classAnnotation = (TestAnnotation)info.resolveClassAnnotation(TestAnnotation.class);
+ joinpointAnnotation = (TestAnnotation)info.resolveAnnotation(TestAnnotation.class);
+ }
+}
Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/TestAnnotation.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/TestAnnotation.java (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/inforesolve/TestAnnotation.java 2007-03-06 19:12:07 UTC (rev 61147)
@@ -0,0 +1,36 @@
+/*
+* 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.inforesolve;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface TestAnnotation
+{
+ String value();
+}
More information about the jboss-cvs-commits
mailing list