mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
unused return value: add visibility modifier option
This commit is contained in:
+20
-2
@@ -20,17 +20,22 @@ import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.codeInsight.daemon.GroupNames;
|
||||
import com.intellij.codeInspection.*;
|
||||
import com.intellij.codeInspection.reference.*;
|
||||
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
|
||||
import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
|
||||
import com.intellij.codeInspection.unusedSymbol.VisibilityModifierChooser;
|
||||
import com.intellij.openapi.ui.LabeledComponent;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.util.PropertyUtilBase;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
@@ -38,6 +43,10 @@ import java.util.Collections;
|
||||
*/
|
||||
public class UnusedReturnValue extends GlobalJavaBatchInspectionTool{
|
||||
public boolean IGNORE_BUILDER_PATTERN;
|
||||
@PsiModifier.ModifierConstant
|
||||
public static final String DEFAULT_HIGHEST_MODIFIER = PsiModifier.PUBLIC;
|
||||
@PsiModifier.ModifierConstant
|
||||
public String highestModifier = DEFAULT_HIGHEST_MODIFIER;
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
@@ -49,6 +58,7 @@ public class UnusedReturnValue extends GlobalJavaBatchInspectionTool{
|
||||
if (refEntity instanceof RefMethod) {
|
||||
final RefMethod refMethod = (RefMethod)refEntity;
|
||||
|
||||
if (VisibilityUtil.compare(refMethod.getAccessModifier(), highestModifier) < 0) return null;
|
||||
if (refMethod.isConstructor()) return null;
|
||||
if (!refMethod.getSuperMethods().isEmpty()) return null;
|
||||
if (refMethod.getInReferences().size() == 0) return null;
|
||||
@@ -78,14 +88,22 @@ public class UnusedReturnValue extends GlobalJavaBatchInspectionTool{
|
||||
|
||||
@Override
|
||||
public void writeSettings(@NotNull Element node) throws WriteExternalException {
|
||||
if (IGNORE_BUILDER_PATTERN) {
|
||||
if (IGNORE_BUILDER_PATTERN || highestModifier != DEFAULT_HIGHEST_MODIFIER) {
|
||||
super.writeSettings(node);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent createOptionsPanel() {
|
||||
return new SingleCheckboxOptionsPanel("Ignore simple setters", this, "IGNORE_BUILDER_PATTERN");
|
||||
MultipleCheckboxOptionsPanel panel = new MultipleCheckboxOptionsPanel(this);
|
||||
panel.addCheckbox("Ignore simple setters", "IGNORE_BUILDER_PATTERN");
|
||||
LabeledComponent<VisibilityModifierChooser> component = LabeledComponent.create(new VisibilityModifierChooser(() -> true,
|
||||
highestModifier,
|
||||
(newModifier) -> highestModifier = newModifier),
|
||||
"Maximal reported method visibility:",
|
||||
BorderLayout.WEST);
|
||||
panel.addComponent(component);
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
@@ -10,6 +10,7 @@ import com.intellij.codeInspection.reference.RefUtil;
|
||||
import com.intellij.openapi.progress.EmptyProgressIndicator;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PropertyUtilBase;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import com.siyeh.ig.psiutils.ExpressionUtils;
|
||||
import com.siyeh.ig.psiutils.MethodUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -48,6 +49,7 @@ public class UnusedReturnValueLocalInspection extends AbstractBaseJavaLocalInspe
|
||||
public ProblemDescriptor[] checkMethod(@NotNull PsiMethod method, @NotNull InspectionManager manager, boolean isOnTheFly) {
|
||||
if (method.isConstructor() ||
|
||||
PsiType.VOID.equals(method.getReturnType()) ||
|
||||
VisibilityUtil.compare(VisibilityUtil.getVisibilityModifier(method.getModifierList()), myGlobal.highestModifier) < 0 ||
|
||||
myGlobal.IGNORE_BUILDER_PATTERN && PropertyUtilBase.isSimplePropertySetter(method) ||
|
||||
method.hasModifierProperty(PsiModifier.NATIVE) ||
|
||||
MethodUtils.hasSuper(method) ||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<problem>
|
||||
<problem>
|
||||
<file>Test.java</file>
|
||||
<line>17</line>
|
||||
<problem_class>Method can be void</problem_class>
|
||||
<description>Return value of the method is never used</description>
|
||||
</problem>
|
||||
</problem>
|
||||
@@ -0,0 +1,20 @@
|
||||
public class Test {
|
||||
|
||||
public static void main(String[] args) {
|
||||
fooBarPublic(239);
|
||||
fooBarPublic(239);
|
||||
fooBarPublic(239);
|
||||
|
||||
fooBarPrivate(100);
|
||||
fooBarPrivate(100);
|
||||
fooBarPrivate(100);
|
||||
}
|
||||
|
||||
public static int fooBarPublic(int val) {
|
||||
return 239;
|
||||
}
|
||||
|
||||
private static int fooBarPrivate(int val) {
|
||||
return 239;
|
||||
}
|
||||
}
|
||||
+11
@@ -18,6 +18,7 @@ package com.intellij.java.codeInspection;
|
||||
import com.intellij.JavaTestUtil;
|
||||
import com.intellij.codeInspection.unusedReturnValue.UnusedReturnValue;
|
||||
import com.intellij.codeInspection.unusedReturnValue.UnusedReturnValueLocalInspection;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.testFramework.InspectionTestCase;
|
||||
|
||||
public class UnusedReturnValueLocalTest extends InspectionTestCase {
|
||||
@@ -62,4 +63,14 @@ public class UnusedReturnValueLocalTest extends InspectionTestCase {
|
||||
myGlobal.IGNORE_BUILDER_PATTERN = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void testVisibilitySetting() {
|
||||
try {
|
||||
myGlobal.highestModifier = PsiModifier.PRIVATE;
|
||||
doTest();
|
||||
}
|
||||
finally {
|
||||
myGlobal.highestModifier = UnusedReturnValue.DEFAULT_HIGHEST_MODIFIER;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.intellij.java.codeInspection;
|
||||
|
||||
import com.intellij.JavaTestUtil;
|
||||
import com.intellij.codeInspection.unusedReturnValue.UnusedReturnValue;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.testFramework.InspectionTestCase;
|
||||
|
||||
public class UnusedReturnValueTest extends InspectionTestCase {
|
||||
@@ -68,4 +69,14 @@ public class UnusedReturnValueTest extends InspectionTestCase {
|
||||
myTool.IGNORE_BUILDER_PATTERN = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void testVisibilitySetting() {
|
||||
try {
|
||||
myTool.highestModifier = PsiModifier.PRIVATE;
|
||||
doTest();
|
||||
}
|
||||
finally {
|
||||
myTool.highestModifier = UnusedReturnValue.DEFAULT_HIGHEST_MODIFIER;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user