From 6a3027916878a00f2022e6f7f57e2064c1f6ec04 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 29 Jan 2014 21:52:48 +0400 Subject: [PATCH] deeply eliminate wildcards as they may appear during inference in wildcard's bounds --- .../src/com/intellij/psi/GenericsUtil.java | 3 +-- .../newMethodRef/DeepWildcardEliminating.java | 14 ++++++++++++++ .../lambda/NewMethodRefHighlightingTest.java | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/DeepWildcardEliminating.java diff --git a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java index b7d5c66091e8..a47d9e593947 100644 --- a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java @@ -489,8 +489,7 @@ public class GenericsUtil { } else if (type instanceof PsiWildcardType) { final PsiType bound = ((PsiWildcardType)type).getBound(); - return bound != null ? bound - : ((PsiWildcardType)type).getExtendsBound();//object + return eliminateWildcards(bound != null ? bound : ((PsiWildcardType)type).getExtendsBound(), false);//object } else if (type instanceof PsiCapturedWildcardType && !eliminateInTypeArguments) { return eliminateWildcards(((PsiCapturedWildcardType)type).getWildcard(), eliminateInTypeArguments); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/DeepWildcardEliminating.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/DeepWildcardEliminating.java new file mode 100644 index 000000000000..385a644d6ccf --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/DeepWildcardEliminating.java @@ -0,0 +1,14 @@ +import java.util.Arrays; +import java.util.List; + +class FunctionReferenceTest { + public static void main(String[] args) { + List strings = Arrays.asList(); + + int sum = strings.stream().mapToInt(CharSequence::length).sum(); + + List sequences = strings; + + sum = sequences.stream().mapToInt(CharSequence::length).sum(); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java index 16b50c161ae0..e3545978c820 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java @@ -133,6 +133,10 @@ public class NewMethodRefHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testDeepWildcardEliminating() throws Exception { + doTest(); + } + private void doTest() { doTest(false); }