Proxy.java (ProxyData): `pack' now a String.
authorTom Tromey <tromey@redhat.com>
Tue, 26 Aug 2003 14:37:10 +0000 (14:37 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Tue, 26 Aug 2003 14:37:10 +0000 (14:37 +0000)
* java/lang/reflect/Proxy.java (ProxyData): `pack' now a String.
(ProxyData.getPackage): New method.
(ProxyData.getProxyData): Use package name, not Package.
(ClassFactory.ClassFactory): Updated.

From-SVN: r70809

libjava/ChangeLog
libjava/java/lang/reflect/Proxy.java

index 17b2fe548454dac530c067b850314ae39fb74be0..c1f401d9290054a09a8255ed0fcb1a62c76bc7db 100644 (file)
@@ -1,3 +1,10 @@
+2003-08-26  Tom Tromey  <tromey@redhat.com>
+
+       * java/lang/reflect/Proxy.java (ProxyData): `pack' now a String.
+       (ProxyData.getPackage): New method.
+       (ProxyData.getProxyData): Use package name, not Package.
+       (ClassFactory.ClassFactory): Updated.
+
 2003-08-25  Scott Gilbertson  <scottg@mantatest.com>
        * Makefile.am: added gnu/awt/xlib/XOffScreenImage.java.
        * Makefile.in: re-generated.
index e327f44664b259841b5f12bdb8733dc5a0db347f..1b38a4838425a15c777390a1d5429a04a03f9ade 100644 (file)
@@ -1,5 +1,5 @@
 /* Proxy.java -- build a proxy class that implements reflected interfaces
-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -733,7 +733,7 @@ public class Proxy implements Serializable
      * The package this class is in.  Possibly null, meaning the unnamed
      * package.
      */
-    Package pack;
+    String pack;
 
     /**
      * The interfaces this class implements.  Non-null, but possibly empty.
@@ -776,6 +776,21 @@ public class Proxy implements Serializable
     {
     }
 
+    /**
+     * Return the name of a package given the name of a class.
+     * Returns null if no package.  We use this in preference to
+     * using Class.getPackage() to avoid problems with ClassLoaders
+     * that don't set the package.
+     */
+    static String getPackage(Class k)
+    {
+      String name = k.getName();
+      int idx = name.lastIndexOf('.');
+      if (idx >= 0)
+       return name.substring(0, idx);
+      return null;
+    }
+
     /**
      * Verifies that the arguments are legal, and sets up remaining data
      * This should only be called when a class must be generated, as
@@ -818,8 +833,8 @@ public class Proxy implements Serializable
           if (! Modifier.isPublic(inter.getModifiers()))
             if (in_package)
               {
-                Package p = inter.getPackage();
-                if (data.pack != inter.getPackage())
+               String p = getPackage(inter);
+                if (! data.pack.equals(p))
                   throw new IllegalArgumentException("non-public interfaces "
                                                      + "from different "
                                                      + "packages");
@@ -827,7 +842,7 @@ public class Proxy implements Serializable
             else
               {
                 in_package = true;
-                data.pack = inter.getPackage();
+                data.pack = getPackage(inter);
               }
           for (int j = i-1; j >= 0; j--)
             if (data.interfaces[j] == inter)
@@ -954,7 +969,7 @@ public class Proxy implements Serializable
       // access_flags
       putU2(Modifier.SUPER | Modifier.FINAL | Modifier.PUBLIC);
       // this_class
-      qualName = ((data.pack == null ? "" : data.pack.getName() + '.')
+      qualName = ((data.pack == null ? "" : data.pack + '.')
                   + "$Proxy" + data.id);
       putU2(classInfo(TypeSignature.getEncodingOfClass(qualName, false)));
       // super_class