mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-80741 Groovy: Correct processing of 'flying geese' style when target builder is used at the method call expression
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user