diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java index 08dccfb4b7b4..763d301588a6 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -915,12 +915,7 @@ public class ExtractMethodProcessor implements MatchProvider { ifStatement = (PsiIfStatement)myElementFactory.createStatementFromText("if (" + varName + "==null) return null;", null); } else if (myGenerateConditionalExit) { - if (myFirstExitStatementCopy instanceof PsiReturnStatement && ((PsiReturnStatement)myFirstExitStatementCopy).getReturnValue() != null) { - ifStatement = (PsiIfStatement)myElementFactory.createStatementFromText("if (" + varName + "==null) return null;", null); - } - else { - ifStatement = (PsiIfStatement)myElementFactory.createStatementFromText("if (" + varName + "==null) " + myFirstExitStatementCopy.getText(), null); - } + ifStatement = generateConditionalExitStatement(varName); } else { ifStatement = (PsiIfStatement)myElementFactory.createStatementFromText("if (" + varName + "==null) return;", null); @@ -931,7 +926,7 @@ public class ExtractMethodProcessor implements MatchProvider { else if (myNotNullConditionalCheck) { String varName = myOutputVariable != null ? myOutputVariable.getName() : "x"; varName = declareVariableAtMethodCallLocation(varName, myReturnType instanceof PsiPrimitiveType ? ((PsiPrimitiveType)myReturnType).getBoxedType(myCodeFragmentMember) : myReturnType); - addToMethodCallLocation(myElementFactory.createStatementFromText("if (" + varName + " != null) return " + varName + ";", null)); + addToMethodCallLocation(generateNotNullConditionalStatement(varName)); declareVariableReusedAfterCall(myOutputVariable); } else if (myGenerateConditionalExit) { @@ -1041,6 +1036,19 @@ public class ExtractMethodProcessor implements MatchProvider { } } + @NotNull + private PsiIfStatement generateConditionalExitStatement(String varName) { + if (myFirstExitStatementCopy instanceof PsiReturnStatement && ((PsiReturnStatement)myFirstExitStatementCopy).getReturnValue() != null) { + return (PsiIfStatement)myElementFactory.createStatementFromText("if (" + varName + "==null) return null;", null); + } + return (PsiIfStatement)myElementFactory.createStatementFromText("if (" + varName + "==null) " + myFirstExitStatementCopy.getText(), null); + } + + @NotNull + private PsiStatement generateNotNullConditionalStatement(String varName) { + return myElementFactory.createStatementFromText("if (" + varName + " != null) return " + varName + ";", null); + } + protected PsiExpression expressionToReplace(PsiExpression expression) { if (expression instanceof PsiAssignmentExpression) { return ((PsiAssignmentExpression)expression).getRExpression(); @@ -1299,16 +1307,16 @@ public class ExtractMethodProcessor implements MatchProvider { } private void addNotNullConditionalCheck(Match match, PsiElement replacedMatch) { - if (myNotNullConditionalCheck && myOutputVariable != null) { + if ((myNotNullConditionalCheck || myGenerateConditionalExit) && myOutputVariable != null) { ReturnValue returnValue = match.getOutputVariableValue(myOutputVariable); if (returnValue instanceof VariableReturnValue) { String varName = ((VariableReturnValue)returnValue).getVariable().getName(); LOG.assertTrue(varName != null, "returned variable name is null"); PsiStatement statement = PsiTreeUtil.getParentOfType(replacedMatch, PsiStatement.class, false); if (statement != null) { - PsiStatement conditionalReturn = - myElementFactory.createStatementFromText("if (" + varName + " != null) return " + varName + ";", null); - statement.getParent().addAfter(conditionalReturn, statement); + PsiStatement conditionalExit = myNotNullConditionalCheck ? + generateNotNullConditionalStatement(varName) : generateConditionalExitStatement(varName); + statement.getParent().addAfter(conditionalExit, statement); } } }