diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractLightMethodObjectHandler.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractLightMethodObjectHandler.java index 7b1e4848d468..e7d734488aaa 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractLightMethodObjectHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractLightMethodObjectHandler.java @@ -133,7 +133,7 @@ public class ExtractLightMethodObjectHandler { } } - final PsiElement container; + PsiElement container; if (anchor == null) { container = ((PsiClassInitializer)containingClass.add(elementFactory.createClassInitializer())).getBody(); anchor = container.getLastChild(); @@ -142,6 +142,17 @@ public class ExtractLightMethodObjectHandler { container = anchor.getParent(); } + // add code blocks for ifs and loops if needed + if (anchor instanceof PsiStatement && RefactoringUtil.isLoopOrIf(container)) { + PsiBlockStatement codeBlockStatement = + (PsiBlockStatement)JavaPsiFacade.getElementFactory(project).createStatementFromText("{}", container); + codeBlockStatement.getCodeBlock().add(anchor); + PsiCodeBlock codeBlock = ((PsiBlockStatement)anchor.replace(codeBlockStatement)).getCodeBlock(); + anchor = codeBlock.getStatements()[0]; + originalAnchor = anchor; + container = codeBlock; + } + final PsiElement firstElementCopy = container.addRangeBefore(elements[0], elements[elements.length - 1], anchor); final PsiElement[] elementsCopy = CodeInsightUtil.findStatementsInRange(copy, firstElementCopy.getTextRange().getStartOffset(),