[java] fixes broken generic signature parsing (IDEA-158330)

This commit is contained in:
Roman Shevchenko
2016-07-11 11:21:08 +02:00
parent 004b675980
commit ebd3766ac6
2 changed files with 10 additions and 2 deletions
@@ -98,15 +98,18 @@ public class SignatureParsing {
}
}
private static String parseTypeVariableRefSignature(CharacterIterator signature) {
private static String parseTypeVariableRefSignature(CharacterIterator signature) throws ClsFormatException {
StringBuilder id = new StringBuilder();
signature.next();
while (signature.current() != ';' && signature.current() != '>') {
while (signature.current() != ';' && signature.current() != '>' && signature.current() != CharacterIterator.DONE) {
id.append(signature.current());
signature.next();
}
if (signature.current() == CharacterIterator.DONE) {
throw new ClsFormatException();
}
if (signature.current() == ';') {
signature.next();
}
@@ -41,6 +41,11 @@ public class SignatureParsingTest {
assertEquals("p.Obj$.I<p.$Obj1.I,p.Obj2.I$>", parseTypeString("Lp/Obj$$I<Lp/$Obj1$I;Lp/Obj2$I$;>;"));
}
@Test(expected = ClsFormatException.class)
public void testIllegal() throws ClsFormatException {
parseTypeString("T");
}
private static String parseTypeString(String signature) throws ClsFormatException {
return SignatureParsing.parseTypeString(new StringCharacterIterator(signature), StubBuildingVisitor.GUESSING_MAPPER);
}