1 /*
2  * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 package build.tools.jdwpgen;
27 
28 import java.util.*;
29 import java.io.*;
30 
31 abstract class AbstractNamedNode extends Node {
32 
33     NameNode nameNode = null;
34     String name;
35 
name()36     public String name() {
37         return name;
38     }
39 
prune()40     void prune() {
41         Iterator<Node> it = components.iterator();
42 
43         if (it.hasNext()) {
44             Node nameNode = it.next();
45 
46             if (nameNode instanceof NameNode) {
47                 this.nameNode = (NameNode)nameNode;
48                 this.name = this.nameNode.text();
49                 it.remove();
50             } else {
51                 error("Bad name: " + name);
52             }
53         } else {
54             error("empty");
55         }
56         super.prune();
57     }
58 
constrain(Context ctx)59     void constrain(Context ctx) {
60         nameNode.constrain(ctx);
61         super.constrain(ctx.subcontext(name));
62     }
63 
document(PrintWriter writer)64     void document(PrintWriter writer) {
65         writer.println("<h4 id=\"" + name + "\">" + name +
66                        " Command Set</h4>");
67         for (Node node : components) {
68             node.document(writer);
69         }
70     }
71 
javaClassName()72     String javaClassName() {
73         return name();
74     }
75 
genJavaClassSpecifics(PrintWriter writer, int depth)76     void genJavaClassSpecifics(PrintWriter writer, int depth) {
77     }
78 
javaClassImplements()79     String javaClassImplements() {
80         return ""; // does not implement anything, by default
81     }
82 
genJavaClass(PrintWriter writer, int depth)83     void genJavaClass(PrintWriter writer, int depth) {
84         writer.println();
85         genJavaComment(writer, depth);
86         indent(writer, depth);
87         if (depth != 0) {
88             writer.print("static ");
89         }
90         writer.print("class " + javaClassName());
91         writer.println(javaClassImplements() + " {");
92         genJavaClassSpecifics(writer, depth+1);
93         for (Node node : components) {
94             node.genJava(writer, depth+1);
95         }
96         indent(writer, depth);
97         writer.println("}");
98     }
99 
genCInclude(PrintWriter writer)100     void genCInclude(PrintWriter writer) {
101         if (nameNode instanceof NameValueNode) {
102             writer.println("#define " + context.whereC +
103                            " " + nameNode.value());
104         }
105         super.genCInclude(writer);
106     }
107 }
108