diff options
Diffstat (limited to 'libjava/java/lang/VMClassLoader.java')
-rw-r--r-- | libjava/java/lang/VMClassLoader.java | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/libjava/java/lang/VMClassLoader.java b/libjava/java/lang/VMClassLoader.java index 8f78f9bb666..1afda4570ea 100644 --- a/libjava/java/lang/VMClassLoader.java +++ b/libjava/java/lang/VMClassLoader.java @@ -1,6 +1,6 @@ /* VMClassLoader.java -- Reference implementation of native interface required by ClassLoader - Copyright (C) 1998, 2001, 2002, 2003, 2004 Free Software Foundation + Copyright (C) 1998, 2001, 2002, 2003, 2004, 2005 Free Software Foundation This file is part of GNU Classpath. @@ -76,6 +76,8 @@ final class VMClassLoader unknownProtectionDomain = new ProtectionDomain(null, permissions); } + static final HashMap definedPackages = new HashMap(); + /** * Helper to define a class using a string of bytes. This assumes that * the security checks have already been performed, if necessary. @@ -173,9 +175,9 @@ final class VMClassLoader * @param name the name to find * @return the named package, if it exists */ - static Package getPackage(String name) + static synchronized Package getPackage(String name) { - return null; + return (Package) definedPackages.get(name); } /** @@ -185,9 +187,33 @@ final class VMClassLoader * * @return all named packages, if any exist */ - static Package[] getPackages() + static synchronized Package[] getPackages() + { + Package[] packages = new Package[definedPackages.size()]; + return (Package[]) definedPackages.values().toArray(packages); + } + + // Define a package for something loaded natively. + static synchronized void definePackageForNative(String className) { - return new Package[0]; + int lastDot = className.lastIndexOf('.'); + if (lastDot != -1) + { + String packageName = className.substring(0, lastDot); + if (getPackage(packageName) == null) + { + // FIXME: this assumes we're defining the core, which + // isn't necessarily so. We could detect this and set up + // appropriately. We could also look at a manifest file + // compiled into the .so. + Package p = new Package(packageName, + "Java Platform API Specification", + "GNU", "1.4", "gcj", "GNU", + null, // FIXME: gcj version. + null); + definedPackages.put(packageName, p); + } + } } /** |