ChildTextElement.java revision 0be8bb2b4275456c18bee064c5de2ccb12a33080
1d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti/*
2d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
3d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * Copyright (C) 2011, 2013-2016 The JavaParser Team.
4d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti *
5d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * This file is part of JavaParser.
6d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti *
7d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * JavaParser can be used either under the terms of
8d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * a) the GNU Lesser General Public License as published by
9d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti *     the Free Software Foundation, either version 3 of the License, or
10d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti *     (at your option) any later version.
11d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * b) the terms of the Apache License
12d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti *
13d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * You should have received a copy of both licenses in LICENCE.LGPL and
14d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * LICENCE.APACHE. Please refer to those files for details.
15d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti *
16d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * JavaParser is distributed in the hope that it will be useful,
17d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * but WITHOUT ANY WARRANTY; without even the implied warranty of
18d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * GNU Lesser General Public License for more details.
20d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti */
21d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
22d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassettipackage com.github.javaparser.printer.lexicalpreservation;
23d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
24d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassettiimport com.github.javaparser.ast.Node;
250be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassettiimport com.github.javaparser.ast.comments.Comment;
26d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
27d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti/**
28d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti * Represent the position of a child node in the NodeText of its parent.
29d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti */
30d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetticlass ChildTextElement extends TextElement {
31d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    private LexicalPreservingPrinter lexicalPreservingPrinter;
32d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    private Node child;
33d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
34d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    ChildTextElement(LexicalPreservingPrinter lexicalPreservingPrinter, Node child) {
35d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti        this.lexicalPreservingPrinter = lexicalPreservingPrinter;
36d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti        this.child = child;
37d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    }
38d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
39d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    String expand() {
40d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti        return lexicalPreservingPrinter.print(child);
41d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    }
42d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
43d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    Node getChild() {
44d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti        return child;
45d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    }
46a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
47a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    @Override
4840d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    boolean isToken(int tokenKind) {
4940d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti        return false;
5040d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    }
5140d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti
52c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti    @Override
53c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti    boolean isNode(Node node) {
54c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti        return node == child;
55c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti    }
56c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti
5740d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    NodeText getNodeTextForWrappedNode() {
5840d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti        return lexicalPreservingPrinter.getOrCreateNodeText(child);
5940d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    }
6040d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti
6140d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    @Override
62a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    public boolean equals(Object o) {
63a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        if (this == o) return true;
64a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        if (o == null || getClass() != o.getClass()) return false;
65a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
66a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        ChildTextElement that = (ChildTextElement) o;
67a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
68a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        if (!lexicalPreservingPrinter.equals(that.lexicalPreservingPrinter)) return false;
69a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        return child.equals(that.child);
70a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
71a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    }
72a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
73a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    @Override
74a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    public int hashCode() {
75a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        int result = lexicalPreservingPrinter.hashCode();
76a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        result = 31 * result + child.hashCode();
77a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        return result;
78a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    }
79a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
80a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    @Override
81a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    public String toString() {
82a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        return "ChildTextElement{" + child + '}';
83a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    }
842e24f3622913118e442635a726d60cfdb50cdc91Federico Tomassetti
85882790065271126fc4b17a71bebb078b60ffe00cFederico Tomassetti    @Override
86882790065271126fc4b17a71bebb078b60ffe00cFederico Tomassetti    public boolean isWhiteSpace() {
87882790065271126fc4b17a71bebb078b60ffe00cFederico Tomassetti        return false;
88882790065271126fc4b17a71bebb078b60ffe00cFederico Tomassetti    }
89ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti
90ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    @Override
91ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    public boolean isSpaceOrTab() {
92ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti        return false;
93ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    }
94ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti
95ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    @Override
96ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    public boolean isNewline() {
97ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti        return false;
98ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    }
990be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti
1000be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti    @Override
1010be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti    public boolean isWhiteSpaceOrComment() {
1020be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti        return child instanceof Comment;
1030be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti    }
1040be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti
105d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti}
106