< prev index next >

langtools/src/jdk.jdeps/share/classes/com/sun/tools/javap/JavapTask.java

Print this page




 109             for (String a: aliases) {
 110                 if (a.equals(opt))
 111                     return true;
 112             }
 113             return false;
 114         }
 115 
 116         boolean ignoreRest() {
 117             return false;
 118         }
 119 
 120         abstract void process(JavapTask task, String opt, String arg) throws BadArgs;
 121 
 122         final boolean hasArg;
 123         final String[] aliases;
 124     }
 125 
 126     static final Option[] recognizedOptions = {
 127 
 128         new Option(false, "-help", "--help", "-?") {

 129             void process(JavapTask task, String opt, String arg) {
 130                 task.options.help = true;
 131             }
 132         },
 133 
 134         new Option(false, "-version") {

 135             void process(JavapTask task, String opt, String arg) {
 136                 task.options.version = true;
 137             }
 138         },
 139 
 140         new Option(false, "-fullversion") {

 141             void process(JavapTask task, String opt, String arg) {
 142                 task.options.fullVersion = true;
 143             }
 144         },
 145 
 146         new Option(false, "-v", "-verbose", "-all") {

 147             void process(JavapTask task, String opt, String arg) {
 148                 task.options.verbose = true;
 149                 task.options.showDescriptors = true;
 150                 task.options.showFlags = true;
 151                 task.options.showAllAttrs = true;
 152             }
 153         },
 154 
 155         new Option(false, "-l") {

 156             void process(JavapTask task, String opt, String arg) {
 157                 task.options.showLineAndLocalVariableTables = true;
 158             }
 159         },
 160 
 161         new Option(false, "-public") {

 162             void process(JavapTask task, String opt, String arg) {
 163                 task.options.accessOptions.add(opt);
 164                 task.options.showAccess = AccessFlags.ACC_PUBLIC;
 165             }
 166         },
 167 
 168         new Option(false, "-protected") {

 169             void process(JavapTask task, String opt, String arg) {
 170                 task.options.accessOptions.add(opt);
 171                 task.options.showAccess = AccessFlags.ACC_PROTECTED;
 172             }
 173         },
 174 
 175         new Option(false, "-package") {

 176             void process(JavapTask task, String opt, String arg) {
 177                 task.options.accessOptions.add(opt);
 178                 task.options.showAccess = 0;
 179             }
 180         },
 181 
 182         new Option(false, "-p", "-private") {

 183             void process(JavapTask task, String opt, String arg) {
 184                 if (!task.options.accessOptions.contains("-p") &&
 185                         !task.options.accessOptions.contains("-private")) {
 186                     task.options.accessOptions.add(opt);
 187                 }
 188                 task.options.showAccess = AccessFlags.ACC_PRIVATE;
 189             }
 190         },
 191 
 192         new Option(false, "-c") {

 193             void process(JavapTask task, String opt, String arg) {
 194                 task.options.showDisassembled = true;
 195             }
 196         },
 197 
 198         new Option(false, "-s") {

 199             void process(JavapTask task, String opt, String arg) {
 200                 task.options.showDescriptors = true;
 201             }
 202         },
 203 
 204         new Option(false, "-sysinfo") {

 205             void process(JavapTask task, String opt, String arg) {
 206                 task.options.sysInfo = true;
 207             }
 208         },
 209 
 210         new Option(false, "-XDdetails") {

 211             void process(JavapTask task, String opt, String arg) {
 212                 task.options.details = EnumSet.allOf(InstructionDetailWriter.Kind.class);
 213             }
 214 
 215         },
 216 
 217         new Option(false, "-XDdetails:") {
 218             @Override
 219             boolean matches(String opt) {
 220                 int sep = opt.indexOf(":");
 221                 return sep != -1 && super.matches(opt.substring(0, sep + 1));
 222             }
 223 

 224             void process(JavapTask task, String opt, String arg) throws BadArgs {
 225                 int sep = opt.indexOf(":");
 226                 for (String v: opt.substring(sep + 1).split("[,: ]+")) {
 227                     if (!handleArg(task, v))
 228                         throw task.new BadArgs("err.invalid.arg.for.option", v);
 229                 }
 230             }
 231 
 232             boolean handleArg(JavapTask task, String arg) {
 233                 if (arg.length() == 0)
 234                     return true;
 235 
 236                 if (arg.equals("all")) {
 237                     task.options.details = EnumSet.allOf(InstructionDetailWriter.Kind.class);
 238                     return true;
 239                 }
 240 
 241                 boolean on = true;
 242                 if (arg.startsWith("-")) {
 243                     on = false;
 244                     arg = arg.substring(1);
 245                 }
 246 
 247                 for (InstructionDetailWriter.Kind k: InstructionDetailWriter.Kind.values()) {
 248                     if (arg.equalsIgnoreCase(k.option)) {
 249                         if (on)
 250                             task.options.details.add(k);
 251                         else
 252                             task.options.details.remove(k);
 253                         return true;
 254                     }
 255                 }
 256                 return false;
 257             }
 258         },
 259 
 260         new Option(false, "-constants") {

 261             void process(JavapTask task, String opt, String arg) {
 262                 task.options.showConstants = true;
 263             }
 264         },
 265 
 266         new Option(false, "-XDinner") {

 267             void process(JavapTask task, String opt, String arg) {
 268                 task.options.showInnerClasses = true;
 269             }
 270         },
 271 
 272         new Option(false, "-XDindent:") {
 273             @Override
 274             boolean matches(String opt) {
 275                 int sep = opt.indexOf(":");
 276                 return sep != -1 && super.matches(opt.substring(0, sep + 1));
 277             }
 278 

 279             void process(JavapTask task, String opt, String arg) throws BadArgs {
 280                 int sep = opt.indexOf(":");
 281                 try {
 282                     int i = Integer.valueOf(opt.substring(sep + 1));
 283                     if (i > 0) // silently ignore invalid values
 284                         task.options.indentWidth = i;
 285                 } catch (NumberFormatException e) {
 286                 }
 287             }
 288         },
 289 
 290         new Option(false, "-XDtab:") {
 291             @Override
 292             boolean matches(String opt) {
 293                 int sep = opt.indexOf(":");
 294                 return sep != -1 && super.matches(opt.substring(0, sep + 1));
 295             }
 296 

 297             void process(JavapTask task, String opt, String arg) throws BadArgs {
 298                 int sep = opt.indexOf(":");
 299                 try {
 300                     int i = Integer.valueOf(opt.substring(sep + 1));
 301                     if (i > 0) // silently ignore invalid values
 302                         task.options.tabColumn = i;
 303                 } catch (NumberFormatException e) {
 304                 }
 305             }
 306         },
 307 
 308         new Option(true, "-m") {
 309             @Override
 310             void process(JavapTask task, String opt, String arg) throws BadArgs {
 311                 task.options.moduleName = arg;
 312             }
 313         }
 314 
 315     };
 316 
 317     public JavapTask() {
 318         context = new Context();
 319         context.put(Messages.class, this);
 320         options = Options.instance(context);
 321         attributeFactory = new Attribute.Factory();
 322     }
 323 
 324     public JavapTask(Writer out,
 325             JavaFileManager fileManager,
 326             DiagnosticListener<? super JavaFileObject> diagnosticListener) {
 327         this();
 328         this.log = getPrintWriterForWriter(out);


 912                 Location result = null;
 913                 for (Location l: set) {
 914                     String name = fileManager.inferModuleName(l);
 915                     if (name.equals(moduleName)) {
 916                         if (result == null)
 917                             result = l;
 918                         else
 919                             throw new IOException("multiple definitions found for " + moduleName);
 920                     }
 921                 }
 922                 if (result != null)
 923                     return result;
 924             }
 925         }
 926         return null;
 927     }
 928 
 929     private void showHelp() {
 930         printLines(getMessage("main.usage", progname));
 931         for (Option o: recognizedOptions) {
 932             String name = o.aliases[0].substring(1); // there must always be at least one name
 933             if (name.startsWith("X") || name.equals("fullversion") || name.equals("h") || name.equals("verify"))
 934                 continue;
 935             printLines(getMessage("main.opt." + name));
 936         }

 937         String[] fmOptions = {
 938             "-classpath", "-cp", "-bootclasspath",
 939             "-upgrademodulepath", "-system", "-modulepath" };



 940         for (String o: fmOptions) {
 941             if (fileManager.isSupportedOption(o) == -1)
 942                 continue;
 943             String name = o.substring(1);
 944             printLines(getMessage("main.opt." + name));
 945         }
 946 

 947     }
 948 
 949     private void showVersion(boolean full) {
 950         printLines(version(full ? "full" : "release"));
 951     }
 952 
 953     private void printLines(String msg) {
 954         log.println(msg.replace("\n", nl));
 955     }
 956 
 957     private static final String nl = System.getProperty("line.separator");
 958 
 959     private static final String versionRBName = "com.sun.tools.javap.resources.version";
 960     private static ResourceBundle versionRB;
 961 
 962     private String version(String key) {
 963         // key=version:  mm.nn.oo[-milestone]
 964         // key=full:     mm.mm.oo[-milestone]-build
 965         if (versionRB == null) {
 966             try {




 109             for (String a: aliases) {
 110                 if (a.equals(opt))
 111                     return true;
 112             }
 113             return false;
 114         }
 115 
 116         boolean ignoreRest() {
 117             return false;
 118         }
 119 
 120         abstract void process(JavapTask task, String opt, String arg) throws BadArgs;
 121 
 122         final boolean hasArg;
 123         final String[] aliases;
 124     }
 125 
 126     static final Option[] recognizedOptions = {
 127 
 128         new Option(false, "-help", "--help", "-?") {
 129             @Override
 130             void process(JavapTask task, String opt, String arg) {
 131                 task.options.help = true;
 132             }
 133         },
 134 
 135         new Option(false, "-version") {
 136             @Override
 137             void process(JavapTask task, String opt, String arg) {
 138                 task.options.version = true;
 139             }
 140         },
 141 
 142         new Option(false, "-fullversion") {
 143             @Override
 144             void process(JavapTask task, String opt, String arg) {
 145                 task.options.fullVersion = true;
 146             }
 147         },
 148 
 149         new Option(false, "-v", "-verbose", "-all") {
 150             @Override
 151             void process(JavapTask task, String opt, String arg) {
 152                 task.options.verbose = true;
 153                 task.options.showDescriptors = true;
 154                 task.options.showFlags = true;
 155                 task.options.showAllAttrs = true;
 156             }
 157         },
 158 
 159         new Option(false, "-l") {
 160             @Override
 161             void process(JavapTask task, String opt, String arg) {
 162                 task.options.showLineAndLocalVariableTables = true;
 163             }
 164         },
 165 
 166         new Option(false, "-public") {
 167             @Override
 168             void process(JavapTask task, String opt, String arg) {
 169                 task.options.accessOptions.add(opt);
 170                 task.options.showAccess = AccessFlags.ACC_PUBLIC;
 171             }
 172         },
 173 
 174         new Option(false, "-protected") {
 175             @Override
 176             void process(JavapTask task, String opt, String arg) {
 177                 task.options.accessOptions.add(opt);
 178                 task.options.showAccess = AccessFlags.ACC_PROTECTED;
 179             }
 180         },
 181 
 182         new Option(false, "-package") {
 183             @Override
 184             void process(JavapTask task, String opt, String arg) {
 185                 task.options.accessOptions.add(opt);
 186                 task.options.showAccess = 0;
 187             }
 188         },
 189 
 190         new Option(false, "-p", "-private") {
 191             @Override
 192             void process(JavapTask task, String opt, String arg) {
 193                 if (!task.options.accessOptions.contains("-p") &&
 194                         !task.options.accessOptions.contains("-private")) {
 195                     task.options.accessOptions.add(opt);
 196                 }
 197                 task.options.showAccess = AccessFlags.ACC_PRIVATE;
 198             }
 199         },
 200 
 201         new Option(false, "-c") {
 202             @Override
 203             void process(JavapTask task, String opt, String arg) {
 204                 task.options.showDisassembled = true;
 205             }
 206         },
 207 
 208         new Option(false, "-s") {
 209             @Override
 210             void process(JavapTask task, String opt, String arg) {
 211                 task.options.showDescriptors = true;
 212             }
 213         },
 214 
 215         new Option(false, "-sysinfo") {
 216             @Override
 217             void process(JavapTask task, String opt, String arg) {
 218                 task.options.sysInfo = true;
 219             }
 220         },
 221 
 222         new Option(false, "-XDdetails") {
 223             @Override
 224             void process(JavapTask task, String opt, String arg) {
 225                 task.options.details = EnumSet.allOf(InstructionDetailWriter.Kind.class);
 226             }
 227 
 228         },
 229 
 230         new Option(false, "-XDdetails:") {
 231             @Override
 232             boolean matches(String opt) {
 233                 int sep = opt.indexOf(":");
 234                 return sep != -1 && super.matches(opt.substring(0, sep + 1));
 235             }
 236 
 237             @Override
 238             void process(JavapTask task, String opt, String arg) throws BadArgs {
 239                 int sep = opt.indexOf(":");
 240                 for (String v: opt.substring(sep + 1).split("[,: ]+")) {
 241                     if (!handleArg(task, v))
 242                         throw task.new BadArgs("err.invalid.arg.for.option", v);
 243                 }
 244             }
 245 
 246             boolean handleArg(JavapTask task, String arg) {
 247                 if (arg.length() == 0)
 248                     return true;
 249 
 250                 if (arg.equals("all")) {
 251                     task.options.details = EnumSet.allOf(InstructionDetailWriter.Kind.class);
 252                     return true;
 253                 }
 254 
 255                 boolean on = true;
 256                 if (arg.startsWith("-")) {
 257                     on = false;
 258                     arg = arg.substring(1);
 259                 }
 260 
 261                 for (InstructionDetailWriter.Kind k: InstructionDetailWriter.Kind.values()) {
 262                     if (arg.equalsIgnoreCase(k.option)) {
 263                         if (on)
 264                             task.options.details.add(k);
 265                         else
 266                             task.options.details.remove(k);
 267                         return true;
 268                     }
 269                 }
 270                 return false;
 271             }
 272         },
 273 
 274         new Option(false, "-constants") {
 275             @Override
 276             void process(JavapTask task, String opt, String arg) {
 277                 task.options.showConstants = true;
 278             }
 279         },
 280 
 281         new Option(false, "-XDinner") {
 282             @Override
 283             void process(JavapTask task, String opt, String arg) {
 284                 task.options.showInnerClasses = true;
 285             }
 286         },
 287 
 288         new Option(false, "-XDindent:") {
 289             @Override
 290             boolean matches(String opt) {
 291                 int sep = opt.indexOf(":");
 292                 return sep != -1 && super.matches(opt.substring(0, sep + 1));
 293             }
 294 
 295             @Override
 296             void process(JavapTask task, String opt, String arg) throws BadArgs {
 297                 int sep = opt.indexOf(":");
 298                 try {
 299                     int i = Integer.valueOf(opt.substring(sep + 1));
 300                     if (i > 0) // silently ignore invalid values
 301                         task.options.indentWidth = i;
 302                 } catch (NumberFormatException e) {
 303                 }
 304             }
 305         },
 306 
 307         new Option(false, "-XDtab:") {
 308             @Override
 309             boolean matches(String opt) {
 310                 int sep = opt.indexOf(":");
 311                 return sep != -1 && super.matches(opt.substring(0, sep + 1));
 312             }
 313 
 314             @Override
 315             void process(JavapTask task, String opt, String arg) throws BadArgs {
 316                 int sep = opt.indexOf(":");
 317                 try {
 318                     int i = Integer.valueOf(opt.substring(sep + 1));
 319                     if (i > 0) // silently ignore invalid values
 320                         task.options.tabColumn = i;
 321                 } catch (NumberFormatException e) {
 322                 }
 323             }
 324         },
 325 
 326         new Option(true, "--module", "-m") {
 327             @Override
 328             void process(JavapTask task, String opt, String arg) throws BadArgs {
 329                 task.options.moduleName = arg;
 330             }
 331         }
 332 
 333     };
 334 
 335     public JavapTask() {
 336         context = new Context();
 337         context.put(Messages.class, this);
 338         options = Options.instance(context);
 339         attributeFactory = new Attribute.Factory();
 340     }
 341 
 342     public JavapTask(Writer out,
 343             JavaFileManager fileManager,
 344             DiagnosticListener<? super JavaFileObject> diagnosticListener) {
 345         this();
 346         this.log = getPrintWriterForWriter(out);


 930                 Location result = null;
 931                 for (Location l: set) {
 932                     String name = fileManager.inferModuleName(l);
 933                     if (name.equals(moduleName)) {
 934                         if (result == null)
 935                             result = l;
 936                         else
 937                             throw new IOException("multiple definitions found for " + moduleName);
 938                     }
 939                 }
 940                 if (result != null)
 941                     return result;
 942             }
 943         }
 944         return null;
 945     }
 946 
 947     private void showHelp() {
 948         printLines(getMessage("main.usage", progname));
 949         for (Option o: recognizedOptions) {
 950             String name = o.aliases[0].replaceAll("^-+", "").replaceAll("-+", "_"); // there must always be at least one name
 951             if (name.startsWith("X") || name.equals("fullversion") || name.equals("h") || name.equals("verify"))
 952                 continue;
 953             printLines(getMessage("main.opt." + name));
 954         }
 955 
 956         String[] fmOptions = {
 957             "--module-path", "--system",
 958             "--class-path", "-classpath", "-cp",
 959             "-bootclasspath"
 960         };
 961 
 962         for (String o: fmOptions) {
 963             if (fileManager.isSupportedOption(o) == -1)
 964                 continue;
 965             String name = o.replaceAll("^-+", "").replaceAll("-+", "_");
 966             printLines(getMessage("main.opt." + name));
 967         }
 968 
 969         log.println(getMessage("main.usage.foot"));
 970     }
 971 
 972     private void showVersion(boolean full) {
 973         printLines(version(full ? "full" : "release"));
 974     }
 975 
 976     private void printLines(String msg) {
 977         log.println(msg.replace("\n", nl));
 978     }
 979 
 980     private static final String nl = System.getProperty("line.separator");
 981 
 982     private static final String versionRBName = "com.sun.tools.javap.resources.version";
 983     private static ResourceBundle versionRB;
 984 
 985     private String version(String key) {
 986         // key=version:  mm.nn.oo[-milestone]
 987         // key=full:     mm.mm.oo[-milestone]-build
 988         if (versionRB == null) {
 989             try {


< prev index next >