From b720fb0c9a03d639e9578f991bad38ae67ab39bb Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 2 Jun 2020 13:14:09 +0700 Subject: [PATCH] DfaPsiUtil#tryGenerify: add wildcards if generify fails GitOrigin-RevId: 82a9e01bb6a6fbb3bd785e3bab2d8a3ebb018420 --- .../codeInspection/dataFlow/DfaPsiUtil.java | 13 ++++++++++++- .../completion/normal/AfterAssertTrueDfa_after.java | 2 +- .../normal/InstanceOfDisjunction2_after.java | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java index 34fa7d5706bf..2045cfd181ca 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java @@ -563,7 +563,18 @@ public class DfaPsiUtil { if (psiClass == null) return classType; PsiType expressionType = expression.getType(); if (!(expressionType instanceof PsiClassType)) return classType; - return GenericsUtil.getExpectedGenericType(expression, psiClass, (PsiClassType)expressionType); + PsiClassType result = GenericsUtil.getExpectedGenericType(expression, psiClass, (PsiClassType)expressionType); + if (result.isRaw()) { + PsiClass aClass = result.resolve(); + if (aClass != null) { + int length = aClass.getTypeParameters().length; + PsiWildcardType wildcard = PsiWildcardType.createUnbounded(aClass.getManager()); + PsiType[] arguments = new PsiType[length]; + Arrays.fill(arguments, wildcard); + return JavaPsiFacade.getElementFactory(aClass.getProject()).createType(aClass, arguments); + } + } + return result; } /** diff --git a/java/java-tests/testData/codeInsight/completion/normal/AfterAssertTrueDfa_after.java b/java/java-tests/testData/codeInsight/completion/normal/AfterAssertTrueDfa_after.java index 19709329d168..62869f8f53c8 100644 --- a/java/java-tests/testData/codeInsight/completion/normal/AfterAssertTrueDfa_after.java +++ b/java/java-tests/testData/codeInsight/completion/normal/AfterAssertTrueDfa_after.java @@ -5,7 +5,7 @@ public class ExampleTest { Map data = doWork(); Object value = data.get("name"); assertTrue(value instanceof Map); - ((Map) value).getOrDefault() + ((Map) value).getOrDefault() } native Map doWork(); diff --git a/java/java-tests/testData/codeInsight/completion/normal/InstanceOfDisjunction2_after.java b/java/java-tests/testData/codeInsight/completion/normal/InstanceOfDisjunction2_after.java index e746948371f5..8fae9a511b57 100644 --- a/java/java-tests/testData/codeInsight/completion/normal/InstanceOfDisjunction2_after.java +++ b/java/java-tests/testData/codeInsight/completion/normal/InstanceOfDisjunction2_after.java @@ -4,7 +4,7 @@ import java.util.function.Function; class Test { long test(Object obj) { if (obj instanceof Integer || obj instanceof Long || obj instanceof String) { - ((Comparable) obj).compareTo() + ((Comparable) obj).compareTo() } return -1; }