From 803616d373f1c366e133f87342b88514cc5f74c3 Mon Sep 17 00:00:00 2001 From: acolyer Date: Wed, 24 Aug 2005 19:20:56 +0000 Subject: fix for pr107784, failure to parse an array of a primitive type when used as a type variable --- .../org/aspectj/apache/bcel/classfile/GenericSignatureParser.java | 8 +++++++- .../apache/bcel/classfile/tests/GenericSignatureParserTest.java | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'bcel-builder') diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/GenericSignatureParser.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/GenericSignatureParser.java index 9c7ef4e81..fac5f506b 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/GenericSignatureParser.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/GenericSignatureParser.java @@ -306,6 +306,7 @@ public class GenericSignatureParser { List tokens = new ArrayList(); StringBuffer identifier = new StringBuffer(); boolean inParens = false; + boolean inArray = false; boolean couldSeePrimitive = false; do { switch (chars[index]) { @@ -335,6 +336,7 @@ public class GenericSignatureParser { identifier = new StringBuffer(); tokens.add(";"); couldSeePrimitive = true; + inArray = false; break; case '^': if (identifier.length() > 0) tokens.add(identifier.toString()); @@ -366,6 +368,8 @@ public class GenericSignatureParser { break; case '[' : tokens.add("["); + couldSeePrimitive = true; + inArray = true; break; case 'B' : case 'C' : @@ -376,11 +380,13 @@ public class GenericSignatureParser { case 'S' : case 'V' : case 'Z' : - if (inParens && couldSeePrimitive && identifier.length() == 0) { + if ((inParens || inArray) && couldSeePrimitive && identifier.length() == 0) { tokens.add(new String("" + chars[index])); } else { identifier.append(chars[index]); } + couldSeePrimitive = false; + inArray = false; break; default : identifier.append(chars[index]); diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParserTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParserTest.java index 12a9f1ff1..bac45e316 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParserTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParserTest.java @@ -234,6 +234,12 @@ public class GenericSignatureParserTest extends TestCase { } } + public void testPr107784() { + parser.parseAsMethodSignature( + "(Lcom/cibc/responders/mapping/CommonDataBeanScenario;Ljava/lang/Object;)Lcom/cibc/responders/response/Formatter<[BLjava/lang/Object;>;"); + parser.parseAsClassSignature("Ljava/lang/Object;"); + } + private void assertEquals(String[] expected, String[] actual) { if (actual.length != expected.length) { int shorter = Math.min(expected.length,actual.length); -- cgit v1.2.3