Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring adding convenient methods to know if a DifferenceElement is added, removed or kept #3695

Merged
merged 2 commits into from
Sep 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ public boolean isAdded() {
public boolean isRemoved() {
return false;
}

@Override
public boolean isKept() {
return false;
}

public boolean isIndent() { return element instanceof CsmIndent; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,16 +179,16 @@ void apply() {
if (!isLeftOverDiffElement && !isLeftOverOriginalElement){
DifferenceElement diffElement = diffElements.get(diffIndex);

if (diffElement instanceof Added) {
if (diffElement.isAdded()) {
applyAddedDiffElement((Added) diffElement);
} else {
TextElement originalElement = originalElements.get(originalIndex);
boolean originalElementIsChild = originalElement instanceof ChildTextElement;
boolean originalElementIsToken = originalElement instanceof TokenTextElement;

if (diffElement instanceof Kept) {
if (diffElement.isKept()) {
applyKeptDiffElement((Kept) diffElement, originalElement, originalElementIsChild, originalElementIsToken);
} else if (diffElement instanceof Removed) {
} else if (diffElement.isRemoved()) {
Removed removed = (Removed) diffElement;
applyRemovedDiffElement(removedGroups.get(removed), removed, originalElement, originalElementIsChild, originalElementIsToken);
} else {
Expand Down Expand Up @@ -220,9 +220,9 @@ private boolean applyLeftOverDiffElements() {
boolean isLeftOverElement = false;
if (diffIndex < diffElements.size() && originalIndex >= originalElements.size()) {
DifferenceElement diffElement = diffElements.get(diffIndex);
if (diffElement instanceof Kept) {
if (diffElement.isKept()) {
diffIndex++;
} else if (diffElement instanceof Added) {
} else if (diffElement.isAdded()) {
Added addedElement = (Added) diffElement;

nodeText.addElement(originalIndex, addedElement.toTextElement());
Expand Down Expand Up @@ -372,7 +372,7 @@ private Map<Integer, List<Removed>> groupConsecutiveRemovedElements() {
Integer firstElement = null;
for (int i = 0; i < diffElements.size(); i++) {
DifferenceElement diffElement = diffElements.get(i);
if (diffElement instanceof Removed) {
if (diffElement.isRemoved()) {
if (firstElement == null) {
firstElement = i;
}
Expand Down Expand Up @@ -401,7 +401,7 @@ private void applyRemovedDiffElement(RemovedGroup removedGroup, Removed removed,
} else {
nodeText.removeElement(originalIndex);

if ((diffIndex + 1 >= diffElements.size() || !(diffElements.get(diffIndex + 1) instanceof Added))
if ((diffIndex + 1 >= diffElements.size() || !(diffElements.get(diffIndex + 1).isAdded()))
&& !removedGroup.isACompleteLine()) {
originalIndex = considerEnforcingIndentation(nodeText, originalIndex);
}
Expand All @@ -410,7 +410,7 @@ private void applyRemovedDiffElement(RemovedGroup removedGroup, Removed removed,
if (originalElements.get(originalIndex).isWhiteSpace()
&& originalElements.get(originalIndex - 1).isWhiteSpace()) {
// However we do not want to do that when we are about to adding or removing elements
if ((diffIndex + 1) == diffElements.size() || (diffElements.get(diffIndex + 1) instanceof Kept)) {
if ((diffIndex + 1) == diffElements.size() || (diffElements.get(diffIndex + 1).isKept())) {
originalElements.remove(originalIndex--);
}
}
Expand Down Expand Up @@ -1055,14 +1055,14 @@ private int adjustIndentation(List<TokenTextElement> indentation, NodeText nodeT
* Returns true if the current <code>Added</code> element is preceded by a <code>Removed</code> element.
*/
private boolean isAReplacement(int diffIndex) {
return (diffIndex > 0) && diffElements.get(diffIndex) instanceof Added && diffElements.get(diffIndex - 1) instanceof Removed;
return (diffIndex > 0) && diffElements.get(diffIndex).isAdded() && diffElements.get(diffIndex - 1).isRemoved();
}

/*
* Returns true if the current <code>Removed</code> element is followed by a <code>Added</code> element.
*/
private boolean isReplaced(int diffIndex) {
return (diffIndex < diffElements.size() - 1) && diffElements.get(diffIndex + 1) instanceof Added && diffElements.get(diffIndex) instanceof Removed;
return (diffIndex < diffElements.size() - 1) && diffElements.get(diffIndex + 1).isAdded() && diffElements.get(diffIndex).isRemoved();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ static DifferenceElement kept(CsmElement element) {

boolean isRemoved();

boolean isKept();

default boolean isChild() {
return getElement() instanceof LexicalDifferenceCalculator.CsmChild;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,16 @@ public int getTokenType() {
public boolean isAdded() {
return false;
}

@Override
public boolean isRemoved() {
return false;
}

@Override
public boolean isKept() {
return true;
}

public boolean isIndent() { return element instanceof CsmIndent; }

Expand Down Expand Up @@ -116,8 +126,4 @@ public boolean isNewLine() {
return false;
}

@Override
public boolean isRemoved() {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,16 @@ public int getTokenType() {
public boolean isAdded() {
return false;
}

@Override
public boolean isRemoved() {
return true;
}

@Override
public boolean isKept() {
return false;
}

public boolean isToken() { return element instanceof CsmToken; }

Expand All @@ -101,11 +111,6 @@ public boolean isWhiteSpace() {
return false;
}

@Override
public boolean isRemoved() {
return true;
}

public boolean isNewLine() {
if(isToken()) {
CsmToken csmToken = (CsmToken) element;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,11 @@ public boolean isRemoved() {
return false;
}

@Override
public boolean isKept() {
return false;
}

/*
* If the {@code DifferenceElement} wraps an EOL token then this method returns a new {@code DifferenceElement}
* with all eof token replaced by the specified line separator. The line separator parameter must be a CsmToken with a valid line separator.
Expand Down