diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties
index c26c88d9ef96..1f328abdcbbe 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties
@@ -1073,7 +1073,8 @@ manual.array.copy.problem.descriptor=Manual array copy #loc
manual.array.to.collection.copy.problem.descriptor=Manual array to collection copy #loc
call.to.simple.getter.in.class.problem.descriptor=Call to simple getter #ref() from within class #loc
call.to.simple.setter.in.class.problem.descriptor=Call to simple setter #ref() from within class #loc
-asserts.without.messages.problem.descriptor=#ref() without message #loc
+assert.without.message.problem.descriptor=#ref() without message #loc
+assert.without.message.quick.fix.family.name=Add error message
test.case.with.constructor.problem.descriptor=Initialization logic in constructor #ref() instead of 'setUp()' #loc
test.case.with.constructor.problem.descriptor.initializer=Initialization logic in initializer instead of 'setUp()'
misordered.assert.equals.arguments.problem.descriptor=Arguments to #ref() in wrong order #loc
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/testFrameworks/AssertWithoutMessageInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/testFrameworks/AssertWithoutMessageInspection.java
index e40c7e634951..9d32566b40bd 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/testFrameworks/AssertWithoutMessageInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/testFrameworks/AssertWithoutMessageInspection.java
@@ -15,12 +15,19 @@
*/
package com.siyeh.ig.testFrameworks;
-import com.intellij.psi.PsiExpression;
-import com.intellij.psi.PsiMethodCallExpression;
+import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.codeInspection.util.IntentionFamilyName;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.fileEditor.FileEditorManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.*;
+import com.intellij.psi.util.PsiTreeUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
+import com.siyeh.ig.InspectionGadgetsFix;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
public class AssertWithoutMessageInspection extends BaseInspection {
@@ -32,7 +39,7 @@ public class AssertWithoutMessageInspection extends BaseInspection {
@Override
@NotNull
protected String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message("asserts.without.messages.problem.descriptor");
+ return InspectionGadgetsBundle.message("assert.without.message.problem.descriptor");
}
private static class AssertionsWithoutMessagesVisitor extends BaseInspectionVisitor {
@@ -50,4 +57,30 @@ public class AssertWithoutMessageInspection extends BaseInspection {
}
}
}
+
+ @Override
+ protected @Nullable InspectionGadgetsFix buildFix(Object... infos) {
+ return new InspectionGadgetsFix() {
+ @Override
+ protected void doFix(Project project, ProblemDescriptor descriptor) {
+ PsiMethodCallExpression methodCallExpr = PsiTreeUtil.getParentOfType(descriptor.getPsiElement(), PsiMethodCallExpression.class);
+ if (methodCallExpr == null) return;
+
+ PsiExpressionList methodArgs = methodCallExpr.getArgumentList();
+ PsiExpression[] methodArgExprs = methodArgs.getExpressions();
+ PsiExpression firstMethodArgExpr = methodArgExprs.length > 0 ? methodArgExprs[0] : null;
+ PsiExpression newMessageExpr = JavaPsiFacade.getInstance(project).getElementFactory().createExpressionFromText("\"\"", methodCallExpr);
+ PsiElement createdMessageExpr = methodArgs.addBefore(newMessageExpr, firstMethodArgExpr);
+
+ final Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
+ if (editor == null) return;
+ editor.getCaretModel().moveToOffset(createdMessageExpr.getTextOffset() + 1);
+ }
+
+ @Override
+ public @IntentionFamilyName @NotNull String getFamilyName() {
+ return InspectionGadgetsBundle.message("assert.without.message.quick.fix.family.name");
+ }
+ };
+ }
}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/JUnitAssertsWithoutMessagesInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/JUnitAssertsWithoutMessagesInspectionTest.java
index 4409db5767a9..0bbdd8195460 100644
--- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/JUnitAssertsWithoutMessagesInspectionTest.java
+++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/JUnitAssertsWithoutMessagesInspectionTest.java
@@ -28,6 +28,48 @@ public class JUnitAssertsWithoutMessagesInspectionTest extends LightJavaInspecti
doTest();
}
+ public void testQuickFixAssertEquals() {
+ doTest("import org.junit.Test;\n" +
+ "import static org.junit.Assert.*;\n" +
+
+ "class TestCase {\n" +
+ " @Test\n" +
+ " public void test() {\n" +
+ " assertEquals(1, 1);\n" +
+ " }\n" +
+ "}");
+ checkQuickFix("Add error message", "import org.junit.Test;\n" +
+ "import static org.junit.Assert.*;\n" +
+
+ "class TestCase {\n" +
+ " @Test\n" +
+ " public void test() {\n" +
+ " assertEquals(\"\", 1, 1);\n" +
+ " }\n" +
+ "}");
+ }
+
+ public void testQuickFixFail() {
+ doTest("import org.junit.Test;\n" +
+ "import static org.junit.Assert.*;\n" +
+
+ "class TestCase {\n" +
+ " @Test\n" +
+ " public void test() {\n" +
+ " fail();\n" +
+ " }\n" +
+ "}");
+ checkQuickFix("Add error message", "import org.junit.Test;\n" +
+ "import static org.junit.Assert.*;\n" +
+
+ "class TestCase {\n" +
+ " @Test\n" +
+ " public void test() {\n" +
+ " fail(\"\");\n" +
+ " }\n" +
+ "}");
+ }
+
@Override
protected String getBasePath() {
return "/plugins/InspectionGadgets/test/com/siyeh/igtest/junit/junit_asserts_without_messages";
@@ -48,6 +90,11 @@ public class JUnitAssertsWithoutMessagesInspectionTest extends LightJavaInspecti
"public class Assert {" +
" static public void assertEquals(double expected, double actual, double delta) {}" +
" static public void assertEquals(Object expected, Object actual){}" +
+ " static public void assertEquals(String message, Object expected, Object actual){}" +
+ " static public void assertSame(Object expected, Object actual){}" +
+ " static public void assertSame(String message, Object expected, Object actual){}" +
+ " static public void fail(){}" +
+ " static public void fail(String message){}" +
"}",
"package org.junit.jupiter.api;\n" +