diff options
author | acolyer <acolyer> | 2005-12-13 19:42:17 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-12-13 19:42:17 +0000 |
commit | dc8360ec2717f4c54d1b2aa43309ac1d2807f7fb (patch) | |
tree | f3273695fd656fc123cc01b3456de9259e24c8e3 /tests/java5 | |
parent | e6df15a4ab52c0448fd49335b0b6cf296cd955cf (diff) | |
download | aspectj-dc8360ec2717f4c54d1b2aa43309ac1d2807f7fb.tar.gz aspectj-dc8360ec2717f4c54d1b2aa43309ac1d2807f7fb.zip |
tests and fix for ITDS in AjTypeSystem
Diffstat (limited to 'tests/java5')
-rw-r--r-- | tests/java5/reflection/AtAspectJDeclareParents.aj | 21 | ||||
-rw-r--r-- | tests/java5/reflection/InterTypeDeclarations.aj | 30 | ||||
-rw-r--r-- | tests/java5/reflection/ReflectOnAtAspectJDeclareParents.java | 132 | ||||
-rw-r--r-- | tests/java5/reflection/ReflectOnCodeStyleITDs.java | 232 |
4 files changed, 415 insertions, 0 deletions
diff --git a/tests/java5/reflection/AtAspectJDeclareParents.aj b/tests/java5/reflection/AtAspectJDeclareParents.aj new file mode 100644 index 000000000..2882c8734 --- /dev/null +++ b/tests/java5/reflection/AtAspectJDeclareParents.aj @@ -0,0 +1,21 @@ +import org.aspectj.lang.annotation.*; + +public aspect AtAspectJDeclareParents { + + @DeclareParents("C") + public static I mixin = new Impl(); + +} + +class C {} + +interface I{} + +class Impl implements I { + + private int x; + + public int getX() { return this.x; } + + public void setX(int x) { this.x = x; } +}
\ No newline at end of file diff --git a/tests/java5/reflection/InterTypeDeclarations.aj b/tests/java5/reflection/InterTypeDeclarations.aj new file mode 100644 index 000000000..0dd4601a0 --- /dev/null +++ b/tests/java5/reflection/InterTypeDeclarations.aj @@ -0,0 +1,30 @@ + + +public aspect InterTypeDeclarations { + + private int I.x = 5; + int I.y = 6; + public int I.z = 7; + + private int I.getX() { return this.x; } + int I.getY() { return this.y; } + public int I.getZ() { return this.z; } + + private int C.x = 5; + int C.y = 6; + public int C.z = 7; + + private int C.getX() { return this.x; } + int C.getY() { return this.y; } + public int C.getZ() { return this.z; } + + private C.new(int x) { super(); this.x = x;} + C.new(int x, int y) { this(x); this.y = y; } + public C.new(int x, int y, int z) { this(x,y); this.z = z; } + +} + + +interface I {} + +class C {}
\ No newline at end of file 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 diff --git a/tests/java5/reflection/ReflectOnCodeStyleITDs.java b/tests/java5/reflection/ReflectOnCodeStyleITDs.java new file mode 100644 index 000000000..4e1c8f770 --- /dev/null +++ b/tests/java5/reflection/ReflectOnCodeStyleITDs.java @@ -0,0 +1,232 @@ +import org.aspectj.lang.reflect.*; +import java.util.*; +import java.lang.reflect.*; + +public class ReflectOnCodeStyleITDs { + + public static void main(String[] args) { + new ReflectOnCodeStyleITDs().runTests(); + } + + public void runTests() { + AjType<InterTypeDeclarations> ajType = AjTypeSystem.getAjType(InterTypeDeclarations.class); + + testDeclaredInterTypeConstructors(ajType); + testInterTypeConstructors(ajType); + testDeclaredInterTypeMethods(ajType); + testInterTypeMethods(ajType); + testDeclaredInterTypeFields(ajType); + testInterTypeFields(ajType); + } + + private void testDeclaredInterTypeConstructors(AjType<InterTypeDeclarations> ajType) { + InterTypeConstructorDeclaration[] itdcs = ajType.getDeclaredITDConstructors(); + assertEquals(3,itdcs.length,"number of declared ITD constructors"); + InterTypeConstructorDeclaration publicITDC = null; + InterTypeConstructorDeclaration defaultITDC = null; + InterTypeConstructorDeclaration privateITDC = null; + for(InterTypeConstructorDeclaration itdc : itdcs) { + if (Modifier.isPublic(itdc.getModifiers())) { + publicITDC = itdc; + } else if (Modifier.isPrivate(itdc.getModifiers())) { + privateITDC = itdc; + } else { + defaultITDC = itdc; + } + } + System.out.println(publicITDC); + System.out.println(defaultITDC); + System.out.println(privateITDC); + try { + InterTypeConstructorDeclaration shouldFind = ajType.getDeclaredITDConstructor(AjTypeSystem.getAjType(C.class), AjTypeSystem.getAjType(int.class)); + System.out.println(shouldFind); + } catch (NoSuchMethodException ex) { + throw new RuntimeException("getDeclaredITDConstructor failed"); + } + try { + ajType.getDeclaredITDConstructor(AjTypeSystem.getAjType(I.class), AjTypeSystem.getAjType(int.class)); + throw new RuntimeException("failed to fail in getting DeclaredITDConstructor #1"); + } catch (NoSuchMethodException ex) { + // good! + } + try { + ajType.getDeclaredITDConstructor(AjTypeSystem.getAjType(C.class), AjTypeSystem.getAjType(String.class)); + throw new RuntimeException("failed to fail in getting DeclaredITDConstructor #2"); + } catch (NoSuchMethodException ex) { + // good! + } + + } + + private void testInterTypeConstructors(AjType<InterTypeDeclarations> ajType) { + InterTypeConstructorDeclaration[] itdcs = ajType.getITDConstructors(); + assertEquals(1,itdcs.length,"number of ITD constructors"); + System.out.println(itdcs[0]); + AjType<?> intClass = AjTypeSystem.getAjType(int.class); + try { + InterTypeConstructorDeclaration shouldFind = ajType.getITDConstructor(AjTypeSystem.getAjType(C.class), intClass, intClass, intClass); + System.out.println(shouldFind); + } catch (NoSuchMethodException ex) { + throw new RuntimeException("getITDConstructor failed"); + } + try { + ajType.getITDConstructor(AjTypeSystem.getAjType(C.class), AjTypeSystem.getAjType(int.class)); + throw new RuntimeException("failed to fail in getting ITDConstructor"); + } catch (NoSuchMethodException ex) { + // good! + } + } + + private void testDeclaredInterTypeMethods(AjType<InterTypeDeclarations> ajType) { + InterTypeMethodDeclaration[] itdms = ajType.getDeclaredITDMethods(); + assertEquals(6,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(C.class)); + System.out.println(shouldFind); + } catch (NoSuchMethodException ex) { + throw new RuntimeException("getITDMethod failed"); + } + try { + ajType.getDeclaredITDMethod("getP",AjTypeSystem.getAjType(C.class)); + throw new RuntimeException("failed to fail in getting ITDMethod"); + } catch (NoSuchMethodException ex) { + // good! + } + + } + + private void testInterTypeMethods(AjType<InterTypeDeclarations> 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("getZ",AjTypeSystem.getAjType(C.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<InterTypeDeclarations> ajType) { + InterTypeFieldDeclaration[] itdfs = ajType.getDeclaredITDFields(); + assertEquals(6,itdfs.length,"number of declared ITD fields"); + Set s = new TreeSet(new Comparator<InterTypeFieldDeclaration>() { + public int compare(InterTypeFieldDeclaration m1, InterTypeFieldDeclaration 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 (InterTypeFieldDeclaration itdf : itdfs) { s.add(itdf); } + for (Object o : s) { System.out.println(o); } + try { + InterTypeFieldDeclaration shouldFind = ajType.getDeclaredITDField("x",AjTypeSystem.getAjType(C.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<InterTypeDeclarations> ajType) { + InterTypeFieldDeclaration[] itdfs = ajType.getITDFields(); + assertEquals(2,itdfs.length,"number of declared ITD fields"); + Set s = new TreeSet(new Comparator<InterTypeFieldDeclaration>() { + public int compare(InterTypeFieldDeclaration m1, InterTypeFieldDeclaration 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 (InterTypeFieldDeclaration itdf : itdfs) { s.add(itdf); } + for (Object o : s) { System.out.println(o); } + try { + InterTypeFieldDeclaration shouldFind = ajType.getITDField("z",AjTypeSystem.getAjType(C.class)); + System.out.println(shouldFind); + } catch (NoSuchFieldException ex) { + throw new RuntimeException("getITDField failed"); + } + try { + ajType.getITDField("x",AjTypeSystem.getAjType(C.class)); + throw new RuntimeException("failed to fail in getting ITDField"); + } catch (NoSuchFieldException ex) { + // good! + } + } + + 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 |