From c1980f461153482e520612a203995ee6cfafec0f Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 8 May 2014 13:22:02 +0200 Subject: [PATCH] check Pair types with actual parameters types --- .../internal/DontUseNewPairInspection.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/plugins/devkit/src/inspections/internal/DontUseNewPairInspection.java b/plugins/devkit/src/inspections/internal/DontUseNewPairInspection.java index 658543375f5e..23405f180c5a 100644 --- a/plugins/devkit/src/inspections/internal/DontUseNewPairInspection.java +++ b/plugins/devkit/src/inspections/internal/DontUseNewPairInspection.java @@ -18,15 +18,15 @@ package org.jetbrains.idea.devkit.inspections.internal; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.pom.java.LanguageLevel; -import com.intellij.psi.JavaElementVisitor; -import com.intellij.psi.PsiElementVisitor; -import com.intellij.psi.PsiNewExpression; -import com.intellij.psi.PsiType; +import com.intellij.psi.*; +import com.intellij.psi.impl.source.PsiClassReferenceType; import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.devkit.inspections.quickfix.ChangeToPairCreateQuickFix; +import java.util.Arrays; + /** * @author Konstantin Bulenkov */ @@ -39,10 +39,17 @@ public class DontUseNewPairInspection extends InternalInspection { @Override public void visitNewExpression(PsiNewExpression expression) { final PsiType type = expression.getType(); - if (type != null && type.getCanonicalText().startsWith(PAIR_FQN) + final PsiExpressionList params = expression.getArgumentList(); + if (type != null && type.getCanonicalText().startsWith(PAIR_FQN) && params != null + && !(type instanceof PsiArrayType) && expression.getText().indexOf('(') > 0 + && type instanceof PsiClassReferenceType && !PsiUtil.getLanguageLevel(expression).isAtLeast(LanguageLevel.JDK_1_7)) { //diamonds - holder.registerProblem(expression, "Replace to Pair.create()", ProblemHighlightType.GENERIC_ERROR_OR_WARNING, new ChangeToPairCreateQuickFix()); + final PsiType[] types = ((PsiClassReferenceType)type).getParameters(); + if (Arrays.equals(types, params.getExpressionTypes())) { + holder.registerProblem(expression, "Replace to Pair.create()", ProblemHighlightType.GENERIC_ERROR_OR_WARNING, + new ChangeToPairCreateQuickFix()); + } } super.visitNewExpression(expression); }