diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/SystemRunFinalizersOnExitInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/SystemRunFinalizersOnExitInspection.java
index 474049a96c0c..f5bd3569ab01 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/SystemRunFinalizersOnExitInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/SystemRunFinalizersOnExitInspection.java
@@ -15,18 +15,17 @@
*/
package com.siyeh.ig.threading;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiMethod;
+import com.intellij.pom.java.LanguageLevel;
+import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiMethodCallExpression;
-import com.intellij.psi.PsiReferenceExpression;
+import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
-import org.jetbrains.annotations.NonNls;
+import com.siyeh.ig.callMatcher.CallMatcher;
import org.jetbrains.annotations.NotNull;
public class SystemRunFinalizersOnExitInspection extends BaseInspection {
-
@Override
@NotNull
public String getID() {
@@ -40,46 +39,27 @@ public class SystemRunFinalizersOnExitInspection extends BaseInspection {
"system.run.finalizers.on.exit.problem.descriptor");
}
+ @Override
+ public boolean shouldInspect(PsiFile file) {
+ // The method was removed in JDK 11
+ return PsiUtil.getLanguageLevel(file).isLessThan(LanguageLevel.JDK_11);
+ }
+
@Override
public BaseInspectionVisitor buildVisitor() {
return new SystemRunFinalizersOnExitVisitor();
}
- private static class SystemRunFinalizersOnExitVisitor
- extends BaseInspectionVisitor {
+ private static class SystemRunFinalizersOnExitVisitor extends BaseInspectionVisitor {
+ private static final CallMatcher RUN_FINALIZERS_ON_EXIT = CallMatcher.anyOf(
+ CallMatcher.staticCall("java.lang.System", "runFinalizersOnExit"),
+ CallMatcher.staticCall("java.lang.Runtime", "runFinalizersOnExit"));
@Override
- public void visitMethodCallExpression(
- @NotNull PsiMethodCallExpression expression) {
- super.visitMethodCallExpression(expression);
- if (!isRunFinalizersOnExit(expression)) {
- return;
+ public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
+ if (RUN_FINALIZERS_ON_EXIT.test(call)) {
+ registerMethodCallError(call);
}
- registerMethodCallError(expression);
- }
-
- private static boolean isRunFinalizersOnExit(
- PsiMethodCallExpression expression) {
- final PsiReferenceExpression methodExpression =
- expression.getMethodExpression();
- final String methodName = methodExpression.getReferenceName();
- @NonNls final String runFinalizers = "runFinalizersOnExit";
- if (!runFinalizers.equals(methodName)) {
- return false;
- }
- final PsiMethod method = expression.resolveMethod();
- if (method == null) {
- return false;
- }
- final PsiClass aClass = method.getContainingClass();
- if (aClass == null) {
- return false;
- }
- final String className = aClass.getQualifiedName();
- if (className == null) {
- return false;
- }
- return "java.lang.System".equals(className);
}
}
}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/src/META-INF/InspectionGadgets.xml b/plugins/InspectionGadgets/src/META-INF/InspectionGadgets.xml
index 53376dfec7fd..bd4d26979e2e 100644
--- a/plugins/InspectionGadgets/src/META-INF/InspectionGadgets.xml
+++ b/plugins/InspectionGadgets/src/META-INF/InspectionGadgets.xml
@@ -2634,7 +2634,7 @@
level="WARNING" implementationClass="com.siyeh.ig.threading.SynchronizedMethodInspection"/>