Skip to content

Commit

Permalink
remove empty lines when removing certain nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Feb 23, 2017
1 parent 543f796 commit dea490b
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 8 deletions.
Expand Up @@ -256,7 +256,7 @@ public Iterator<TokenTextElement> tokensPreceeding(final Node node) {
NodeText parentNodeText = getOrCreateNodeText(node.getParentNode().get()); NodeText parentNodeText = getOrCreateNodeText(node.getParentNode().get());
int index = parentNodeText.findChild(node); int index = parentNodeText.findChild(node);
return new TextElementIteratorsFactory.CascadingIterator<>( return new TextElementIteratorsFactory.CascadingIterator<>(
TextElementIteratorsFactory.reverseIterator(parentNodeText, index - 1), TextElementIteratorsFactory.partialReverseIterator(parentNodeText, index - 1),
() -> tokensPreceeding(node.getParentNode().get())); () -> tokensPreceeding(node.getParentNode().get()));
} }


Expand Down Expand Up @@ -311,6 +311,20 @@ private void updateTextBecauseOfRemovedChild(NodeList nodeList, int index, Optio
} }
} }


if (property.isInOwnLine()) {
for (Iterator<TokenTextElement> it = tokensPreceeding(child); it.hasNext();) {
// Removing preceeding whitespace tokens until we reach a newline
TokenTextElement tte = it.next();
if (tte.getTokenKind() != 1 && tte.getTokenKind() !=3) {
break;
}
it.remove();
if (tte.getTokenKind() == 3) {
break;
}
}
}

textForNodes.get(parent).removeElementForChild(child); textForNodes.get(parent).removeElementForChild(child);
} }


Expand Down
Expand Up @@ -256,4 +256,8 @@ public void removeAllBefore(Node child) {
elements.remove(0); elements.remove(0);
} }
} }

public void removeElement(int index) {
elements.remove(index);
}
} }
Expand Up @@ -24,7 +24,6 @@
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Optional;


public class TextElementIteratorsFactory { public class TextElementIteratorsFactory {


Expand All @@ -35,13 +34,15 @@ interface Provider<E> {


private Provider<E> nextProvider; private Provider<E> nextProvider;
private Iterator<E> current; private Iterator<E> current;
private Iterator<E> next;
private boolean lastReturnedFromCurrent = false;
private boolean lastReturnedFromNext = false;


public CascadingIterator(Iterator<E> current, Provider<E> nextProvider) { public CascadingIterator(Iterator<E> current, Provider<E> nextProvider) {
this.nextProvider = nextProvider; this.nextProvider = nextProvider;
this.current = current; this.current = current;
} }


private Iterator<E> next;


@Override @Override
public boolean hasNext() { public boolean hasNext() {
Expand All @@ -57,13 +58,30 @@ public boolean hasNext() {
@Override @Override
public E next() { public E next() {
if (current.hasNext()) { if (current.hasNext()) {
lastReturnedFromCurrent = true;
lastReturnedFromNext = false;
return current.next(); return current.next();
} }
if (next == null) { if (next == null) {
next = nextProvider.provide(); next = nextProvider.provide();
} }
lastReturnedFromCurrent = false;
lastReturnedFromNext = true;
return next.next(); return next.next();
} }

@Override
public void remove() {
if (lastReturnedFromCurrent) {
current.remove();
return;
}
if (lastReturnedFromNext) {
next.remove();
return;
}
throw new IllegalArgumentException();
}
} }


static class EmptyIterator<E> implements Iterator<E> { static class EmptyIterator<E> implements Iterator<E> {
Expand Down Expand Up @@ -96,6 +114,11 @@ public E next() {
returned = true; returned = true;
return element; return element;
} }

@Override
public void remove() {

}
} }


static class ComposedIterator<E> implements Iterator<E> { static class ComposedIterator<E> implements Iterator<E> {
Expand Down Expand Up @@ -126,11 +149,22 @@ public E next() {
} }
return elements.get(currIndex).next(); return elements.get(currIndex).next();
} }

@Override
public void remove() {
elements.get(currIndex).remove();
}
} }


public static Iterator<TokenTextElement> reverseIterator(TextElement textElement) { private static Iterator<TokenTextElement> reverseIterator(NodeText nodeText, int index) {
TextElement textElement = nodeText.getTextElement(index);
if (textElement instanceof TokenTextElement) { if (textElement instanceof TokenTextElement) {
return new SingleElementIterator<>((TokenTextElement)textElement); return new SingleElementIterator<TokenTextElement>((TokenTextElement)textElement) {
@Override
public void remove() {
nodeText.removeElement(index);
}
};
} else if (textElement instanceof ChildTextElement) { } else if (textElement instanceof ChildTextElement) {
ChildTextElement childTextElement = (ChildTextElement)textElement; ChildTextElement childTextElement = (ChildTextElement)textElement;
NodeText textForChild = childTextElement.getNodeTextForWrappedNode(); NodeText textForChild = childTextElement.getNodeTextForWrappedNode();
Expand All @@ -141,13 +175,13 @@ public static Iterator<TokenTextElement> reverseIterator(TextElement textElement
} }


public static Iterator<TokenTextElement> reverseIterator(NodeText nodeText) { public static Iterator<TokenTextElement> reverseIterator(NodeText nodeText) {
return reverseIterator(nodeText, nodeText.numberOfElements() - 1); return partialReverseIterator(nodeText, nodeText.numberOfElements() - 1);
} }


public static Iterator<TokenTextElement> reverseIterator(NodeText nodeText, int fromIndex) { public static Iterator<TokenTextElement> partialReverseIterator(NodeText nodeText, int fromIndex) {
List<Iterator<TokenTextElement>> elements = new LinkedList<>(); List<Iterator<TokenTextElement>> elements = new LinkedList<>();
for (int i=fromIndex;i>=0;i--) { for (int i=fromIndex;i>=0;i--) {
elements.add(reverseIterator(nodeText.getTextElement(i))); elements.add(reverseIterator(nodeText, i));
} }
return new ComposedIterator<>(elements); return new ComposedIterator<>(elements);
} }
Expand Down

0 comments on commit dea490b

Please sign in to comment.