From 16307e9fdbdf407001e6c6a25fddefcc9c8750fb Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Fri, 18 Aug 2017 12:23:01 +0300 Subject: [PATCH] Java: Extract method from the whole body of duplicate method, move constants to parameters (IDEA-144957) --- .../com/intellij/codeInsight/CodeInsightUtil.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java index 888a63434154..15525bd3e14c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java @@ -127,9 +127,13 @@ public class CodeInsightUtil { } if (endOffset != element2.getTextRange().getEndOffset()) return PsiElement.EMPTY_ARRAY; - if (parent instanceof PsiCodeBlock && parent.getParent() instanceof PsiBlockStatement && + if (parent instanceof PsiCodeBlock && element1 == ((PsiCodeBlock)parent).getLBrace() && element2 == ((PsiCodeBlock)parent).getRBrace()) { - return new PsiElement[]{parent.getParent()}; + if (parent.getParent() instanceof PsiBlockStatement) { + return new PsiElement[]{parent.getParent()}; + } + PsiElement[] children = parent.getChildren(); + return getStatementsInRange(children, ((PsiCodeBlock)parent).getFirstBodyElement(), ((PsiCodeBlock)parent).getLastBodyElement()); } /* @@ -139,6 +143,11 @@ public class CodeInsightUtil { */ PsiElement[] children = parent.getChildren(); + return getStatementsInRange(children, element1, element2); + } + + @NotNull + private static PsiElement[] getStatementsInRange(PsiElement[] children, PsiElement element1, PsiElement element2) { ArrayList array = new ArrayList<>(); boolean flag = false; for (PsiElement child : children) {