diff options
Diffstat (limited to 'tests/java5/reflection/ReflectOnAtAspectJDeclareParents.java')
-rw-r--r-- | tests/java5/reflection/ReflectOnAtAspectJDeclareParents.java | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/tests/java5/reflection/ReflectOnAtAspectJDeclareParents.java b/tests/java5/reflection/ReflectOnAtAspectJDeclareParents.java new file mode 100644 index 000000000..efd482820 --- /dev/null +++ b/tests/java5/reflection/ReflectOnAtAspectJDeclareParents.java @@ -0,0 +1,132 @@ +import org.aspectj.lang.reflect.*; +import java.util.*; +import java.lang.reflect.*; + +public class ReflectOnAtAspectJDeclareParents { + + public static void main(String[] args) { + new ReflectOnAtAspectJDeclareParents().runTests(); + } + + public void runTests() { + AjType<AtAspectJDeclareParents> ajType = AjTypeSystem.getAjType(AtAspectJDeclareParents.class); + + testDeclareParents(ajType); + testDeclaredInterTypeMethods(ajType); + testInterTypeMethods(ajType); + testDeclaredInterTypeFields(ajType); + testInterTypeFields(ajType); + } + + + private void testDeclareParents(AjType<AtAspectJDeclareParents> ajType) { + DeclareParents[] dps = ajType.getDeclareParents(); + assertEquals(1,dps.length,"number of declare parents"); + System.out.println(dps[0]); + } + + + private void testDeclaredInterTypeMethods(AjType<AtAspectJDeclareParents> ajType) { + InterTypeMethodDeclaration[] itdms = ajType.getDeclaredITDMethods(); + assertEquals(2,itdms.length,"number of declared ITD methods"); + Set s = new TreeSet(new Comparator<InterTypeMethodDeclaration>() { + public int compare(InterTypeMethodDeclaration m1, InterTypeMethodDeclaration m2) { + if (m1 == m2) return 0; + int vis = (m1.getModifiers() - m2.getModifiers()); + if (vis != 0) return vis; + int name = (m1.getName().compareTo(m2.getName())); + if (name != 0) return name; + try { + return ( + m1.getTargetType().getJavaClass().getName().compareTo( + m2.getTargetType().getJavaClass().getName()) + ); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } + }); + for (InterTypeMethodDeclaration itdm : itdms) { s.add(itdm); } + for (Object o : s) { System.out.println(o); } + try { + InterTypeMethodDeclaration shouldFind = ajType.getDeclaredITDMethod("getX",AjTypeSystem.getAjType(I.class)); + System.out.println(shouldFind); + } catch (NoSuchMethodException ex) { + throw new RuntimeException("getITDMethod failed"); + } + try { + ajType.getDeclaredITDMethod("getP",AjTypeSystem.getAjType(I.class)); + throw new RuntimeException("failed to fail in getting ITDMethod"); + } catch (NoSuchMethodException ex) { + // good! + } + + } + + private void testInterTypeMethods(AjType<AtAspectJDeclareParents> ajType) { + InterTypeMethodDeclaration[] itdms = ajType.getITDMethods(); + assertEquals(2,itdms.length,"number of ITD methods"); + Set s = new TreeSet(new Comparator<InterTypeMethodDeclaration>() { + public int compare(InterTypeMethodDeclaration m1, InterTypeMethodDeclaration m2) { + if (m1 == m2) return 0; + int vis = (m1.getModifiers() - m2.getModifiers()); + if (vis != 0) return vis; + int name = (m1.getName().compareTo(m2.getName())); + if (name != 0) return name; + try { + return ( + m1.getTargetType().getJavaClass().getName().compareTo( + m2.getTargetType().getJavaClass().getName()) + ); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } + }); + for (InterTypeMethodDeclaration itdm : itdms) { s.add(itdm); } + for (Object o : s) { System.out.println(o); } + try { + InterTypeMethodDeclaration shouldFind = ajType.getITDMethod("getX",AjTypeSystem.getAjType(I.class)); + System.out.println(shouldFind); + } catch (NoSuchMethodException ex) { + throw new RuntimeException("getITDMethod failed"); + } + try { + ajType.getITDMethod("getX",AjTypeSystem.getAjType(C.class)); + throw new RuntimeException("failed to fail in getting ITDMethod"); + } catch (NoSuchMethodException ex) { + // good! + } + } + + private void testDeclaredInterTypeFields(AjType<AtAspectJDeclareParents> ajType) { + InterTypeFieldDeclaration[] itdfs = ajType.getDeclaredITDFields(); + assertEquals(1,itdfs.length,"number of declared ITD fields"); + System.out.println(itdfs[0]); + try { + InterTypeFieldDeclaration shouldFind = ajType.getDeclaredITDField("x",AjTypeSystem.getAjType(I.class)); + System.out.println(shouldFind); + } catch (NoSuchFieldException ex) { + throw new RuntimeException("getITDField failed"); + } + try { + ajType.getDeclaredITDField("p",AjTypeSystem.getAjType(C.class)); + throw new RuntimeException("failed to fail in getting ITDField"); + } catch (NoSuchFieldException ex) { + // good! + } + + } + + private void testInterTypeFields(AjType<AtAspectJDeclareParents> ajType) { + InterTypeFieldDeclaration[] itdfs = ajType.getITDFields(); + assertEquals(0,itdfs.length,"number of declared ITD fields"); + } + + private void assertEquals(int x, int y, String msg) { + if (x != y) { + throw new RuntimeException(msg + " expecting '" + x + "' but was '" + y + "'"); + } + } + +}
\ No newline at end of file |