1/* 2 * Copyright (c) 2003, 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 26package sun.rmi.rmic.newrmic; 27 28import com.sun.javadoc.ClassDoc; 29import com.sun.javadoc.RootDoc; 30import java.io.File; 31import java.text.MessageFormat; 32import java.util.ArrayList; 33import java.util.Collections; 34import java.util.List; 35 36import static sun.rmi.rmic.newrmic.Constants.*; 37 38/** 39 * The environment for an rmic compilation batch. 40 * 41 * A BatchEnvironment contains a RootDoc, which is the entry point 42 * into the doclet environment for the associated rmic compilation 43 * batch. A BatchEnvironment collects the source files generated 44 * during the batch's execution, for eventual source code compilation 45 * and, possibly, deletion. Errors that occur during generation 46 * activity should be reported through the BatchEnvironment's "error" 47 * method. 48 * 49 * A protocol-specific generator class may require the use of a 50 * particular BatchEnvironment subclass for enhanced environment 51 * functionality. A BatchEnvironment subclass must declare a 52 * public constructor with one parameter of type RootDoc. 53 * 54 * WARNING: The contents of this source file are not part of any 55 * supported API. Code that depends on them does so at its own risk: 56 * they are subject to change or removal without notice. 57 * 58 * @author Peter Jones 59 **/ 60public class BatchEnvironment { 61 62 private final RootDoc rootDoc; 63 64 /** cached ClassDoc for certain types used by rmic */ 65 private final ClassDoc docRemote; 66 private final ClassDoc docException; 67 private final ClassDoc docRemoteException; 68 private final ClassDoc docRuntimeException; 69 70 private boolean verbose = false; 71 private final List<File> generatedFiles = new ArrayList<File>(); 72 73 /** 74 * Creates a new BatchEnvironment with the specified RootDoc. 75 **/ 76 public BatchEnvironment(RootDoc rootDoc) { 77 this.rootDoc = rootDoc; 78 79 /* 80 * Initialize cached ClassDoc for types used by rmic. Note 81 * that any of these could be null if the boot class path is 82 * incorrect, which could cause a NullPointerException later. 83 */ 84 docRemote = rootDoc().classNamed(REMOTE); 85 docException = rootDoc().classNamed(EXCEPTION); 86 docRemoteException = rootDoc().classNamed(REMOTE_EXCEPTION); 87 docRuntimeException = rootDoc().classNamed(RUNTIME_EXCEPTION); 88 } 89 90 /** 91 * Returns the RootDoc for this environment. 92 **/ 93 public RootDoc rootDoc() { 94 return rootDoc; 95 } 96 97 public ClassDoc docRemote() { return docRemote; } 98 public ClassDoc docException() { return docException; } 99 public ClassDoc docRemoteException() { return docRemoteException; } 100 public ClassDoc docRuntimeException() { return docRuntimeException; } 101 102 /** 103 * Sets this environment's verbosity status. 104 **/ 105 public void setVerbose(boolean verbose) { 106 this.verbose = verbose; 107 } 108 109 /** 110 * Returns this environment's verbosity status. 111 **/ 112 public boolean verbose() { 113 return verbose; 114 } 115 116 /** 117 * Adds the specified file to the list of source files generated 118 * during this batch. 119 **/ 120 public void addGeneratedFile(File file) { 121 generatedFiles.add(file); 122 } 123 124 /** 125 * Returns the list of files generated during this batch. 126 **/ 127 public List<File> generatedFiles() { 128 return Collections.unmodifiableList(generatedFiles); 129 } 130 131 /** 132 * Outputs the specified (non-error) message. 133 **/ 134 public void output(String msg) { 135 rootDoc.printNotice(msg); 136 } 137 138 /** 139 * Reports an error using the specified resource key and text 140 * formatting arguments. 141 **/ 142 public void error(String key, String... args) { 143 rootDoc.printError(Resources.getText(key, args)); 144 } 145} 146