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"/>