From b0b3fcb8af25489c7c4acfd01da9561305c58421 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Tue, 19 Jun 2018 17:46:07 +0300 Subject: [PATCH] fix redundant returns deletion in type migration to void --- .../src/com/intellij/codeInspection/MakeVoidQuickFix.java | 2 +- .../typeMigration/rules/VoidConversionRule.java | 2 +- .../siyeh/ig/controlflow/UnnecessaryReturnInspection.java | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/MakeVoidQuickFix.java b/java/java-impl/src/com/intellij/codeInspection/MakeVoidQuickFix.java index 05df515f0247..d8d460ece173 100644 --- a/java/java-impl/src/com/intellij/codeInspection/MakeVoidQuickFix.java +++ b/java/java-impl/src/com/intellij/codeInspection/MakeVoidQuickFix.java @@ -121,7 +121,7 @@ public class MakeVoidQuickFix implements LocalQuickFix { } if (returnStatement != null && returnStatement.getReturnValue() != null) { returnStatement.getReturnValue().delete(); - if (UnnecessaryReturnInspection.isReturnRedundant(returnStatement, false, null)) { + if (UnnecessaryReturnInspection.isReturnRedundant(returnStatement, false, true, null)) { returnStatement.delete(); } } diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/VoidConversionRule.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/VoidConversionRule.java index 748e49e02da6..ec9cfd504ebf 100644 --- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/VoidConversionRule.java +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/VoidConversionRule.java @@ -48,7 +48,7 @@ public class VoidConversionRule extends TypeConversionRule { final Project project = expression.getProject(); if (parent instanceof PsiReturnStatement) { final PsiReturnStatement replaced = (PsiReturnStatement)parent.replace(JavaPsiFacade.getElementFactory(project).createStatementFromText("return;", null)); - if (UnnecessaryReturnInspection.isReturnRedundant(replaced, false, null)) { + if (UnnecessaryReturnInspection.isReturnRedundant(replaced, false, false, null)) { DeleteUnnecessaryStatementFix.deleteUnnecessaryStatement(replaced); } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java index 46b27c3eb0a5..dcd9b4c10fc6 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java @@ -88,7 +88,7 @@ public class UnnecessaryReturnInspection extends BaseInspection { public void visitReturnStatement(@NotNull PsiReturnStatement statement) { super.visitReturnStatement(statement); final Ref constructorRef = Ref.create(); - if (isReturnRedundant(statement, ignoreInThenBranch, constructorRef)) { + if (isReturnRedundant(statement, ignoreInThenBranch, true, constructorRef)) { registerStatementError(statement, constructorRef.get()); } } @@ -97,6 +97,7 @@ public class UnnecessaryReturnInspection extends BaseInspection { public static boolean isReturnRedundant(@NotNull PsiReturnStatement statement, boolean ignoreInThenBranch, + boolean checkReturnType, @Nullable Ref isInConstructorRef) { if (statement.getReturnValue() != null) { return false; @@ -109,7 +110,7 @@ public class UnnecessaryReturnInspection extends BaseInspection { if (isInConstructorRef != null) { isInConstructorRef.set(method.isConstructor()); } - if (!method.isConstructor() && !PsiType.VOID.equals(method.getReturnType())) { + if (checkReturnType && !method.isConstructor() && !PsiType.VOID.equals(method.getReturnType())) { return false; } } @@ -118,7 +119,7 @@ public class UnnecessaryReturnInspection extends BaseInspection { isInConstructorRef.set(false); } final PsiLambdaExpression lambdaExpression = (PsiLambdaExpression)methodParent; - if (!PsiType.VOID.equals(LambdaUtil.getFunctionalInterfaceReturnType(lambdaExpression))) { + if (checkReturnType && !PsiType.VOID.equals(LambdaUtil.getFunctionalInterfaceReturnType(lambdaExpression))) { return false; } final PsiElement lambdaBody = lambdaExpression.getBody();