JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/printer/XmlPrinter.java
1/*
2 * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
3 * Copyright (C) 2011, 2013-2020 The JavaParser Team.
4 *
5 * This file is part of JavaParser.
6 *
7 * JavaParser can be used either under the terms of
8 * a) the GNU Lesser General Public License as published by
9 *     the Free Software Foundation, either version 3 of the License, or
10 *     (at your option) any later version.
11 * b) the terms of the Apache License
12 *
13 * You should have received a copy of both licenses in LICENCE.LGPL and
14 * LICENCE.APACHE. Please refer to those files for details.
15 *
16 * JavaParser is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU Lesser General Public License for more details.
20 */
21
22package com.github.javaparser.printer;
23
24import com.github.javaparser.ast.Node;
25import com.github.javaparser.ast.NodeList;
26import com.github.javaparser.metamodel.NodeMetaModel;
27import com.github.javaparser.metamodel.PropertyMetaModel;
28
29import java.util.List;
30
31import static com.github.javaparser.utils.Utils.assertNotNull;
32import static java.util.stream.Collectors.toList;
33
34/**
35 * Outputs an XML file containing the AST meant for inspecting it.
36 */
37public class XmlPrinter {
38    private final boolean outputNodeType;
39
40    public XmlPrinter(boolean outputNodeType) {
41        this.outputNodeType = outputNodeType;
42    }
43
44    public String output(Node node) {
45        StringBuilder output = new StringBuilder();
46        output(node"root"0output);
47        return output.toString();
48    }
49
50    public void output(Node nodeString nameint levelStringBuilder builder) {
51        assertNotNull(node);
52        NodeMetaModel metaModel = node.getMetaModel();
53        List<PropertyMetaModelallPropertyMetaModels = metaModel.getAllPropertyMetaModels();
54        List<PropertyMetaModelattributes = allPropertyMetaModels.stream().filter(PropertyMetaModel::isAttribute).filter(PropertyMetaModel::isSingular).collect(toList());
55        List<PropertyMetaModelsubNodes = allPropertyMetaModels.stream().filter(PropertyMetaModel::isNode).filter(PropertyMetaModel::isSingular).collect(toList());
56        List<PropertyMetaModelsubLists = allPropertyMetaModels.stream().filter(PropertyMetaModel::isNodeList).collect(toList());
57
58        builder.append("<").append(name);
59        if (outputNodeType) {
60            builder.append(attribute("type"metaModel.getTypeName()));
61        }
62
63        for (PropertyMetaModel attributeMetaModel : attributes) {
64            builder.append(attribute(attributeMetaModel.getName(), attributeMetaModel.getValue(node).toString()));
65        }
66        builder.append(">");
67
68        for (PropertyMetaModel subNodeMetaModel : subNodes) {
69            Node value = (NodesubNodeMetaModel.getValue(node);
70            if (value != null) {
71                output(valuesubNodeMetaModel.getName(), level + 1builder);
72            }
73        }
74
75        for (PropertyMetaModel subListMetaModel : subLists) {
76            NodeList<? extends NodesubList = (NodeList<? extends Node>) subListMetaModel.getValue(node);
77            if (subList != null && !subList.isEmpty()) {
78                String listName = subListMetaModel.getName();
79                builder.append("<").append(listName).append(">");
80                String singular = listName.substring(0listName.length() - 1);
81                for (Node subListNode : subList) {
82                    output(subListNodesingularlevel + 1builder);
83                }
84                builder.append(close(listName));
85            }
86        }
87        builder.append(close(name));
88    }
89
90    private static String close(String name) {
91        return "</" + name + ">";
92    }
93
94    private static String attribute(String nameString value) {
95        return " " + name + "='" + value + "'";
96    }
97
98    public static void print(Node node) {
99        System.out.println(new XmlPrinter(true).output(node));
100    }
101}
102
103
MembersX
XmlPrinter:output:Block:Block:subList
XmlPrinter:output
XmlPrinter:attribute
XmlPrinter:outputNodeType
XmlPrinter:output:Block:subNodes
XmlPrinter:output:Block:attributes
XmlPrinter:output:Block:allPropertyMetaModels
XmlPrinter:print
XmlPrinter:output:Block:Block:Block:singular
XmlPrinter:output:Block:Block:value
XmlPrinter:XmlPrinter
XmlPrinter:output:Block:output
XmlPrinter:output:Block:metaModel
XmlPrinter:output:Block:subLists
XmlPrinter:output:Block:Block:Block:listName
XmlPrinter:close
Members
X