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.

InterTypeTest.java 4.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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.internal.lang.reflect;
  13. import java.lang.reflect.Method;
  14. import java.lang.reflect.Type;
  15. import org.aspectj.lang.reflect.AjType;
  16. import org.aspectj.lang.reflect.AjTypeSystem;
  17. import org.aspectj.lang.reflect.InterTypeConstructorDeclaration;
  18. import org.aspectj.lang.reflect.InterTypeDeclaration;
  19. import org.aspectj.lang.reflect.InterTypeFieldDeclaration;
  20. import org.aspectj.lang.reflect.InterTypeMethodDeclaration;
  21. import junit.framework.TestCase;
  22. /**
  23. * @author colyer
  24. *
  25. */
  26. public class InterTypeTest extends TestCase {
  27. public void testITDImpl() throws ClassNotFoundException {
  28. AjType<InterTypeTest> thisClass = AjTypeSystem.getAjType(InterTypeTest.class);
  29. AjType<Runnable> runnable = AjTypeSystem.getAjType(java.lang.Runnable.class);
  30. InterTypeDeclaration itd = new InterTypeDeclarationImpl(thisClass,"java.lang.Runnable",5);
  31. assertEquals(thisClass,itd.getDeclaringType());
  32. assertEquals(runnable,itd.getTargetType());
  33. assertEquals(5, itd.getModifiers());
  34. }
  35. public void testITDField() throws ClassNotFoundException {
  36. AjType<InterTypeTest> thisClass = AjTypeSystem.getAjType(InterTypeTest.class);
  37. AjType<Runnable> runnable = AjTypeSystem.getAjType(java.lang.Runnable.class);
  38. InterTypeDeclaration itd = new InterTypeDeclarationImpl(thisClass,"java.lang.Runnable",5);
  39. AjType<String> stringType = AjTypeSystem.getAjType(java.lang.String.class);
  40. Type t = Type.class;
  41. InterTypeFieldDeclaration itdf = new InterTypeFieldDeclarationImpl(thisClass,"java.lang.Runnable",5,"f",stringType,t);
  42. assertEquals("f",itdf.getName());
  43. assertEquals(stringType,itdf.getType());
  44. assertEquals(t,itdf.getGenericType());
  45. }
  46. public void testITDCons() throws ClassNotFoundException, NoSuchMethodException {
  47. AjType<InterTypeTest> thisClass = AjTypeSystem.getAjType(InterTypeTest.class);
  48. AjType<Runnable> runnable = AjTypeSystem.getAjType(java.lang.Runnable.class);
  49. Method base = InterTypeTest.class.getDeclaredMethod("interCons",InterTypeTest.class,String.class,int.class);
  50. InterTypeConstructorDeclaration itdc =
  51. new InterTypeConstructorDeclarationImpl(thisClass,"java.lang.Runnable",5,base);
  52. assertEquals(2,itdc.getParameterTypes().length);
  53. assertEquals(String.class,itdc.getParameterTypes()[0].getJavaClass());
  54. assertEquals(int.class,itdc.getParameterTypes()[1].getJavaClass());
  55. assertEquals(2,itdc.getGenericParameterTypes().length);
  56. assertEquals(base.getGenericParameterTypes()[1],((AjType<?>)itdc.getGenericParameterTypes()[0]).getJavaClass());
  57. assertEquals(base.getGenericParameterTypes()[2],((AjType<?>)itdc.getGenericParameterTypes()[1]).getJavaClass());
  58. assertEquals(0,itdc.getExceptionTypes().length);
  59. }
  60. public void testITDMethod() throws NoSuchMethodException {
  61. AjType<InterTypeTest> thisClass = AjTypeSystem.getAjType(InterTypeTest.class);
  62. AjType<Runnable> runnable = AjTypeSystem.getAjType(java.lang.Runnable.class);
  63. Method base = InterTypeTest.class.getDeclaredMethod("interMethod",InterTypeTest.class,String.class,int.class);
  64. InterTypeMethodDeclaration itdm = new InterTypeMethodDeclarationImpl(thisClass,"java.lang.Runnable",5,"foo",base);
  65. assertEquals("foo",itdm.getName());
  66. assertEquals(int.class,itdm.getReturnType().getJavaClass());
  67. assertEquals(int.class,((AjType<?>)itdm.getGenericReturnType()).getJavaClass());
  68. assertEquals(2,itdm.getParameterTypes().length);
  69. assertEquals(String.class,itdm.getParameterTypes()[0].getJavaClass());
  70. assertEquals(int.class,itdm.getParameterTypes()[1].getJavaClass());
  71. assertEquals(2,itdm.getGenericParameterTypes().length);
  72. assertEquals(base.getGenericParameterTypes()[1],((AjType<?>)itdm.getGenericParameterTypes()[0]).getJavaClass());
  73. assertEquals(base.getGenericParameterTypes()[2],((AjType<?>)itdm.getGenericParameterTypes()[1]).getJavaClass());
  74. assertEquals(0,itdm.getExceptionTypes().length);
  75. }
  76. public static void interCons(InterTypeTest itt, String s, int i) { }
  77. public static int interMethod(InterTypeTest itt, String s, int i) { return 5; }
  78. }