diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties index a58572b41f89..3958624966bc 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties @@ -2411,8 +2411,12 @@ inspection.comparator.combinators.description=Can be replaced with 'Comparator' inspection.comparator.combinators.description2=Can be replaced with ''{0}'' inspection.unnecessary.string.escape.report.char.literals.option=Report char literals inspection.method.call.in.loop.ignore.known.methods.option=Ignore known methods with side-effects -fix.data.provider.signature.family.name=Fix data provider signature -fix.data.provider.signature.problem=Class #ref annotated @RunWith(Parameterized.class) lacks data provider +fix.data.provider.signature.fix.name=Change method signature to ''{0}'' +fix.data.provider.create.method.fix.name=Create data provider method '@Parameters public static Iterable parameters()' +fix.data.provider.signature.family.name=Fix data provider method signature +fix.data.provider.signature.missing.method.problem=Parameterized test class #ref lacks data provider method annotated with '@Parameters' +fix.data.provider.signature.incorrect.problem=Data provider method #ref() has an incorrect signature +fix.data.provider.multiple.methods.problem=Multiple @Parameters data provider methods present in class #ref allow.suppressions.fix.family.name=Allow suppressions allow.suppressions.fix.text=Allow these suppressions remove.suppress.comment.fix.family.name=Remove //{0} @@ -2431,7 +2435,7 @@ utility.class.without.private.constructor.cant.generate.constructor.title=Can't utility.class.without.private.constructor.cant.generate.constructor.message=Utility class has instantiations, private constructor will not be created inspection.suspicious.package.private.access.problem={0} overrides a package-private method from {1} which is declared in a different module ''{2}'' inspection.condition.covered.by.further.condition.descr=Condition ''{0}'' covered by subsequent {1, choice, 1#condition ''''{2}''''|2#conditions} -inspection.parameterized.parameters.static.collection.display.name=@RunWith(Parameterized.class) without data provider +inspection.parameterized.parameters.static.collection.display.name=Parameterized test class without data provider method create.missing.switch.branch=Create missing switch branch ''{0}'' create.missing.switch.branches=Create missing branches: {0} redundant.as.list.for.iteration.problem=Unnecessary 'Arrays.asList()' call diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/ParameterizedParametersStaticCollectionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/ParameterizedParametersStaticCollectionInspection.java index 7c897a364f49..64427588b232 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/ParameterizedParametersStaticCollectionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/ParameterizedParametersStaticCollectionInspection.java @@ -19,9 +19,6 @@ import com.siyeh.ig.InspectionGadgetsFix; import com.siyeh.ig.psiutils.TestUtils; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.List; - public class ParameterizedParametersStaticCollectionInspection extends BaseInspection { protected static final String PARAMETERS_FQN = "org.junit.runners.Parameterized.Parameters"; @@ -30,7 +27,8 @@ public class ParameterizedParametersStaticCollectionInspection extends BaseInspe protected InspectionGadgetsFix buildFix(final Object... infos) { if (infos[0] instanceof PsiClass) { final PsiClass aClass = (PsiClass)infos[0]; - return new DelegatingFix(CreateMethodQuickFix.createFix(aClass, "@" + PARAMETERS_FQN + " public static java.lang.Iterable parameters()", "")); + final String signature = "@" + PARAMETERS_FQN + " public static java.lang.Iterable parameters()"; + return new DelegatingFix(CreateMethodQuickFix.createFix(aClass, signature, "")); } return new InspectionGadgetsFix() { @@ -46,7 +44,7 @@ public class ParameterizedParametersStaticCollectionInspection extends BaseInspe return; } final PsiMethod method = (PsiMethod)element; - final PsiType type = (PsiType)infos[2]; + final PsiType type = (PsiType)infos[1]; final ChangeSignatureProcessor csp = new ChangeSignatureProcessor(project, method, false, PsiModifier.PUBLIC, method.getName(), type, new ParameterInfoImpl[0]); csp.run(); @@ -55,7 +53,7 @@ public class ParameterizedParametersStaticCollectionInspection extends BaseInspe @Override @NotNull public String getName() { - return (String)infos[0]; + return InspectionGadgetsBundle.message("fix.data.provider.signature.fix.name", infos[0]); } @NotNull @@ -70,8 +68,8 @@ public class ParameterizedParametersStaticCollectionInspection extends BaseInspe @NotNull protected String buildErrorString(Object... infos) { return infos.length > 1 - ? (String)infos[1] - : InspectionGadgetsBundle.message("fix.data.provider.signature.problem"); + ? InspectionGadgetsBundle.message("fix.data.provider.signature.incorrect.problem") + : InspectionGadgetsBundle.message("fix.data.provider.signature.missing.method.problem"); } @Override @@ -82,76 +80,43 @@ public class ParameterizedParametersStaticCollectionInspection extends BaseInspe if (!TestUtils.isParameterizedTest(aClass)) { return; } - final List candidates = new ArrayList<>(); final Project project = aClass.getProject(); final PsiClass iterableClass = JavaPsiFacade.getInstance(project).findClass(CommonClassNames.JAVA_LANG_ITERABLE, GlobalSearchScope.allScope(project)); if (iterableClass == null) { return; } + boolean methodFound = false; for (PsiMethod method : aClass.getMethods()) { if (!AnnotationUtil.isAnnotated(method, PARAMETERS_FQN, 0)) { continue; } - final PsiModifierList modifierList = method.getModifierList(); - final String fixMessage = "Make method '" + method.getName() + "' "; - String errorString = "Method '#ref()' should"; - String signatureDescription = ""; - if (!modifierList.hasModifierProperty(PsiModifier.PUBLIC)) { - signatureDescription += PsiModifier.PUBLIC; - errorString += " be "; - } - if (!modifierList.hasModifierProperty(PsiModifier.STATIC)) { - if (!signatureDescription.isEmpty()) { - signatureDescription += " " + PsiModifier.STATIC; - } - else { - signatureDescription += PsiModifier.STATIC; - errorString += " be "; - } - } + methodFound = true; + final boolean notPublic = !method.hasModifierProperty(PsiModifier.PUBLIC); + final boolean notStatic = !method.hasModifierProperty(PsiModifier.STATIC); PsiType returnType = method.getReturnType(); final PsiClass returnTypeClass = PsiUtil.resolveClassInType(returnType); - boolean objectArray = returnType instanceof PsiArrayType && - returnType.getDeepComponentType().equalsToText(CommonClassNames.JAVA_LANG_OBJECT); - boolean iterable = returnTypeClass != null && InheritanceUtil.isInheritorOrSelf(returnTypeClass, iterableClass, true); + final boolean objectArray = returnType instanceof PsiArrayType && + returnType.getDeepComponentType().equalsToText(CommonClassNames.JAVA_LANG_OBJECT); + final boolean iterable = returnTypeClass != null && InheritanceUtil.isInheritorOrSelf(returnTypeClass, iterableClass, true); + final String signatureText; if (!objectArray && !iterable) { - if (!signatureDescription.isEmpty()) { - signatureDescription += " and"; - } - signatureDescription += " have return type Iterable or Object[]"; - returnType = JavaPsiFacade.getElementFactory(project).createType(iterableClass); + signatureText = "public static Iterable " + method.getName() + "()"; + returnType = JavaPsiFacade.getElementFactory(project) + .createTypeFromText(CommonClassNames.JAVA_LANG_ITERABLE + "", method); } - if (!signatureDescription.isEmpty()) { - candidates.add(new MethodCandidate(method, fixMessage + signatureDescription, errorString + signatureDescription, returnType)); - continue; + else { + signatureText = "public static " + returnType.getPresentableText() + " " + method.getName() + "()"; + } + if (notPublic || notStatic || (!objectArray && !iterable)) { + registerMethodError(method, signatureText, returnType); } - return; } - if (candidates.isEmpty()) { + if (!methodFound) { registerClassError(aClass, aClass); } - else { - for (MethodCandidate candidate : candidates) { - registerMethodError(candidate.myMethod, candidate.myProblem, candidate.myErrorString, candidate.myReturnType); - } - } } }; } - - private static class MethodCandidate { - PsiMethod myMethod; - String myProblem; - private final String myErrorString; - PsiType myReturnType; - - MethodCandidate(PsiMethod method, String problem, String errorString, PsiType returnType) { - myMethod = method; - myProblem = problem; - myErrorString = errorString; - myReturnType = returnType; - } - } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Createmethod.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Createmethod.java index 79fff2dcbabd..4412ea83884e 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Createmethod.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Createmethod.java @@ -1,2 +1,2 @@ @org.junit.runner.RunWith(org.junit.runners.Parameterized.class) -public class Createmethod {} \ No newline at end of file +public class Createmethod {} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature.java index 0345eb7bf3c7..32777565ef81 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature.java @@ -1,7 +1,7 @@ @org.junit.runner.RunWith(org.junit.runners.Parameterized.class) public class Wrongsignature { - @org.junit.runners.Parameterized.Parameters - java.util.Collection regExValues() { + @org.junit.runners.Parameterized.Parameters + java.util.Collection regExValues() { return null; } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature1.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature1.java index d5be55f75bc0..e817d703ce0d 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature1.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature1.java @@ -1,7 +1,7 @@ @org.junit.runner.RunWith(org.junit.runners.Parameterized.class) public class Wrongsignature1 { @org.junit.runners.Parameterized.Parameters - static Integer regExValues() { + static Integer regExValues() { return null; } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature2.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature2.java index 9a98c27edb2f..429aba1d3f85 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature2.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature2.java @@ -1,7 +1,7 @@ @org.junit.runner.RunWith(org.junit.runners.Parameterized.class) public class Wrongsignature2 { @org.junit.runners.Parameterized.Parameters - public static Integer regExValues() { + public static Integer regExValues() { return null; } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature3.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature3.java index 4ec1ef61bb5e..7f017f909988 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature3.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/parameterized/Wrongsignature3.java @@ -1,7 +1,7 @@ @org.junit.runner.RunWith(org.junit.runners.Parameterized.class) public class Wrongsignature3 { @org.junit.runners.Parameterized.Parameters - public static Integer[] regExValues() { + public static Integer[] regExValues() { return null; } } \ No newline at end of file