From 033aed0eb1890b4eac130fb3135302052e06c45d Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 22 May 2014 11:43:17 +0200 Subject: [PATCH] IDEA-91663 (Method can be variable arity method shall have an option to ignore methods with multiple array arguments) --- .../com/siyeh/InspectionGadgetsBundle.properties | 3 ++- .../MethodCanBeVariableArityMethodInspection.java | 15 ++++++++++++++- .../MethodCanBeVariableArityMethod.html | 6 +++++- .../MethodCanBeVariableArity.java | 3 +++ ...hodCanBeVariableArityMethodInspectionTest.java | 1 + 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties index 8a22cae7befa..53c1061f7e2d 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties @@ -1893,7 +1893,8 @@ arrays.deep.hash.code.quickfix=Replace with 'Arrays.deepHashCode()' arrays.hash.code.quickfix=Replace with 'Arrays.hashCode()' method.can.be.variable.arity.method.display.name=Method can be variable arity method method.can.be.variable.arity.method.problem.descriptor=#ref() can be converted to variable arity method #loc -method.can.be.variable.arity.method.ignore.byte.short.option=Ignore methods with a last parameter of type byte[] or short[] +method.can.be.variable.arity.method.ignore.byte.short.option=Ignore methods with a last parameter of type byte[] or short[] +method.can.be.variable.arity.method.ignore.multiple.arrays.option=Ignore methods with multiple array parameters convert.to.variable.arity.method.quickfix=Convert to varargs method mismatched.string.builder.query.update.display.name=Mismatched query and update of StringBuilder mismatched.string.builder.updated.problem.descriptor=Contents of {0} #ref are updated, but never queried #loc diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/MethodCanBeVariableArityMethodInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/MethodCanBeVariableArityMethodInspection.java index 3a761f5561c4..8a1d76760319 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/MethodCanBeVariableArityMethodInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/MethodCanBeVariableArityMethodInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 Bas Leijdekkers + * Copyright 2011-2014 Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,6 +42,9 @@ public class MethodCanBeVariableArityMethodInspection extends BaseInspection { @SuppressWarnings("PublicField") public boolean onlyReportPublicMethods = false; + @SuppressWarnings("PublicField") + public boolean ignoreMultipleArrayParameters = false; + @Nls @NotNull @Override @@ -62,6 +65,8 @@ public class MethodCanBeVariableArityMethodInspection extends BaseInspection { "ignoreByteAndShortArrayParameters"); panel.addCheckbox(InspectionGadgetsBundle.message("ignore.methods.overriding.super.method"), "ignoreOverridingMethods"); panel.addCheckbox(InspectionGadgetsBundle.message("only.report.public.methods.option"), "onlyReportPublicMethods"); + panel.addCheckbox(InspectionGadgetsBundle.message("method.can.be.variable.arity.method.ignore.multiple.arrays.option"), + "ignoreMultipleArrayParameters"); return panel; } @@ -116,6 +121,14 @@ public class MethodCanBeVariableArityMethodInspection extends BaseInspection { if (ignoreOverridingMethods && MethodUtils.hasSuper(method)) { return; } + if (ignoreMultipleArrayParameters) { + for (int i = 0, length = parameters.length - 1; i < length; i++) { + final PsiParameter parameter = parameters[i]; + if (parameter.getType() instanceof PsiArrayType) { + return; + } + } + } registerMethodError(method); } } diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/MethodCanBeVariableArityMethod.html b/plugins/InspectionGadgets/src/inspectionDescriptions/MethodCanBeVariableArityMethod.html index 0c97059e474b..8f51c948e4a1 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/MethodCanBeVariableArityMethod.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/MethodCanBeVariableArityMethod.html @@ -7,10 +7,14 @@ This inspection only reports if the project or module is configured to use a language level of 5.0 or higher.

-Use the first checkbox below to not offer to convert byte[] or short[] parameters to vararg. +Use the first checkbox below to not offer to convert byte[] or short[] parameters to vararg.

Use the second checkbox below to ignore methods overriding or implementing a method from a superclass.

+Use the third checkbox below to only report when the method is public +

+Use the fourth checkbox below ot ignore method with more than one array parameter. +

New in 10.5 \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/method_can_be_variable_arity_method/MethodCanBeVariableArity.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/method_can_be_variable_arity_method/MethodCanBeVariableArity.java index fd5758d8063b..3b15deab1620 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/method_can_be_variable_arity_method/MethodCanBeVariableArity.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/method_can_be_variable_arity_method/MethodCanBeVariableArity.java @@ -32,4 +32,7 @@ class Annotated { } interface X { void m(String[] ss); +} +class Yes { + void m(int[] is, int[] js) {} } \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/migration/MethodCanBeVariableArityMethodInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/migration/MethodCanBeVariableArityMethodInspectionTest.java index 7c7687fb7474..259d01a9e3a5 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/migration/MethodCanBeVariableArityMethodInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/migration/MethodCanBeVariableArityMethodInspectionTest.java @@ -15,6 +15,7 @@ public class MethodCanBeVariableArityMethodInspectionTest extends LightInspectio inspection.ignoreByteAndShortArrayParameters = true; inspection.ignoreOverridingMethods = true; inspection.onlyReportPublicMethods = true; + inspection.ignoreMultipleArrayParameters = true; return inspection; } } \ No newline at end of file