diff --git a/java/java-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java b/java/java-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java index 832d4c4fd7b3..1c86e76f7f3f 100644 --- a/java/java-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java +++ b/java/java-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java @@ -169,6 +169,10 @@ public class SignatureParsing { public static String parseClassOrTypeVariableElement(CharacterIterator signature) throws ClsFormatException { char variance = parseVariance(signature); + if (variance == '*') { + return decorateTypeText("*", variance); + } + int arrayCount = 0; while (signature.current() == '[') { arrayCount++; @@ -184,9 +188,6 @@ public class SignatureParsing { } return decorateTypeText(ref, variance); } - else if (variance == '*') { - return decorateTypeText("*", variance); - } else { throw new ClsFormatException(); } diff --git a/java/java-tests/testSrc/com/intellij/psi/SignatureParsingTest.java b/java/java-tests/testSrc/com/intellij/psi/SignatureParsingTest.java new file mode 100644 index 000000000000..caa75a008a85 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/psi/SignatureParsingTest.java @@ -0,0 +1,17 @@ +/* + * @author max + */ +package com.intellij.psi; + +import com.intellij.psi.impl.compiled.SignatureParsing; +import junit.framework.TestCase; + +import java.text.StringCharacterIterator; + +public class SignatureParsingTest extends TestCase { + public void testVarianceAmbiguity() throws Exception { + assertEquals("Psi", SignatureParsing.parseTypeString(new StringCharacterIterator("LPsi<*TP>;"))); + assertEquals("Psi", SignatureParsing.parseTypeString(new StringCharacterIterator("LPsi<+TP>;"))); + assertEquals("Psi", SignatureParsing.parseTypeString(new StringCharacterIterator("LPsi<-TP>;"))); + } +}