diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-10 19:39:26 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-10 19:39:26 +0000 |
commit | 743d66d0d409fc453f1172d70bdbb5bf5bfc4737 (patch) | |
tree | 966d2f436ef2b2ebadf80447ac97eca99afd09f7 /libjava/java/lang/VMClassLoader.java | |
parent | 4c7c159ad4a0f7ba527305497199ceb813f1a3b8 (diff) | |
download | gcc-743d66d0d409fc453f1172d70bdbb5bf5bfc4737.tar.gz |
PR libgcj/12016, PR libgcj/18405, PR libgcj/17738:
* java/lang/Package.java (getPackages): Use VMClassLoader when
appropriate.
(getPackage): Likewise.
* prims.cc (_Jv_CreateJavaVM): Call
_Jv_RegisterBootstrapPackages.
* include/jvm.h (_Jv_RegisterBootstrapPackages): Declare.
* java/lang/VMClassLoader.java (getPackage): Rewrote.
(getPackages): Likewise.
(definedPackages): New field.
(definePackageForNative): New method.
* java/lang/Class.h (_Jv_FindClassInCache): Updated.
* java/lang/natVMClassLoader.cc (loadClass): Updated.
* defineclass.cc (handleClassBegin): Use
ClassLoader.findLoadedClass.
* java/lang/natClassLoader.cc (_Jv_RegisterInitiatingLoader):
Rewrote.
(struct _Jv_LoaderInfo): Removed.
(initiated_classes): Likewise.
(_Jv_UnregisterClass): Don't use initiated_classes.
(_Jv_FindClassInCache): Likewise. Removed 'loader' argument.
(_Jv_FindClass): Register classes found during boostrap.
(BOOTSTRAP_CLASS_LIST_SIZE): New define.
(bootstrap_class_list): New global.
(bootstrap_index): Likewise.
(_Jv_RegisterBootstrapPackages): New function.
* gnu/gcj/runtime/natVMClassLoader.cc (findClass): Call
definePackageForNative.
(findClass): Updated.
* gnu/gcj/runtime/VMClassLoader.java (definePackageForNative):
New method.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93155 138bc75d-0d04-0410-961f-82ee72b054a4
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); + } + } } /** |