IDEA-80741 Groovy: Correct processing of 'flying geese' style when target builder is used at the method call expression

This commit is contained in:
Maxim.Medvedev
2012-02-05 16:22:08 +04:00
parent b6a8d852ba
commit 72d01dab33
2 changed files with 38 additions and 18 deletions
@@ -23,6 +23,7 @@ import com.intellij.util.containers.hash.HashSet;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -41,24 +42,45 @@ class AlignmentProvider {
final Set<PsiElement> set1 = myTree.get(e1);
final Set<PsiElement> set2 = myTree.get(e2);
LOG.assertTrue(!(set1 != null && set2 != null));
LOG.assertTrue(set1 == null || set2 == null || !myAlignments.containsKey(set1) || !myAlignments.containsKey(set2));
if (set1 != null) {
set1.add(e2);
myTree.put(e2, set1);
if (set1 != null && set2 != null) {
if (myAlignments.containsKey(set2)) {
for (Iterator<PsiElement> iterator = set1.iterator(); iterator.hasNext(); ) {
PsiElement element = iterator.next();
iterator.remove();
addInternal(set2, element);
}
}
else {
set1.addAll(set2);
for (Iterator<PsiElement> iterator = set2.iterator(); iterator.hasNext(); ) {
PsiElement element = iterator.next();
iterator.remove();
addInternal(set1, element);
}
}
}
else if (set1 != null) {
addInternal(set1, e2);
}
else if (set2 != null) {
set2.add(e1);
myTree.put(e1, set2);
addInternal(set2, e1);
}
else {
final HashSet<PsiElement> set = createHashSet();
myTree.put(e1, set);
myTree.put(e2, set);
addInternal(set, e1);
addInternal(set, e2);
}
}
private void addInternal(Set<PsiElement> set, PsiElement element) {
myTree.put(element, set);
set.add(element);
}
private static HashSet<PsiElement> createHashSet() {
return new HashSet<PsiElement>() {
private final int myhash = new Object().hashCode();
@@ -97,11 +119,6 @@ class AlignmentProvider {
return alignment;
}
@Nullable
public Alignment getAlignment(ASTNode node) {
return getAlignment(node.getPsi());
}
public Aligner createAligner(PsiElement expression) {
return new Aligner(expression);
}
@@ -119,7 +136,8 @@ class AlignmentProvider {
class Aligner {
private PsiElement myRef = null;
private Aligner(){}
private Aligner() {
}
private Aligner(PsiElement initial) {
myRef = initial;
@@ -56,7 +56,7 @@ import java.util.List;
*/
public class GroovyBlock implements Block, GroovyElementTypes, ASTBlock {
final protected ASTNode myNode;
protected Alignment myAlignment;
protected Alignment myAlignment = null;
final protected Indent myIndent;
final protected Wrap myWrap;
final protected CommonCodeStyleSettings mySettings;
@@ -78,8 +78,6 @@ public class GroovyBlock implements Block, GroovyElementTypes, ASTBlock {
mySettings = settings;
myGroovySettings = groovySettings;
myAlignmentProvider = alignmentProvider;
myAlignment = myAlignmentProvider.getAlignment(node.getPsi());
}
@NotNull
@@ -126,6 +124,10 @@ public class GroovyBlock implements Block, GroovyElementTypes, ASTBlock {
@Nullable
public Alignment getAlignment() {
if (myAlignment == null) {
myAlignment = myAlignmentProvider.getAlignment(myNode.getPsi());
}
return myAlignment;
}