IG: improved and added quickfix to "Confusing primitive array argument to varargs method" inspection

This commit is contained in:
Bas Leijdekkers
2015-12-31 14:46:18 +01:00
parent 3386c28d55
commit a6fe4c6d2f
4 changed files with 34 additions and 9 deletions
@@ -319,7 +319,8 @@
<localInspection groupPath="Java" language="JAVA" shortName="ObjectToString" bundle="com.siyeh.InspectionGadgetsBundle" key="default.tostring.call.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.bugs.ObjectToStringInspection"/>
<localInspection groupPath="Java" language="JAVA" shortName="PrimitiveArrayArgumentToVariableArgMethod" bundle="com.siyeh.InspectionGadgetsBundle"
<localInspection groupPath="Java" language="JAVA" suppressId="PrimitiveArrayArgumentToVarargsMethod" alternativeId="PrimitiveArrayArgumentToVariableArgMethod"
shortName="PrimitiveArrayArgumentToVariableArgMethod" bundle="com.siyeh.InspectionGadgetsBundle"
key="primitive.array.argument.to.var.arg.method.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
implementationClass="com.siyeh.ig.bugs.PrimitiveArrayArgumentToVariableArgMethodInspection"/>
@@ -130,8 +130,8 @@ non.short.circuit.boolean.expression.problem.descriptor=Non-short-circuit boolea
non.short.circuit.boolean.expression.replace.quickfix=Replace with short circuit expression
null.argument.to.var.arg.method.display.name=Confusing argument to varargs method
null.argument.to.var.arg.method.problem.descriptor=Confusing argument <code>#ref</code>, unclear if a varargs or non-varargs call is desired #loc
primitive.array.argument.to.var.arg.method.display.name=Confusing primitive array argument to var-arg method
primitive.array.argument.to.var.arg.method.problem.descriptor=Confusing primitive array argument to var-arg method #loc
primitive.array.argument.to.var.arg.method.display.name=Confusing primitive array argument to varargs method
primitive.array.argument.to.var.arg.method.problem.descriptor=Confusing primitive array argument to varargs method #loc
object.comparison.display.name=Object comparison using '==', instead of 'equals()'
object.comparison.enumerated.ignore.option=Ignore '==' between enumerated types
object.comparison.klass.ignore.option=Ignore '==' on 'java.lang.Class' objects
@@ -1,5 +1,5 @@
/*
* Copyright 2006-2014 Dave Griffith, Bas Leijdekkers
* Copyright 2006-2015 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,18 +16,34 @@
package com.siyeh.ig.bugs;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.daemon.impl.quickfix.AddTypeCastFix;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.DelegatingFix;
import com.siyeh.ig.InspectionGadgetsFix;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
public class PrimitiveArrayArgumentToVariableArgMethodInspection extends BaseInspection {
@NotNull
@Override
public String getID() {
return "PrimitiveArrayArgumentToVarargsMethod";
}
@Nullable
@Override
public String getAlternativeID() {
return "PrimitiveArrayArgumentToVariableArgMethod"; // keep old suppression working
}
@Override
@NotNull
public String getDisplayName() {
@@ -50,6 +66,14 @@ public class PrimitiveArrayArgumentToVariableArgMethodInspection extends BaseIns
return PsiUtil.isLanguageLevel5OrHigher(file);
}
@Nullable
@Override
protected InspectionGadgetsFix buildFix(Object... infos) {
final PsiExpression argument = (PsiExpression)infos[0];
final PsiType type = (PsiType)infos[1];
return new DelegatingFix(new AddTypeCastFix(type, argument));
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new PrimitiveArrayArgumentToVariableArgVisitor();
@@ -84,11 +108,11 @@ public class PrimitiveArrayArgumentToVariableArgMethodInspection extends BaseIns
if (!lastParameter.isVarArgs()) {
return;
}
final PsiType parameterType = lastParameter.getType();
final PsiEllipsisType parameterType = (PsiEllipsisType)lastParameter.getType();
if (isDeepPrimitiveArrayType(parameterType, result.getSubstitutor())) {
return;
}
registerError(lastArgument);
registerError(lastArgument, lastArgument, parameterType.getComponentType());
}
}
@@ -6,7 +6,7 @@ public class PrimitiveArrayArgumentToVariableArgMethod
{
public static void main(String[] arg) throws Throwable
{
methodVarArgObject(<warning descr="Confusing primitive array argument to var-arg method">new byte[3]</warning>);
methodVarArgObject(<warning descr="Confusing primitive array argument to varargs method">new byte[3]</warning>);
methodVarArgByteArray(new byte[3]);
MethodHandle meh = null;
meh.invokeExact(new int[] { });
@@ -31,7 +31,7 @@ public class PrimitiveArrayArgumentToVariableArgMethod
}
void m() {
String.format("%s", <warning descr="Confusing primitive array argument to var-arg method">new int[]{1, 2, 3}</warning>);
String.format("%s", <warning descr="Confusing primitive array argument to varargs method">new int[]{1, 2, 3}</warning>);
}
static void bar1(java.lang.Object... objects) {
@@ -48,7 +48,7 @@ public class PrimitiveArrayArgumentToVariableArgMethod
public static void invoke() {
int[] ints = {1, 2, 3};
bar1(<warning descr="Confusing primitive array argument to var-arg method">ints</warning>); // warn here
bar1(<warning descr="Confusing primitive array argument to varargs method">ints</warning>); // warn here
bar2(ints); // no warning needed here
}
}