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.

BcelGenericSignatureToTypeXTestCase.java 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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.bcel;
  13. import java.util.Arrays;
  14. import org.aspectj.apache.bcel.Repository;
  15. import org.aspectj.apache.bcel.classfile.JavaClass;
  16. import org.aspectj.apache.bcel.classfile.Signature;
  17. import org.aspectj.util.GenericSignature;
  18. import org.aspectj.util.GenericSignature.ClassSignature;
  19. import org.aspectj.util.GenericSignatureParser;
  20. import org.aspectj.util.LangUtil;
  21. import org.aspectj.weaver.UnresolvedType;
  22. import junit.framework.TestCase;
  23. /**
  24. * @author colyer
  25. *
  26. */
  27. public class BcelGenericSignatureToTypeXTestCase extends TestCase {
  28. public final GenericSignature.ClassSignature getGenericClassTypeSignature(JavaClass jClass) {
  29. Signature sig = jClass.getSignatureAttribute();
  30. if (sig != null) {
  31. GenericSignatureParser parser = new GenericSignatureParser();
  32. ClassSignature classSig = parser.parseAsClassSignature(sig.getSignature());
  33. return classSig;
  34. }
  35. return null;
  36. }
  37. public void testEnumFromHell() throws Exception {
  38. BcelWorld world = new BcelWorld();
  39. JavaClass javaLangEnum = Repository.lookupClass("java/lang/Enum");
  40. GenericSignature.ClassSignature cSig = getGenericClassTypeSignature(javaLangEnum);
  41. UnresolvedType superclass = BcelGenericSignatureToTypeXConverter.classTypeSignature2TypeX(cSig.superclassSignature,
  42. cSig.formalTypeParameters, world);
  43. assertEquals("Ljava/lang/Object;", superclass.getSignature());
  44. System.out.println(Arrays.toString(cSig.superInterfaceSignatures));
  45. if (LangUtil.is12VMOrGreater()) {
  46. // [Ljava/lang/constant/Constable;, Ljava/lang/Comparable<TE;>;, Ljava/io/Serializable;]
  47. assertEquals("3 superinterfaces but "+Arrays.toString(cSig.superInterfaceSignatures), 3, cSig.superInterfaceSignatures.length);
  48. } else {
  49. assertEquals("2 superinterfaces", 2, cSig.superInterfaceSignatures.length);
  50. }
  51. int idx = LangUtil.is12VMOrGreater()?1:0;
  52. UnresolvedType comparable = BcelGenericSignatureToTypeXConverter.classTypeSignature2TypeX(cSig.superInterfaceSignatures[idx++],
  53. cSig.formalTypeParameters, world);
  54. assertEquals("Pjava/lang/Comparable<TE;>;", comparable.getSignature());
  55. UnresolvedType serializable = BcelGenericSignatureToTypeXConverter.classTypeSignature2TypeX(
  56. cSig.superInterfaceSignatures[idx++], cSig.formalTypeParameters, world);
  57. assertEquals("Ljava/io/Serializable;", serializable.getSignature());
  58. }
  59. public void testColonColon() throws Exception {
  60. BcelWorld world = new BcelWorld();
  61. GenericSignature.ClassSignature cSig = new GenericSignatureParser()
  62. .parseAsClassSignature("<T::Ljava/io/Serializable;>Ljava/lang/Object;Ljava/lang/Comparable<TT;>;");
  63. UnresolvedType resolved = BcelGenericSignatureToTypeXConverter.classTypeSignature2TypeX(cSig.superclassSignature,
  64. cSig.formalTypeParameters, world);
  65. assertEquals("Ljava/lang/Object;", resolved.getSignature());
  66. BcelGenericSignatureToTypeXConverter.classTypeSignature2TypeX(cSig.superInterfaceSignatures[0], cSig.formalTypeParameters,
  67. world);
  68. }
  69. }