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 class AltNode extends AbstractGroupNode implements TypeNode { 32 33 SelectNode select = null; 34 constrain(Context ctx)35 void constrain(Context ctx) { 36 super.constrain(ctx); 37 38 if (!(nameNode instanceof NameValueNode)) { 39 error("Alt name must have value: " + nameNode); 40 } 41 if (parent instanceof SelectNode) { 42 select = (SelectNode)parent; 43 } else { 44 error("Alt must be in Select"); 45 } 46 } 47 document(PrintWriter writer)48 void document(PrintWriter writer) { 49 docRowStart(writer); 50 writer.println("<td colspan=" + 51 (maxStructIndent - structIndent + 1) + ">"); 52 writer.println("Case " + nameNode.name + " - if <i>" + 53 ((SelectNode)parent).typeNode.name + 54 "</i> is " + nameNode.value() + ":"); 55 writer.println("<td>" + comment() + " "); 56 ++structIndent; 57 super.document(writer); 58 --structIndent; 59 } 60 javaClassImplements()61 String javaClassImplements() { 62 return " extends " + select.commonBaseClass(); 63 } 64 genJavaClassSpecifics(PrintWriter writer, int depth)65 void genJavaClassSpecifics(PrintWriter writer, int depth) { 66 indent(writer, depth); 67 writer.print("static final " + select.typeNode.javaType()); 68 writer.println(" ALT_ID = " + nameNode.value() + ";"); 69 if (context.isWritingCommand()) { 70 genJavaCreateMethod(writer, depth); 71 } else { 72 indent(writer, depth); 73 writer.println(select.typeNode.javaParam() + "() {"); 74 indent(writer, depth+1); 75 writer.println("return ALT_ID;"); 76 indent(writer, depth); 77 writer.println("}"); 78 } 79 super.genJavaClassSpecifics(writer, depth); 80 } 81 genJavaWriteMethod(PrintWriter writer, int depth)82 void genJavaWriteMethod(PrintWriter writer, int depth) { 83 genJavaWriteMethod(writer, depth, ""); 84 } 85 genJavaReadsSelectCase(PrintWriter writer, int depth, String common)86 void genJavaReadsSelectCase(PrintWriter writer, int depth, String common) { 87 indent(writer, depth); 88 writer.println("case " + nameNode.value() + ":"); 89 indent(writer, depth+1); 90 writer.println(common + " = new " + name + "(vm, ps);"); 91 indent(writer, depth+1); 92 writer.println("break;"); 93 } 94 genJavaCreateMethod(PrintWriter writer, int depth)95 void genJavaCreateMethod(PrintWriter writer, int depth) { 96 indent(writer, depth); 97 writer.print("static " + select.name() + " create("); 98 writer.print(javaParams()); 99 writer.println(") {"); 100 indent(writer, depth+1); 101 writer.print("return new " + select.name() + "("); 102 writer.print("ALT_ID, new " + javaClassName() + "("); 103 for (Iterator<Node> it = components.iterator(); it.hasNext();) { 104 TypeNode tn = (TypeNode)it.next(); 105 writer.print(tn.name()); 106 if (it.hasNext()) { 107 writer.print(", "); 108 } 109 } 110 writer.println("));"); 111 indent(writer, depth); 112 writer.println("}"); 113 } 114 115 } 116