Imported Classpath 0.18.
* sources.am, Makefile.in: Updated. * Makefile.am (nat_source_files): Removed natProxy.cc. * java/lang/reflect/natProxy.cc: Removed. * gnu/classpath/jdwp/VMFrame.java, gnu/classpath/jdwp/VMIdManager.java, gnu/classpath/jdwp/VMVirtualMachine.java, java/lang/reflect/VMProxy.java: New files. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * scripts/makemake.tcl (verbose): Add gnu/java/awt/peer/qt to BC list. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/net/DefaultContentHandlerFactory.java (getContent): Remove ClasspathToolkit references. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/awt/xlib/XCanvasPeer.java: Add new peer methods. * gnu/awt/xlib/XFramePeer.java: Likewise. * gnu/awt/xlib/XGraphicsConfiguration.java: Likewise. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * Makefile.am (libgcjawt_la_SOURCES): Remove jawt.c. Add classpath/native/jawt/jawt.c. * Makefile.in: Regenerate. * jawt.c: Remove file. * include/Makefile.am (tool_include__HEADERS): Remove jawt.h and jawt_md.h. Add ../classpath/include/jawt.h and ../classpath/include/jawt_md.h. * include/Makefile.in: Regenerate. * include/jawt.h: Regenerate. * include/jawt_md.h: Regenerate. From-SVN: r104586
This commit is contained in:
parent
9b044d1951
commit
1ea63ef8be
544 changed files with 34724 additions and 14512 deletions
|
@ -1456,6 +1456,57 @@ public final class Character implements Serializable, Comparable
|
|||
*/
|
||||
private static final int MIRROR_MASK = 0x40;
|
||||
|
||||
/**
|
||||
* Min value for supplementary code point.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x10000;
|
||||
|
||||
/**
|
||||
* Min value for code point.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static final int MIN_CODE_POINT = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Max value for code point.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static final int MAX_CODE_POINT = 0x010ffff;
|
||||
|
||||
|
||||
/**
|
||||
* Minimum high surrrogate code in UTF-16 encoding.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static final char MIN_HIGH_SURROGATE = '\ud800';
|
||||
|
||||
/**
|
||||
* Maximum high surrrogate code in UTF-16 encoding.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static final char MAX_HIGH_SURROGATE = '\udbff';
|
||||
|
||||
/**
|
||||
* Minimum low surrrogate code in UTF-16 encoding.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static final char MIN_LOW_SURROGATE = '\udc00';
|
||||
|
||||
/**
|
||||
* Maximum low surrrogate code in UTF-16 encoding.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static final char MAX_LOW_SURROGATE = '\udfff';
|
||||
|
||||
/**
|
||||
* Grabs an attribute offset from the Unicode attribute database. The lower
|
||||
* 5 bits are the character type, the next 2 bits are flags, and the top
|
||||
|
@ -2250,4 +2301,118 @@ public final class Character implements Serializable, Comparable
|
|||
{
|
||||
return compareTo((Character) o);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a unicode code point to a UTF-16 representation of that
|
||||
* code point.
|
||||
*
|
||||
* @param codePoint the unicode code point
|
||||
*
|
||||
* @return the UTF-16 representation of that code point
|
||||
*
|
||||
* @throws IllegalArgumentException if the code point is not a valid
|
||||
* unicode code point
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static char[] toChars(int codePoint)
|
||||
{
|
||||
char[] result = new char[charCount(codePoint)];
|
||||
int ignore = toChars(codePoint, result, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a unicode code point to its UTF-16 representation.
|
||||
*
|
||||
* @param codePoint the unicode code point
|
||||
* @param dst the target char array
|
||||
* @param dstIndex the start index for the target
|
||||
*
|
||||
* @return number of characters written to <code>dst</code>
|
||||
*
|
||||
* @throws IllegalArgumentException if <code>codePoint</code> is not a
|
||||
* valid unicode code point
|
||||
* @throws NullPointerException if <code>dst</code> is <code>null</code>
|
||||
* @throws IndexOutOfBoundsException if <code>dstIndex</code> is not valid
|
||||
* in <code>dst</code> or if the UTF-16 representation does not
|
||||
* fit into <code>dst</code>
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static int toChars(int codePoint, char[] dst, int dstIndex)
|
||||
{
|
||||
if (!isValidCodePoint(codePoint))
|
||||
{
|
||||
throw new IllegalArgumentException("not a valid code point: "
|
||||
+ codePoint);
|
||||
}
|
||||
|
||||
int result;
|
||||
if (isSupplementaryCodePoint(codePoint))
|
||||
{
|
||||
// Write second char first to cause IndexOutOfBoundsException
|
||||
// immediately.
|
||||
dst[dstIndex + 1] = (char) ((codePoint & 0x3ff)
|
||||
+ (int) MIN_LOW_SURROGATE );
|
||||
dst[dstIndex] = (char) ((codePoint >> 10) + (int) MIN_HIGH_SURROGATE);
|
||||
result = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
dst[dstIndex] = (char) codePoint;
|
||||
result = 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return number of 16-bit characters required to represent the given
|
||||
* code point.
|
||||
*
|
||||
* @param codePoint a uncode code point
|
||||
*
|
||||
* @return 2 if codePoint >= 0x10000, 1 otherwise.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static int charCount(int codePoint)
|
||||
{
|
||||
return
|
||||
(codePoint >= MIN_SUPPLEMENTARY_CODE_POINT)
|
||||
? 2
|
||||
: 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the specified code point is
|
||||
* in the range 0x10000 .. 0x10FFFF, i.e. the character is within the Unicode
|
||||
* supplementary character range.
|
||||
*
|
||||
* @param codePoint a Unicode code point
|
||||
*
|
||||
* @return <code>true</code> if code point is in supplementary range
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static boolean isSupplementaryCodePoint(int codePoint)
|
||||
{
|
||||
return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT
|
||||
&& codePoint <= MAX_CODE_POINT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the specified code point is
|
||||
* in the range 0x0000 .. 0x10FFFF, i.e. it is a valid Unicode code point.
|
||||
*
|
||||
* @param codePoint a Unicode code point
|
||||
*
|
||||
* @return <code>true</code> if code point is valid
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static boolean isValidCodePoint(int codePoint)
|
||||
{
|
||||
return codePoint >= MIN_CODE_POINT && codePoint <= MAX_CODE_POINT;
|
||||
}
|
||||
} // class Character
|
||||
|
|
|
@ -156,11 +156,7 @@ public final class Class implements Serializable
|
|||
*/
|
||||
public static Class forName(String name) throws ClassNotFoundException
|
||||
{
|
||||
Class result = VMClass.forName (name);
|
||||
if (result == null)
|
||||
result = Class.forName(name, true,
|
||||
VMStackWalker.getCallingClassLoader());
|
||||
return result;
|
||||
return VMClass.forName(name, true, VMStackWalker.getCallingClassLoader());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -205,24 +201,8 @@ public final class Class implements Serializable
|
|||
if (cl != null)
|
||||
sm.checkPermission(new RuntimePermission("getClassLoader"));
|
||||
}
|
||||
if (name.startsWith("["))
|
||||
return VMClass.loadArrayClass(name, null);
|
||||
Class c = VMClassLoader.loadClass(name, true);
|
||||
if (c != null)
|
||||
{
|
||||
if (initialize)
|
||||
VMClass.initialize(c);
|
||||
return c;
|
||||
}
|
||||
throw new ClassNotFoundException(name);
|
||||
}
|
||||
if (name.startsWith("["))
|
||||
return VMClass.loadArrayClass(name, classloader);
|
||||
Class c = classloader.loadClass(name);
|
||||
classloader.resolveClass(c);
|
||||
if (initialize)
|
||||
VMClass.initialize(c);
|
||||
return c;
|
||||
return VMClass.forName(name, initialize, classloader);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -123,14 +123,6 @@ import java.util.StringTokenizer;
|
|||
*/
|
||||
public abstract class ClassLoader
|
||||
{
|
||||
/**
|
||||
* All classes loaded by this classloader. VM's may choose to implement
|
||||
* this cache natively; but it is here available for use if necessary. It
|
||||
* is not private in order to allow native code (and trusted subclasses)
|
||||
* access to this field.
|
||||
*/
|
||||
final HashMap loadedClasses = new HashMap();
|
||||
|
||||
/**
|
||||
* All packages defined by this classloader. It is not private in order to
|
||||
* allow native code (and trusted subclasses) access to this field.
|
||||
|
@ -472,15 +464,11 @@ public abstract class ClassLoader
|
|||
ProtectionDomain domain)
|
||||
throws ClassFormatError
|
||||
{
|
||||
checkInitialized();
|
||||
if (domain == null)
|
||||
domain = StaticData.defaultProtectionDomain;
|
||||
if (! initialized)
|
||||
throw new SecurityException("attempt to define class from uninitialized class loader");
|
||||
|
||||
Class retval = VMClassLoader.defineClass(this, name, data,
|
||||
offset, len, domain);
|
||||
loadedClasses.put(retval.getName(), retval);
|
||||
return retval;
|
||||
return VMClassLoader.defineClass(this, name, data, offset, len, domain);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -493,6 +481,7 @@ public abstract class ClassLoader
|
|||
*/
|
||||
protected final void resolveClass(Class c)
|
||||
{
|
||||
checkInitialized();
|
||||
VMClassLoader.resolveClass(c);
|
||||
}
|
||||
|
||||
|
@ -508,6 +497,7 @@ public abstract class ClassLoader
|
|||
protected final Class findSystemClass(String name)
|
||||
throws ClassNotFoundException
|
||||
{
|
||||
checkInitialized();
|
||||
return Class.forName(name, false, StaticData.systemClassLoader);
|
||||
}
|
||||
|
||||
|
@ -544,6 +534,7 @@ public abstract class ClassLoader
|
|||
*/
|
||||
protected final void setSigners(Class c, Object[] signers)
|
||||
{
|
||||
checkInitialized();
|
||||
c.setSigners(signers);
|
||||
}
|
||||
|
||||
|
@ -556,9 +547,8 @@ public abstract class ClassLoader
|
|||
*/
|
||||
protected final synchronized Class findLoadedClass(String name)
|
||||
{
|
||||
// NOTE: If the VM is keeping its own cache, it may make sense to have
|
||||
// this method be native.
|
||||
return (Class) loadedClasses.get(name);
|
||||
checkInitialized();
|
||||
return VMClassLoader.findLoadedClass(this, name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1113,4 +1103,16 @@ public abstract class ClassLoader
|
|||
.initCause(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Before doing anything "dangerous" please call this method to make sure
|
||||
* this class loader instance was properly constructed (and not obtained
|
||||
* by exploiting the finalizer attack)
|
||||
* @see #initialized
|
||||
*/
|
||||
private void checkInitialized()
|
||||
{
|
||||
if (! initialized)
|
||||
throw new SecurityException("attempt to use uninitialized class loader");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,7 +47,8 @@ package java.lang;
|
|||
*
|
||||
* @author Brian Jones
|
||||
* @author Warren Levy (warrenl@cygnus.com)
|
||||
* @status updated to 1.4
|
||||
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
|
||||
* @status updated to 1.5
|
||||
*/
|
||||
public class IllegalArgumentException extends RuntimeException
|
||||
{
|
||||
|
@ -72,4 +73,57 @@ public class IllegalArgumentException extends RuntimeException
|
|||
{
|
||||
super(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructs a <code>IllegalArgumentException</code> using
|
||||
* the specified error message, which should give further details
|
||||
* as to the reason for this exception. The specified cause
|
||||
* <code>Throwable</code> may be used to provide additional history,
|
||||
* with regards to the root of the problem. It is perfectly valid
|
||||
* for this to be null, if the cause of the problem is unknown.
|
||||
* </p>
|
||||
* <p>
|
||||
* <strong>Note</strong>: the detail message from the cause is not
|
||||
* automatically incorporated into the resulting detail message of
|
||||
* this exception.
|
||||
* </p>
|
||||
*
|
||||
* @param message the detail message, which should give the reason for
|
||||
* this exception being thrown.
|
||||
* @param cause the cause of this exception, or null if the cause
|
||||
* is unknown.
|
||||
* @since 1.5
|
||||
*/
|
||||
public IllegalArgumentException(String message, Throwable cause)
|
||||
{
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructs a <code>IllegalArgumentException</code> using
|
||||
* the specified cause <code>Throwable</code>, which may be used
|
||||
* to provide additional history, with regards to the root of the
|
||||
* problem. It is perfectly valid for this to be null, if the
|
||||
* cause of the problem is unknown.
|
||||
* </p>
|
||||
* <p>
|
||||
* The detail message is automatically constructed from the detail
|
||||
* message of the supplied causal exception. If the cause is null,
|
||||
* then the detail message will also be null. Otherwise, the detail
|
||||
* message of this exception will be that of the causal exception.
|
||||
* This makes this constructor very useful for simply wrapping another
|
||||
* exception.
|
||||
* </p>
|
||||
*
|
||||
* @param cause the cause of this exception, or null if the cause
|
||||
* is unknown.
|
||||
* @since 1.5
|
||||
*/
|
||||
public IllegalArgumentException(Throwable cause)
|
||||
{
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -51,8 +51,9 @@ package java.lang;
|
|||
*
|
||||
* @author Brian Jones
|
||||
* @author Warren Levy (warrenl@cygnus.com)
|
||||
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
|
||||
* @since 1.1
|
||||
* @status updated to 1.4
|
||||
* @status updated to 1.5
|
||||
*/
|
||||
public class IllegalStateException extends RuntimeException
|
||||
{
|
||||
|
@ -77,4 +78,58 @@ public class IllegalStateException extends RuntimeException
|
|||
{
|
||||
super(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructs a <code>IllegalStateException</code> using
|
||||
* the specified error message, which should give further details
|
||||
* as to the reason for this exception. The specified cause
|
||||
* <code>Throwable</code> may be used to provide additional history,
|
||||
* with regards to the root of the problem. It is perfectly valid
|
||||
* for this to be null, if the cause of the problem is unknown.
|
||||
* </p>
|
||||
* <p>
|
||||
* <strong>Note</strong>: the detail message from the cause is not
|
||||
* automatically incorporated into the resulting detail message of
|
||||
* this exception.
|
||||
* </p>
|
||||
*
|
||||
* @param message the detail message, which should give the reason for
|
||||
* this exception being thrown.
|
||||
* @param cause the cause of this exception, or null if the cause
|
||||
* is unknown.
|
||||
* @since 1.5
|
||||
*/
|
||||
public IllegalStateException(String message, Throwable cause)
|
||||
{
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructs a <code>IllegalStateException</code> using
|
||||
* the specified cause <code>Throwable</code>, which may be used
|
||||
* to provide additional history, with regards to the root of the
|
||||
* problem. It is perfectly valid for this to be null, if the
|
||||
* cause of the problem is unknown.
|
||||
* </p>
|
||||
* <p>
|
||||
* The detail message is automatically constructed from the detail
|
||||
* message of the supplied causal exception. If the cause is null,
|
||||
* then the detail message will also be null. Otherwise, the detail
|
||||
* message of this exception will be that of the causal exception.
|
||||
* This makes this constructor very useful for simply wrapping another
|
||||
* exception.
|
||||
* </p>
|
||||
*
|
||||
* @param cause the cause of this exception, or null if the cause
|
||||
* is unknown.
|
||||
* @since 1.5
|
||||
*/
|
||||
public IllegalStateException(Throwable cause)
|
||||
{
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -718,12 +718,12 @@ public final class Integer extends Number implements Comparable
|
|||
int len = str.length();
|
||||
boolean isNeg = false;
|
||||
if (len == 0)
|
||||
throw new NumberFormatException();
|
||||
throw new NumberFormatException("string length is null");
|
||||
int ch = str.charAt(index);
|
||||
if (ch == '-')
|
||||
{
|
||||
if (len == 1)
|
||||
throw new NumberFormatException();
|
||||
throw new NumberFormatException("pure '-'");
|
||||
isNeg = true;
|
||||
ch = str.charAt(++index);
|
||||
}
|
||||
|
@ -748,7 +748,7 @@ public final class Integer extends Number implements Comparable
|
|||
}
|
||||
}
|
||||
if (index == len)
|
||||
throw new NumberFormatException();
|
||||
throw new NumberFormatException("non terminated number: " + str);
|
||||
|
||||
int max = MAX_VALUE / radix;
|
||||
// We can't directly write `max = (MAX_VALUE + 1) / radix'.
|
||||
|
@ -760,12 +760,12 @@ public final class Integer extends Number implements Comparable
|
|||
while (index < len)
|
||||
{
|
||||
if (val < 0 || val > max)
|
||||
throw new NumberFormatException();
|
||||
throw new NumberFormatException("number overflow (pos=" + index + ") : " + str);
|
||||
|
||||
ch = Character.digit(str.charAt(index++), radix);
|
||||
val = val * radix + ch;
|
||||
if (ch < 0 || (val < 0 && (! isNeg || val != MIN_VALUE)))
|
||||
throw new NumberFormatException();
|
||||
throw new NumberFormatException("invalid character at position " + index + " in " + str);
|
||||
}
|
||||
return isNeg ? -val : val;
|
||||
}
|
||||
|
|
|
@ -45,8 +45,9 @@ package java.lang;
|
|||
*
|
||||
* @author Brian Jones
|
||||
* @author Warren Levy (warrenl@cygnus.com)
|
||||
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
|
||||
* @see SecurityManager
|
||||
* @status updated to 1.4
|
||||
* @status updated to 1.5
|
||||
*/
|
||||
public class SecurityException extends RuntimeException
|
||||
{
|
||||
|
@ -71,4 +72,57 @@ public class SecurityException extends RuntimeException
|
|||
{
|
||||
super(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructs a <code>SecurityException</code> using
|
||||
* the specified error message, which should give further details
|
||||
* as to the reason for this exception. The specified cause
|
||||
* <code>Throwable</code> may be used to provide additional history,
|
||||
* with regards to the root of the problem. It is perfectly valid
|
||||
* for this to be null, if the cause of the problem is unknown.
|
||||
* </p>
|
||||
* <p>
|
||||
* <strong>Note</strong>: the detail message from the cause is not
|
||||
* automatically incorporated into the resulting detail message of
|
||||
* this exception.
|
||||
* </p>
|
||||
*
|
||||
* @param message the detail message, which should give the reason for
|
||||
* this exception being thrown.
|
||||
* @param cause the cause of this exception, or null if the cause
|
||||
* is unknown.
|
||||
* @since 1.5
|
||||
*/
|
||||
public SecurityException(String message, Throwable cause)
|
||||
{
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructs a <code>SecurityException</code> using
|
||||
* the specified cause <code>Throwable</code>, which may be used
|
||||
* to provide additional history, with regards to the root of the
|
||||
* problem. It is perfectly valid for this to be null, if the
|
||||
* cause of the problem is unknown.
|
||||
* </p>
|
||||
* <p>
|
||||
* The detail message is automatically constructed from the detail
|
||||
* message of the supplied causal exception. If the cause is null,
|
||||
* then the detail message will also be null. Otherwise, the detail
|
||||
* message of this exception will be that of the causal exception.
|
||||
* This makes this constructor very useful for simply wrapping another
|
||||
* exception.
|
||||
* </p>
|
||||
*
|
||||
* @param cause the cause of this exception, or null if the cause
|
||||
* is unknown.
|
||||
* @since 1.5
|
||||
*/
|
||||
public SecurityException(Throwable cause)
|
||||
{
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -44,8 +44,9 @@ package java.lang;
|
|||
* requested of it that it does not support.
|
||||
*
|
||||
* @author Warren Levy (warrenl@cygnus.com)
|
||||
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
|
||||
* @since 1.2
|
||||
* @status updated to 1.4
|
||||
* @status updated to 1.5
|
||||
*/
|
||||
public class UnsupportedOperationException extends RuntimeException
|
||||
{
|
||||
|
@ -70,4 +71,57 @@ public class UnsupportedOperationException extends RuntimeException
|
|||
{
|
||||
super(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructs a <code>UnsupportedOperationException</code> using
|
||||
* the specified error message, which should give further details
|
||||
* as to the reason for this exception. The specified cause
|
||||
* <code>Throwable</code> may be used to provide additional history,
|
||||
* with regards to the root of the problem. It is perfectly valid
|
||||
* for this to be null, if the cause of the problem is unknown.
|
||||
* </p>
|
||||
* <p>
|
||||
* <strong>Note</strong>: the detail message from the cause is not
|
||||
* automatically incorporated into the resulting detail message of
|
||||
* this exception.
|
||||
* </p>
|
||||
*
|
||||
* @param message the detail message, which should give the reason for
|
||||
* this exception being thrown.
|
||||
* @param cause the cause of this exception, or null if the cause
|
||||
* is unknown.
|
||||
* @since 1.5
|
||||
*/
|
||||
public UnsupportedOperationException(String message, Throwable cause)
|
||||
{
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructs a <code>UnsupportedOperationException</code> using
|
||||
* the specified cause <code>Throwable</code>, which may be used
|
||||
* to provide additional history, with regards to the root of the
|
||||
* problem. It is perfectly valid for this to be null, if the
|
||||
* cause of the problem is unknown.
|
||||
* </p>
|
||||
* <p>
|
||||
* The detail message is automatically constructed from the detail
|
||||
* message of the supplied causal exception. If the cause is null,
|
||||
* then the detail message will also be null. Otherwise, the detail
|
||||
* message of this exception will be that of the causal exception.
|
||||
* This makes this constructor very useful for simply wrapping another
|
||||
* exception.
|
||||
* </p>
|
||||
*
|
||||
* @param cause the cause of this exception, or null if the cause
|
||||
* is unknown.
|
||||
* @since 1.5
|
||||
*/
|
||||
public UnsupportedOperationException(Throwable cause)
|
||||
{
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -38,7 +38,6 @@ exception statement from your version. */
|
|||
|
||||
package java.lang.reflect;
|
||||
|
||||
import gnu.classpath.Configuration;
|
||||
import gnu.java.lang.reflect.TypeSignature;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
@ -263,16 +262,16 @@ public class Proxy implements Serializable
|
|||
Class clazz = (Class) proxyClasses.get(pt);
|
||||
if (clazz == null)
|
||||
{
|
||||
if (Configuration.HAVE_NATIVE_GET_PROXY_CLASS)
|
||||
clazz = getProxyClass0(loader, interfaces);
|
||||
if (VMProxy.HAVE_NATIVE_GET_PROXY_CLASS)
|
||||
clazz = VMProxy.getProxyClass(loader, interfaces);
|
||||
else
|
||||
{
|
||||
ProxyData data = (Configuration.HAVE_NATIVE_GET_PROXY_DATA
|
||||
? getProxyData0(loader, interfaces)
|
||||
ProxyData data = (VMProxy.HAVE_NATIVE_GET_PROXY_DATA
|
||||
? VMProxy.getProxyData(loader, interfaces)
|
||||
: ProxyData.getProxyData(pt));
|
||||
|
||||
clazz = (Configuration.HAVE_NATIVE_GENERATE_PROXY_CLASS
|
||||
? generateProxyClass0(loader, data)
|
||||
clazz = (VMProxy.HAVE_NATIVE_GENERATE_PROXY_CLASS
|
||||
? VMProxy.generateProxyClass(loader, data)
|
||||
: new ClassFactory(data).generate(loader));
|
||||
}
|
||||
|
||||
|
@ -387,74 +386,6 @@ public class Proxy implements Serializable
|
|||
return ((Proxy) proxy).h;
|
||||
}
|
||||
|
||||
/**
|
||||
* Optional native method to replace (and speed up) the pure Java
|
||||
* implementation of getProxyClass. Only needed if
|
||||
* Configuration.HAVE_NATIVE_GET_PROXY_CLASS is true, this does the
|
||||
* work of both getProxyData0 and generateProxyClass0 with no
|
||||
* intermediate form in Java. The native code may safely assume that
|
||||
* this class must be created, and does not already exist.
|
||||
*
|
||||
* @param loader the class loader to define the proxy class in; null
|
||||
* implies the bootstrap class loader
|
||||
* @param interfaces the interfaces the class will extend
|
||||
* @return the generated proxy class
|
||||
* @throws IllegalArgumentException if the constraints for getProxyClass
|
||||
* were violated, except for problems with null
|
||||
* @throws NullPointerException if `interfaces' is null or contains
|
||||
* a null entry, or if handler is null
|
||||
* @see Configuration#HAVE_NATIVE_GET_PROXY_CLASS
|
||||
* @see #getProxyClass(ClassLoader, Class[])
|
||||
* @see #getProxyData0(ClassLoader, Class[])
|
||||
* @see #generateProxyClass0(ProxyData)
|
||||
*/
|
||||
private static native Class getProxyClass0(ClassLoader loader,
|
||||
Class[] interfaces);
|
||||
|
||||
/**
|
||||
* Optional native method to replace (and speed up) the pure Java
|
||||
* implementation of getProxyData. Only needed if
|
||||
* Configuration.HAVE_NATIVE_GET_PROXY_DATA is true. The native code
|
||||
* may safely assume that a new ProxyData object must be created which
|
||||
* does not duplicate any existing ones.
|
||||
*
|
||||
* @param loader the class loader to define the proxy class in; null
|
||||
* implies the bootstrap class loader
|
||||
* @param interfaces the interfaces the class will extend
|
||||
* @return all data that is required to make this proxy class
|
||||
* @throws IllegalArgumentException if the constraints for getProxyClass
|
||||
* were violated, except for problems with null
|
||||
* @throws NullPointerException if `interfaces' is null or contains
|
||||
* a null entry, or if handler is null
|
||||
* @see Configuration.HAVE_NATIVE_GET_PROXY_DATA
|
||||
* @see #getProxyClass(ClassLoader, Class[])
|
||||
* @see #getProxyClass0(ClassLoader, Class[])
|
||||
* @see ProxyType#getProxyData()
|
||||
*/
|
||||
private static native ProxyData getProxyData0(ClassLoader loader,
|
||||
Class[] interfaces);
|
||||
|
||||
/**
|
||||
* Optional native method to replace (and speed up) the pure Java
|
||||
* implementation of generateProxyClass. Only needed if
|
||||
* Configuration.HAVE_NATIVE_GENERATE_PROXY_CLASS is true. The native
|
||||
* code may safely assume that a new Class must be created, and that
|
||||
* the ProxyData object does not describe any existing class.
|
||||
*
|
||||
* @param loader the class loader to define the proxy class in; null
|
||||
* implies the bootstrap class loader
|
||||
* @param data the struct of information to convert to a Class. This
|
||||
* has already been verified for all problems except exceeding
|
||||
* VM limitations
|
||||
* @return the newly generated class
|
||||
* @throws IllegalArgumentException if VM limitations are exceeded
|
||||
* @see #getProxyClass(ClassLoader, Class[])
|
||||
* @see #getProxyClass0(ClassLoader, Class[])
|
||||
* @see ProxyData#generateProxyClass(ClassLoader)
|
||||
*/
|
||||
private static native Class generateProxyClass0(ClassLoader loader,
|
||||
ProxyData data);
|
||||
|
||||
/**
|
||||
* Helper class for mapping unique ClassLoader and interface combinations
|
||||
* to proxy classes.
|
||||
|
@ -502,49 +433,6 @@ public class Proxy implements Serializable
|
|||
return hash;
|
||||
}
|
||||
|
||||
// A more comprehensive comparison of two arrays,
|
||||
// ignore array element order, and
|
||||
// ignore redundant elements
|
||||
private static boolean sameTypes(Class arr1[], Class arr2[]) {
|
||||
if (arr1.length == 1 && arr2.length == 1) {
|
||||
return arr1[0] == arr2[0];
|
||||
}
|
||||
|
||||
// total occurrance of elements of arr1 in arr2
|
||||
int total_occ_of_arr1_in_arr2 = 0;
|
||||
each_type:
|
||||
for (int i = arr1.length; --i >= 0; )
|
||||
{
|
||||
Class t = arr1[i];
|
||||
for (int j = i; --j >= 0; )
|
||||
{
|
||||
if (t == arr1[j])
|
||||
{ //found duplicate type
|
||||
continue each_type;
|
||||
}
|
||||
}
|
||||
|
||||
// count c(a unique element of arr1)'s
|
||||
// occurrences in arr2
|
||||
int occ_in_arr2 = 0;
|
||||
for (int j = arr2.length; --j >= 0; )
|
||||
{
|
||||
if (t == arr2[j])
|
||||
{
|
||||
++occ_in_arr2;
|
||||
}
|
||||
}
|
||||
if (occ_in_arr2 == 0)
|
||||
{ // t does not occur in arr2
|
||||
return false;
|
||||
}
|
||||
|
||||
total_occ_of_arr1_in_arr2 += occ_in_arr2;
|
||||
}
|
||||
// now, each element of arr2 must have been visited
|
||||
return total_occ_of_arr1_in_arr2 == arr2.length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates equality.
|
||||
*
|
||||
|
@ -556,7 +444,10 @@ public class Proxy implements Serializable
|
|||
ProxyType pt = (ProxyType) other;
|
||||
if (loader != pt.loader || interfaces.length != pt.interfaces.length)
|
||||
return false;
|
||||
return sameTypes(interfaces, pt.interfaces);
|
||||
for (int i = 0; i < interfaces.length; i++)
|
||||
if (interfaces[i] != pt.interfaces[i])
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
} // class ProxyType
|
||||
|
||||
|
@ -720,7 +611,7 @@ public class Proxy implements Serializable
|
|||
*
|
||||
* @author Eric Blake (ebb9@email.byu.edu)
|
||||
*/
|
||||
private static final class ProxyData
|
||||
static final class ProxyData
|
||||
{
|
||||
/**
|
||||
* The package this class is in <b>including the trailing dot</b>
|
||||
|
@ -876,7 +767,6 @@ public class Proxy implements Serializable
|
|||
private static final class ClassFactory
|
||||
{
|
||||
/** Constants for assisting the compilation */
|
||||
private static final byte POOL = 0;
|
||||
private static final byte FIELD = 1;
|
||||
private static final byte METHOD = 2;
|
||||
private static final byte INTERFACE = 3;
|
||||
|
@ -909,7 +799,6 @@ public class Proxy implements Serializable
|
|||
private static final char GETFIELD = 180;
|
||||
private static final char INVOKEVIRTUAL = 182;
|
||||
private static final char INVOKESPECIAL = 183;
|
||||
private static final char INVOKESTATIC = 184;
|
||||
private static final char INVOKEINTERFACE = 185;
|
||||
private static final char NEW = 187;
|
||||
private static final char ANEWARRAY = 189;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue