diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java index bbe8b5f463b8..89aa34787572 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java @@ -19,18 +19,22 @@ import com.intellij.analysis.AnalysisScope; import com.intellij.codeInsight.daemon.GroupNames; import com.intellij.codeInspection.*; import com.intellij.codeInspection.reference.*; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.WriteExternalException; import com.intellij.psi.*; import com.intellij.psi.search.searches.OverridingMethodsSearch; +import com.intellij.psi.util.PropertyUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.changeSignature.ChangeSignatureProcessor; import com.intellij.refactoring.changeSignature.ParameterInfoImpl; import com.intellij.util.IncorrectOperationException; +import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.util.ArrayList; import java.util.List; @@ -40,6 +44,8 @@ import java.util.List; public class UnusedReturnValue extends GlobalJavaInspectionTool{ private MakeVoidQuickFix myQuickFix; + public boolean IGNORE_BUILDER_PATTERN = false; + @Nullable public CommonProblemDescriptor[] checkElement(RefEntity refEntity, AnalysisScope scope, @@ -54,8 +60,11 @@ public class UnusedReturnValue extends GlobalJavaInspectionTool{ if (refMethod.getInReferences().size() == 0) return null; if (!refMethod.isReturnValueUsed()) { - return new ProblemDescriptor[]{manager.createProblemDescriptor(refMethod.getElement().getNavigationElement(), - InspectionsBundle.message("inspection.unused.return.value.problem.descriptor"), + final PsiMethod psiMethod = (PsiMethod)refMethod.getElement(); + if (IGNORE_BUILDER_PATTERN && PropertyUtil.isSimplePropertySetter(psiMethod)) return null; + return new ProblemDescriptor[]{manager.createProblemDescriptor(psiMethod.getNavigationElement(), + InspectionsBundle + .message("inspection.unused.return.value.problem.descriptor"), getFix(processor), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, false)}; } @@ -64,6 +73,17 @@ public class UnusedReturnValue extends GlobalJavaInspectionTool{ return null; } + @Override + public void writeSettings(Element node) throws WriteExternalException { + if (IGNORE_BUILDER_PATTERN) { + super.writeSettings(node); + } + } + + @Override + public JComponent createOptionsPanel() { + return new SingleCheckboxOptionsPanel("Ignore simple setters", this, "IGNORE_BUILDER_PATTERN"); + } protected boolean queryExternalUsagesRequests(final RefManager manager, final GlobalJavaInspectionContext globalContext, final ProblemDescriptionsProcessor processor) { diff --git a/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/expected.xml b/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/expected.xml new file mode 100644 index 000000000000..4704d91e891d --- /dev/null +++ b/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/expected.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/src/Test.java b/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/src/Test.java new file mode 100644 index 000000000000..8df38c124d67 --- /dev/null +++ b/java/java-tests/testData/inspection/unusedReturnValue/simpleSetter/src/Test.java @@ -0,0 +1,13 @@ +class Test { + private String myStr; + + public Test setStr(String str) { + myStr = str; + return this; + } + + public static void main(String[] args) { + final Test test = new Test(); + test.setStr(""); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueTest.java index 4e086f0e7a14..0fcd2ef1a07e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueTest.java @@ -35,4 +35,14 @@ public class UnusedReturnValueTest extends InspectionTestCase { doTest(); } + + public void testSimpleSetter() throws Exception { + try { + myTool.IGNORE_BUILDER_PATTERN = true; + doTest(); + } + finally { + myTool.IGNORE_BUILDER_PATTERN = false; + } + } } \ No newline at end of file