home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.util;
-
- import java.io.BufferedInputStream;
- import java.io.DataInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.PrintWriter;
- import java.util.Hashtable;
- import sun.tools.java.BinaryClass;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassFile;
- import sun.tools.java.ClassPath;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.Identifier;
- import sun.tools.java.Package;
- import sun.tools.java.Type;
-
- public class LoadEnvironment extends Environment implements Constants {
- public PrintWriter output;
- public int flags;
- public ClassPath path;
- Hashtable packages = new Hashtable(31);
- Hashtable classes = new Hashtable(351);
-
- public LoadEnvironment(PrintWriter var1) {
- this.output = var1;
- }
-
- protected int loadFileFlags() {
- return 0;
- }
-
- public int getFlags() {
- return this.flags;
- }
-
- public boolean classExists(Identifier var1) {
- if (var1.isInner()) {
- var1 = var1.getTopName();
- }
-
- Type var2 = Type.tClass(var1);
-
- try {
- ClassDeclaration var3 = (ClassDeclaration)this.classes.get(var2);
- if (var3 != null) {
- return var3.getName().equals(var1);
- } else {
- return this.getPackage(var1.getQualifier()).getBinaryFile(var1.getName()) != null;
- }
- } catch (IOException var4) {
- return false;
- }
- }
-
- public ClassDeclaration getClassDeclaration(Identifier var1) {
- return this.getClassDeclaration(Type.tClass(var1));
- }
-
- public ClassDeclaration getClassDeclaration(Type var1) {
- ClassDeclaration var2 = (ClassDeclaration)this.classes.get(var1);
- if (var2 == null) {
- this.classes.put(var1, var2 = new ClassDeclaration(var1.getClassName()));
- }
-
- return var2;
- }
-
- public Package getPackage(Identifier var1) throws IOException {
- Package var2 = (Package)this.packages.get(var1);
- if (var2 == null) {
- this.packages.put(var1, var2 = new Package(this.path, var1));
- }
-
- return var2;
- }
-
- BinaryClass loadFile(ClassFile var1) throws IOException {
- System.currentTimeMillis();
- InputStream var2 = var1.getInputStream();
- BinaryClass var3 = null;
-
- try {
- DataInputStream var4 = new DataInputStream(new BufferedInputStream(var2));
- var3 = BinaryClass.load(new Environment(this, var1), var4, this.loadFileFlags());
- } catch (ClassFormatError var5) {
- System.err.println("Error: bad class format" + var1.getPath() + ((Throwable)var5).getMessage());
- return null;
- } catch (Exception var6) {
- ((Throwable)var6).printStackTrace();
- }
-
- var2.close();
- return var3;
- }
-
- public void loadDefinition(ClassDeclaration var1) {
- switch (var1.getStatus()) {
- case 0:
- Identifier var2 = var1.getName();
-
- Package var3;
- try {
- var3 = this.getPackage(var2.getQualifier());
- } catch (IOException var8) {
- System.err.println("Error: I/O Exception - " + ((Throwable)var8).getMessage());
- return;
- }
-
- ClassFile var4 = var3.getBinaryFile(var2.getName());
- if (var4 == null) {
- System.err.println("Error: No binary file '" + var2.getName() + "'");
- return;
- } else {
- Object var5 = null;
-
- try {
- var9 = this.loadFile(var4);
- } catch (IOException var7) {
- System.err.println("Error: I/O Exception - " + ((Throwable)var7).getMessage() + " in " + var4);
- return;
- }
-
- if (var9 == null) {
- System.err.println("Error: Class not found in '" + var4 + "'");
- return;
- }
-
- if (!((ClassDefinition)var9).getName().equals(var2)) {
- System.err.println("Error: Binary file '" + var2.getName() + "' contains " + ((ClassDefinition)var9).getName());
- var9 = null;
- }
-
- var1.setDefinition(var9, 2);
- var9.hasBeenLoaded(this);
- return;
- }
- case 1:
- case 2:
- case 3:
- default:
- System.err.println("Error: No binary file");
- }
- }
- }
-