diff --git a/java/java-psi-api/src/com/intellij/psi/PsiNameHelper.java b/java/java-psi-api/src/com/intellij/psi/PsiNameHelper.java index 8026d4673fd6..be2427b4e62a 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiNameHelper.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiNameHelper.java @@ -181,7 +181,6 @@ public abstract class PsiNameHelper { @NotNull public static String[] getClassParametersText(@NotNull String referenceText) { if (referenceText.indexOf('<') < 0) return ArrayUtil.EMPTY_STRING_ARRAY; - referenceText = removeWhitespace(referenceText); final char[] chars = referenceText.toCharArray(); int afterLastDotIndex = 0; diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsReferenceParameterListImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsReferenceParameterListImpl.java index aa2fae39657d..002563098c53 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsReferenceParameterListImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsReferenceParameterListImpl.java @@ -16,14 +16,20 @@ package com.intellij.psi.impl.compiled; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.*; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiReferenceParameterList; +import com.intellij.psi.PsiType; +import com.intellij.psi.PsiTypeElement; import com.intellij.psi.impl.source.tree.TreeElement; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class ClsReferenceParameterListImpl extends ClsElementImpl implements PsiReferenceParameterList { - @NonNls private static final String EXTENDS_PREFIX = "?extends"; - @NonNls private static final String SUPER_PREFIX = "?super"; + @NonNls private static final Pattern EXTENDS_PREFIX = Pattern.compile("^(\\?\\s*extends\\s*)(.*)"); + @NonNls private static final Pattern SUPER_PREFIX = Pattern.compile("^(\\?\\s*super\\s*)(.*)"); private final PsiElement myParent; private final ClsTypeElementImpl[] myTypeParameters; @@ -38,17 +44,21 @@ public class ClsReferenceParameterListImpl extends ClsElementImpl implements Psi for (int i = 0; i < length; i++) { String s = classParameters[length - i - 1]; char variance = ClsTypeElementImpl.VARIANCE_NONE; - if (s.startsWith(EXTENDS_PREFIX)) { + final Matcher extendsMatcher = EXTENDS_PREFIX.matcher(s); + if (extendsMatcher.find()) { variance = ClsTypeElementImpl.VARIANCE_EXTENDS; - s = s.substring(EXTENDS_PREFIX.length()); + s = extendsMatcher.group(2); } - else if (s.startsWith(SUPER_PREFIX)) { - variance = ClsTypeElementImpl.VARIANCE_SUPER; - s = s.substring(SUPER_PREFIX.length()); - } - else if (StringUtil.startsWithChar(s, '?')) { - variance = ClsTypeElementImpl.VARIANCE_INVARIANT; - s = s.substring(1); + else { + final Matcher superMatcher = SUPER_PREFIX.matcher(s); + if (superMatcher.find()) { + variance = ClsTypeElementImpl.VARIANCE_SUPER; + s = superMatcher.group(2); + } + else if (StringUtil.startsWithChar(s, '?')) { + variance = ClsTypeElementImpl.VARIANCE_INVARIANT; + s = s.substring(1); + } } myTypeParameters[i] = new ClsTypeElementImpl(this, s, variance); diff --git a/java/java-tests/testData/codeInsight/clsHighlighting/IDEA146452.java b/java/java-tests/testData/codeInsight/clsHighlighting/IDEA146452.java new file mode 100644 index 000000000000..8b43cd54574d --- /dev/null +++ b/java/java-tests/testData/codeInsight/clsHighlighting/IDEA146452.java @@ -0,0 +1,11 @@ +package com.badinterface; + +import java.util.List; +import java.util.concurrent.Future; + +class Test { + private void foo(BadInterface2 b, BadInterface3 b3) { + final Future process = b.process(); + final Future> process3 = b3.process(); + } +} diff --git a/java/java-tests/testData/codeInsight/clsHighlighting/libs/IDEA146452.jar b/java/java-tests/testData/codeInsight/clsHighlighting/libs/IDEA146452.jar new file mode 100644 index 000000000000..91b3024f41df Binary files /dev/null and b/java/java-tests/testData/codeInsight/clsHighlighting/libs/IDEA146452.jar differ diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics15HighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics15HighlightingTest.java index 36533d72893d..80a601d18c7a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics15HighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics15HighlightingTest.java @@ -27,4 +27,5 @@ public class ClsGenerics15HighlightingTest extends ClsGenericsHighlightingTest { public void testIDEA97887() { doTest(); } public void testIDEA118733() { doTest(); } + public void testIDEA146452() { doTest(); } }