home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / lang / ClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  12.3 KB  |  671 lines

  1. package java.lang;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.net.URL;
  7. import java.security.AccessControlContext;
  8. import java.security.AccessController;
  9. import java.security.CodeSource;
  10. import java.security.PermissionCollection;
  11. import java.security.ProtectionDomain;
  12. import java.security.cert.Certificate;
  13. import java.util.Enumeration;
  14. import java.util.HashMap;
  15. import java.util.HashSet;
  16. import java.util.Hashtable;
  17. import java.util.Map;
  18. import java.util.Set;
  19. import java.util.Stack;
  20. import java.util.Vector;
  21. import sun.misc.CompoundEnumeration;
  22. import sun.misc.Launcher;
  23. import sun.misc.Resource;
  24. import sun.misc.URLClassPath;
  25.  
  26. public abstract class ClassLoader {
  27.    private boolean initialized = false;
  28.    private ClassLoader parent;
  29.    private Hashtable package2certs = new Hashtable(11);
  30.    Certificate[] nocerts;
  31.    private Vector classes = new Vector();
  32.    private Set domains = new HashSet();
  33.    private HashMap packages = new HashMap();
  34.    private static URLClassPath bootstrapClassPath;
  35.    private static ClassLoader scl;
  36.    private static boolean sclSet;
  37.    private static RuntimePermission getClassLoaderPerm = null;
  38.    private ProtectionDomain defaultDomain = null;
  39.    private static PermissionCollection defaultPermissions = null;
  40.    private static Vector loadedLibraryNames = new Vector();
  41.    private static Vector systemNativeLibraries = new Vector();
  42.    private Vector nativeLibraries = new Vector();
  43.    private static Stack nativeLibraryContext = new Stack();
  44.    private static String[] usr_paths;
  45.    private static String[] sys_paths;
  46.    // $FF: synthetic field
  47.    static Class class$java$lang$ClassLoader;
  48.  
  49.    void addClass(Class var1) {
  50.       this.classes.addElement(var1);
  51.    }
  52.  
  53.    protected ClassLoader(ClassLoader var1) {
  54.       SecurityManager var2 = System.getSecurityManager();
  55.       if (var2 != null) {
  56.          var2.checkCreateClassLoader();
  57.       }
  58.  
  59.       this.parent = var1;
  60.       this.initialized = true;
  61.    }
  62.  
  63.    protected ClassLoader() {
  64.       SecurityManager var1 = System.getSecurityManager();
  65.       if (var1 != null) {
  66.          var1.checkCreateClassLoader();
  67.       }
  68.  
  69.       this.parent = getSystemClassLoader();
  70.       this.initialized = true;
  71.    }
  72.  
  73.    public Class loadClass(String var1) throws ClassNotFoundException {
  74.       return this.loadClass(var1, false);
  75.    }
  76.  
  77.    protected synchronized Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  78.       Class var3 = this.findLoadedClass(var1);
  79.       if (var3 == null) {
  80.          try {
  81.             if (this.parent != null) {
  82.                var3 = this.parent.loadClass(var1, false);
  83.             } else {
  84.                var3 = this.findBootstrapClass0(var1);
  85.             }
  86.          } catch (ClassNotFoundException var5) {
  87.             var3 = this.findClass(var1);
  88.          }
  89.       }
  90.  
  91.       if (var2) {
  92.          this.resolveClass(var3);
  93.       }
  94.  
  95.       return var3;
  96.    }
  97.  
  98.    private synchronized Class loadClassInternal(String var1) throws ClassNotFoundException {
  99.       return this.loadClass(var1);
  100.    }
  101.  
  102.    private void checkPackageAccess(Class var1, ProtectionDomain var2) {
  103.       SecurityManager var3 = System.getSecurityManager();
  104.       if (var3 != null) {
  105.          String var4 = var1.getName();
  106.          int var5 = var4.lastIndexOf(46);
  107.          if (var5 != -1) {
  108.             AccessController.doPrivileged(new 1(this, var3, var4, var5), new AccessControlContext(new ProtectionDomain[]{var2}));
  109.          }
  110.       }
  111.  
  112.       this.domains.add(var2);
  113.    }
  114.  
  115.    protected Class findClass(String var1) throws ClassNotFoundException {
  116.       throw new ClassNotFoundException(var1);
  117.    }
  118.  
  119.    protected final Class defineClass(byte[] var1, int var2, int var3) throws ClassFormatError {
  120.       return this.defineClass((String)null, var1, var2, var3, (ProtectionDomain)null);
  121.    }
  122.  
  123.    protected final Class defineClass(String var1, byte[] var2, int var3, int var4) throws ClassFormatError {
  124.       return this.defineClass(var1, var2, var3, var4, (ProtectionDomain)null);
  125.    }
  126.  
  127.    protected final Class defineClass(String var1, byte[] var2, int var3, int var4, ProtectionDomain var5) throws ClassFormatError {
  128.       this.check();
  129.       if (var1 != null && var1.startsWith("java.")) {
  130.          throw new SecurityException("Prohibited package name: " + var1.substring(0, var1.lastIndexOf(46)));
  131.       } else {
  132.          if (var5 == null) {
  133.             var5 = this.getDefaultDomain();
  134.          }
  135.  
  136.          if (var1 != null) {
  137.             this.checkCerts(var1, var5.getCodeSource());
  138.          }
  139.  
  140.          Class var6 = this.defineClass0(var1, var2, var3, var4, var5);
  141.          if (var5.getCodeSource() != null) {
  142.             Certificate[] var7 = var5.getCodeSource().getCertificates();
  143.             if (var7 != null) {
  144.                this.setSigners(var6, var7);
  145.             }
  146.          }
  147.  
  148.          return var6;
  149.       }
  150.    }
  151.  
  152.    private synchronized void checkCerts(String var1, CodeSource var2) {
  153.       int var3 = var1.lastIndexOf(46);
  154.       String var4 = var3 == -1 ? "" : var1.substring(0, var3);
  155.       Certificate[] var5 = (Certificate[])this.package2certs.get(var4);
  156.       if (var5 == null) {
  157.          if (var2 != null) {
  158.             var5 = var2.getCertificates();
  159.          }
  160.  
  161.          if (var5 == null) {
  162.             if (this.nocerts == null) {
  163.                this.nocerts = new Certificate[0];
  164.             }
  165.  
  166.             var5 = this.nocerts;
  167.          }
  168.  
  169.          this.package2certs.put(var4, var5);
  170.       } else {
  171.          Certificate[] var6 = null;
  172.          if (var2 != null) {
  173.             var6 = var2.getCertificates();
  174.          }
  175.  
  176.          if (!this.compareCerts(var5, var6)) {
  177.             throw new SecurityException("class \"" + var1 + "\"'s signer information does not match signer information of other classes in the same package");
  178.          }
  179.       }
  180.  
  181.    }
  182.  
  183.    private boolean compareCerts(Certificate[] var1, Certificate[] var2) {
  184.       if (var2 != null && var2.length != 0) {
  185.          if (var2.length != var1.length) {
  186.             return false;
  187.          } else {
  188.             for(int var4 = 0; var4 < var2.length; ++var4) {
  189.                boolean var3 = false;
  190.  
  191.                for(int var5 = 0; var5 < var1.length; ++var5) {
  192.                   if (var2[var4].equals(var1[var5])) {
  193.                      var3 = true;
  194.                      break;
  195.                   }
  196.                }
  197.  
  198.                if (!var3) {
  199.                   return false;
  200.                }
  201.             }
  202.  
  203.             for(int var8 = 0; var8 < var1.length; ++var8) {
  204.                boolean var7 = false;
  205.  
  206.                for(int var6 = 0; var6 < var2.length; ++var6) {
  207.                   if (var1[var8].equals(var2[var6])) {
  208.                      var7 = true;
  209.                      break;
  210.                   }
  211.                }
  212.  
  213.                if (!var7) {
  214.                   return false;
  215.                }
  216.             }
  217.  
  218.             return true;
  219.          }
  220.       } else {
  221.          return var1.length == 0;
  222.       }
  223.    }
  224.  
  225.    protected final void resolveClass(Class var1) {
  226.       this.check();
  227.       this.resolveClass0(var1);
  228.    }
  229.  
  230.    protected final Class findSystemClass(String var1) throws ClassNotFoundException {
  231.       this.check();
  232.       ClassLoader var2 = getSystemClassLoader();
  233.       return var2 == null ? this.findBootstrapClass(var1) : var2.loadClass(var1);
  234.    }
  235.  
  236.    public final ClassLoader getParent() {
  237.       if (this.parent == null) {
  238.          return null;
  239.       } else {
  240.          SecurityManager var1 = System.getSecurityManager();
  241.          if (var1 != null) {
  242.             ClassLoader var2 = getCallerClassLoader();
  243.             if (var2 != null && !this.isAncestor(var2)) {
  244.                var1.checkPermission(getGetClassLoaderPerm());
  245.             }
  246.          }
  247.  
  248.          return this.parent;
  249.       }
  250.    }
  251.  
  252.    protected final void setSigners(Class var1, Object[] var2) {
  253.       this.check();
  254.       var1.setSigners(var2);
  255.    }
  256.  
  257.    private Class findBootstrapClass0(String var1) throws ClassNotFoundException {
  258.       this.check();
  259.       return this.findBootstrapClass(var1);
  260.    }
  261.  
  262.    private native Class defineClass0(String var1, byte[] var2, int var3, int var4, ProtectionDomain var5);
  263.  
  264.    private native void resolveClass0(Class var1);
  265.  
  266.    private native Class findBootstrapClass(String var1) throws ClassNotFoundException;
  267.  
  268.    private void check() {
  269.       if (!this.initialized) {
  270.          throw new SecurityException("ClassLoader object not initialized");
  271.       }
  272.    }
  273.  
  274.    protected final native Class findLoadedClass(String var1);
  275.  
  276.    public URL getResource(String var1) {
  277.       URL var2;
  278.       if (this.parent != null) {
  279.          var2 = this.parent.getResource(var1);
  280.       } else {
  281.          var2 = getBootstrapResource(var1);
  282.       }
  283.  
  284.       if (var2 == null) {
  285.          var2 = this.findResource(var1);
  286.       }
  287.  
  288.       return var2;
  289.    }
  290.  
  291.    public final Enumeration getResources(String var1) throws IOException {
  292.       Enumeration[] var2 = new Enumeration[2];
  293.       if (this.parent != null) {
  294.          var2[0] = this.parent.getResources(var1);
  295.       } else {
  296.          var2[0] = getBootstrapResources(var1);
  297.       }
  298.  
  299.       var2[1] = this.findResources(var1);
  300.       return new CompoundEnumeration(var2);
  301.    }
  302.  
  303.    protected Enumeration findResources(String var1) throws IOException {
  304.       return new CompoundEnumeration(new Enumeration[0]);
  305.    }
  306.  
  307.    protected URL findResource(String var1) {
  308.       return null;
  309.    }
  310.  
  311.    public static URL getSystemResource(String var0) {
  312.       ClassLoader var1 = getSystemClassLoader();
  313.       return var1 == null ? getBootstrapResource(var0) : var1.getResource(var0);
  314.    }
  315.  
  316.    private static URL getBootstrapResource(String var0) {
  317.       URLClassPath var1 = getBootstrapClassPath();
  318.       Resource var2 = var1.getResource(var0);
  319.       return var2 != null ? var2.getURL() : null;
  320.    }
  321.  
  322.    public static Enumeration getSystemResources(String var0) throws IOException {
  323.       ClassLoader var1 = getSystemClassLoader();
  324.       return var1 == null ? getBootstrapResources(var0) : var1.getResources(var0);
  325.    }
  326.  
  327.    private static Enumeration getBootstrapResources(String var0) throws IOException {
  328.       Enumeration var1 = getBootstrapClassPath().getResources(var0);
  329.       return new 2(var1);
  330.    }
  331.  
  332.    static URLClassPath getBootstrapClassPath() {
  333.       if (bootstrapClassPath == null) {
  334.          bootstrapClassPath = Launcher.getBootstrapClassPath();
  335.       }
  336.  
  337.       return bootstrapClassPath;
  338.    }
  339.  
  340.    public InputStream getResourceAsStream(String var1) {
  341.       URL var2 = this.getResource(var1);
  342.  
  343.       try {
  344.          return var2 != null ? var2.openStream() : null;
  345.       } catch (IOException var4) {
  346.          return null;
  347.       }
  348.    }
  349.  
  350.    public static InputStream getSystemResourceAsStream(String var0) {
  351.       URL var1 = getSystemResource(var0);
  352.  
  353.       try {
  354.          return var1 != null ? var1.openStream() : null;
  355.       } catch (IOException var3) {
  356.          return null;
  357.       }
  358.    }
  359.  
  360.    public static ClassLoader getSystemClassLoader() {
  361.       if (!sclSet) {
  362.          Launcher var0 = Launcher.getLauncher();
  363.          if (var0 != null) {
  364.             scl = var0.getClassLoader();
  365.          }
  366.  
  367.          sclSet = true;
  368.       }
  369.  
  370.       if (scl == null) {
  371.          return null;
  372.       } else {
  373.          SecurityManager var2 = System.getSecurityManager();
  374.          if (var2 != null) {
  375.             ClassLoader var1 = getCallerClassLoader();
  376.             if (var1 != null && var1 != scl && !scl.isAncestor(var1)) {
  377.                var2.checkPermission(getGetClassLoaderPerm());
  378.             }
  379.          }
  380.  
  381.          return scl;
  382.       }
  383.    }
  384.  
  385.    boolean isAncestor(ClassLoader var1) {
  386.       ClassLoader var2 = this;
  387.  
  388.       do {
  389.          var2 = var2.parent;
  390.          if (var1 == var2) {
  391.             return true;
  392.          }
  393.       } while(var2 != null);
  394.  
  395.       return false;
  396.    }
  397.  
  398.    static native ClassLoader getCallerClassLoader();
  399.  
  400.    static RuntimePermission getGetClassLoaderPerm() {
  401.       if (getClassLoaderPerm == null) {
  402.          getClassLoaderPerm = new RuntimePermission("getClassLoader");
  403.       }
  404.  
  405.       return getClassLoaderPerm;
  406.    }
  407.  
  408.    protected Package definePackage(String var1, String var2, String var3, String var4, String var5, String var6, String var7, URL var8) throws IllegalArgumentException {
  409.       HashMap var9 = this.packages;
  410.       synchronized(var9) {
  411.          Package var10 = this.getPackage(var1);
  412.          if (var10 != null) {
  413.             throw new IllegalArgumentException(var1);
  414.          } else {
  415.             var10 = new Package(var1, var2, var3, var4, var5, var6, var7, var8);
  416.             this.packages.put(var1, var10);
  417.             return var10;
  418.          }
  419.       }
  420.    }
  421.  
  422.    protected Package getPackage(String var1) {
  423.       HashMap var2 = this.packages;
  424.       synchronized(var2) {
  425.          Package var3 = (Package)this.packages.get(var1);
  426.          if (var3 == null) {
  427.             if (this.parent != null) {
  428.                var3 = this.parent.getPackage(var1);
  429.             } else {
  430.                var3 = Package.getSystemPackage(var1);
  431.             }
  432.  
  433.             if (var3 != null) {
  434.                this.packages.put(var1, var3);
  435.             }
  436.          }
  437.  
  438.          return var3;
  439.       }
  440.    }
  441.  
  442.    protected Package[] getPackages() {
  443.       HashMap var2 = this.packages;
  444.       Map var1;
  445.       synchronized(var2) {
  446.          var1 = (Map)this.packages.clone();
  447.       }
  448.  
  449.       Package[] var3;
  450.       if (this.parent != null) {
  451.          var3 = this.parent.getPackages();
  452.       } else {
  453.          var3 = Package.getSystemPackages();
  454.       }
  455.  
  456.       if (var3 != null) {
  457.          for(int var4 = 0; var4 < var3.length; ++var4) {
  458.             String var5 = var3[var4].getName();
  459.             if (var1.get(var5) == null) {
  460.                var1.put(var5, var3[var4]);
  461.             }
  462.          }
  463.       }
  464.  
  465.       return (Package[])var1.values().toArray(new Package[var1.size()]);
  466.    }
  467.  
  468.    protected String findLibrary(String var1) {
  469.       return null;
  470.    }
  471.  
  472.    private ProtectionDomain getDefaultDomain() {
  473.       if (this.defaultDomain == null) {
  474.          Class var1 = class$java$lang$ClassLoader == null ? (class$java$lang$ClassLoader = class$("java.lang.ClassLoader")) : class$java$lang$ClassLoader;
  475.          synchronized(var1) {
  476.             if (defaultPermissions == null) {
  477.                defaultPermissions = (PermissionCollection)AccessController.doPrivileged(new 3(this));
  478.             }
  479.  
  480.             if (this.defaultDomain == null) {
  481.                CodeSource var2 = new CodeSource((URL)null, (Certificate[])null);
  482.                this.defaultDomain = new ProtectionDomain(var2, defaultPermissions);
  483.             }
  484.          }
  485.       }
  486.  
  487.       return this.defaultDomain;
  488.    }
  489.  
  490.    private static String[] initializePath(String var0) {
  491.       String var1 = System.getProperty(var0, "");
  492.       String var2 = File.pathSeparator;
  493.       int var3 = var1.length();
  494.       int var4 = var1.indexOf(var2);
  495.  
  496.       int var6;
  497.       for(var6 = 0; var4 >= 0; var4 = var1.indexOf(var2, var4 + 1)) {
  498.          ++var6;
  499.       }
  500.  
  501.       String[] var7 = new String[var6 + 1];
  502.       var4 = 0;
  503.       var6 = 0;
  504.  
  505.       for(int var5 = var1.indexOf(var2); var5 >= 0; var5 = var1.indexOf(var2, var4)) {
  506.          if (var5 - var4 > 0) {
  507.             var7[var6++] = var1.substring(var4, var5);
  508.          } else if (var5 - var4 == 0) {
  509.             var7[var6++] = ".";
  510.          }
  511.  
  512.          var4 = var5 + 1;
  513.       }
  514.  
  515.       var7[var6] = var1.substring(var4, var3);
  516.       return var7;
  517.    }
  518.  
  519.    static void loadLibrary(Class var0, String var1, boolean var2) {
  520.       ClassLoader var3 = var0 == null ? null : var0.getClassLoader();
  521.       if (sys_paths == null) {
  522.          usr_paths = initializePath("java.library.path");
  523.          sys_paths = initializePath("sun.boot.library.path");
  524.       }
  525.  
  526.       if (var2) {
  527.          if (!loadLibrary0(var0, new File(var1))) {
  528.             throw new UnsatisfiedLinkError("Can't load library: " + var1);
  529.          }
  530.       } else {
  531.          if (var3 != null) {
  532.             String var4 = var3.findLibrary(var1);
  533.             if (var4 != null) {
  534.                File var9 = new File(var4);
  535.                if (!var9.isAbsolute()) {
  536.                   throw new UnsatisfiedLinkError("ClassLoader.findClass failed to return an absolute path: " + var4);
  537.                }
  538.  
  539.                if (loadLibrary0(var0, var9)) {
  540.                   return;
  541.                }
  542.  
  543.                throw new UnsatisfiedLinkError("Can't load " + var4);
  544.             }
  545.          }
  546.  
  547.          for(int var7 = 0; var7 < sys_paths.length; ++var7) {
  548.             File var5 = new File(sys_paths[var7], System.mapLibraryName(var1));
  549.             if (loadLibrary0(var0, var5)) {
  550.                return;
  551.             }
  552.          }
  553.  
  554.          if (var3 != null) {
  555.             for(int var8 = 0; var8 < usr_paths.length; ++var8) {
  556.                File var6 = new File(usr_paths[var8], System.mapLibraryName(var1));
  557.                if (loadLibrary0(var0, var6)) {
  558.                   return;
  559.                }
  560.             }
  561.          }
  562.  
  563.          throw new UnsatisfiedLinkError("no " + var1 + " in java.library.path");
  564.       }
  565.    }
  566.  
  567.    private static boolean loadLibrary0(Class var0, File var1) {
  568.       Boolean var2 = (Boolean)AccessController.doPrivileged(new 4(var1));
  569.       if (!var2) {
  570.          return false;
  571.       } else {
  572.          String var3;
  573.          try {
  574.             var3 = var1.getCanonicalPath();
  575.          } catch (IOException var23) {
  576.             return false;
  577.          }
  578.  
  579.          ClassLoader var4 = var0 == null ? null : var0.getClassLoader();
  580.          Vector var5 = var4 != null ? var4.nativeLibraries : systemNativeLibraries;
  581.          synchronized(var5) {
  582.             int var7 = var5.size();
  583.  
  584.             for(int var8 = 0; var8 < var7; ++var8) {
  585.                NativeLibrary var9 = (NativeLibrary)var5.elementAt(var8);
  586.                if (var3.equals(var9.name)) {
  587.                   boolean var10 = true;
  588.                   return var10;
  589.                }
  590.             }
  591.  
  592.             Vector var26 = loadedLibraryNames;
  593.             synchronized(var26) {
  594.                if (loadedLibraryNames.contains(var3)) {
  595.                   throw new UnsatisfiedLinkError("Native Library " + var3 + " already loaded in another classloader");
  596.                } else {
  597.                   int var27 = nativeLibraryContext.size();
  598.  
  599.                   for(int var11 = 0; var11 < var27; ++var11) {
  600.                      NativeLibrary var12 = (NativeLibrary)nativeLibraryContext.elementAt(var11);
  601.                      if (var3.equals(var12.name)) {
  602.                         if (var4 == java.lang.ClassLoader.NativeLibrary.access$200(var12).getClassLoader()) {
  603.                            boolean var13 = true;
  604.                            return var13;
  605.                         }
  606.  
  607.                         throw new UnsatisfiedLinkError("Native Library " + var3 + " is being loaded in another classloader");
  608.                      }
  609.                   }
  610.  
  611.                   NativeLibrary var28 = new NativeLibrary(var0, var3);
  612.                   nativeLibraryContext.push(var28);
  613.  
  614.                   try {
  615.                      var28.load(var3);
  616.                   } finally {
  617.                      nativeLibraryContext.pop();
  618.                   }
  619.  
  620.                   if (var28.handle != 0L) {
  621.                      loadedLibraryNames.addElement(var3);
  622.                      var5.addElement(var28);
  623.                      boolean var29 = true;
  624.                      return var29;
  625.                   } else {
  626.                      boolean var14 = false;
  627.                      return var14;
  628.                   }
  629.                }
  630.             }
  631.          }
  632.       }
  633.    }
  634.  
  635.    static long findNative(ClassLoader var0, String var1) {
  636.       Vector var2 = var0 != null ? var0.nativeLibraries : systemNativeLibraries;
  637.       synchronized(var2) {
  638.          int var4 = var2.size();
  639.  
  640.          for(int var5 = 0; var5 < var4; ++var5) {
  641.             NativeLibrary var6 = (NativeLibrary)var2.elementAt(var5);
  642.             long var7 = var6.find(var1);
  643.             if (var7 != 0L) {
  644.                return var7;
  645.             }
  646.          }
  647.  
  648.          return 0L;
  649.       }
  650.    }
  651.  
  652.    // $FF: synthetic method
  653.    static Vector access$000() {
  654.       return loadedLibraryNames;
  655.    }
  656.  
  657.    // $FF: synthetic method
  658.    static Stack access$100() {
  659.       return nativeLibraryContext;
  660.    }
  661.  
  662.    // $FF: synthetic method
  663.    static Class class$(String var0) {
  664.       try {
  665.          return Class.forName(var0);
  666.       } catch (ClassNotFoundException var2) {
  667.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  668.       }
  669.    }
  670. }
  671.