enable explicit type -> var for diamonds (IDEA-188771)

expand diamonds and spare on explicit type declaration
This commit is contained in:
Anna Kozlova
2018-06-19 15:50:48 +03:00
parent 1347548a83
commit 681bfe7ba6
3 changed files with 22 additions and 1 deletions
@@ -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));
}
@@ -0,0 +1,8 @@
// "Replace explicit type with 'var'" "true"
class Main {
{
var i = new A<String>();
}
static class A<T> {}
}
@@ -1,4 +1,4 @@
// "Replace explicit type with 'var'" "false"
// "Replace explicit type with 'var'" "true"
class Main {
{
<caret>A<String> i = new A<>();