From 1b0e87f99e92288a2df180172d28477c970a499b Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 18 Feb 2014 19:31:08 +0100 Subject: [PATCH] java 8: allow to cast to intersection types --- .../src/com/intellij/psi/util/TypeConversionUtil.java | 6 ++++++ .../genericsHighlighting8/CastToIntersectionType.java | 10 ++++++++++ .../daemon/lambda/GenericsHighlighting8Test.java | 4 ++++ 3 files changed, 20 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/CastToIntersectionType.java diff --git a/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java b/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java index 385e3a69fe0f..a15ec8d49e37 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java @@ -105,6 +105,12 @@ public class TypeConversionUtil { final int toTypeRank = getTypeRank(toType); if (!toIsPrimitive) { if (fromTypeRank == toTypeRank) return true; + if (toType instanceof PsiIntersectionType) { + for (PsiType type : ((PsiIntersectionType)toType).getConjuncts()) { + if (!areTypesConvertible(fromType, type)) return false; + } + return true; + } // JLS 5.5: A value of a primitive type can be cast to a reference type by boxing conversion(see 5.1.7) if (!(toType instanceof PsiClassType)) return false; PsiClass toClass = ((PsiClassType)toType).resolve(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/CastToIntersectionType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/CastToIntersectionType.java new file mode 100644 index 000000000000..26f0cc31c0fc --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/CastToIntersectionType.java @@ -0,0 +1,10 @@ +import java.io.Serializable; + +class X { + + void foo(T param) {} + + { + foo((Integer & Serializable)0); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java index 58e38c5c3a13..161d864d0e17 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java @@ -739,6 +739,10 @@ public class GenericsHighlighting8Test extends LightDaemonAnalyzerTestCase { doTest(); } + public void testCastToIntersectionType() throws Exception { + doTest(); + } + private void doTest() { doTest(false); }