1 /* 2 * Copyright (c) 1998, 2013, 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><a name=" + name + ">" + name + 66 " Command Set</a></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