From 681bfe7ba65ab1bd13b3961cb7c9b2db354995af Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 19 Jun 2018 15:48:49 +0300 Subject: [PATCH] enable explicit type -> var for diamonds (IDEA-188771) expand diamonds and spare on explicit type declaration --- .../RedundantExplicitVariableTypeInspection.java | 13 +++++++++++++ .../quickFix/explicit2var/afterDiamond.java | 8 ++++++++ .../quickFix/explicit2var/beforeDiamond.java | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2var/afterDiamond.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantExplicitVariableTypeInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantExplicitVariableTypeInspection.java index c4f84e62ad1f..0ae260304d00 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantExplicitVariableTypeInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantExplicitVariableTypeInspection.java @@ -5,6 +5,7 @@ import com.intellij.openapi.project.Project; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; +import com.intellij.psi.impl.PsiDiamondTypeUtil; import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -58,6 +59,18 @@ public class RedundantExplicitVariableTypeInspection extends AbstractBaseJavaLoc } private static PsiElement replaceExplicitTypeWithVar(PsiTypeElement typeElement, PsiElement context) { + PsiElement parent = typeElement.getParent(); + if (parent instanceof PsiVariable) { + PsiExpression copyVariableInitializer = ((PsiVariable)parent).getInitializer(); + if (copyVariableInitializer instanceof PsiNewExpression) { + final PsiDiamondType.DiamondInferenceResult diamondResolveResult = + PsiDiamondTypeImpl.resolveInferredTypesNoCheck((PsiNewExpression)copyVariableInitializer, copyVariableInitializer); + if (!diamondResolveResult.getInferredTypes().isEmpty()) { + PsiDiamondTypeUtil.expandTopLevelDiamondsInside(copyVariableInitializer); + } + } + } + return typeElement.replace(JavaPsiFacade.getElementFactory(context.getProject()).createTypeElementFromText("var", context)); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2var/afterDiamond.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2var/afterDiamond.java new file mode 100644 index 000000000000..4a42029869b6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2var/afterDiamond.java @@ -0,0 +1,8 @@ +// "Replace explicit type with 'var'" "true" +class Main { + { + var i = new A(); + } + + static class A {} +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2var/beforeDiamond.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2var/beforeDiamond.java index cd11f79a3cc0..5cf5d226a22d 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2var/beforeDiamond.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/explicit2var/beforeDiamond.java @@ -1,4 +1,4 @@ -// "Replace explicit type with 'var'" "false" +// "Replace explicit type with 'var'" "true" class Main { { A i = new A<>();