home *** CD-ROM | disk | FTP | other *** search
- package sun.rmi.rmic;
-
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.util.Enumeration;
- import java.util.Vector;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassFile;
- import sun.tools.java.ClassNotFound;
- import sun.tools.java.ClassPath;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.Identifier;
- import sun.tools.javac.SourceClass;
-
- public class Main implements Constants, Runnable {
- String classPathString;
- File destDir;
- File stubDestDir;
- File skelDestDir;
- int flags;
- // $FF: renamed from: tm long
- long field_0;
- // $FF: renamed from: v java.util.Vector
- Vector field_1;
- boolean nowrite;
- String props;
- boolean keepGenerated;
- UI gui;
- boolean status;
- String program;
- OutputStream out;
- static final boolean generateCode = false;
-
- public Main(OutputStream var1, String var2) {
- this.out = var1;
- this.program = var2;
- }
-
- public void output(String var1) {
- try {
- int var2 = var1.length();
-
- for(int var3 = 0; var3 < var2; ++var3) {
- this.out.write(var1.charAt(var3));
- }
-
- this.out.write(10);
- } catch (IOException var4) {
- }
- }
-
- public void error(String var1) {
- this.output(this.program + ": " + var1);
- }
-
- public void usage() {
- this.output("use: " + this.program + " [-g][-O][-debug][-depend][-nowarn][-verbose][-classpath path][-nowrite][-d dir][-dstub dir][-dskel dir][-show][-keepgenerated] classname...");
- }
-
- public synchronized boolean compile(String[] var1) {
- if (!this.parseArgs(var1)) {
- return false;
- } else if (this.gui != null) {
- this.gui.init();
-
- try {
- Thread.sleep(3000000L);
- } catch (InterruptedException var2) {
- }
-
- return true;
- } else if (this.field_1.size() == 0) {
- this.usage();
- return false;
- } else {
- return this.doCompile();
- }
- }
-
- public boolean parseArgs(String[] var1) {
- this.classPathString = System.getProperty("java.class.path");
- this.destDir = null;
- this.stubDestDir = null;
- this.skelDestDir = null;
- this.flags = 4;
- this.field_0 = System.currentTimeMillis();
- this.field_1 = new Vector();
- this.nowrite = false;
- this.props = null;
- this.keepGenerated = false;
- this.gui = null;
-
- for(int var2 = 0; var2 < var1.length; ++var2) {
- if (var1[var2].equals("-g")) {
- this.flags &= -17;
- this.flags |= 8;
- } else if (var1[var2].equals("-O")) {
- this.flags &= -9;
- this.flags |= 48;
- } else if (var1[var2].equals("-nowarn")) {
- this.flags &= -5;
- } else if (var1[var2].equals("-debug")) {
- this.flags |= 2;
- } else if (var1[var2].equals("-depend")) {
- this.flags |= 32;
- } else if (var1[var2].equals("-verbose")) {
- this.flags |= 1;
- } else if (var1[var2].equals("-nowrite")) {
- this.nowrite = true;
- } else if (var1[var2].equals("-keepgenerated")) {
- this.keepGenerated = true;
- } else if (var1[var2].equals("-show")) {
- this.gui = new UI(this);
- } else if (var1[var2].equals("-classpath")) {
- if (var2 + 1 >= var1.length) {
- this.error("-classpath requires argument");
- this.usage();
- return false;
- }
-
- ++var2;
- this.classPathString = var1[var2];
- } else if (var1[var2].equals("-d")) {
- if (var2 + 1 >= var1.length) {
- this.error("-d requires argument");
- this.usage();
- return false;
- }
-
- ++var2;
- this.destDir = new File(var1[var2]);
- if (!this.destDir.exists()) {
- this.error(this.destDir.getPath() + " does not exist");
- return false;
- }
- } else if (var1[var2].equals("-dstub")) {
- if (var2 + 1 >= var1.length) {
- this.error("-dstub requires argument");
- this.usage();
- return false;
- }
-
- ++var2;
- this.stubDestDir = new File(var1[var2]);
- if (!this.stubDestDir.exists()) {
- this.error(this.stubDestDir.getPath() + " does not exist");
- return false;
- }
- } else if (var1[var2].equals("-dskel")) {
- if (var2 + 1 >= var1.length) {
- this.error("-dskel requires argument");
- this.usage();
- return false;
- }
-
- ++var2;
- this.skelDestDir = new File(var1[var2]);
- if (!this.skelDestDir.exists()) {
- this.error(this.skelDestDir.getPath() + " does not exist");
- return false;
- }
- } else {
- if (var1[var2].startsWith("-")) {
- this.error("invalid flag: " + var1[var2]);
- this.usage();
- return false;
- }
-
- this.field_1.addElement(var1[var2]);
- }
- }
-
- if (this.stubDestDir == null) {
- this.stubDestDir = this.destDir;
- }
-
- if (this.skelDestDir == null) {
- this.skelDestDir = this.destDir;
- }
-
- return true;
- }
-
- public boolean doCompile() {
- if (this.classPathString == null) {
- this.classPathString = ".";
- }
-
- ClassPath var1 = new ClassPath(this.classPathString);
- BatchEnvironment var2 = new BatchEnvironment(this.out, var1);
- var2.flags |= this.flags;
-
- try {
- for(int var3 = this.field_1.size() - 1; var3 >= 0; --var3) {
- Identifier var4 = Identifier.lookup((String)this.field_1.elementAt(var3));
- ClassDeclaration var5 = new ClassDeclaration(var4);
-
- try {
- ClassDefinition var6 = var5.getClassDefinition(var2);
- TopGRP.generate(var2, var6, this.stubDestDir, this.skelDestDir, this.keepGenerated);
- } catch (ClassNotFound var16) {
- ((Environment)var2).error(0, "rmic.class.not.found", var4);
- }
- }
-
- ByteArrayOutputStream var22 = new ByteArrayOutputStream(4096);
-
- boolean var23;
- do {
- var23 = true;
- ((sun.tools.javac.BatchEnvironment)var2).flushErrors();
- Enumeration var24 = ((sun.tools.javac.BatchEnvironment)var2).getClasses();
-
- while(var24.hasMoreElements()) {
- ClassDeclaration var7 = (ClassDeclaration)var24.nextElement();
- switch (var7.getStatus()) {
- case 0:
- if (!((Environment)var2).dependencies()) {
- break;
- }
- case 3:
- var23 = false;
- ((sun.tools.javac.BatchEnvironment)var2).loadDefinition(var7);
- if (var7.getStatus() != 4) {
- break;
- }
- case 4:
- var23 = false;
- var22.reset();
- SourceClass var8 = (SourceClass)var7.getClassDefinition(var2);
- var8.compile(var22);
- var7.setDefinition(var8, 5);
- if (!((ClassDefinition)var8).getError() && !this.nowrite) {
- File var9 = this.destDir;
- String var10 = var7.getName().getName().toString();
- if (var10.endsWith(ProxyNames.proxyClassName().toString())) {
- var9 = this.stubDestDir;
- }
-
- if (var10.endsWith(ProxyNames.skeletonClassName().toString())) {
- var9 = this.skelDestDir;
- }
-
- String var11 = var7.getName().getQualifier().toString().replace('.', File.separatorChar);
- String var12 = var7.getName().getName().toString() + ".class";
- File var25;
- if (var9 != null) {
- if (var11.length() > 0) {
- var25 = new File(var9, var11);
- if (!var25.exists()) {
- var25.mkdirs();
- }
-
- var25 = new File(var25, var12);
- } else {
- var25 = new File(var9, var12);
- }
- } else {
- ClassFile var14 = (ClassFile)((ClassDefinition)var8).getSource();
- if (var14.isZipped()) {
- ((Environment)var2).error(0, "cant.write", var14.getPath());
- continue;
- }
-
- var25 = new File(var14.getPath());
- var25 = new File(var25.getParent(), var12);
- }
-
- try {
- FileOutputStream var27 = new FileOutputStream(var25.getPath());
- var22.writeTo(var27);
- var27.close();
- if (((Environment)var2).verbose()) {
- this.output("[wrote " + var25.getPath() + "]");
- }
- } catch (IOException var15) {
- ((Environment)var2).error(0, "cant.write", var25.getPath());
- }
- }
- }
- }
- } while(!var23);
- } catch (ThreadDeath var17) {
- this.status = false;
- } catch (Error var18) {
- ((Throwable)var18).printStackTrace();
- ((Environment)var2).error(0, "fatal.error");
- } catch (Exception var19) {
- ((Throwable)var19).printStackTrace();
- ((Environment)var2).error(0, "fatal.exception");
- }
-
- ((sun.tools.javac.BatchEnvironment)var2).flushErrors();
- this.status = true;
- if (var2.nerrors > 0) {
- String var20 = "";
- if (var2.nerrors > 1) {
- var20 = var2.nerrors + " errors";
- } else {
- var20 = "1 error";
- }
-
- if (var2.nwarnings > 0) {
- if (var2.nwarnings > 1) {
- var20 = var20 + ", " + var2.nwarnings + " warnings";
- } else {
- var20 = var20 + ", 1 warning";
- }
- }
-
- this.output(var20);
- this.status = false;
- } else if (var2.nwarnings > 0) {
- if (var2.nwarnings > 1) {
- this.output(var2.nwarnings + " warnings");
- } else {
- this.output("1 warning");
- }
- }
-
- if (((Environment)var2).verbose()) {
- this.field_0 = System.currentTimeMillis() - this.field_0;
- this.output("[done in " + this.field_0 + "ms]");
- }
-
- return this.status;
- }
-
- public void run() {
- if (this.field_1 != null && this.field_1.size() > 0) {
- this.doCompile();
- }
-
- }
-
- public static void main(String[] var0) {
- Main var1 = new Main(System.out, "rmic");
- System.exit(var1.compile(var0) ? 0 : 1);
- }
- }
-