From 503bc62a4441ca925873b92a6d27170673461ebf Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Mon, 16 Apr 2012 15:03:37 -0700 Subject: [PATCH] 376918 --- .../org/aspectj/weaver/UnresolvedType.java | 39 +++++++++++-------- .../weaver/CommonReferenceTypeTests.java | 22 +++++++++++ 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/UnresolvedType.java b/org.aspectj.matcher/src/org/aspectj/weaver/UnresolvedType.java index 6101f6536..14d00e5b1 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/UnresolvedType.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/UnresolvedType.java @@ -710,11 +710,17 @@ public class UnresolvedType implements Traceable, TypeVariableDeclaringElement { private static String nameToSignature(String name) { int len = name.length(); if (len < 8) { - if (name.equals("byte")) { - return "B"; + if (name.equals("int")) { + return "I"; } - if (name.equals("char")) { - return "C"; + if (name.equals("void")) { + return "V"; + } + if (name.equals("long")) { + return "J"; + } + if (name.equals("boolean")) { + return "Z"; } if (name.equals("double")) { return "D"; @@ -722,32 +728,31 @@ public class UnresolvedType implements Traceable, TypeVariableDeclaringElement { if (name.equals("float")) { return "F"; } - if (name.equals("int")) { - return "I"; - } - if (name.equals("long")) { - return "J"; + if (name.equals("byte")) { + return "B"; } if (name.equals("short")) { return "S"; } - if (name.equals("boolean")) { - return "Z"; - } - if (name.equals("void")) { - return "V"; + if (name.equals("char")) { + return "C"; } if (name.equals("?")) { return name; } } + if (len == 0) { + throw new BCException("Bad type name: " + name); + } if (name.endsWith("[]")) { return "[" + nameToSignature(name.substring(0, name.length() - 2)); } - if (len == 0) { - throw new BCException("Bad type name: " + name); + + // Sometimes the 'name' for an array is of the form: [Ljava.lang.String; + if (name.charAt(0)=='[') { + return name.replace('.','/'); } - + if (name.indexOf("<") == -1) { // not parameterized return new StringBuilder("L").append(name.replace('.', '/')).append(';').toString(); diff --git a/weaver5/java5-testsrc/org/aspectj/weaver/CommonReferenceTypeTests.java b/weaver5/java5-testsrc/org/aspectj/weaver/CommonReferenceTypeTests.java index c84369758..8d683e8af 100644 --- a/weaver5/java5-testsrc/org/aspectj/weaver/CommonReferenceTypeTests.java +++ b/weaver5/java5-testsrc/org/aspectj/weaver/CommonReferenceTypeTests.java @@ -33,6 +33,28 @@ public abstract class CommonReferenceTypeTests extends TestCase { assertEquals("Signatures not equal ", "[Pjava/util/List;>;", ut.getSignature()); assertEquals("Names not equal ", "java.util.List>[]", ut.getName()); } + + public void testArrays() { + world.setBehaveInJava5Way(true); + UnresolvedType ut = null; + ut = UnresolvedType.forName("[Ljava.lang.String;"); + assertEquals("[Ljava/lang/String;",ut.getSignature()); + UnresolvedType reified = UnresolvedType.forSignature(ut.getSignature()); + ResolvedType rt = world.resolve(reified); + assertEquals("[Ljava/lang/String;",rt.getSignature()); + assertEquals("java.lang.String[]",rt.getName()); + assertFalse(rt.isMissing()); + + ut = UnresolvedType.forName("[[[[Ljava.lang.String;"); + assertEquals("[[[[Ljava/lang/String;",ut.getSignature()); + reified = UnresolvedType.forSignature(ut.getSignature()); + rt = world.resolve(reified); + assertEquals("[[[[Ljava/lang/String;",rt.getSignature()); + assertEquals("java.lang.String[][][][]",rt.getName()); + assertTrue(rt.isArray()); + assertTrue(rt.getComponentType().isArray()); + assertFalse(rt.isMissing()); + } public void testIsRawTrue() { world.setBehaveInJava5Way(true); -- 2.39.5