package de.plushnikov.intellij.plugin.inspection; import com.intellij.codeInspection.ExplicitTypeCanBeDiamondInspection; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.JavaElementVisitor; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiLocalVariable; import com.intellij.psi.PsiNewExpression; import de.plushnikov.intellij.plugin.processor.ValProcessor; import org.jetbrains.annotations.NotNull; /** * Overwrites intellij standard diamond inspection, to filter out lombok "val", "var" declarations */ public class LombokExplicitTypeCanBeDiamondInspection extends ExplicitTypeCanBeDiamondInspection { @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { final JavaElementVisitor originalVisitor = (JavaElementVisitor) super.buildVisitor(holder, isOnTheFly); return new JavaElementVisitor() { @Override public void visitNewExpression(PsiNewExpression expression) { if (!possibleValDeclaration(expression)) { originalVisitor.visitNewExpression(expression); } } private boolean possibleValDeclaration(PsiNewExpression expression) { final PsiElement expressionParent = expression.getParent(); return expressionParent instanceof PsiLocalVariable && ValProcessor.isValOrVar((PsiLocalVariable) expressionParent); } }; } }