From b37fec0b4c8706f8f8c26dc309dd25f18d48f037 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 8 May 2013 15:05:27 +0200 Subject: [PATCH] illegal forward references in type parameter's declaration detection (< 1.7 IDEA-57260) --- .../daemon/impl/analysis/GenericsHighlightUtil.java | 8 ++++++++ .../IllegalForwardReferenceInTypeParameterDefinition.java | 2 ++ .../codeInsight/daemon/GenericsHighlightingTest.java | 1 + 3 files changed, 11 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalForwardReferenceInTypeParameterDefinition.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java index fd088bf30c18..000a035944c3 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java @@ -1008,6 +1008,14 @@ public class GenericsHighlightUtil { return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(typeParameter2).descriptionAndTooltip(message).create(); } } + if (!JavaVersionService.getInstance().isAtLeast(parameterList, JavaSdkVersion.JDK_1_7)) { + for (PsiJavaCodeReferenceElement referenceElement : typeParameter1.getExtendsList().getReferenceElements()) { + final PsiElement resolve = referenceElement.resolve(); + if (resolve instanceof PsiTypeParameter && ArrayUtilRt.find(typeParameters, resolve) > i) { + return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(referenceElement.getTextRange()).descriptionAndTooltip("Illegal forward reference").create(); + } + } + } } return null; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalForwardReferenceInTypeParameterDefinition.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalForwardReferenceInTypeParameterDefinition.java new file mode 100644 index 000000000000..cbc96adeadc9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalForwardReferenceInTypeParameterDefinition.java @@ -0,0 +1,2 @@ +class AS, S> { +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index 2c2a11ab74b5..6d0bc120daf6 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -236,6 +236,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA20244() throws Exception { doTest5(false);} public void testIDEA22005() throws Exception { doTest5(false);} public void testInheritedWithDifferentArgsInTypeParams() throws Exception { doTest5(false);} + public void testIllegalForwardReferenceInTypeParameterDefinition() throws Exception { doTest5(false);} public void testIDEA57877() throws Exception { doTest5(false);} public void testTypeParamsCyclicInference() throws Exception { doTest5(false);}