--- /dev/null
+/* *******************************************************************
+ * Copyright (c) 2009 Contributors.
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andy Clement
+ * ******************************************************************/
+package org.aspectj.weaver;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.aspectj.weaver.reflect.ReflectionWorld;
+
+/**
+ * @author Andy Clement
+ */
+public class JoinPointSignatureIteratorTests extends TestCase {
+
+ private World getWorld() {
+ return new ReflectionWorld(getClass().getClassLoader());
+ }
+
+ /**
+ * Checking the signatures for a dynamic proxy - which is created using erased information and so is completely generics unaware
+ */
+ public void testPr268419() {
+ World w = getWorld();
+ w.setBehaveInJava5Way(true);
+
+ // The proxy class here is not generated, it is simply loaded up. $Proxy1 is in the java5-testsrc folder, but it
+ // obeys the rules of a generated proxy in that it extends java.lang.reflect.Proxy
+ ResolvedType proxy = UnresolvedType.forName("$Proxy1").resolve(w);
+ assertNotNull(proxy);
+
+ // The test hierarchy here (messageservice and genericservice) contains 2 methods. One is generic
+ // and one is not. The aim of the test here is that the join point signatures generated for both
+ // should be the same because of the use of a proxy.
+
+ List l = proxy.getMethodsWithoutIterator(false, false);
+ for (Object object : l) {
+ ResolvedMember rm = (ResolvedMember) object;
+ if (expectedResults.containsKey(rm.toString())) {
+ System.out.println("\nChecking: " + rm);
+ int i = 0;
+ List/* String */sigs = (List) expectedResults.get(rm.toString());
+ Iterator jpsi = rm.getJoinPointSignatures(w);
+ while (jpsi.hasNext()) {
+ ResolvedMember sig = (ResolvedMember) jpsi.next();
+ assertEquals(sigs.get(i).toString(), sig.toString());
+ i++;
+ }
+ if (i != sigs.size()) {
+ fail("Expected " + sigs.size() + " signatures but got " + i);
+ }
+ } else {
+ if (rm.getName().equals("get1") || rm.getName().equals("get2")) {
+ fail("\nFound this unchecked get method " + rm);
+ // Iterator jpsi = rm.getJoinPointSignatures(w);
+ // while (jpsi.hasNext()) {
+ // ResolvedMember sig = (ResolvedMember) jpsi.next();
+ // System.out.println(sig);
+ // }
+ }
+ }
+ }
+ }
+
+ public static Map expectedResults = new HashMap();
+
+ static {
+ List sigs = new ArrayList();
+ sigs.add("java.lang.Object $Proxy1.get1(java.io.Serializable)");
+ sigs.add("java.lang.Object MessageService.get1(java.io.Serializable)");
+ sigs.add("java.lang.Object GenericService.get1(java.io.Serializable)");
+ sigs.add("java.lang.Object GenericService.get1(java.io.Serializable)");
+ expectedResults.put("java.lang.Object $Proxy1.get1(java.io.Serializable)", sigs);
+
+ sigs = new ArrayList();
+ sigs.add("java.lang.Object $Proxy1.get2(java.io.Serializable)");
+ sigs.add("java.lang.Object MessageService.get2(java.io.Serializable)");
+ sigs.add("java.lang.Object GenericService.get2(java.io.Serializable)");
+ sigs.add("java.lang.Object GenericService.get2(java.io.Serializable)");
+ expectedResults.put("java.lang.Object $Proxy1.get2(java.io.Serializable)", sigs);
+
+ sigs = new ArrayList();
+ sigs.add("java.lang.Object $Proxy1.get1(java.lang.Long)");
+ expectedResults.put("java.lang.Object $Proxy1.get1(java.lang.Long)", sigs);
+
+ sigs = new ArrayList();
+ sigs.add("java.lang.Object GenericService.get1(java.io.Serializable)");
+ expectedResults.put("java.lang.Object GenericService.get1(java.io.Serializable)", sigs);
+
+ sigs = new ArrayList();
+ sigs.add("java.lang.Object GenericService.get2(java.io.Serializable)");
+ expectedResults.put("java.lang.Object GenericService.get2(java.io.Serializable)", sigs);
+ }
+}