diff options
-rw-r--r-- | tests/java5/generics/itds/BizarroSignatures.aj | 55 | ||||
-rw-r--r-- | tests/java5/generics/itds/sharing/Simple.aj | 30 | ||||
-rw-r--r-- | tests/java5/generics/itds/sharing/Simple2.aj | 28 | ||||
-rw-r--r-- | tests/java5/generics/itds/visibility/PackageITDs.aj | 30 | ||||
-rw-r--r-- | tests/java5/generics/itds/visibility/PrivateITDs.aj | 30 | ||||
-rw-r--r-- | tests/java5/generics/itds/visibility/PublicITDs.aj | 35 | ||||
-rw-r--r-- | tests/java5/generics/itds/visibility/PublicITDsErrors.aj | 29 |
7 files changed, 237 insertions, 0 deletions
diff --git a/tests/java5/generics/itds/BizarroSignatures.aj b/tests/java5/generics/itds/BizarroSignatures.aj new file mode 100644 index 000000000..03b683625 --- /dev/null +++ b/tests/java5/generics/itds/BizarroSignatures.aj @@ -0,0 +1,55 @@ +import java.util.*; + +class Victim {} + +public class BizarroSignatures { + public static void main(String []argv) { + Victim v = new Victim(); + + Map<Double,Double> m = new HashMap<Double,Double>(); + v.a(m); + + List<A> as = new ArrayList<A>(); + v.b(as); + v.c(as); + + //v.c(as); + + } + +} + +class A implements Comparable<A> { + public int compareTo(A a) { return 0; } +} + +aspect X { + + public void Victim.a(Map<?,? extends Number> map) {} + + public <T extends Object & Comparable<? super T>> + void Victim.b(List<T> l) {} + + public <P extends Object & Comparable<? super P>> + void Victim.c(List<P> col) {};//return null;} + +// public <T extends Comparable<? super Number>> +// T Victim.d(Collection<T> col) {return null;} +// +// public <T extends Comparable<T>> +// T Victim.e(Collection<T> col) {return null;} +// +// public <X> +// X Victim.f(Collection<X> x) {return null;} +// +// public void Victim.g(List<List<List<List<List<? extends List>>>>> wtf) {} +// +// public <T> +// void Victim.h(List <T> a,List<? extends T> b) {} +// +// public <T extends Number> +// void Victim.i(Map<T,? super Number> n) {} + +// public <T> +// void Victim.j(T[] ts,Collection<T> c) {} +} diff --git a/tests/java5/generics/itds/sharing/Simple.aj b/tests/java5/generics/itds/sharing/Simple.aj new file mode 100644 index 000000000..0c328ed34 --- /dev/null +++ b/tests/java5/generics/itds/sharing/Simple.aj @@ -0,0 +1,30 @@ +public class Simple { + public static void main(String []argv) { + Base<Integer> base = new Base<Integer>(); + List<Integer> intList = new ArrayList<Integer>(); + intList.add(5); + intList.add(2); + intList.add(3); + intList.add(8); + System.err.println(">"+base.m(intList)); + System.err.println(">"+base.m2(intList)); + } +} + + + +class Base<N extends Number> { + + public int m(List<N> ns) { + return ns.size(); + } + +} + +aspect X { + + public int Base<Z>.m2(List<Z> zs) { + return zs.size(); + } +} + diff --git a/tests/java5/generics/itds/sharing/Simple2.aj b/tests/java5/generics/itds/sharing/Simple2.aj new file mode 100644 index 000000000..50cac3ee7 --- /dev/null +++ b/tests/java5/generics/itds/sharing/Simple2.aj @@ -0,0 +1,28 @@ +public class Simple2 { + public static void main(String []argv) { + Base<Integer> base = new Base<Integer>(); + List<Integer> intList = new ArrayList<Integer>(); + intList.add(5); + base.f1 = intList; + base.copy(); + System.err.println("f2.get(0)=>"+f2.get(0)); + } +} + + + +class Base<N extends Number> { + + public List<N> f1; + +} + +aspect X { + + public List<Z> Base<Z>.f2; + + public void Base.copy() { + f2=f1; + } +} + diff --git a/tests/java5/generics/itds/visibility/PackageITDs.aj b/tests/java5/generics/itds/visibility/PackageITDs.aj new file mode 100644 index 000000000..eaa7f3122 --- /dev/null +++ b/tests/java5/generics/itds/visibility/PackageITDs.aj @@ -0,0 +1,30 @@ +import java.util.*; + +class Base { + +} + +public aspect PackageITDs { + + public static void main(String[] argv) { + List<Double> l1 = new ArrayList<Double>(); + Base b = new Base(); + b.packageMethod1(l1); + b.packageMethod2(l1,l1); + Base b2 = new Base(l1); + Base b3 = new Base(l1,l1); + Map<Integer,Double> m1 = new HashMap<Integer,Double>(); + Base b4 = new Base(l1,m1); + } + + + // methods + <R extends Number> void Base.packageMethod1(List<R> lr) {} + <R extends Number> void Base.packageMethod2(List<R> lr1,List<R> lr2) {} + + // ctor + <P extends Number> Base.new(List<P> lr) {} + <P extends Number> Base.new(List<P> lr1,List<P> lr2) {} + <P,Q extends Number> Base.new(List<P> lp,Map<Q,P> m1) {} + +} diff --git a/tests/java5/generics/itds/visibility/PrivateITDs.aj b/tests/java5/generics/itds/visibility/PrivateITDs.aj new file mode 100644 index 000000000..beaebb49d --- /dev/null +++ b/tests/java5/generics/itds/visibility/PrivateITDs.aj @@ -0,0 +1,30 @@ +import java.util.*; + +class Base { + +} + +public aspect PrivateITDs { + + public static void main(String[] argv) { + List<Double> l1 = new ArrayList<Double>(); + Base b = new Base(); + b.privateMethod1(l1); + b.privateMethod2(l1,l1); + Base b2 = new Base(l1); + Base b3 = new Base(l1,l1); + Map<Integer,Double> m1 = new HashMap<Integer,Double>(); + Base b4 = new Base(l1,m1); + } + + + // methods + private <R extends Number> void Base.privateMethod1(List<R> lr) {} + private <R extends Number> void Base.privateMethod2(List<R> lr1,List<R> lr2) {} + + // ctor + private <P extends Number> Base.new(List<P> lr) {} + private <P extends Number> Base.new(List<P> lr1,List<P> lr2) {} + private <P,Q extends Number> Base.new(List<P> lp,Map<Q,P> m1) {} + +} diff --git a/tests/java5/generics/itds/visibility/PublicITDs.aj b/tests/java5/generics/itds/visibility/PublicITDs.aj new file mode 100644 index 000000000..25d58b4a3 --- /dev/null +++ b/tests/java5/generics/itds/visibility/PublicITDs.aj @@ -0,0 +1,35 @@ +import java.util.*; + +class Base { + +} + +public class PublicITDs { + + public static void main(String[] argv) { + List<Double> l1 = new ArrayList<Double>(); + Base b = new Base(); + b.publicMethod1(l1); + b.publicMethod2(l1,l1); + Base b2 = new Base(l1); + Base b3 = new Base(l1,l1); + Map<Integer,Double> m1 = new HashMap<Integer,Double>(); + Base b4 = new Base(l1,m1); + } + +} + +aspect X { + + // methods + public <R extends Number> void Base.publicMethod1(List<R> lr) {} + public <R extends Number> void Base.publicMethod2(List<R> lr1,List<R> lr2) {} + + // ctor + public <P extends Number> Base.new(List<P> lr) {} + public <P extends Number> Base.new(List<P> lr1,List<P> lr2) {} + public <P,Q extends Number> Base.new(List<P> lp,Map<Q,P> m1) {} + + // what use is this next one?? + // public <R extends Number> R Base.publicMethod3() { return null;} +} diff --git a/tests/java5/generics/itds/visibility/PublicITDsErrors.aj b/tests/java5/generics/itds/visibility/PublicITDsErrors.aj new file mode 100644 index 000000000..cc7bd81cf --- /dev/null +++ b/tests/java5/generics/itds/visibility/PublicITDsErrors.aj @@ -0,0 +1,29 @@ +import java.util.*; + +class Base { + +} + +public class PublicITDsErrors { + + public static void main(String[] argv) { + List<Double> l1 = new ArrayList<Double>(); + List<Float> l2 = new ArrayList<Float>(); + Base b = new Base(); + b.publicMethod2(l1,l2); // CE attempt to bind tvar to Float & Double + Map<Integer,String> m1 = new HashMap<Integer,String>(); + Base b4 = new Base(l1,m1); // CE attempt to bind tvarP to Double and String + } + +} + +aspect X { + // methods + public <R extends Number> void Base.publicMethod1(List<R> lr) {} + public <R extends Number> void Base.publicMethod2(List<R> lr1,List<R> lr2) {} + + // ctor + public <P extends Number> Base.new(List<P> lr) {} + public <P extends Number> Base.new(List<P> lr1,List<P> lr2) {} + public <P,Q extends Number> Base.new(List<P> lp,Map<Q,P> m1) {} +} |