From 5ae8fd75d09b1f4f4d178e1371a96756ff3edd8b Mon Sep 17 00:00:00 2001 From: acolyer Date: Wed, 24 Aug 2005 13:55:38 +0000 Subject: better error messages when failing to unpack a generic signature --- .../bcel/classfile/GenericSignatureParser.java | 12 ++++++++---- .../tests/GenericSignatureParserTest.java | 9 +++++++++ lib/bcel/bcel-src.zip | Bin 870530 -> 870568 bytes lib/bcel/bcel.jar | Bin 593555 -> 593606 bytes 4 files changed, 17 insertions(+), 4 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 0160278d3..9c7ef4e81 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/GenericSignatureParser.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/GenericSignatureParser.java @@ -30,6 +30,7 @@ import org.aspectj.apache.bcel.classfile.Signature.BaseTypeSignature; */ public class GenericSignatureParser { + private String inputString; private String[] tokenStream; // for parse in flight private int tokenIndex = 0; @@ -39,6 +40,7 @@ public class GenericSignatureParser { * the grammar defined in Section 4.4.4 of the JVM specification. */ public Signature.ClassSignature parseAsClassSignature(String sig) { + this.inputString = sig; tokenStream = tokenize(sig); tokenIndex = 0; Signature.ClassSignature classSig = new Signature.ClassSignature(); @@ -67,6 +69,7 @@ public class GenericSignatureParser { * the grammar defined in Section 4.4.4 of the JVM specification. */ public MethodTypeSignature parseAsMethodSignature(String sig) { + this.inputString = sig; tokenStream = tokenize(sig); tokenIndex = 0; FormalTypeParameter[] formals = new FormalTypeParameter[0]; @@ -115,6 +118,7 @@ public class GenericSignatureParser { * the grammar defined in Section 4.4.4 of the JVM specification. */ public FieldTypeSignature parseAsFieldSignature(String sig) { + this.inputString = sig; tokenStream = tokenize(sig); tokenIndex = 0; return parseFieldTypeSignature(false); @@ -156,8 +160,8 @@ public class GenericSignatureParser { } else if (tokenStream[tokenIndex].startsWith("T")) { return parseTypeVariableSignature(); } else { - throw new IllegalStateException("Expection [,L, or T, but found " + - tokenStream[tokenIndex]); + throw new IllegalStateException("Expecting [,L, or T, but found " + + tokenStream[tokenIndex] + " while unpacking " + inputString); } } @@ -218,7 +222,7 @@ public class GenericSignatureParser { nestedTypes = new SimpleClassTypeSignature[nestedTypeList.size()]; nestedTypeList.toArray(nestedTypes); } else { - throw new IllegalStateException("Expecting .,<, or ;, but found " + tokenStream[tokenIndex]); + throw new IllegalStateException("Expecting .,<, or ;, but found " + tokenStream[tokenIndex] + " while unpacking " + inputString); } } ret.append(";"); @@ -282,7 +286,7 @@ public class GenericSignatureParser { private void eat(String token) { if (!tokenStream[tokenIndex].equals(token)) { - throw new IllegalStateException("Expecting " + token + " but found " + tokenStream[tokenIndex]); + throw new IllegalStateException("Expecting " + token + " but found " + tokenStream[tokenIndex] + " while unpacking " + inputString); } tokenIndex++; } 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 ae7ad5389..12a9f1ff1 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 @@ -225,6 +225,15 @@ public class GenericSignatureParserTest extends TestCase { } } + public void testFullyQualifiedSuperclassAfterTypeParams() { + try { + Signature.FieldTypeSignature cSig = parser.parseAsFieldSignature("Ljava/util/List