home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / rmi / rmic / Main.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  7.9 KB  |  346 lines

  1. package sun.rmi.rmic;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.OutputStream;
  8. import java.util.Enumeration;
  9. import java.util.Vector;
  10. import sun.tools.java.ClassDeclaration;
  11. import sun.tools.java.ClassDefinition;
  12. import sun.tools.java.ClassFile;
  13. import sun.tools.java.ClassNotFound;
  14. import sun.tools.java.ClassPath;
  15. import sun.tools.java.Constants;
  16. import sun.tools.java.Environment;
  17. import sun.tools.java.Identifier;
  18. import sun.tools.javac.SourceClass;
  19.  
  20. public class Main implements Constants, Runnable {
  21.    String classPathString;
  22.    File destDir;
  23.    File stubDestDir;
  24.    File skelDestDir;
  25.    int flags;
  26.    // $FF: renamed from: tm long
  27.    long field_0;
  28.    // $FF: renamed from: v java.util.Vector
  29.    Vector field_1;
  30.    boolean nowrite;
  31.    String props;
  32.    boolean keepGenerated;
  33.    UI gui;
  34.    boolean status;
  35.    String program;
  36.    OutputStream out;
  37.    static final boolean generateCode = false;
  38.  
  39.    public Main(OutputStream var1, String var2) {
  40.       this.out = var1;
  41.       this.program = var2;
  42.    }
  43.  
  44.    public void output(String var1) {
  45.       try {
  46.          int var2 = var1.length();
  47.  
  48.          for(int var3 = 0; var3 < var2; ++var3) {
  49.             this.out.write(var1.charAt(var3));
  50.          }
  51.  
  52.          this.out.write(10);
  53.       } catch (IOException var4) {
  54.       }
  55.    }
  56.  
  57.    public void error(String var1) {
  58.       this.output(this.program + ": " + var1);
  59.    }
  60.  
  61.    public void usage() {
  62.       this.output("use: " + this.program + " [-g][-O][-debug][-depend][-nowarn][-verbose][-classpath path][-nowrite][-d dir][-dstub dir][-dskel dir][-show][-keepgenerated] classname...");
  63.    }
  64.  
  65.    public synchronized boolean compile(String[] var1) {
  66.       if (!this.parseArgs(var1)) {
  67.          return false;
  68.       } else if (this.gui != null) {
  69.          this.gui.init();
  70.  
  71.          try {
  72.             Thread.sleep(3000000L);
  73.          } catch (InterruptedException var2) {
  74.          }
  75.  
  76.          return true;
  77.       } else if (this.field_1.size() == 0) {
  78.          this.usage();
  79.          return false;
  80.       } else {
  81.          return this.doCompile();
  82.       }
  83.    }
  84.  
  85.    public boolean parseArgs(String[] var1) {
  86.       this.classPathString = System.getProperty("java.class.path");
  87.       this.destDir = null;
  88.       this.stubDestDir = null;
  89.       this.skelDestDir = null;
  90.       this.flags = 4;
  91.       this.field_0 = System.currentTimeMillis();
  92.       this.field_1 = new Vector();
  93.       this.nowrite = false;
  94.       this.props = null;
  95.       this.keepGenerated = false;
  96.       this.gui = null;
  97.  
  98.       for(int var2 = 0; var2 < var1.length; ++var2) {
  99.          if (var1[var2].equals("-g")) {
  100.             this.flags &= -17;
  101.             this.flags |= 8;
  102.          } else if (var1[var2].equals("-O")) {
  103.             this.flags &= -9;
  104.             this.flags |= 48;
  105.          } else if (var1[var2].equals("-nowarn")) {
  106.             this.flags &= -5;
  107.          } else if (var1[var2].equals("-debug")) {
  108.             this.flags |= 2;
  109.          } else if (var1[var2].equals("-depend")) {
  110.             this.flags |= 32;
  111.          } else if (var1[var2].equals("-verbose")) {
  112.             this.flags |= 1;
  113.          } else if (var1[var2].equals("-nowrite")) {
  114.             this.nowrite = true;
  115.          } else if (var1[var2].equals("-keepgenerated")) {
  116.             this.keepGenerated = true;
  117.          } else if (var1[var2].equals("-show")) {
  118.             this.gui = new UI(this);
  119.          } else if (var1[var2].equals("-classpath")) {
  120.             if (var2 + 1 >= var1.length) {
  121.                this.error("-classpath requires argument");
  122.                this.usage();
  123.                return false;
  124.             }
  125.  
  126.             ++var2;
  127.             this.classPathString = var1[var2];
  128.          } else if (var1[var2].equals("-d")) {
  129.             if (var2 + 1 >= var1.length) {
  130.                this.error("-d requires argument");
  131.                this.usage();
  132.                return false;
  133.             }
  134.  
  135.             ++var2;
  136.             this.destDir = new File(var1[var2]);
  137.             if (!this.destDir.exists()) {
  138.                this.error(this.destDir.getPath() + " does not exist");
  139.                return false;
  140.             }
  141.          } else if (var1[var2].equals("-dstub")) {
  142.             if (var2 + 1 >= var1.length) {
  143.                this.error("-dstub requires argument");
  144.                this.usage();
  145.                return false;
  146.             }
  147.  
  148.             ++var2;
  149.             this.stubDestDir = new File(var1[var2]);
  150.             if (!this.stubDestDir.exists()) {
  151.                this.error(this.stubDestDir.getPath() + " does not exist");
  152.                return false;
  153.             }
  154.          } else if (var1[var2].equals("-dskel")) {
  155.             if (var2 + 1 >= var1.length) {
  156.                this.error("-dskel requires argument");
  157.                this.usage();
  158.                return false;
  159.             }
  160.  
  161.             ++var2;
  162.             this.skelDestDir = new File(var1[var2]);
  163.             if (!this.skelDestDir.exists()) {
  164.                this.error(this.skelDestDir.getPath() + " does not exist");
  165.                return false;
  166.             }
  167.          } else {
  168.             if (var1[var2].startsWith("-")) {
  169.                this.error("invalid flag: " + var1[var2]);
  170.                this.usage();
  171.                return false;
  172.             }
  173.  
  174.             this.field_1.addElement(var1[var2]);
  175.          }
  176.       }
  177.  
  178.       if (this.stubDestDir == null) {
  179.          this.stubDestDir = this.destDir;
  180.       }
  181.  
  182.       if (this.skelDestDir == null) {
  183.          this.skelDestDir = this.destDir;
  184.       }
  185.  
  186.       return true;
  187.    }
  188.  
  189.    public boolean doCompile() {
  190.       if (this.classPathString == null) {
  191.          this.classPathString = ".";
  192.       }
  193.  
  194.       ClassPath var1 = new ClassPath(this.classPathString);
  195.       BatchEnvironment var2 = new BatchEnvironment(this.out, var1);
  196.       var2.flags |= this.flags;
  197.  
  198.       try {
  199.          for(int var3 = this.field_1.size() - 1; var3 >= 0; --var3) {
  200.             Identifier var4 = Identifier.lookup((String)this.field_1.elementAt(var3));
  201.             ClassDeclaration var5 = new ClassDeclaration(var4);
  202.  
  203.             try {
  204.                ClassDefinition var6 = var5.getClassDefinition(var2);
  205.                TopGRP.generate(var2, var6, this.stubDestDir, this.skelDestDir, this.keepGenerated);
  206.             } catch (ClassNotFound var16) {
  207.                ((Environment)var2).error(0, "rmic.class.not.found", var4);
  208.             }
  209.          }
  210.  
  211.          ByteArrayOutputStream var22 = new ByteArrayOutputStream(4096);
  212.  
  213.          boolean var23;
  214.          do {
  215.             var23 = true;
  216.             ((sun.tools.javac.BatchEnvironment)var2).flushErrors();
  217.             Enumeration var24 = ((sun.tools.javac.BatchEnvironment)var2).getClasses();
  218.  
  219.             while(var24.hasMoreElements()) {
  220.                ClassDeclaration var7 = (ClassDeclaration)var24.nextElement();
  221.                switch (var7.getStatus()) {
  222.                   case 0:
  223.                      if (!((Environment)var2).dependencies()) {
  224.                         break;
  225.                      }
  226.                   case 3:
  227.                      var23 = false;
  228.                      ((sun.tools.javac.BatchEnvironment)var2).loadDefinition(var7);
  229.                      if (var7.getStatus() != 4) {
  230.                         break;
  231.                      }
  232.                   case 4:
  233.                      var23 = false;
  234.                      var22.reset();
  235.                      SourceClass var8 = (SourceClass)var7.getClassDefinition(var2);
  236.                      var8.compile(var22);
  237.                      var7.setDefinition(var8, 5);
  238.                      if (!((ClassDefinition)var8).getError() && !this.nowrite) {
  239.                         File var9 = this.destDir;
  240.                         String var10 = var7.getName().getName().toString();
  241.                         if (var10.endsWith(ProxyNames.proxyClassName().toString())) {
  242.                            var9 = this.stubDestDir;
  243.                         }
  244.  
  245.                         if (var10.endsWith(ProxyNames.skeletonClassName().toString())) {
  246.                            var9 = this.skelDestDir;
  247.                         }
  248.  
  249.                         String var11 = var7.getName().getQualifier().toString().replace('.', File.separatorChar);
  250.                         String var12 = var7.getName().getName().toString() + ".class";
  251.                         File var25;
  252.                         if (var9 != null) {
  253.                            if (var11.length() > 0) {
  254.                               var25 = new File(var9, var11);
  255.                               if (!var25.exists()) {
  256.                                  var25.mkdirs();
  257.                               }
  258.  
  259.                               var25 = new File(var25, var12);
  260.                            } else {
  261.                               var25 = new File(var9, var12);
  262.                            }
  263.                         } else {
  264.                            ClassFile var14 = (ClassFile)((ClassDefinition)var8).getSource();
  265.                            if (var14.isZipped()) {
  266.                               ((Environment)var2).error(0, "cant.write", var14.getPath());
  267.                               continue;
  268.                            }
  269.  
  270.                            var25 = new File(var14.getPath());
  271.                            var25 = new File(var25.getParent(), var12);
  272.                         }
  273.  
  274.                         try {
  275.                            FileOutputStream var27 = new FileOutputStream(var25.getPath());
  276.                            var22.writeTo(var27);
  277.                            var27.close();
  278.                            if (((Environment)var2).verbose()) {
  279.                               this.output("[wrote " + var25.getPath() + "]");
  280.                            }
  281.                         } catch (IOException var15) {
  282.                            ((Environment)var2).error(0, "cant.write", var25.getPath());
  283.                         }
  284.                      }
  285.                }
  286.             }
  287.          } while(!var23);
  288.       } catch (ThreadDeath var17) {
  289.          this.status = false;
  290.       } catch (Error var18) {
  291.          ((Throwable)var18).printStackTrace();
  292.          ((Environment)var2).error(0, "fatal.error");
  293.       } catch (Exception var19) {
  294.          ((Throwable)var19).printStackTrace();
  295.          ((Environment)var2).error(0, "fatal.exception");
  296.       }
  297.  
  298.       ((sun.tools.javac.BatchEnvironment)var2).flushErrors();
  299.       this.status = true;
  300.       if (var2.nerrors > 0) {
  301.          String var20 = "";
  302.          if (var2.nerrors > 1) {
  303.             var20 = var2.nerrors + " errors";
  304.          } else {
  305.             var20 = "1 error";
  306.          }
  307.  
  308.          if (var2.nwarnings > 0) {
  309.             if (var2.nwarnings > 1) {
  310.                var20 = var20 + ", " + var2.nwarnings + " warnings";
  311.             } else {
  312.                var20 = var20 + ", 1 warning";
  313.             }
  314.          }
  315.  
  316.          this.output(var20);
  317.          this.status = false;
  318.       } else if (var2.nwarnings > 0) {
  319.          if (var2.nwarnings > 1) {
  320.             this.output(var2.nwarnings + " warnings");
  321.          } else {
  322.             this.output("1 warning");
  323.          }
  324.       }
  325.  
  326.       if (((Environment)var2).verbose()) {
  327.          this.field_0 = System.currentTimeMillis() - this.field_0;
  328.          this.output("[done in " + this.field_0 + "ms]");
  329.       }
  330.  
  331.       return this.status;
  332.    }
  333.  
  334.    public void run() {
  335.       if (this.field_1 != null && this.field_1.size() > 0) {
  336.          this.doCompile();
  337.       }
  338.  
  339.    }
  340.  
  341.    public static void main(String[] var0) {
  342.       Main var1 = new Main(System.out, "rmic");
  343.       System.exit(var1.compile(var0) ? 0 : 1);
  344.    }
  345. }
  346.