mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] fixes broken generic signature parsing (IDEA-158330)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user