aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang/Class.java
diff options
context:
space:
mode:
authorTom Tromey <tromey@gcc.gnu.org>1999-04-07 14:42:40 +0000
committerTom Tromey <tromey@gcc.gnu.org>1999-04-07 14:42:40 +0000
commitee9dd3721be68b9fa63dea9aa5a1d86e66958cde (patch)
treed96801a16fdf03a5682ef98730fe333a46eef944 /libjava/java/lang/Class.java
parent140fa895c6b859f827fc4437b91775a82cd105fb (diff)
downloadgcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.zip
gcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.tar.gz
gcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.tar.bz2
Initial revision
From-SVN: r26263
Diffstat (limited to 'libjava/java/lang/Class.java')
-rw-r--r--libjava/java/lang/Class.java155
1 files changed, 155 insertions, 0 deletions
diff --git a/libjava/java/lang/Class.java b/libjava/java/lang/Class.java
new file mode 100644
index 0000000..4ffccea
--- /dev/null
+++ b/libjava/java/lang/Class.java
@@ -0,0 +1,155 @@
+// Class.java - Representation of a Java class.
+
+/* Copyright (C) 1998, 1999 Cygnus Solutions
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+package java.lang;
+import java.io.Serializable;
+import java.io.InputStream;
+import java.lang.reflect.*;
+
+/**
+ * @author Tom Tromey <tromey@cygnus.com>
+ * @date October 1, 1998
+ */
+
+/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+ * "The Java Language Specification", ISBN 0-201-63451-1
+ * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+ * plus gcj compiler sources (to determine object layout)
+ * Status: Sufficient for our purposes, but some methods missing
+ * and some not implemented.
+ */
+
+public final class Class implements Serializable
+{
+ public static native Class forName (String className)
+ throws ClassNotFoundException;
+ public native Class[] getClasses ();
+ public native ClassLoader getClassLoader ();
+ public native Class getComponentType ();
+
+ public native Constructor getConstructor (Class[] parameterTypes)
+ throws NoSuchMethodException, SecurityException;
+ public native Constructor[] getConstructors () throws SecurityException;
+
+ public native Class[] getDeclaredClasses () throws SecurityException;
+
+ public native Constructor getDeclaredConstructor (Class[] parameterTypes)
+ throws NoSuchMethodException, SecurityException;
+ public native Constructor[] getDeclaredConstructors ()
+ throws SecurityException;
+ public native Field getDeclaredField (String fieldName)
+ throws NoSuchFieldException, SecurityException;
+ public native Field[] getDeclaredFields () throws SecurityException;
+ public native Method getDeclaredMethod (String methodName,
+ Class[] parameterTypes)
+ throws NoSuchMethodException, SecurityException;
+ public native Method[] getDeclaredMethods () throws SecurityException;
+
+ // This is marked as unimplemented in the JCL book.
+ public native Class getDeclaringClass ();
+
+ private native Field getField (String fieldName, int hash)
+ throws NoSuchFieldException, SecurityException;
+
+ public Field getField (String fieldName)
+ throws NoSuchFieldException, SecurityException
+ {
+ SecurityManager s = System.getSecurityManager();
+ if (s != null)
+ s.checkMemberAccess (this, java.lang.reflect.Member.DECLARED);
+ Field fld = getField(fieldName, fieldName.hashCode());
+ if (fld == null)
+ throw new NoSuchFieldException(fieldName);
+ return fld;
+ }
+ public native Field[] getFields () throws SecurityException;
+
+ public native Class[] getInterfaces ();
+
+ public native Method getMethod (String methodName, Class[] parameterTypes)
+ throws NoSuchMethodException, SecurityException;
+ public native Method[] getMethods () throws SecurityException;
+
+ public native int getModifiers ();
+ public native String getName ();
+
+ // FIXME: can't implement this until we have java.net.
+ // public URL getResource (String resourceName);
+
+ // FIXME: implement.
+ public InputStream getResourceAsStream (String resourceName)
+ {
+ return null;
+ }
+
+ // FIXME: implement. Requires java.security.
+ public Object[] getSigners ()
+ {
+ return null;
+ }
+
+ public native Class getSuperclass ();
+ public native boolean isArray ();
+ public native boolean isAssignableFrom (Class cls);
+ public native boolean isInstance (Object obj);
+ public native boolean isInterface ();
+ public native boolean isPrimitive ();
+ public native Object newInstance ()
+ throws InstantiationException, IllegalAccessException;
+
+ public String toString ()
+ {
+ if (isPrimitive ())
+ return getName ();
+ return (isInterface () ? "interface " : "class ") + getName ();
+ }
+
+ // Don't allow new classes to be made.
+ private Class ()
+ {
+ }
+
+ // Do a security check.
+ private void checkMemberAccess (int flags)
+ {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkMemberAccess(this, flags);
+ }
+
+ // FIXME: this method exists only because we cannot catch Java
+ // exceptions from C++ code. This is a helper for initializeClass.
+ private Throwable hackTrampoline (int what, Throwable old_exception)
+ {
+ Throwable new_val = null;
+ try
+ {
+ if (what == 0)
+ initializeClass ();
+ else if (what == 1)
+ hackRunInitializers ();
+ else if (what == 2)
+ new_val = new ExceptionInInitializerError (old_exception);
+ }
+ catch (Throwable t)
+ {
+ new_val = t;
+ }
+ return new_val;
+ }
+
+ // FIXME: this is a hack to let us run the class initializers. We
+ // could do it inline in initializeClass() if we could catch Java
+ // exceptions from C++.
+ private native void hackRunInitializers ();
+
+ // Initialize the class.
+ private native void initializeClass ();
+}