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 {
31b83b81211f26f9259b032b188bb2482aa390df0dFederico Tomassetti    private final Node child;
32d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
336149218487aac50fad2256c8723639671747d7bbDanny van Bruggen    ChildTextElement(Node child) {
34d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti        this.child = child;
35d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    }
36d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
37d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    String expand() {
386149218487aac50fad2256c8723639671747d7bbDanny van Bruggen        return LexicalPreservingPrinter.print(child);
39d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    }
40d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti
41d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    Node getChild() {
42d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti        return child;
43d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti    }
44a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
45a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    @Override
4640d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    boolean isToken(int tokenKind) {
4740d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti        return false;
4840d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    }
4940d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti
50c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti    @Override
51c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti    boolean isNode(Node node) {
52c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti        return node == child;
53c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti    }
54c5f60788a9f56fe9f483fbb87ccb615644365f5eFederico Tomassetti
5540d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    NodeText getNodeTextForWrappedNode() {
566149218487aac50fad2256c8723639671747d7bbDanny van Bruggen        return LexicalPreservingPrinter.getOrCreateNodeText(child);
5740d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    }
5840d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti
5940d239e3cb84cc77fcd16c3f9fde3f4f8b635419Federico Tomassetti    @Override
60a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    public boolean equals(Object o) {
61a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        if (this == o) return true;
62a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        if (o == null || getClass() != o.getClass()) return false;
63a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
64a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        ChildTextElement that = (ChildTextElement) o;
65a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
66a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        return child.equals(that.child);
67a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
68a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    }
69a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
70a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    @Override
71a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    public int hashCode() {
726149218487aac50fad2256c8723639671747d7bbDanny van Bruggen        return child.hashCode();
73a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    }
74a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti
75a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    @Override
76a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    public String toString() {
77a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti        return "ChildTextElement{" + child + '}';
78a87e93242b4e13759c4003681b7802954d008979Federico Tomassetti    }
792e24f3622913118e442635a726d60cfdb50cdc91Federico Tomassetti
80882790065271126fc4b17a71bebb078b60ffe00cFederico Tomassetti    @Override
81882790065271126fc4b17a71bebb078b60ffe00cFederico Tomassetti    public boolean isWhiteSpace() {
82882790065271126fc4b17a71bebb078b60ffe00cFederico Tomassetti        return false;
83882790065271126fc4b17a71bebb078b60ffe00cFederico Tomassetti    }
84ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti
85ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    @Override
86ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    public boolean isSpaceOrTab() {
87ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti        return false;
88ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    }
89ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti
90ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    @Override
91ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    public boolean isNewline() {
92ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti        return false;
93ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti    }
940be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti
950be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti    @Override
96adb78b277512189cc5f8ecb076d9bf8106f9e1e0Federico Tomassetti    public boolean isComment() {
970be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti        return child instanceof Comment;
980be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti    }
990be8bb2b4275456c18bee064c5de2ccb12a33080Federico Tomassetti
10087db3c76d76680bd1bea566d44ab74b4dca55b71Federico Tomassetti    @Override
1011a6665bb95b0e46cafdb19202274e6d6725ea464Federico Tomassetti    public boolean isChildOfClass(Class<? extends Node> nodeClass) {
10287db3c76d76680bd1bea566d44ab74b4dca55b71Federico Tomassetti        return nodeClass.isInstance(child);
10387db3c76d76680bd1bea566d44ab74b4dca55b71Federico Tomassetti    }
104d25e79e2c567cc2fc312fabe15fa35be886f31b2Federico Tomassetti}
105