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 01d40e0e3f5b..e012812e3cf8 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java @@ -21,7 +21,9 @@ import com.intellij.codeInspection.*; import com.intellij.codeInspection.reference.*; import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel; import com.intellij.openapi.util.WriteExternalException; -import com.intellij.psi.*; +import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiModifier; +import com.intellij.psi.PsiReference; import com.intellij.psi.util.PropertyUtil; import org.jdom.Element; import org.jetbrains.annotations.NotNull; @@ -55,6 +57,7 @@ public class UnusedReturnValue extends GlobalJavaBatchInspectionTool{ final boolean isNative = psiMethod.hasModifierProperty(PsiModifier.NATIVE); if (refMethod.isExternalOverride() && !isNative) return null; + if (RefUtil.isImplicitRead(psiMethod)) return null; return new ProblemDescriptor[]{createProblemDescriptor(psiMethod, manager, processor, isNative)}; } } diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValueLocalInspection.java b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValueLocalInspection.java index 850e45c9db92..decd81176a26 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValueLocalInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValueLocalInspection.java @@ -19,6 +19,7 @@ import com.intellij.codeInsight.daemon.impl.UnusedSymbolUtil; import com.intellij.codeInspection.BaseJavaLocalInspectionTool; import com.intellij.codeInspection.InspectionManager; import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.codeInspection.reference.RefUtil; import com.intellij.openapi.progress.EmptyProgressIndicator; import com.intellij.patterns.PsiJavaPatterns; import com.intellij.psi.*; @@ -57,7 +58,8 @@ public class UnusedReturnValueLocalInspection extends BaseJavaLocalInspectionToo PsiType.VOID.equals(method.getReturnType()) || myGlobal.IGNORE_BUILDER_PATTERN && PropertyUtil.isSimplePropertySetter(method) || method.hasModifierProperty(PsiModifier.NATIVE) || - MethodUtils.hasSuper(method)) return null; + MethodUtils.hasSuper(method) || + RefUtil.isImplicitRead(method)) return null; final boolean[] atLeastOneUsageExists = new boolean[]{false}; if (UnusedSymbolUtil.processUsages(manager.getProject(), method.getContainingFile(), method, new EmptyProgressIndicator(), null, u -> { diff --git a/java/java-tests/testData/inspection/unusedReturnValue/quickFix/NoChangeForImplicitRead.java b/java/java-tests/testData/inspection/unusedReturnValue/quickFix/NoChangeForImplicitRead.java new file mode 100644 index 000000000000..3b544339d2ac --- /dev/null +++ b/java/java-tests/testData/inspection/unusedReturnValue/quickFix/NoChangeForImplicitRead.java @@ -0,0 +1,9 @@ +class Test { + public String implicitRead() { + return ""; + } + + { + implicitRead(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueQuickFixTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueQuickFixTest.java index 7048df0f57bb..dcff2ac300c4 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueQuickFixTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueQuickFixTest.java @@ -16,7 +16,12 @@ package com.intellij.codeInspection; import com.intellij.JavaTestUtil; +import com.intellij.codeInsight.daemon.ImplicitUsageProvider; import com.intellij.codeInspection.unusedReturnValue.UnusedReturnValue; +import com.intellij.openapi.extensions.Extensions; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; +import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; /** @@ -27,11 +32,33 @@ public class UnusedReturnValueQuickFixTest extends LightCodeInsightFixtureTestCa @Override protected void setUp() throws Exception { super.setUp(); + PlatformTestUtil.registerExtension(Extensions.getRootArea(), ImplicitUsageProvider.EP_NAME, new ImplicitUsageProvider() { + @Override + public boolean isImplicitUsage(PsiElement element) { + return false; + } + + @Override + public boolean isImplicitRead(PsiElement element) { + return element instanceof PsiMethod && ((PsiMethod)element).getName().equals("implicitRead"); + } + + @Override + public boolean isImplicitWrite(PsiElement element) { + return false; + } + }, getTestRootDisposable()); + myFixture.enableInspections(new UnusedReturnValue()); } public void testSideEffects() { doTest(); } public void testRedundantReturn() { doTest(); } + public void testNoChangeForImplicitRead() { + final String name = getTestName(false); + myFixture.configureByFile(name + ".java"); + assertEmpty(myFixture.filterAvailableIntentions(InspectionsBundle.message("inspection.unused.return.value.make.void.quickfix"))); + } private void doTest() { final String name = getTestName(false);