blob: 40b7b5cc0418e876a8f39dcb8aad392260c40e7b [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.doctool;
import com.google.doctool.custom.EztDoclet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Uses the Javadoc tool to produce wiki output documenting the JRE emulation
* classes in GWT.
*/
public class JreDocTool {
public static void main(String[] args) {
JreDocToolFactory factory = new JreDocToolFactory();
String arg;
for (int i = 0; i < args.length; i++) {
if (tryParseFlag(args, i, "-help")) {
printHelp();
return;
} else if (null != (arg = tryParseArg(args, i, "-classpath"))) {
i++;
factory.setClasspath(arg);
} else if (null != (arg = tryParseArg(args, i, "-out"))) {
i++;
factory.setOutputFile(arg);
} else if (null != (arg = tryParseArg(args, i, "-packages"))) {
i++;
factory.setPackages(arg);
} else if (null != (arg = tryParseArg(args, i, "-sourcepath"))) {
i++;
factory.setSourcepath(arg);
}
}
JreDocTool docTool = factory.create(System.err);
if (docTool != null) {
docTool.process();
}
}
/**
* Prints help for using JreDocTool.
*/
private static void printHelp() {
String s = "";
s += "JreDocTool\n";
s += " Creates EZT format member listing from Java source";
s += " for emulated JRE classes.\n";
s += "\n";
s += "Required arguments:\n";
s += " -classpath\n";
s += " The path to find imported classes for this doc set.\n";
s += " -sourcepath\n";
s += " The path to find Java source for this doc set.\n";
s += " E.g. /gwt/src/trunk/user/super/com/google/gwt/emul\n";
s += " -out\n";
s += " The path and filename of the output file\n";
s += " -packages\n";
s += " A semicolon-separated list of fully-qualified package names.\n";
s += " E.g. java.lang;java.lang.annotation;java.util;java.io;java.sql\n";
s += "\n";
System.out.println(s);
}
/**
* Parse a flag with a argument.
*/
private static String tryParseArg(String[] args, int i, String name) {
if (i < args.length) {
if (args[i].equals(name)) {
if (i + 1 < args.length) {
String arg = args[i + 1];
if (arg.startsWith("-")) {
System.out.println("Warning: arg to " + name
+ " looks more like a flag: " + arg);
}
return arg;
} else {
throw new IllegalArgumentException("Expecting an argument after "
+ name);
}
}
}
return null;
}
/**
* Parse just a flag with no subsequent argument.
*/
private static boolean tryParseFlag(String[] args, int i, String name) {
if (i < args.length) {
if (args[i].equals(name)) {
return true;
}
}
return false;
}
private String classpath;
private String outputFile;
private String packages;
private String sourcepath;
JreDocTool(String classpath, String outputFile, String packages,
String sourcepath) {
this.classpath = classpath;
this.outputFile = outputFile;
this.packages = packages;
this.sourcepath = sourcepath;
}
private void process() {
List<String> args = new ArrayList<String>();
args.add("-public");
args.add("-quiet");
args.add("-source");
args.add("1.5");
args.add("-doclet");
args.add(EztDoclet.class.getName());
args.add("-classpath");
args.add(this.classpath);
args.add("-sourcepath");
args.add(this.sourcepath);
args.add(EztDoclet.OPT_EZTFILE);
args.add(this.outputFile);
args.addAll(Arrays.asList(this.packages.split(";")));
com.sun.tools.javadoc.Main.execute(args.toArray(new String[0]));
}
}