From 57c547d18c2ebaff4edc939406ea6e4461b9fe48 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 14 Sep 2012 16:22:10 +0400 Subject: [PATCH] unused return value: report native methods (IDEA-90127) --- .../intellij/codeInspection/reference/RefMethodImpl.java | 2 +- .../unusedReturnValue/UnusedReturnValue.java | 8 ++++++-- .../inspection/unusedReturnValue/native/expected.xml | 8 ++++++++ .../inspection/unusedReturnValue/native/src/Test.java | 7 +++++++ .../intellij/codeInspection/UnusedReturnValueTest.java | 4 ++++ 5 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/inspection/unusedReturnValue/native/expected.xml create mode 100644 java/java-tests/testData/inspection/unusedReturnValue/native/src/Test.java diff --git a/java/java-impl/src/com/intellij/codeInspection/reference/RefMethodImpl.java b/java/java-impl/src/com/intellij/codeInspection/reference/RefMethodImpl.java index 346d64831d15..2e0783e3d987 100644 --- a/java/java-impl/src/com/intellij/codeInspection/reference/RefMethodImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/reference/RefMethodImpl.java @@ -356,7 +356,7 @@ public class RefMethodImpl extends RefJavaElementImpl implements RefMethod { } public boolean hasSuperMethods() { - return !getSuperMethods().isEmpty() || isLibraryOverride(new HashSet()); + return !getSuperMethods().isEmpty() || isExternalOverride(); } public boolean isReferenced() { 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 89aa34787572..23941f46c43b 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java @@ -30,6 +30,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.changeSignature.ChangeSignatureProcessor; import com.intellij.refactoring.changeSignature.ParameterInfoImpl; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.HashSet; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -56,16 +57,19 @@ public class UnusedReturnValue extends GlobalJavaInspectionTool{ final RefMethod refMethod = (RefMethod)refEntity; if (refMethod.isConstructor()) return null; - if (refMethod.hasSuperMethods()) return null; + if (!refMethod.getSuperMethods().isEmpty()) return null; if (refMethod.getInReferences().size() == 0) return null; if (!refMethod.isReturnValueUsed()) { final PsiMethod psiMethod = (PsiMethod)refMethod.getElement(); if (IGNORE_BUILDER_PATTERN && PropertyUtil.isSimplePropertySetter(psiMethod)) return null; + + final boolean isNative = psiMethod.hasModifierProperty(PsiModifier.NATIVE); + if (refMethod.isExternalOverride() && !isNative) return null; return new ProblemDescriptor[]{manager.createProblemDescriptor(psiMethod.getNavigationElement(), InspectionsBundle .message("inspection.unused.return.value.problem.descriptor"), - getFix(processor), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, + !isNative ? getFix(processor) : null, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, false)}; } } diff --git a/java/java-tests/testData/inspection/unusedReturnValue/native/expected.xml b/java/java-tests/testData/inspection/unusedReturnValue/native/expected.xml new file mode 100644 index 000000000000..1e9ac4bc0e7c --- /dev/null +++ b/java/java-tests/testData/inspection/unusedReturnValue/native/expected.xml @@ -0,0 +1,8 @@ + + + + Test.java + 2 + Return value of the method is never used + + diff --git a/java/java-tests/testData/inspection/unusedReturnValue/native/src/Test.java b/java/java-tests/testData/inspection/unusedReturnValue/native/src/Test.java new file mode 100644 index 000000000000..3cae2c18903e --- /dev/null +++ b/java/java-tests/testData/inspection/unusedReturnValue/native/src/Test.java @@ -0,0 +1,7 @@ +class Test { + private static native boolean isUnused(); + + public static void main(String[] args) { + Test.isUnused(); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueTest.java index 0fcd2ef1a07e..6753f529f2d2 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/UnusedReturnValueTest.java @@ -31,6 +31,10 @@ public class UnusedReturnValueTest extends InspectionTestCase { doTest(); } + public void testNative() throws Exception { + doTest(); + } + public void testHierarchy() throws Exception { doTest(); }