You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MemberTestCase15.java 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /* *******************************************************************
  2. * Copyright (c) 2005 Contributors.
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * Adrian Colyer Initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.weaver;
  13. import org.aspectj.weaver.bcel.BcelWorld;
  14. import junit.framework.TestCase;
  15. /**
  16. * @author colyer
  17. * @author clement
  18. */
  19. public class MemberTestCase15 extends TestCase {
  20. public void testCanBeParameterizedRegularMethod() {
  21. BcelWorld world = new BcelWorld();
  22. ResolvedType javaLangClass = world.resolve(UnresolvedType.forName("java/lang/Class"));
  23. ResolvedMember[] methods = javaLangClass.getDeclaredMethods();
  24. ResolvedMember getAnnotations = null;
  25. for (int i = 0; i < methods.length; i++) {
  26. if (methods[i].getName().equals("getAnnotations")) {
  27. getAnnotations = methods[i];
  28. break;
  29. }
  30. }
  31. if (getAnnotations != null) { // so can run on non-Java 5
  32. // System.out.println("got it");
  33. assertFalse(getAnnotations.canBeParameterized());
  34. }
  35. }
  36. public void testCanBeParameterizedGenericMethod() {
  37. BcelWorld world = new BcelWorld();
  38. world.setBehaveInJava5Way(true);
  39. ResolvedType javaLangClass = world.resolve(UnresolvedType.forName("java.lang.Class"));
  40. javaLangClass = javaLangClass.getGenericType();
  41. if (javaLangClass == null) return; // for < 1.5
  42. ResolvedMember[] methods = javaLangClass.getDeclaredMethods();
  43. ResolvedMember asSubclass = null;
  44. for (int i = 0; i < methods.length; i++) {
  45. if (methods[i].getName().equals("asSubclass")) {
  46. asSubclass = methods[i];
  47. break;
  48. }
  49. }
  50. if (asSubclass != null) { // so can run on non-Java 5
  51. // System.out.println("got it");
  52. assertTrue(asSubclass.canBeParameterized());
  53. }
  54. }
  55. public void testCanBeParameterizedMethodInGenericType() {
  56. BcelWorld world = new BcelWorld();
  57. world.setBehaveInJava5Way(true);
  58. ResolvedType javaUtilList = world.resolve(UnresolvedType.forName("java.util.List"));
  59. javaUtilList = javaUtilList.getGenericType();
  60. if (javaUtilList == null) return; // for < 1.5
  61. ResolvedMember[] methods = javaUtilList.getDeclaredMethods();
  62. ResolvedMember add = null;
  63. for (int i = 0; i < methods.length; i++) {
  64. if (methods[i].getName().equals("add")) {
  65. add = methods[i];
  66. break;
  67. }
  68. }
  69. if (add != null) { // so can run on non-Java 5
  70. // System.out.println("got it");
  71. assertTrue(add.canBeParameterized());
  72. }
  73. }
  74. /*
  75. public void testGenericReferenceTypeCreation() {
  76. UnresolvedType genericType = UnresolvedType.forGenericTypeSignature("Lorg/aspectj/weaver/MemberTestCase15$One;","<T:Ljava/lang/Object;>Ljava/lang/Object;");
  77. assertEquals("Porg/aspectj/weaver/MemberTestCase15$One<TT;>;",genericType.getSignature());
  78. assertEquals("Lorg/aspectj/weaver/MemberTestCase15$One;",genericType.getErasureSignature());
  79. }
  80. public void testMemberSignatureCreation() {
  81. World world = new BcelWorld("../weaver5/bin/");
  82. //new ReflectionWorld(false, getClass().getClassLoader());
  83. world.setBehaveInJava5Way(true);
  84. ResolvedType one = world.resolve("org.aspectj.weaver.MemberTestCase15$One<java.lang.String>");
  85. assertNotNull(one);
  86. assertFalse(one.isMissing());
  87. // Look at the methods on the parameterized type One<String>
  88. ResolvedMember member = findMethod("getter",one);
  89. String erasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),true);
  90. assertEquals("()Ljava/lang/String;",erasedSignature);
  91. String nonErasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),false);
  92. assertEquals("()Ljava/lang/String;",nonErasedSignature);
  93. erasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),true);
  94. assertEquals("()Ljava/lang/String;",erasedSignature);
  95. nonErasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),false);
  96. assertEquals("()Ljava/lang/String;",nonErasedSignature);
  97. member = findMethod("getterTwo",one);
  98. erasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),true);
  99. assertEquals("()Ljava/util/List;",erasedSignature);
  100. nonErasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),false);
  101. assertEquals("()Pjava/util/List<Ljava/lang/String;>;",nonErasedSignature);
  102. nonErasedSignature = MemberImpl.typesToSignature(member.getGenericReturnType(),member.getGenericParameterTypes(),true);
  103. assertEquals("()Ljava/util/List;",nonErasedSignature);
  104. nonErasedSignature = MemberImpl.typesToSignature(member.getGenericReturnType(),member.getGenericParameterTypes(),false);
  105. assertEquals("()Pjava/util/List<Ljava/lang/String;>;",nonErasedSignature);
  106. // Grab the generic type backing the parameterized type
  107. ResolvedType oneGeneric = one.getGenericType();
  108. assertTrue(oneGeneric.isGenericType());
  109. member = findMethod("getterTwo",oneGeneric);
  110. erasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),true);
  111. assertEquals("()Ljava/util/List;",erasedSignature);
  112. erasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),false);
  113. assertEquals("()Ljava/util/List;",erasedSignature);
  114. nonErasedSignature = MemberImpl.typesToSignature(member.getReturnType(),member.getParameterTypes(),false);
  115. assertEquals("()Pjava/util/List<TT;>;",nonErasedSignature);
  116. nonErasedSignature = MemberImpl.typesToSignature(member.getGenericReturnType(),member.getGenericParameterTypes(),false);
  117. assertEquals("()Ljava/util/List;",nonErasedSignature);
  118. ResolvedType oneRaw = oneGeneric.getRawType();
  119. member = findMethod("getterTwo",oneRaw);
  120. }
  121. private ResolvedMember findMethod(String name, ResolvedType type) {
  122. ResolvedMember[] members = type.getDeclaredMethods();
  123. for (ResolvedMember member: members) {
  124. if (member.getName().equals(name)) {
  125. return member;
  126. }
  127. }
  128. return null;
  129. }
  130. // testcode
  131. class One<T> {
  132. T t;
  133. T getter() {
  134. return null;
  135. }
  136. List<T> getterTwo() {
  137. return null;
  138. }
  139. }
  140. */
  141. }