Class Difference


  • public class Difference
    extends java.lang.Object
    A Difference should give me a sequence of elements I should find (to indicate the context) followed by a list of elements to remove or to add and follow by another sequence of elements. I should later be able to apply such difference to a nodeText.
    • Field Detail

      • STANDARD_INDENTATION_SIZE

        public static final int STANDARD_INDENTATION_SIZE
        See Also:
        Constant Field Values
      • nodeText

        private final NodeText nodeText
      • node

        private final Node node
      • originalElements

        private final java.util.List<TextElement> originalElements
      • originalIndex

        private int originalIndex
      • diffIndex

        private int diffIndex
      • addedIndentation

        private boolean addedIndentation
    • Method Detail

      • indentationBlock

        private java.util.List<TextElement> indentationBlock()
      • isAfterLBrace

        private boolean isAfterLBrace​(NodeText nodeText,
                                      int nodeTextIndex)
      • considerEnforcingIndentation

        private int considerEnforcingIndentation​(NodeText nodeText,
                                                 int nodeTextIndex)
        If we are at the beginning of a line, with just spaces or tabs before us we should force the space to be the same as the indentation.
      • apply

        void apply()
        Node that we have calculate the Difference we can apply to a concrete NodeText, modifying it according to the difference (adding and removing the elements provided).
      • applyLeftOverOriginalElements

        private boolean applyLeftOverOriginalElements()
      • applyLeftOverDiffElements

        private boolean applyLeftOverDiffElements()
      • extractReshuffledDiffElements

        private void extractReshuffledDiffElements​(java.util.List<DifferenceElement> diffElements)
      • combineRemovedElementsToRemovedGroups

        private java.util.Map<Removed,​RemovedGroup> combineRemovedElementsToRemovedGroups()
        Maps all Removed elements as keys to their corresponding RemovedGroup. A RemovedGroup contains all consecutive Removed elements.
        Example:
         Elements: Kept|Removed1|Removed2|Kept|Removed3|Added|Removed4
         Groups:        <----Group1---->       Group2         Group3
         Keys:          Removed1+Removed2      Removed3       Removed4
         
        Returns:
        Map with all Removed elements as keys to their corresponding RemovedGroup
      • groupConsecutiveRemovedElements

        private java.util.Map<java.lang.Integer,​java.util.List<Removed>> groupConsecutiveRemovedElements()
      • applyRemovedDiffElement

        private void applyRemovedDiffElement​(RemovedGroup removedGroup,
                                             Removed removed,
                                             TextElement originalElement,
                                             boolean originalElementIsChild,
                                             boolean originalElementIsToken)
      • cleanTheLineOfLeftOverSpace

        private void cleanTheLineOfLeftOverSpace​(RemovedGroup removedGroup,
                                                 Removed removed)
        Cleans the line of left over space if there is unnecessary indentation and the element will not be replaced
      • applyKeptDiffElement

        private void applyKeptDiffElement​(Kept kept,
                                          TextElement originalElement,
                                          boolean originalElementIsChild,
                                          boolean originalElementIsToken)
      • isNodeWithTypeArguments

        private boolean isNodeWithTypeArguments​(DifferenceElement element)
      • getIndexToNextTokenElement

        private int getIndexToNextTokenElement​(TokenTextElement element,
                                               int nestedDiamondOperator)
      • isDiamondOperator

        private boolean isDiamondOperator​(JavaToken.Kind kind)
      • openBraceWasOnSameLine

        private boolean openBraceWasOnSameLine()
      • wasSpaceBetweenBraces

        private boolean wasSpaceBetweenBraces()
      • doWeHaveLeftBraceFollowedBySpace

        private boolean doWeHaveLeftBraceFollowedBySpace​(int index)
      • rewindSpace

        private int rewindSpace​(int index)
      • nextIsRightBrace

        private boolean nextIsRightBrace​(int index)
      • applyAddedDiffElement

        private void applyAddedDiffElement​(Added added)
      • getCorrespondanceBetweenNextOrderAndPreviousOrder

        private java.util.Map<java.lang.Integer,​java.lang.Integer> getCorrespondanceBetweenNextOrderAndPreviousOrder​(CsmMix elementsFromPreviousOrder,
                                                                                                                           CsmMix elementsFromNextOrder)
      • isFollowedByUnindent

        private boolean isFollowedByUnindent​(java.util.List<DifferenceElement> diffElements,
                                             int diffIndex)
      • findIndexOfCorrespondingNodeTextElement

        private java.util.List<java.lang.Integer> findIndexOfCorrespondingNodeTextElement​(java.util.List<CsmElement> elements,
                                                                                          NodeText nodeText,
                                                                                          int startIndex,
                                                                                          Node node)
      • isCorrespondingElement

        private boolean isCorrespondingElement​(TextElement textElement,
                                               CsmElement csmElement,
                                               Node node)
      • isAlmostCorrespondingElement

        private boolean isAlmostCorrespondingElement​(TextElement textElement,
                                                     CsmElement csmElement,
                                                     Node node)
      • adjustIndentation

        private int adjustIndentation​(java.util.List<TokenTextElement> indentation,
                                      NodeText nodeText,
                                      int nodeTextIndex,
                                      boolean followedByUnindent)
      • isAReplacement

        private boolean isAReplacement​(int diffIndex)
      • isReplaced

        private boolean isReplaced​(int diffIndex)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object