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 / tools / javac / Main.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  9.3 KB  |  404 lines

  1. package sun.tools.javac;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.OutputStream;
  9. import java.io.PrintStream;
  10. import java.text.MessageFormat;
  11. import java.util.Enumeration;
  12. import java.util.MissingResourceException;
  13. import java.util.ResourceBundle;
  14. import java.util.Vector;
  15. import sun.tools.asm.Assembler;
  16. import sun.tools.java.ClassDeclaration;
  17. import sun.tools.java.ClassDefinition;
  18. import sun.tools.java.ClassFile;
  19. import sun.tools.java.ClassNotFound;
  20. import sun.tools.java.ClassPath;
  21. import sun.tools.java.Constants;
  22. import sun.tools.java.Environment;
  23.  
  24. public class Main implements Constants {
  25.    String program;
  26.    OutputStream out;
  27.    private static ResourceBundle messageRB;
  28.  
  29.    public Main(OutputStream var1, String var2) {
  30.       this.out = var1;
  31.       this.program = var2;
  32.    }
  33.  
  34.    public void output(String var1) {
  35.       PrintStream var2 = this.out instanceof PrintStream ? (PrintStream)this.out : new PrintStream(this.out, true);
  36.       var2.println(var1);
  37.    }
  38.  
  39.    public void error(String var1) {
  40.       this.output(this.program + ": " + var1);
  41.    }
  42.  
  43.    public void warning(String var1) {
  44.       this.output(this.program + ": " + var1);
  45.    }
  46.  
  47.    public void usage() {
  48.       this.output(getText("main.usage", this.program));
  49.    }
  50.  
  51.    static void initResource() {
  52.       try {
  53.          messageRB = ResourceBundle.getBundle("sun.tools.javac.resources.javac");
  54.       } catch (MissingResourceException var0) {
  55.          throw new Error("Fatal: Resource for javac is missing");
  56.       }
  57.    }
  58.  
  59.    public static String getText(String var0) {
  60.       return getText(var0, (String)null);
  61.    }
  62.  
  63.    public static String getText(String var0, int var1) {
  64.       return getText(var0, Integer.toString(var1));
  65.    }
  66.  
  67.    public static String getText(String var0, String var1) {
  68.       return getText(var0, var1, (String)null);
  69.    }
  70.  
  71.    public static String getText(String var0, String var1, String var2) {
  72.       return getText(var0, var1, var2, (String)null);
  73.    }
  74.  
  75.    public static String getText(String var0, String var1, String var2, String var3) {
  76.       if (messageRB == null) {
  77.          initResource();
  78.       }
  79.  
  80.       try {
  81.          String var7 = messageRB.getString(var0);
  82.          String[] var8 = new String[]{var1, var2, var3};
  83.          return MessageFormat.format(var7, var8);
  84.       } catch (MissingResourceException var6) {
  85.          if (var1 == null) {
  86.             var1 = "null";
  87.          }
  88.  
  89.          if (var2 == null) {
  90.             var2 = "null";
  91.          }
  92.  
  93.          if (var3 == null) {
  94.             var3 = "null";
  95.          }
  96.  
  97.          String[] var4 = new String[]{var0, var1, var2, var3};
  98.          String var5 = "JAVAC MESSAGE FILE IS BROKEN: key={0}, arguments={1}, {2}, {3}";
  99.          return MessageFormat.format(var5, var4);
  100.       }
  101.    }
  102.  
  103.    public synchronized boolean compile(String[] var1) {
  104.       String var2 = System.getProperty("java.class.path");
  105.       File var3 = null;
  106.       File var4 = null;
  107.       String var5 = "-prof=jcov";
  108.       int var6 = 4;
  109.       var6 |= 256;
  110.       long var7 = System.currentTimeMillis();
  111.       Vector var9 = new Vector();
  112.       boolean var10 = false;
  113.       String var11 = null;
  114.  
  115.       for(int var12 = 0; var12 < var1.length; ++var12) {
  116.          if (var1[var12].equals("-g")) {
  117.             var6 &= -17;
  118.             var6 |= 8;
  119.          } else if (var1[var12].equals("-O")) {
  120.             var6 &= -9;
  121.             var6 |= 48;
  122.          } else if (var1[var12].equals("-nowarn")) {
  123.             var6 &= -5;
  124.          } else if (var1[var12].equals("-deprecation")) {
  125.             var6 |= 512;
  126.          } else if (var1[var12].equals("-debug")) {
  127.             var6 |= 2;
  128.          } else if (var1[var12].equals("-xdepend")) {
  129.             var6 |= 1024;
  130.             if (this.out == System.err) {
  131.                this.out = System.out;
  132.             }
  133.          } else if (var1[var12].equals("-depend")) {
  134.             var6 |= 32;
  135.          } else if (var1[var12].equals("-verbose")) {
  136.             var6 |= 1;
  137.          } else if (var1[var12].equals("-nowrite")) {
  138.             var10 = true;
  139.          } else if (var1[var12].equals("-classpath")) {
  140.             if (var12 + 1 >= var1.length) {
  141.                this.error("-classpath requires argument");
  142.                this.usage();
  143.                return false;
  144.             }
  145.  
  146.             ++var12;
  147.             var2 = var1[var12];
  148.          } else if (var1[var12].equals("-d")) {
  149.             if (var12 + 1 >= var1.length) {
  150.                this.error("-d requires argument");
  151.                this.usage();
  152.                return false;
  153.             }
  154.  
  155.             ++var12;
  156.             var3 = new File(var1[var12]);
  157.             if (!var3.exists()) {
  158.                this.error(var3.getPath() + " does not exist");
  159.                return false;
  160.             }
  161.          } else if (var1[var12].equals(var5)) {
  162.             var6 |= 64;
  163.             var6 &= -17;
  164.          } else if (var1[var12].startsWith(var5) && var1[var12].length() > var5.length() + 1) {
  165.             var4 = new File(var1[var12].substring(var5.length() + 1));
  166.             var6 &= -17;
  167.             var6 |= 64;
  168.             var6 |= 128;
  169.          } else if (var1[var12].equals("-encoding")) {
  170.             if (var12 + 1 >= var1.length) {
  171.                this.error("-encoding requires argument");
  172.                this.usage();
  173.                return false;
  174.             }
  175.  
  176.             ++var12;
  177.             var11 = var1[var12];
  178.          } else {
  179.             if (var1[var12].startsWith("-")) {
  180.                this.error("invalid flag: " + var1[var12]);
  181.                this.usage();
  182.                return false;
  183.             }
  184.  
  185.             if (!var1[var12].endsWith(".java")) {
  186.                this.error("invalid argument: " + var1[var12]);
  187.                this.usage();
  188.                return false;
  189.             }
  190.  
  191.             var9.addElement(var1[var12]);
  192.          }
  193.       }
  194.  
  195.       if (var9.size() == 0) {
  196.          this.usage();
  197.          return false;
  198.       } else {
  199.          if (var2 == null) {
  200.             var2 = ".";
  201.          }
  202.  
  203.          ClassPath var13 = new ClassPath(var2);
  204.          BatchEnvironment var14 = new BatchEnvironment(this.out, var13);
  205.          var14.flags |= var6;
  206.          var14.covFile = var4;
  207.          ((Environment)var14).setCharacterEncoding(var11);
  208.          if (System.getProperty("javac.noinnerclasses") != null) {
  209.             var14.flags &= -257;
  210.          }
  211.  
  212.          try {
  213.             Enumeration var15 = var9.elements();
  214.  
  215.             while(var15.hasMoreElements()) {
  216.                File var16 = new File((String)var15.nextElement());
  217.  
  218.                try {
  219.                   var14.parseFile(new ClassFile(var16));
  220.                } catch (FileNotFoundException var28) {
  221.                   ((Environment)var14).error(0, "cant.read", var16.getPath());
  222.                }
  223.             }
  224.  
  225.             Enumeration var39 = var14.getClasses();
  226.  
  227.             while(var39.hasMoreElements()) {
  228.                ClassDeclaration var17 = (ClassDeclaration)var39.nextElement();
  229.                if (var17.getStatus() == 4 && !var17.getClassDefinition().isLocal()) {
  230.                   try {
  231.                      var17.getClassDefinition(var14);
  232.                   } catch (ClassNotFound var27) {
  233.                   }
  234.                }
  235.             }
  236.  
  237.             ByteArrayOutputStream var42 = new ByteArrayOutputStream(4096);
  238.  
  239.             boolean var18;
  240.             do {
  241.                var18 = true;
  242.                var14.flushErrors();
  243.                Enumeration var19 = var14.getClasses();
  244.  
  245.                while(var19.hasMoreElements()) {
  246.                   ClassDeclaration var20 = (ClassDeclaration)var19.nextElement();
  247.                   switch (var20.getStatus()) {
  248.                      case 0:
  249.                         if (!((Environment)var14).dependencies()) {
  250.                            break;
  251.                         }
  252.                      case 3:
  253.                         var18 = false;
  254.                         var14.loadDefinition(var20);
  255.                         if (var20.getStatus() != 4) {
  256.                            break;
  257.                         }
  258.                      case 4:
  259.                         if (var20.getClassDefinition().isInsideLocal()) {
  260.                            break;
  261.                         }
  262.  
  263.                         var18 = false;
  264.                         SourceClass var21 = (SourceClass)var20.getClassDefinition(var14);
  265.                         var21.check(var14);
  266.                         var20.setDefinition(var21, 7);
  267.                      case 7:
  268.                         SourceClass var47 = (SourceClass)var20.getClassDefinition(var14);
  269.                         if (((ClassDefinition)var47).getError()) {
  270.                            var20.setDefinition(var47, 5);
  271.                         } else {
  272.                            var18 = false;
  273.                            var42.reset();
  274.                            var47.compile(var42);
  275.                            var20.setDefinition(var47, 5);
  276.                            ((ClassDefinition)var47).cleanup(var14);
  277.                            if (!((ClassDefinition)var47).getError() && !var10) {
  278.                               String var22 = var20.getName().getQualifier().toString().replace('.', File.separatorChar);
  279.                               String var23 = var20.getName().getFlatName().toString().replace('.', '$') + ".class";
  280.                               File var48;
  281.                               if (var3 != null) {
  282.                                  if (var22.length() > 0) {
  283.                                     var48 = new File(var3, var22);
  284.                                     if (!var48.exists()) {
  285.                                        var48.mkdirs();
  286.                                     }
  287.  
  288.                                     var48 = new File(var48, var23);
  289.                                  } else {
  290.                                     var48 = new File(var3, var23);
  291.                                  }
  292.                               } else {
  293.                                  ClassFile var25 = (ClassFile)((ClassDefinition)var47).getSource();
  294.                                  if (var25.isZipped()) {
  295.                                     ((Environment)var14).error(0, "cant.write", var25.getPath());
  296.                                     continue;
  297.                                  }
  298.  
  299.                                  var48 = new File(var25.getPath());
  300.                                  var48 = new File(var48.getParent(), var23);
  301.                               }
  302.  
  303.                               try {
  304.                                  FileOutputStream var50 = new FileOutputStream(var48.getPath());
  305.                                  var42.writeTo(var50);
  306.                                  var50.close();
  307.                                  if (((Environment)var14).verbose()) {
  308.                                     this.output(getText("main.wrote", var48.getPath()));
  309.                                  }
  310.                               } catch (IOException var26) {
  311.                                  ((Environment)var14).error(0, "cant.write", var48.getPath());
  312.                               }
  313.  
  314.                               if (((Environment)var14).print_dependencies()) {
  315.                                  var47.printClassDependencies(var14);
  316.                               }
  317.                            }
  318.                         }
  319.                   }
  320.                }
  321.             } while(!var18);
  322.          } catch (Error var29) {
  323.             if (var14.nerrors == 0 || ((Environment)var14).dump()) {
  324.                ((Throwable)var29).printStackTrace();
  325.                ((Environment)var14).error(0, "fatal.error");
  326.             }
  327.          } catch (Exception var30) {
  328.             if (var14.nerrors == 0 || ((Environment)var14).dump()) {
  329.                ((Throwable)var30).printStackTrace();
  330.                ((Environment)var14).error(0, "fatal.exception");
  331.             }
  332.          }
  333.  
  334.          int var38 = var14.deprecationFiles.size();
  335.          if (var38 > 0 && ((Environment)var14).warnings()) {
  336.             int var40 = var14.ndeprecations;
  337.             Object var43 = var14.deprecationFiles.elementAt(0);
  338.             if (((Environment)var14).deprecation()) {
  339.                if (var38 > 1) {
  340.                   ((Environment)var14).error(0, "warn.note.deprecations", new Integer(var38), new Integer(var40));
  341.                } else {
  342.                   ((Environment)var14).error(0, "warn.note.1deprecation", var43, new Integer(var40));
  343.                }
  344.             } else if (var38 > 1) {
  345.                ((Environment)var14).error(0, "warn.note.deprecations.silent", new Integer(var38), new Integer(var40));
  346.             } else {
  347.                ((Environment)var14).error(0, "warn.note.1deprecation.silent", var43, new Integer(var40));
  348.             }
  349.          }
  350.  
  351.          var14.flushErrors();
  352.          var14.shutdown();
  353.          boolean var41 = true;
  354.          if (var14.nerrors > 0) {
  355.             String var44 = "";
  356.             if (var14.nerrors > 1) {
  357.                var44 = getText("main.errors", var14.nerrors);
  358.             } else {
  359.                var44 = getText("main.1error");
  360.             }
  361.  
  362.             if (var14.nwarnings > 0) {
  363.                if (var14.nwarnings > 1) {
  364.                   var44 = var44 + ", " + getText("main.warnings", var14.nwarnings);
  365.                } else {
  366.                   var44 = var44 + ", " + getText("main.1warning");
  367.                }
  368.             }
  369.  
  370.             this.output(var44);
  371.             var41 = false;
  372.          } else if (var14.nwarnings > 0) {
  373.             if (var14.nwarnings > 1) {
  374.                this.output(getText("main.warnings", var14.nwarnings));
  375.             } else {
  376.                this.output(getText("main.1warning"));
  377.             }
  378.          }
  379.  
  380.          if (((Environment)var14).covdata()) {
  381.             Assembler var46 = new Assembler();
  382.             var46.GenJCov(var14);
  383.          }
  384.  
  385.          if (((Environment)var14).verbose()) {
  386.             var7 = System.currentTimeMillis() - var7;
  387.             this.output(getText("main.done_in", Long.toString(var7)));
  388.          }
  389.  
  390.          return var41;
  391.       }
  392.    }
  393.  
  394.    public static void main(String[] var0) {
  395.       PrintStream var1 = System.err;
  396.       if (Boolean.getBoolean("javac.pipe.output")) {
  397.          var1 = System.out;
  398.       }
  399.  
  400.       Main var2 = new Main(var1, "javac");
  401.       System.exit(var2.compile(var0) ? 0 : 1);
  402.    }
  403. }
  404.