summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-08-24 19:20:56 +0000
committeracolyer <acolyer>2005-08-24 19:20:56 +0000
commit803616d373f1c366e133f87342b88514cc5f74c3 (patch)
tree43b3947fd8c10b79781ffcaf88b6fbe387af1435
parentcc6e6812fa6908d315e2f07195bca3914438cb1a (diff)
downloadaspectj-803616d373f1c366e133f87342b88514cc5f74c3.tar.gz
aspectj-803616d373f1c366e133f87342b88514cc5f74c3.zip
fix for pr107784, failure to parse an array of a primitive type when used as a type variable
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/GenericSignatureParser.java8
-rw-r--r--bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParserTest.java6
2 files changed, 13 insertions, 1 deletions
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("<Parent:Ljava/lang/Object;Child:Ljava/lang/Object;>Ljava/lang/Object;");
+ }
+
private void assertEquals(String[] expected, String[] actual) {
if (actual.length != expected.length) {
int shorter = Math.min(expected.length,actual.length);