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.

WildTypePatternResolutionTestCase.java 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  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://www.eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * Adrian Colyer initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.weaver.patterns;
  13. import java.io.ByteArrayInputStream;
  14. import java.io.ByteArrayOutputStream;
  15. import java.io.IOException;
  16. import org.aspectj.weaver.AjAttribute.WeaverVersionInfo;
  17. import org.aspectj.weaver.BoundedReferenceType;
  18. import org.aspectj.weaver.CompressingDataOutputStream;
  19. import org.aspectj.weaver.ResolvedType;
  20. import org.aspectj.weaver.TypeFactory;
  21. import org.aspectj.weaver.UnresolvedType;
  22. import org.aspectj.weaver.VersionedDataInputStream;
  23. import org.aspectj.weaver.World;
  24. import org.aspectj.weaver.bcel.BcelWorld;
  25. import junit.framework.TestCase;
  26. // TODO write test cases for instanceof matching
  27. public class WildTypePatternResolutionTestCase extends TestCase {
  28. private World world;
  29. private Bindings bindings;
  30. private SimpleScope scope;
  31. private ResolvedType javaUtilList;
  32. private ResolvedType javaLangString;
  33. private ResolvedType javaUtilListOfString;
  34. private ResolvedType javaUtilListOfDouble;
  35. private ResolvedType javaUtilListOfSomething;
  36. /**
  37. * Foo where Foo exists and is generic Parser creates WildTypePattern namePatterns={Foo} resolveBindings resolves Foo to RT(Foo
  38. * - raw) return ExactTypePattern(LFoo;)
  39. */
  40. public void testSimpleFoo() {
  41. TypePattern rtp = resolveWildTypePattern("List", false);
  42. assertTrue("resolves to exact type", rtp instanceof ExactTypePattern);
  43. UnresolvedType exactType = rtp.getExactType();
  44. assertTrue(exactType.isRawType());
  45. assertEquals("Ljava/util/List;", exactType.getSignature());
  46. ResolvedType rt = exactType.resolve(world);
  47. assertEquals("Ljava/util/List;", rt.getSignature());
  48. assertTrue(rt.isRawType());
  49. ExactTypePattern etp = (ExactTypePattern) writeAndRead(rtp);
  50. exactType = etp.getExactType();
  51. assertEquals("Ljava/util/List;", exactType.getSignature());
  52. rt = exactType.resolve(world);
  53. assertEquals("Ljava/util/List;", rt.getSignature());
  54. assertTrue(rt.isRawType());
  55. assertTrue("matches List", etp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  56. assertTrue("matches generic List", etp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  57. assertTrue("matches parameterized list", etp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  58. assertTrue("does not match String", etp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  59. }
  60. /**
  61. * Foo<String> where Foo exists and String meets the bounds Parser creates WildTypePattern namePatterns = {Foo},
  62. * typeParameters=WTP{String} resolveBindings resolves typeParameters to ExactTypePattern(String) resolves Foo to RT(Foo)
  63. * returns ExactTypePattern(PFoo<String>; - parameterized)
  64. */
  65. public void testParameterized() {
  66. TypePattern rtp = resolveWildTypePattern("List<String>", false);
  67. assertTrue("resolves to exact type", rtp instanceof ExactTypePattern);
  68. UnresolvedType exactType = rtp.getExactType();
  69. assertTrue(exactType.isParameterizedType());
  70. assertEquals("Pjava/util/List<Ljava/lang/String;>;", exactType.getSignature());
  71. ResolvedType rt = exactType.resolve(world);
  72. assertEquals("Pjava/util/List<Ljava/lang/String;>;", rt.getSignature());
  73. assertTrue(rt.isParameterizedType());
  74. ExactTypePattern etp = (ExactTypePattern) writeAndRead(rtp);
  75. exactType = etp.getExactType();
  76. assertEquals("Pjava/util/List<Ljava/lang/String;>;", rt.getSignature());
  77. assertTrue(rt.isParameterizedType());
  78. rt = exactType.resolve(world);
  79. assertEquals("Pjava/util/List<Ljava/lang/String;>;", rt.getSignature());
  80. assertTrue(rt.isParameterizedType());
  81. assertFalse("does not match List", etp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  82. assertFalse("does not match generic List", etp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  83. assertTrue("matches parameterized list", etp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  84. assertFalse("does not match parameterized list of double", etp.matches(javaUtilListOfDouble, TypePattern.STATIC)
  85. .alwaysTrue());
  86. assertTrue("does not match String", etp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  87. }
  88. /**
  89. * Foo<Str*> where Foo exists and takes one bound Parser creates WildTypePattern namePatterns = {Foo}, typeParameters=WTP{Str*}
  90. * resolveBindings resolves typeParameters to WTP{Str*} resolves Foo to RT(Foo) returns WildTypePattern(name = Foo,
  91. * typeParameters = WTP{Str*} isGeneric=false)
  92. */
  93. public void testParameterizedWildCard() {
  94. TypePattern rtp = resolveWildTypePattern("List<Str*>", false);
  95. assertTrue("resolves to WildTypePattern", rtp instanceof WildTypePattern);
  96. assertTrue("one type parameter", rtp.typeParameters.size() == 1);
  97. assertTrue("missing", ResolvedType.isMissing(rtp.getExactType()));
  98. WildTypePattern wtp = (WildTypePattern) writeAndRead(rtp);
  99. assertTrue("one type parameter", wtp.typeParameters.size() == 1);
  100. assertTrue("missing", ResolvedType.isMissing(wtp.getExactType()));
  101. assertEquals("Str*", wtp.getTypeParameters().getTypePatterns()[0].toString());
  102. assertFalse("does not match List", wtp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  103. assertFalse("does not match generic List", wtp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  104. assertTrue("matches parameterized list", wtp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  105. assertFalse("does not match parameterized list of double", wtp.matches(javaUtilListOfDouble, TypePattern.STATIC)
  106. .alwaysTrue());
  107. assertTrue("does not match String", wtp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  108. }
  109. /**
  110. * Fo*<String> Parser creates WildTypePattern namePatterns = {Fo*}, typeParameters=WTP{String} resolveBindings resolves
  111. * typeParameters to ETP{String} returns WildTypePattern(name = Fo*, typeParameters = ETP{String} isGeneric=false)
  112. */
  113. public void testWildcardParameterized() {
  114. TypePattern rtp = resolveWildTypePattern("Li*<String>", false);
  115. assertTrue("resolves to WildTypePattern", rtp instanceof WildTypePattern);
  116. assertTrue("one type parameter", rtp.typeParameters.size() == 1);
  117. assertEquals("Ljava/lang/String;", rtp.typeParameters.getTypePatterns()[0].getExactType().getSignature());
  118. WildTypePattern wtp = (WildTypePattern) writeAndRead(rtp);
  119. assertTrue("one type parameter", wtp.typeParameters.size() == 1);
  120. assertEquals("Ljava/lang/String;", wtp.typeParameters.getTypePatterns()[0].getExactType().getSignature());
  121. assertFalse("does not match List", wtp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  122. assertFalse("does not match generic List", wtp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  123. assertTrue("matches parameterized list", wtp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  124. assertFalse("does not match parameterized list of double", wtp.matches(javaUtilListOfDouble, TypePattern.STATIC)
  125. .alwaysTrue());
  126. assertTrue("does not match String", wtp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  127. }
  128. /**
  129. * Foo<?>
  130. */
  131. public void testSomething() {
  132. TypePattern rtp = resolveWildTypePattern("List<?>", false);
  133. assertTrue("resolves to exact type", rtp instanceof ExactTypePattern);
  134. UnresolvedType exactType = rtp.getExactType();
  135. assertTrue(exactType.isParameterizedType());
  136. assertEquals("Pjava/util/List<*>;", exactType.getSignature());
  137. ExactTypePattern etp = (ExactTypePattern) writeAndRead(rtp);
  138. exactType = etp.getExactType();
  139. assertTrue(exactType.isParameterizedType());
  140. assertEquals("Pjava/util/List<*>;", exactType.getSignature());
  141. assertFalse("does not match List", etp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  142. assertFalse("does not match generic List", etp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  143. assertFalse("does not match parameterized list", etp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  144. assertFalse("does not match parameterized list of double", etp.matches(javaUtilListOfDouble, TypePattern.STATIC)
  145. .alwaysTrue());
  146. assertTrue("does not match String", etp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  147. assertTrue("matches list of something", etp.matches(javaUtilListOfSomething, TypePattern.STATIC).alwaysTrue());
  148. }
  149. /**
  150. * Foo<? extends Number>
  151. */
  152. public void testSomethingExtends() {
  153. TypePattern rtp = resolveWildTypePattern("List<? extends Number>", false);
  154. assertTrue("resolves to exact type", rtp instanceof ExactTypePattern);
  155. UnresolvedType exactType = rtp.getExactType();
  156. assertTrue(exactType.isParameterizedType());
  157. assertEquals("Pjava/util/List<+Ljava/lang/Number;>;", exactType.getSignature());
  158. assertTrue("got a bounded reference type", exactType.getTypeParameters()[0] instanceof BoundedReferenceType);
  159. ExactTypePattern etp = (ExactTypePattern) writeAndRead(rtp);
  160. exactType = etp.getExactType();
  161. exactType = exactType.resolve(world);
  162. assertTrue(exactType.isParameterizedType());
  163. assertEquals("Pjava/util/List<+Ljava/lang/Number;>;", exactType.getSignature());
  164. assertTrue("got a bounded reference type", exactType.getTypeParameters()[0] instanceof BoundedReferenceType);
  165. assertFalse("does not match List", etp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  166. assertFalse("does not match generic List", etp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  167. assertFalse("does not match parameterized list", etp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  168. assertFalse("does not match parameterized list of double", etp.matches(javaUtilListOfDouble, TypePattern.STATIC)
  169. .alwaysTrue());
  170. assertTrue("does not match String", etp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  171. assertFalse("does not match list of something", etp.matches(javaUtilListOfSomething, TypePattern.STATIC).alwaysTrue());
  172. ResolvedType listOfNumber = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  173. .forName("java.lang.Number").resolve(world) }, world);
  174. ResolvedType listOfDouble = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  175. .forName("java.lang.Double").resolve(world) }, world);
  176. assertFalse("does not match list of number", etp.matches(listOfNumber, TypePattern.STATIC).alwaysTrue());
  177. assertFalse("does not match list of double", etp.matches(listOfDouble, TypePattern.STATIC).alwaysTrue());
  178. ResolvedType extendsNumber = TypeFactory.createTypeFromSignature("+Ljava/lang/Number;").resolve(world);
  179. ResolvedType listOfExtendsNumber = TypeFactory.createParameterizedType(javaUtilList,
  180. new UnresolvedType[] { extendsNumber }, world);
  181. assertTrue("matches list of ? extends number", etp.matches(listOfExtendsNumber, TypePattern.STATIC).alwaysTrue());
  182. }
  183. /**
  184. * Foo<? extends Number+>
  185. */
  186. public void testSomethingExtendsPattern() {
  187. TypePattern rtp = resolveWildTypePattern("List<? extends Number+>", false);
  188. assertTrue("resolves to wild type pattern", rtp instanceof WildTypePattern);
  189. assertEquals("one type parameter", 1, rtp.getTypeParameters().size());
  190. TypePattern tp = rtp.getTypeParameters().getTypePatterns()[0];
  191. assertTrue("parameter is wild", tp instanceof WildTypePattern);
  192. WildTypePattern tpwtp = (WildTypePattern) tp;
  193. assertEquals("?", tpwtp.getNamePatterns()[0].maybeGetSimpleName());
  194. assertEquals("java.lang.Number+", tpwtp.upperBound.toString());
  195. WildTypePattern wtp = (WildTypePattern) writeAndRead(rtp);
  196. assertEquals("one type parameter", 1, wtp.getTypeParameters().size());
  197. tp = rtp.getTypeParameters().getTypePatterns()[0];
  198. assertTrue("parameter is wild", tp instanceof WildTypePattern);
  199. tpwtp = (WildTypePattern) tp;
  200. assertEquals("?", tpwtp.getNamePatterns()[0].maybeGetSimpleName());
  201. assertEquals("java.lang.Number+", tpwtp.upperBound.toString());
  202. assertFalse("does not match List", wtp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  203. assertFalse("does not match generic List", wtp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  204. assertFalse("does not match parameterized list", wtp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  205. assertFalse("does not match parameterized list of double", wtp.matches(javaUtilListOfDouble, TypePattern.STATIC)
  206. .alwaysTrue());
  207. assertTrue("does not match String", wtp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  208. assertFalse("does not match list of something", wtp.matches(javaUtilListOfSomething, TypePattern.STATIC).alwaysTrue());
  209. ResolvedType listOfNumber = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  210. .forName("java.lang.Number").resolve(world) }, world);
  211. ResolvedType listOfDouble = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  212. .forName("java.lang.Double").resolve(world) }, world);
  213. assertFalse("does not match list of number", wtp.matches(listOfNumber, TypePattern.STATIC).alwaysTrue());
  214. assertFalse("does not match list of double", wtp.matches(listOfDouble, TypePattern.STATIC).alwaysTrue());
  215. ResolvedType extendsNumber = TypeFactory.createTypeFromSignature("+Ljava/lang/Number;").resolve(world);
  216. ResolvedType listOfExtendsNumber = TypeFactory.createParameterizedType(javaUtilList,
  217. new UnresolvedType[] { extendsNumber }, world);
  218. assertTrue("matches list of ? extends number", wtp.matches(listOfExtendsNumber, TypePattern.STATIC).alwaysTrue());
  219. ResolvedType extendsDouble = TypeFactory.createTypeFromSignature("+Ljava/lang/Double;").resolve(world);
  220. ResolvedType listOfExtendsDouble = TypeFactory.createParameterizedType(javaUtilList,
  221. new UnresolvedType[] { extendsDouble }, world);
  222. assertTrue("matches list of ? extends double", wtp.matches(listOfExtendsDouble, TypePattern.STATIC).alwaysTrue());
  223. }
  224. /**
  225. * Foo<? extends Num*>
  226. */
  227. public void testSomethingExtendsPatternv2() {
  228. TypePattern rtp = resolveWildTypePattern("List<? extends Num*>", false);
  229. assertTrue("resolves to wild type pattern", rtp instanceof WildTypePattern);
  230. assertEquals("one type parameter", 1, rtp.getTypeParameters().size());
  231. TypePattern tp = rtp.getTypeParameters().getTypePatterns()[0];
  232. assertTrue("parameter is wild", tp instanceof WildTypePattern);
  233. WildTypePattern tpwtp = (WildTypePattern) tp;
  234. assertEquals("?", tpwtp.getNamePatterns()[0].maybeGetSimpleName());
  235. assertEquals("Num*", tpwtp.upperBound.toString());
  236. WildTypePattern wtp = (WildTypePattern) writeAndRead(rtp);
  237. assertEquals("one type parameter", 1, wtp.getTypeParameters().size());
  238. tp = rtp.getTypeParameters().getTypePatterns()[0];
  239. assertTrue("parameter is wild", tp instanceof WildTypePattern);
  240. tpwtp = (WildTypePattern) tp;
  241. assertEquals("?", tpwtp.getNamePatterns()[0].maybeGetSimpleName());
  242. assertEquals("Num*", tpwtp.upperBound.toString());
  243. assertFalse("does not match List", wtp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  244. assertFalse("does not match generic List", wtp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  245. assertFalse("does not match parameterized list", wtp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  246. assertFalse("does not match parameterized list of double", wtp.matches(javaUtilListOfDouble, TypePattern.STATIC)
  247. .alwaysTrue());
  248. assertTrue("does not match String", wtp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  249. assertFalse("does not match list of something", wtp.matches(javaUtilListOfSomething, TypePattern.STATIC).alwaysTrue());
  250. ResolvedType listOfNumber = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  251. .forName("java.lang.Number").resolve(world) }, world);
  252. ResolvedType listOfDouble = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  253. .forName("java.lang.Double").resolve(world) }, world);
  254. assertFalse("does not match list of number", wtp.matches(listOfNumber, TypePattern.STATIC).alwaysTrue());
  255. assertFalse("does not match list of double", wtp.matches(listOfDouble, TypePattern.STATIC).alwaysTrue());
  256. ResolvedType extendsNumber = TypeFactory.createTypeFromSignature("+Ljava/lang/Number;").resolve(world);
  257. ResolvedType listOfExtendsNumber = TypeFactory.createParameterizedType(javaUtilList,
  258. new UnresolvedType[] { extendsNumber }, world);
  259. assertTrue("matches list of ? extends number", wtp.matches(listOfExtendsNumber, TypePattern.STATIC).alwaysTrue());
  260. ResolvedType extendsDouble = TypeFactory.createTypeFromSignature("+Ljava/lang/Double;").resolve(world);
  261. ResolvedType listOfExtendsDouble = TypeFactory.createParameterizedType(javaUtilList,
  262. new UnresolvedType[] { extendsDouble }, world);
  263. assertFalse("does not match list of ? extends double", wtp.matches(listOfExtendsDouble, TypePattern.STATIC).alwaysTrue());
  264. }
  265. /**
  266. * Foo<? super Number>
  267. *
  268. */
  269. public void testSomethingSuper() {
  270. TypePattern rtp = resolveWildTypePattern("List<? super Double>", false);
  271. assertTrue("resolves to exact type", rtp instanceof ExactTypePattern);
  272. UnresolvedType exactType = rtp.getExactType();
  273. assertTrue(exactType.isParameterizedType());
  274. assertEquals("Pjava/util/List<-Ljava/lang/Double;>;", exactType.getSignature());
  275. assertTrue("got a bounded reference type", exactType.getTypeParameters()[0] instanceof BoundedReferenceType);
  276. ExactTypePattern etp = (ExactTypePattern) writeAndRead(rtp);
  277. exactType = etp.getExactType();
  278. exactType = exactType.resolve(world);
  279. assertTrue(exactType.isParameterizedType());
  280. assertEquals("Pjava/util/List<-Ljava/lang/Double;>;", exactType.getSignature());
  281. assertTrue("got a bounded reference type", exactType.getTypeParameters()[0] instanceof BoundedReferenceType);
  282. assertFalse("does not match List", etp.matches(javaUtilList, TypePattern.STATIC).alwaysTrue());
  283. assertFalse("does not match generic List", etp.matches(javaUtilList.getGenericType(), TypePattern.STATIC).alwaysTrue());
  284. assertFalse("does not match parameterized list", etp.matches(javaUtilListOfString, TypePattern.STATIC).alwaysTrue());
  285. assertFalse("does not match parameterized list of double", etp.matches(javaUtilListOfDouble, TypePattern.STATIC)
  286. .alwaysTrue());
  287. assertTrue("does not match String", etp.matches(javaLangString, TypePattern.STATIC).alwaysFalse());
  288. assertFalse("does not match list of something", etp.matches(javaUtilListOfSomething, TypePattern.STATIC).alwaysTrue());
  289. ResolvedType listOfNumber = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  290. .forName("java.lang.Number").resolve(world) }, world);
  291. ResolvedType listOfDouble = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  292. .forName("java.lang.Double").resolve(world) }, world);
  293. assertFalse("does not match list of number", etp.matches(listOfNumber, TypePattern.STATIC).alwaysTrue());
  294. assertFalse("does not match list of double", etp.matches(listOfDouble, TypePattern.STATIC).alwaysTrue());
  295. ResolvedType superDouble = TypeFactory.createTypeFromSignature("-Ljava/lang/Double;").resolve(world);
  296. ResolvedType listOfSuperDouble = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { superDouble },
  297. world);
  298. assertTrue("matches list of ? super double", etp.matches(listOfSuperDouble, TypePattern.STATIC).alwaysTrue());
  299. }
  300. private TypePattern resolveWildTypePattern(String source, boolean requireExact) {
  301. WildTypePattern wtp = makeWildTypePattern(source);
  302. return wtp.resolveBindings(scope, bindings, false, requireExact);
  303. }
  304. private WildTypePattern makeWildTypePattern(String source) {
  305. PatternParser parser = new PatternParser(source);
  306. return (WildTypePattern) parser.parseTypePattern();
  307. }
  308. private TypePattern writeAndRead(TypePattern etp) {
  309. try {
  310. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  311. ConstantPoolSimulator cps = new ConstantPoolSimulator();
  312. CompressingDataOutputStream dos = new CompressingDataOutputStream(baos, cps);
  313. etp.write(dos);
  314. dos.flush();
  315. dos.close();
  316. ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
  317. VersionedDataInputStream in = new VersionedDataInputStream(bais, cps);
  318. in.setVersion(new WeaverVersionInfo());
  319. TypePattern ret = TypePattern.read(in, null);
  320. return ret;
  321. } catch (IOException ioEx) {
  322. fail(ioEx + " thrown during serialization");
  323. }
  324. return null;
  325. }
  326. protected void setUp() throws Exception {
  327. super.setUp();
  328. this.world = new BcelWorld();
  329. this.world.setBehaveInJava5Way(true);
  330. this.bindings = new Bindings(0);
  331. this.scope = new SimpleScope(world, new FormalBinding[] {});
  332. this.scope.setImportedPrefixes(new String[] { "java.io.", "java.util.", "java.lang." });
  333. this.javaLangString = UnresolvedType.forName("java.lang.String").resolve(world);
  334. this.javaUtilList = UnresolvedType.forName("java.util.List").resolve(world);
  335. this.javaUtilListOfString = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { javaLangString },
  336. world);
  337. this.javaUtilListOfDouble = TypeFactory.createParameterizedType(javaUtilList, new UnresolvedType[] { UnresolvedType
  338. .forName("java.lang.Double").resolve(world) }, world);
  339. this.javaUtilListOfSomething = TypeFactory.createParameterizedType(javaUtilList,
  340. new UnresolvedType[] { UnresolvedType.SOMETHING.resolve(world) }, world);
  341. }
  342. }