home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.javac;
-
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.PrintStream;
- import java.text.MessageFormat;
- import java.util.Enumeration;
- import java.util.MissingResourceException;
- import java.util.ResourceBundle;
- import java.util.Vector;
- import sun.tools.asm.Assembler;
- 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;
-
- public class Main implements Constants {
- String program;
- OutputStream out;
- private static ResourceBundle messageRB;
-
- public Main(OutputStream var1, String var2) {
- this.out = var1;
- this.program = var2;
- }
-
- public void output(String var1) {
- PrintStream var2 = this.out instanceof PrintStream ? (PrintStream)this.out : new PrintStream(this.out, true);
- var2.println(var1);
- }
-
- public void error(String var1) {
- this.output(this.program + ": " + var1);
- }
-
- public void warning(String var1) {
- this.output(this.program + ": " + var1);
- }
-
- public void usage() {
- this.output(getText("main.usage", this.program));
- }
-
- static void initResource() {
- try {
- messageRB = ResourceBundle.getBundle("sun.tools.javac.resources.javac");
- } catch (MissingResourceException var0) {
- throw new Error("Fatal: Resource for javac is missing");
- }
- }
-
- public static String getText(String var0) {
- return getText(var0, (String)null);
- }
-
- public static String getText(String var0, int var1) {
- return getText(var0, Integer.toString(var1));
- }
-
- public static String getText(String var0, String var1) {
- return getText(var0, var1, (String)null);
- }
-
- public static String getText(String var0, String var1, String var2) {
- return getText(var0, var1, var2, (String)null);
- }
-
- public static String getText(String var0, String var1, String var2, String var3) {
- if (messageRB == null) {
- initResource();
- }
-
- try {
- String var7 = messageRB.getString(var0);
- String[] var8 = new String[]{var1, var2, var3};
- return MessageFormat.format(var7, var8);
- } catch (MissingResourceException var6) {
- if (var1 == null) {
- var1 = "null";
- }
-
- if (var2 == null) {
- var2 = "null";
- }
-
- if (var3 == null) {
- var3 = "null";
- }
-
- String[] var4 = new String[]{var0, var1, var2, var3};
- String var5 = "JAVAC MESSAGE FILE IS BROKEN: key={0}, arguments={1}, {2}, {3}";
- return MessageFormat.format(var5, var4);
- }
- }
-
- public synchronized boolean compile(String[] var1) {
- String var2 = System.getProperty("java.class.path");
- File var3 = null;
- File var4 = null;
- String var5 = "-prof=jcov";
- int var6 = 4;
- var6 |= 256;
- long var7 = System.currentTimeMillis();
- Vector var9 = new Vector();
- boolean var10 = false;
- String var11 = null;
-
- for(int var12 = 0; var12 < var1.length; ++var12) {
- if (var1[var12].equals("-g")) {
- var6 &= -17;
- var6 |= 8;
- } else if (var1[var12].equals("-O")) {
- var6 &= -9;
- var6 |= 48;
- } else if (var1[var12].equals("-nowarn")) {
- var6 &= -5;
- } else if (var1[var12].equals("-deprecation")) {
- var6 |= 512;
- } else if (var1[var12].equals("-debug")) {
- var6 |= 2;
- } else if (var1[var12].equals("-xdepend")) {
- var6 |= 1024;
- if (this.out == System.err) {
- this.out = System.out;
- }
- } else if (var1[var12].equals("-depend")) {
- var6 |= 32;
- } else if (var1[var12].equals("-verbose")) {
- var6 |= 1;
- } else if (var1[var12].equals("-nowrite")) {
- var10 = true;
- } else if (var1[var12].equals("-classpath")) {
- if (var12 + 1 >= var1.length) {
- this.error("-classpath requires argument");
- this.usage();
- return false;
- }
-
- ++var12;
- var2 = var1[var12];
- } else if (var1[var12].equals("-d")) {
- if (var12 + 1 >= var1.length) {
- this.error("-d requires argument");
- this.usage();
- return false;
- }
-
- ++var12;
- var3 = new File(var1[var12]);
- if (!var3.exists()) {
- this.error(var3.getPath() + " does not exist");
- return false;
- }
- } else if (var1[var12].equals(var5)) {
- var6 |= 64;
- var6 &= -17;
- } else if (var1[var12].startsWith(var5) && var1[var12].length() > var5.length() + 1) {
- var4 = new File(var1[var12].substring(var5.length() + 1));
- var6 &= -17;
- var6 |= 64;
- var6 |= 128;
- } else if (var1[var12].equals("-encoding")) {
- if (var12 + 1 >= var1.length) {
- this.error("-encoding requires argument");
- this.usage();
- return false;
- }
-
- ++var12;
- var11 = var1[var12];
- } else {
- if (var1[var12].startsWith("-")) {
- this.error("invalid flag: " + var1[var12]);
- this.usage();
- return false;
- }
-
- if (!var1[var12].endsWith(".java")) {
- this.error("invalid argument: " + var1[var12]);
- this.usage();
- return false;
- }
-
- var9.addElement(var1[var12]);
- }
- }
-
- if (var9.size() == 0) {
- this.usage();
- return false;
- } else {
- if (var2 == null) {
- var2 = ".";
- }
-
- ClassPath var13 = new ClassPath(var2);
- BatchEnvironment var14 = new BatchEnvironment(this.out, var13);
- var14.flags |= var6;
- var14.covFile = var4;
- ((Environment)var14).setCharacterEncoding(var11);
- if (System.getProperty("javac.noinnerclasses") != null) {
- var14.flags &= -257;
- }
-
- try {
- Enumeration var15 = var9.elements();
-
- while(var15.hasMoreElements()) {
- File var16 = new File((String)var15.nextElement());
-
- try {
- var14.parseFile(new ClassFile(var16));
- } catch (FileNotFoundException var28) {
- ((Environment)var14).error(0, "cant.read", var16.getPath());
- }
- }
-
- Enumeration var39 = var14.getClasses();
-
- while(var39.hasMoreElements()) {
- ClassDeclaration var17 = (ClassDeclaration)var39.nextElement();
- if (var17.getStatus() == 4 && !var17.getClassDefinition().isLocal()) {
- try {
- var17.getClassDefinition(var14);
- } catch (ClassNotFound var27) {
- }
- }
- }
-
- ByteArrayOutputStream var42 = new ByteArrayOutputStream(4096);
-
- boolean var18;
- do {
- var18 = true;
- var14.flushErrors();
- Enumeration var19 = var14.getClasses();
-
- while(var19.hasMoreElements()) {
- ClassDeclaration var20 = (ClassDeclaration)var19.nextElement();
- switch (var20.getStatus()) {
- case 0:
- if (!((Environment)var14).dependencies()) {
- break;
- }
- case 3:
- var18 = false;
- var14.loadDefinition(var20);
- if (var20.getStatus() != 4) {
- break;
- }
- case 4:
- if (var20.getClassDefinition().isInsideLocal()) {
- break;
- }
-
- var18 = false;
- SourceClass var21 = (SourceClass)var20.getClassDefinition(var14);
- var21.check(var14);
- var20.setDefinition(var21, 7);
- case 7:
- SourceClass var47 = (SourceClass)var20.getClassDefinition(var14);
- if (((ClassDefinition)var47).getError()) {
- var20.setDefinition(var47, 5);
- } else {
- var18 = false;
- var42.reset();
- var47.compile(var42);
- var20.setDefinition(var47, 5);
- ((ClassDefinition)var47).cleanup(var14);
- if (!((ClassDefinition)var47).getError() && !var10) {
- String var22 = var20.getName().getQualifier().toString().replace('.', File.separatorChar);
- String var23 = var20.getName().getFlatName().toString().replace('.', '$') + ".class";
- File var48;
- if (var3 != null) {
- if (var22.length() > 0) {
- var48 = new File(var3, var22);
- if (!var48.exists()) {
- var48.mkdirs();
- }
-
- var48 = new File(var48, var23);
- } else {
- var48 = new File(var3, var23);
- }
- } else {
- ClassFile var25 = (ClassFile)((ClassDefinition)var47).getSource();
- if (var25.isZipped()) {
- ((Environment)var14).error(0, "cant.write", var25.getPath());
- continue;
- }
-
- var48 = new File(var25.getPath());
- var48 = new File(var48.getParent(), var23);
- }
-
- try {
- FileOutputStream var50 = new FileOutputStream(var48.getPath());
- var42.writeTo(var50);
- var50.close();
- if (((Environment)var14).verbose()) {
- this.output(getText("main.wrote", var48.getPath()));
- }
- } catch (IOException var26) {
- ((Environment)var14).error(0, "cant.write", var48.getPath());
- }
-
- if (((Environment)var14).print_dependencies()) {
- var47.printClassDependencies(var14);
- }
- }
- }
- }
- }
- } while(!var18);
- } catch (Error var29) {
- if (var14.nerrors == 0 || ((Environment)var14).dump()) {
- ((Throwable)var29).printStackTrace();
- ((Environment)var14).error(0, "fatal.error");
- }
- } catch (Exception var30) {
- if (var14.nerrors == 0 || ((Environment)var14).dump()) {
- ((Throwable)var30).printStackTrace();
- ((Environment)var14).error(0, "fatal.exception");
- }
- }
-
- int var38 = var14.deprecationFiles.size();
- if (var38 > 0 && ((Environment)var14).warnings()) {
- int var40 = var14.ndeprecations;
- Object var43 = var14.deprecationFiles.elementAt(0);
- if (((Environment)var14).deprecation()) {
- if (var38 > 1) {
- ((Environment)var14).error(0, "warn.note.deprecations", new Integer(var38), new Integer(var40));
- } else {
- ((Environment)var14).error(0, "warn.note.1deprecation", var43, new Integer(var40));
- }
- } else if (var38 > 1) {
- ((Environment)var14).error(0, "warn.note.deprecations.silent", new Integer(var38), new Integer(var40));
- } else {
- ((Environment)var14).error(0, "warn.note.1deprecation.silent", var43, new Integer(var40));
- }
- }
-
- var14.flushErrors();
- var14.shutdown();
- boolean var41 = true;
- if (var14.nerrors > 0) {
- String var44 = "";
- if (var14.nerrors > 1) {
- var44 = getText("main.errors", var14.nerrors);
- } else {
- var44 = getText("main.1error");
- }
-
- if (var14.nwarnings > 0) {
- if (var14.nwarnings > 1) {
- var44 = var44 + ", " + getText("main.warnings", var14.nwarnings);
- } else {
- var44 = var44 + ", " + getText("main.1warning");
- }
- }
-
- this.output(var44);
- var41 = false;
- } else if (var14.nwarnings > 0) {
- if (var14.nwarnings > 1) {
- this.output(getText("main.warnings", var14.nwarnings));
- } else {
- this.output(getText("main.1warning"));
- }
- }
-
- if (((Environment)var14).covdata()) {
- Assembler var46 = new Assembler();
- var46.GenJCov(var14);
- }
-
- if (((Environment)var14).verbose()) {
- var7 = System.currentTimeMillis() - var7;
- this.output(getText("main.done_in", Long.toString(var7)));
- }
-
- return var41;
- }
- }
-
- public static void main(String[] var0) {
- PrintStream var1 = System.err;
- if (Boolean.getBoolean("javac.pipe.output")) {
- var1 = System.out;
- }
-
- Main var2 = new Main(var1, "javac");
- System.exit(var2.compile(var0) ? 0 : 1);
- }
- }
-