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<>();