From 738850d65f1dfbc6e2e1a9d43857de55d77f9b49 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 5 Sep 2017 15:38:57 +0300 Subject: [PATCH] disable explicit types can be diamond for augmented types https://github.com/mplushnikov/lombok-intellij-plugin/issues/359 --- .../intellij/psi/impl/PsiDiamondTypeUtil.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiDiamondTypeUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiDiamondTypeUtil.java index acb1cd8d8e3a..4681764c4ff0 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiDiamondTypeUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiDiamondTypeUtil.java @@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; +import com.intellij.psi.augment.PsiAugmentProvider; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.infos.MethodCandidateInfo; @@ -145,6 +146,20 @@ public class PsiDiamondTypeUtil { return typeText; } + private static boolean isAugmented(PsiExpression expression) { + PsiElement gParent = PsiUtil.skipParenthesizedExprUp(expression.getParent()); + PsiTypeElement typeElement = null; + if (gParent instanceof PsiVariable) { + typeElement = ((PsiVariable)gParent).getTypeElement(); + } + else if (gParent instanceof PsiReturnStatement) { + PsiMethod method = PsiTreeUtil.getParentOfType(gParent, PsiMethod.class); + LOG.assertTrue(method != null); + typeElement = method.getReturnTypeElement(); + } + return typeElement != null && PsiAugmentProvider.getInferredType(typeElement) != null; + } + public static boolean areTypeArgumentsRedundant(PsiType[] typeArguments, PsiExpression expression, boolean constructorRef, @@ -154,6 +169,9 @@ public class PsiDiamondTypeUtil { final PsiElement copy; final PsiType typeByParent = PsiTypesUtil.getExpectedTypeByParent(expression); if (typeByParent != null) { + if (isAugmented(expression)) { + return false; + } final String arrayInitializer = "new " + typeByParent.getCanonicalText() + "[]{0}"; final Project project = expression.getProject(); final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();