From 3bc439b43071f2e2d34a94af65dd0cc1505e5ce4 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 24 Aug 2017 13:47:27 +0200 Subject: [PATCH] IG: don't try to make method in library final (IDEA-177140) --- ...allDuringObjectConstructionInspection.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/OverridableMethodCallDuringObjectConstructionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/OverridableMethodCallDuringObjectConstructionInspection.java index 4a1a4bcd4503..8115a5e20803 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/OverridableMethodCallDuringObjectConstructionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/OverridableMethodCallDuringObjectConstructionInspection.java @@ -20,6 +20,7 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.util.SmartList; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.InspectionGadgetsFix; import com.siyeh.ig.fixes.MakeClassFinalFix; @@ -27,21 +28,30 @@ import com.siyeh.ig.psiutils.ClassUtils; import com.siyeh.ig.psiutils.MethodUtils; import org.jetbrains.annotations.NotNull; +import java.util.List; + public class OverridableMethodCallDuringObjectConstructionInspection extends OverridableMethodCallDuringObjectConstructionInspectionBase { + @Override + protected boolean buildQuickFixesOnlyForOnTheFlyErrors() { + return true; + } + @Override @NotNull protected InspectionGadgetsFix[] buildFixes(Object... infos) { final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)infos[0]; final PsiClass callClass = ClassUtils.getContainingClass(methodCallExpression); final PsiMethod method = methodCallExpression.resolveMethod(); - if (method == null || MethodUtils.isOverriddenInHierarchy(method, callClass)) { + if (method == null || callClass == null || MethodUtils.isOverriddenInHierarchy(method, callClass)) { return InspectionGadgetsFix.EMPTY_ARRAY; } - return new InspectionGadgetsFix[]{ - new MakeClassFinalFix(callClass), - new MakeMethodFinalFix(method.getName()) - }; + final List fixes = new SmartList<>(); + fixes.add(new MakeClassFinalFix(callClass)); + if (!(method instanceof PsiCompiledElement)) { + fixes.add(new MakeMethodFinalFix(method.getName())); + } + return fixes.toArray(InspectionGadgetsFix.EMPTY_ARRAY); } private static class MakeMethodFinalFix extends InspectionGadgetsFix { @@ -74,6 +84,9 @@ public class OverridableMethodCallDuringObjectConstructionInspection extends Ove return; } WriteAction.run(() -> method.getModifierList().setModifierProperty(PsiModifier.FINAL, true)); + if (method.getContainingFile() != methodExpression.getContainingFile()) { + method.navigate(true); + } } @Override