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 / util / LoadEnvironment.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  4.3 KB  |  148 lines

  1. package sun.tools.util;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.DataInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.PrintWriter;
  8. import java.util.Hashtable;
  9. import sun.tools.java.BinaryClass;
  10. import sun.tools.java.ClassDeclaration;
  11. import sun.tools.java.ClassDefinition;
  12. import sun.tools.java.ClassFile;
  13. import sun.tools.java.ClassPath;
  14. import sun.tools.java.Constants;
  15. import sun.tools.java.Environment;
  16. import sun.tools.java.Identifier;
  17. import sun.tools.java.Package;
  18. import sun.tools.java.Type;
  19.  
  20. public class LoadEnvironment extends Environment implements Constants {
  21.    public PrintWriter output;
  22.    public int flags;
  23.    public ClassPath path;
  24.    Hashtable packages = new Hashtable(31);
  25.    Hashtable classes = new Hashtable(351);
  26.  
  27.    public LoadEnvironment(PrintWriter var1) {
  28.       this.output = var1;
  29.    }
  30.  
  31.    protected int loadFileFlags() {
  32.       return 0;
  33.    }
  34.  
  35.    public int getFlags() {
  36.       return this.flags;
  37.    }
  38.  
  39.    public boolean classExists(Identifier var1) {
  40.       if (var1.isInner()) {
  41.          var1 = var1.getTopName();
  42.       }
  43.  
  44.       Type var2 = Type.tClass(var1);
  45.  
  46.       try {
  47.          ClassDeclaration var3 = (ClassDeclaration)this.classes.get(var2);
  48.          if (var3 != null) {
  49.             return var3.getName().equals(var1);
  50.          } else {
  51.             return this.getPackage(var1.getQualifier()).getBinaryFile(var1.getName()) != null;
  52.          }
  53.       } catch (IOException var4) {
  54.          return false;
  55.       }
  56.    }
  57.  
  58.    public ClassDeclaration getClassDeclaration(Identifier var1) {
  59.       return this.getClassDeclaration(Type.tClass(var1));
  60.    }
  61.  
  62.    public ClassDeclaration getClassDeclaration(Type var1) {
  63.       ClassDeclaration var2 = (ClassDeclaration)this.classes.get(var1);
  64.       if (var2 == null) {
  65.          this.classes.put(var1, var2 = new ClassDeclaration(var1.getClassName()));
  66.       }
  67.  
  68.       return var2;
  69.    }
  70.  
  71.    public Package getPackage(Identifier var1) throws IOException {
  72.       Package var2 = (Package)this.packages.get(var1);
  73.       if (var2 == null) {
  74.          this.packages.put(var1, var2 = new Package(this.path, var1));
  75.       }
  76.  
  77.       return var2;
  78.    }
  79.  
  80.    BinaryClass loadFile(ClassFile var1) throws IOException {
  81.       System.currentTimeMillis();
  82.       InputStream var2 = var1.getInputStream();
  83.       BinaryClass var3 = null;
  84.  
  85.       try {
  86.          DataInputStream var4 = new DataInputStream(new BufferedInputStream(var2));
  87.          var3 = BinaryClass.load(new Environment(this, var1), var4, this.loadFileFlags());
  88.       } catch (ClassFormatError var5) {
  89.          System.err.println("Error: bad class format" + var1.getPath() + ((Throwable)var5).getMessage());
  90.          return null;
  91.       } catch (Exception var6) {
  92.          ((Throwable)var6).printStackTrace();
  93.       }
  94.  
  95.       var2.close();
  96.       return var3;
  97.    }
  98.  
  99.    public void loadDefinition(ClassDeclaration var1) {
  100.       switch (var1.getStatus()) {
  101.          case 0:
  102.             Identifier var2 = var1.getName();
  103.  
  104.             Package var3;
  105.             try {
  106.                var3 = this.getPackage(var2.getQualifier());
  107.             } catch (IOException var8) {
  108.                System.err.println("Error: I/O Exception - " + ((Throwable)var8).getMessage());
  109.                return;
  110.             }
  111.  
  112.             ClassFile var4 = var3.getBinaryFile(var2.getName());
  113.             if (var4 == null) {
  114.                System.err.println("Error: No binary file '" + var2.getName() + "'");
  115.                return;
  116.             } else {
  117.                Object var5 = null;
  118.  
  119.                try {
  120.                   var9 = this.loadFile(var4);
  121.                } catch (IOException var7) {
  122.                   System.err.println("Error: I/O Exception - " + ((Throwable)var7).getMessage() + " in " + var4);
  123.                   return;
  124.                }
  125.  
  126.                if (var9 == null) {
  127.                   System.err.println("Error: Class not found in '" + var4 + "'");
  128.                   return;
  129.                }
  130.  
  131.                if (!((ClassDefinition)var9).getName().equals(var2)) {
  132.                   System.err.println("Error: Binary file '" + var2.getName() + "'  contains " + ((ClassDefinition)var9).getName());
  133.                   var9 = null;
  134.                }
  135.  
  136.                var1.setDefinition(var9, 2);
  137.                var9.hasBeenLoaded(this);
  138.                return;
  139.             }
  140.          case 1:
  141.          case 2:
  142.          case 3:
  143.          default:
  144.             System.err.println("Error: No binary file");
  145.       }
  146.    }
  147. }
  148.