diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java index 43d947ce77e6..2ba67d48bf3c 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java @@ -41,20 +41,7 @@ public class UnnecessaryReturnInspection extends BaseInspection { @Override @NotNull public String getDisplayName() { - return InspectionGadgetsBundle.message( - "unnecessary.return.display.name"); - } - - @Override - public boolean isEnabledByDefault() { - return true; - } - - @Override - public JComponent createOptionsPanel() { - return new SingleCheckboxOptionsPanel( - InspectionGadgetsBundle.message("unnecessary.return.option"), - this, "ignoreInThenBranch"); + return InspectionGadgetsBundle.message("unnecessary.return.display.name"); } @Override @@ -68,6 +55,16 @@ public class UnnecessaryReturnInspection extends BaseInspection { } } + @Override + public boolean isEnabledByDefault() { + return true; + } + + @Override + public JComponent createOptionsPanel() { + return new SingleCheckboxOptionsPanel(InspectionGadgetsBundle.message("unnecessary.return.option"), this, "ignoreInThenBranch"); + } + @Override public InspectionGadgetsFix buildFix(Object... infos) { return new DeleteUnnecessaryStatementFix("return"); @@ -113,25 +110,19 @@ public class UnnecessaryReturnInspection extends BaseInspection { if (!ControlFlowUtils.blockCompletesWithStatement(codeBlock, statement)) { return; } - if (ignoreInThenBranch && isInThenBranch(statement, statement.getParent())) { + if (ignoreInThenBranch && isInThenBranch(statement)) { return; } registerStatementError(statement, Boolean.valueOf(constructor)); } - private boolean isInThenBranch(PsiReturnStatement statement, PsiElement parent) { - if (!(parent instanceof PsiCodeBlock)) { + private boolean isInThenBranch(PsiStatement statement) { + final PsiIfStatement ifStatement = + PsiTreeUtil.getParentOfType(statement, PsiIfStatement.class, true, PsiMethod.class, PsiLambdaExpression.class); + if (ifStatement == null) { return false; } - final PsiElement grandParent = parent.getParent(); - if (grandParent == null) { - return false; - } - final PsiElement greatGrandParent = grandParent.getParent(); - if (!(greatGrandParent instanceof PsiIfStatement)) { - return false; - } - final PsiStatement elseBranch = ((PsiIfStatement)greatGrandParent).getElseBranch(); + final PsiStatement elseBranch = ifStatement.getElseBranch(); return elseBranch != null && !PsiTreeUtil.isAncestor(elseBranch, statement, true); } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/unnecessary_return/UnnecessaryReturn.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/unnecessary_return/UnnecessaryReturn.java index b22b703f20c6..b8c679dd5f54 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/unnecessary_return/UnnecessaryReturn.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/unnecessary_return/UnnecessaryReturn.java @@ -87,4 +87,11 @@ class C { Callable c = () -> { return 42; }; System.out.println(c); } + + void m5(boolean a) { + if (a) return; + else { + System.out.println(); + } + } } \ No newline at end of file