From b1b3b1db372cb9b2bb3a42f64c8dce5fc75089ea Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 2 Jun 2014 20:13:55 +0400 Subject: [PATCH] accept intersection types in foreach stmts (IDEA-125800) --- .../daemon/impl/analysis/JavaGenericsUtil.java | 8 ++++++++ .../genericsHighlighting/IDEA125800.java | 10 ++++++++++ .../codeInsight/daemon/GenericsHighlightingTest.java | 1 + 3 files changed, 19 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125800.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaGenericsUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaGenericsUtil.java index a79aeced5384..f24a5db53539 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaGenericsUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaGenericsUtil.java @@ -286,6 +286,14 @@ public class JavaGenericsUtil { PsiType itemType = superClassSubstitutor.substitute(typeParameter); return itemType == null ? PsiType.getJavaLangObject(manager, aClass.getResolveScope()) : itemType; } + if (type instanceof PsiIntersectionType) { + for (PsiType conjunct : ((PsiIntersectionType)type).getConjuncts()) { + final PsiType itemType = getCollectionItemType(conjunct, scope); + if (itemType != null) { + return itemType; + } + } + } return null; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125800.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125800.java new file mode 100644 index 000000000000..1ec56b8a6c52 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125800.java @@ -0,0 +1,10 @@ +import java.util.List; + +abstract class Test { + abstract & Runnable> T list(); + + public void test() + { + for (String s : list()) {} + } +} 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 770f79cb0627..05ced906682d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -364,6 +364,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA119757() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } public void testIDEA67578() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } public void testIDEA57388() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } + public void testIDEA125800() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } //jdk should propagate LL 1.4 but actually it provides LL 1.7?! public void testCastObjectToIntJdk14() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_4, false); }