1.1 --- a/javap/src/main/java/sun/tools/javap/Main.java Fri Nov 09 21:33:22 2012 +0100
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,216 +0,0 @@
1.4 -/*
1.5 - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
1.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1.7 - *
1.8 - * This code is free software; you can redistribute it and/or modify it
1.9 - * under the terms of the GNU General Public License version 2 only, as
1.10 - * published by the Free Software Foundation. Oracle designates this
1.11 - * particular file as subject to the "Classpath" exception as provided
1.12 - * by Oracle in the LICENSE file that accompanied this code.
1.13 - *
1.14 - * This code is distributed in the hope that it will be useful, but WITHOUT
1.15 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1.16 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1.17 - * version 2 for more details (a copy is included in the LICENSE file that
1.18 - * accompanied this code).
1.19 - *
1.20 - * You should have received a copy of the GNU General Public License version
1.21 - * 2 along with this work; if not, write to the Free Software Foundation,
1.22 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1.23 - *
1.24 - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1.25 - * or visit www.oracle.com if you need additional information or have any
1.26 - * questions.
1.27 - */
1.28 -
1.29 -
1.30 -
1.31 -package sun.tools.javap;
1.32 -
1.33 -import java.util.*;
1.34 -import java.io.*;
1.35 -
1.36 -/**
1.37 - * Entry point for javap, class file disassembler.
1.38 - *
1.39 - * @author Sucheta Dambalkar (Adopted code from old javap)
1.40 - */
1.41 -public class Main{
1.42 -
1.43 - private Vector classList = new Vector();
1.44 - private PrintWriter out;
1.45 - JavapEnvironment env = new JavapEnvironment();
1.46 - private static boolean errorOccurred = false;
1.47 - private static final String progname = "javap";
1.48 -
1.49 -
1.50 - public Main(PrintWriter out){
1.51 - this.out = out;
1.52 - }
1.53 -
1.54 - public static void main(String argv[]) {
1.55 - entry(argv);
1.56 - if (errorOccurred) {
1.57 - System.exit(1);
1.58 - }
1.59 - }
1.60 -
1.61 -
1.62 - /**
1.63 - * Entry point for tool if you don't want System.exit() called.
1.64 - */
1.65 - public static void entry(String argv[]) {
1.66 - PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
1.67 - try {
1.68 -
1.69 - Main jpmain = new Main(out);
1.70 - jpmain.perform(argv);
1.71 -
1.72 - } finally {
1.73 - out.close();
1.74 - }
1.75 - }
1.76 -
1.77 - /**
1.78 - * Process the arguments and perform the desired action
1.79 - */
1.80 - private void perform(String argv[]) {
1.81 - if (parseArguments(argv)) {
1.82 - displayResults();
1.83 -
1.84 - }
1.85 - }
1.86 -
1.87 - private void error(String msg) {
1.88 - errorOccurred = true;
1.89 - System.err.println(msg);
1.90 - System.err.flush();
1.91 - }
1.92 -
1.93 - /**
1.94 - * Print usage information
1.95 - */
1.96 - private void usage() {
1.97 - java.io.PrintStream out = System.out;
1.98 - out.println("Usage: " + progname + " <options> <classes>...");
1.99 - out.println();
1.100 - out.println("where options include:");
1.101 - out.println(" -c Disassemble the code");
1.102 - out.println(" -classpath <pathlist> Specify where to find user class files");
1.103 - out.println(" -extdirs <dirs> Override location of installed extensions");
1.104 - out.println(" -help Print this usage message");
1.105 - out.println(" -J<flag> Pass <flag> directly to the runtime system");
1.106 - out.println(" -l Print line number and local variable tables");
1.107 - out.println(" -public Show only public classes and members");
1.108 - out.println(" -protected Show protected/public classes and members");
1.109 - out.println(" -package Show package/protected/public classes");
1.110 - out.println(" and members (default)");
1.111 - out.println(" -private Show all classes and members");
1.112 - out.println(" -s Print internal type signatures");
1.113 - out.println(" -bootclasspath <pathlist> Override location of class files loaded");
1.114 - out.println(" by the bootstrap class loader");
1.115 - out.println(" -verbose Print stack size, number of locals and args for methods");
1.116 - out.println(" If verifying, print reasons for failure");
1.117 - out.println();
1.118 - }
1.119 -
1.120 - /**
1.121 - * Parse the command line arguments.
1.122 - * Set flags, construct the class list and create environment.
1.123 - */
1.124 - private boolean parseArguments(String argv[]) {
1.125 - for (int i = 0 ; i < argv.length ; i++) {
1.126 - String arg = argv[i];
1.127 - if (arg.startsWith("-")) {
1.128 - if (arg.equals("-l")) {
1.129 - env.showLineAndLocal = true;
1.130 - } else if (arg.equals("-private") || arg.equals("-p")) {
1.131 - env.showAccess = env.PRIVATE;
1.132 - } else if (arg.equals("-package")) {
1.133 - env.showAccess = env.PACKAGE;
1.134 - } else if (arg.equals("-protected")) {
1.135 - env.showAccess = env.PROTECTED;
1.136 - } else if (arg.equals("-public")) {
1.137 - env.showAccess = env.PUBLIC;
1.138 - } else if (arg.equals("-c")) {
1.139 - env.showDisassembled = true;
1.140 - } else if (arg.equals("-s")) {
1.141 - env.showInternalSigs = true;
1.142 - } else if (arg.equals("-verbose")) {
1.143 - env.showVerbose = true;
1.144 - } else if (arg.equals("-v")) {
1.145 - env.showVerbose = true;
1.146 - } else if (arg.equals("-h")) {
1.147 - error("-h is no longer available - use the 'javah' program");
1.148 - return false;
1.149 - } else if (arg.equals("-verify")) {
1.150 - error("-verify is no longer available - use 'java -verify'");
1.151 - return false;
1.152 - } else if (arg.equals("-verify-verbose")) {
1.153 - error("-verify is no longer available - use 'java -verify'");
1.154 - return false;
1.155 - } else if (arg.equals("-help")) {
1.156 - usage();
1.157 - return false;
1.158 - } else if (arg.equals("-classpath")) {
1.159 - if ((i + 1) < argv.length) {
1.160 - env.classPathString = argv[++i];
1.161 - } else {
1.162 - error("-classpath requires argument");
1.163 - usage();
1.164 - return false;
1.165 - }
1.166 - } else if (arg.equals("-bootclasspath")) {
1.167 - if ((i + 1) < argv.length) {
1.168 - env.bootClassPathString = argv[++i];
1.169 - } else {
1.170 - error("-bootclasspath requires argument");
1.171 - usage();
1.172 - return false;
1.173 - }
1.174 - } else if (arg.equals("-extdirs")) {
1.175 - if ((i + 1) < argv.length) {
1.176 - env.extDirsString = argv[++i];
1.177 - } else {
1.178 - error("-extdirs requires argument");
1.179 - usage();
1.180 - return false;
1.181 - }
1.182 - } else if (arg.equals("-all")) {
1.183 - env.showallAttr = true;
1.184 - } else {
1.185 - error("invalid flag: " + arg);
1.186 - usage();
1.187 - return false;
1.188 - }
1.189 - } else {
1.190 - classList.addElement(arg);
1.191 - env.nothingToDo = false;
1.192 - }
1.193 - }
1.194 - if (env.nothingToDo) {
1.195 - System.out.println("No classes were specified on the command line. Try -help.");
1.196 - errorOccurred = true;
1.197 - return false;
1.198 - }
1.199 - return true;
1.200 - }
1.201 -
1.202 - /**
1.203 - * Display results
1.204 - */
1.205 - private void displayResults() {
1.206 - for (int i = 0; i < classList.size() ; i++ ) {
1.207 - String Name = (String)classList.elementAt(i);
1.208 - InputStream classin = env.getFileInputStream(Name);
1.209 -
1.210 - try {
1.211 - JavapPrinter printer = new JavapPrinter(classin, out, env);
1.212 - printer.print(); // actual do display
1.213 -
1.214 - } catch (IllegalArgumentException exc) {
1.215 - error(exc.getMessage());
1.216 - }
1.217 - }
1.218 - }
1.219 -}