? XOE_1.0 ? XOE_1.0.tgz ? kev.alt ? libraries/clib/awt/qt/.deps ? libraries/clib/awt/qt/.libs ? libraries/clib/awt/qt/Makefile ? libraries/clib/awt/qt/cbd.lo ? libraries/clib/awt/qt/clr.lo ? libraries/clib/awt/qt/evt.lo ? libraries/clib/awt/qt/evt.moc.cc ? libraries/clib/awt/qt/evt.moc.lo ? libraries/clib/awt/qt/fnt.lo ? libraries/clib/awt/qt/gra.lo ? libraries/clib/awt/qt/img.lo ? libraries/clib/awt/qt/libawt.la ? libraries/clib/awt/qt/tlk.lo ? libraries/clib/awt/qt/wnd.lo ? libraries/extensions/sound/Makefile ? libraries/extensions/sound/common/.deps ? libraries/extensions/sound/common/.libs ? libraries/extensions/sound/common/common.lo ? libraries/extensions/sound/common/libtritonuscommon.la ? replace/.deps ? replace/.libs ? replace/Makefile ? replace/getifaddrs.lo ? replace/libreplace.la ? test/regression/serializedFoos.bin Index: libraries/javalib/java/lang/Class.java =================================================================== RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/lang/Class.java,v retrieving revision 1.39 diff -u -u -r1.39 Class.java --- libraries/javalib/java/lang/Class.java 24 Jan 2003 00:07:32 -0000 1.39 +++ libraries/javalib/java/lang/Class.java 11 May 2003 16:45:22 -0000 @@ -3,6 +3,7 @@ * * Copyright (c) 1997, 1998 * Transvirtual Technologies, Inc. All rights reserved. + * Portions Copyright (C) 1998, 2002 Free Software Foundation * * See the file "license.terms" for information on usage and redistribution * of this file. @@ -491,5 +492,81 @@ } return null; } +} + +/** + * Returns the desired assertion status of this class, if it were to be + * initialized at this moment. The class assertion status, if set, is + * returned; the backup is the default package status; then if there is + * a class loader, that default is returned; and finally the system default + * is returned. This method seldom needs calling in user code, but exists + * for compilers to implement the assert statement. Note that there is no + * guarantee that the result of this method matches the class's actual + * assertion status. + * + * @return the desired assertion status + * @see ClassLoader#setClassAssertionStatus(String, boolean) + * @see ClassLoader#setPackageAssertionStatus(String, boolean) + * @see ClassLoader#setDefaultAssertionStatus(boolean) + * @since 1.4 + */ +public boolean desiredAssertionStatus() { + ClassLoader c = getClassLoader(); + Object status; + if (c == null) + return ClassLoader.systemDefaultAssertionStatus; + if (c.classAssertionStatus != null) { + synchronized (c) { + status = c.classAssertionStatus.get(getName()); + if (status != null) + return status.equals(Boolean.TRUE); + } + } else { + status = ClassLoader.systemClassAssertionStatus.get(getName()); + if (status != null) + return status.equals(Boolean.TRUE); + } + if (c.packageAssertionStatus != null) { + synchronized (c) { + String name = getPackagePortion(getName()); + if ("".equals(name)) + status = c.packageAssertionStatus.get(null); + else { + do { + status = c.packageAssertionStatus.get(name); + name = getPackagePortion(name); + } while (! "".equals(name) && status == null); + } + if (status != null) + return status.equals(Boolean.TRUE); + } + } else { + String name = getPackagePortion(getName()); + if ("".equals(name)) + status = ClassLoader.systemPackageAssertionStatus.get(null); + else { + do { + status = ClassLoader.systemPackageAssertionStatus.get(name); + name = getPackagePortion(name); + } while (! "".equals(name) && status == null); + } + if (status != null) + return status.equals(Boolean.TRUE); + } + return c.defaultAssertionStatus; +} + +/** + * Strip the last portion of the name (after the last dot). + * + * @param name the name to get package of + * @return the package name, or "" if no package + */ +private static String getPackagePortion(String name) +{ + int lastInd = name.lastIndexOf('.'); + if (lastInd == -1) + return ""; + return name.substring(0, lastInd); } } Index: libraries/javalib/java/lang/ClassLoader.java =================================================================== RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/lang/ClassLoader.java,v retrieving revision 1.27 diff -u -u -r1.27 ClassLoader.java --- libraries/javalib/java/lang/ClassLoader.java 4 Sep 2002 16:08:13 -0000 1.27 +++ libraries/javalib/java/lang/ClassLoader.java 11 May 2003 16:45:23 -0000 @@ -3,6 +3,7 @@ * * Copyright (c) 1997, 1998 * Transvirtual Technologies, Inc. All rights reserved. + * Portions Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file. @@ -16,7 +17,9 @@ import java.security.ProtectionDomain; import java.util.Enumeration; import java.util.HashSet; +import java.util.HashMap; import java.util.Hashtable; +import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; import java.util.Vector; @@ -52,6 +55,54 @@ */ private final Hashtable protectionDomains = new Hashtable(); +/** + * The command-line state of the default assertion status overrides. + */ +// Package visible for use by Class. +// XXX should be set from command line +static final boolean systemDefaultAssertionStatus = true; + +/** + * The desired assertion status of classes loaded by this loader, if not + * overridden by package or class instructions. + */ +// Package visible for use by Class. +boolean defaultAssertionStatus = systemDefaultAssertionStatus; + +/** + * The command-line state of the package assertion status overrides. This + * map is never modified, so it does not need to be synchronized. + */ +// Package visible for use by Class. +// XXX should be set from command line +static final Map systemPackageAssertionStatus = new HashMap(); + +/** + * The map of package assertion status overrides, or null if no package + * overrides have been specified yet. The values of the map should be + * Boolean.TRUE or Boolean.FALSE, and the unnamed package is represented + * by the null key. This map must be synchronized on this instance. + */ +// Package visible for use by Class. +Map packageAssertionStatus; + +/** + * The command-line state of the class assertion status overrides. This + * map is never modified, so it does not need to be synchronized. + */ +// Package visible for use by Class. +// XXX should be set from command line +static final Map systemClassAssertionStatus = new HashMap(); + +/** + * The map of class assertion status overrides, or null if no class + * overrides have been specified yet. The values of the map should be + * Boolean.TRUE or Boolean.FALSE. This map must be synchronized on this + * instance. + */ +// Package visible for use by Class. +Map classAssertionStatus; + private ProtectionDomain defaultProtectionDomain; private final ClassLoader parent; @@ -309,4 +360,77 @@ private native Class defineClass0(String name, byte data[], int off, int len); private native void resolveClass0(Class cls); +/** + * Set the default assertion status for classes loaded by this classloader, + * used unless overridden by a package or class request. + * + * @param enabled true to set the default to enabled + * @see #setClassAssertionStatus(String, boolean) + * @see #setPackageAssertionStatus(String, boolean) + * @see #clearAssertionStatus() + * @since 1.4 + */ +public void setDefaultAssertionStatus(boolean enabled) +{ + defaultAssertionStatus = enabled; +} + +/** + * Set the default assertion status for packages, used unless overridden + * by a class request. This default also covers subpackages, unless they + * are also specified. The unnamed package should use null for the name. + * + * @param name the package (and subpackages) to affect + * @param enabled true to set the default to enabled + * @see #setDefaultAssertionStatus(String, boolean) + * @see #setClassAssertionStatus(String, boolean) + * @see #clearAssertionStatus() + * @since 1.4 + */ +public synchronized void setPackageAssertionStatus(String name, + boolean enabled) +{ + if (packageAssertionStatus == null) + packageAssertionStatus + = new HashMap(systemPackageAssertionStatus); + packageAssertionStatus.put(name, enabled ? Boolean.TRUE : Boolean.FALSE); +} + +/** + * Set the default assertion status for a class. This only affects the + * status of top-level classes, any other string is harmless. + * + * @param name the class to affect + * @param enabled true to set the default to enabled + * @throws NullPointerException if name is null + * @see #setDefaultAssertionStatus(String, boolean) + * @see #setPackageAssertionStatus(String, boolean) + * @see #clearAssertionStatus() + * @since 1.4 + */ +public synchronized void setClassAssertionStatus(String name, + boolean enabled) +{ + if (classAssertionStatus == null) + classAssertionStatus = new HashMap(systemClassAssertionStatus); + // The toString() hack catches null, as required. + classAssertionStatus.put(name.toString(), enabled ? Boolean.TRUE : Boolean.FALSE); +} + +/** + * Resets the default assertion status of this classloader, its packages + * and classes, all to false. This allows overriding defaults inherited + * from the command line. + * + * @see #setDefaultAssertionStatus(boolean) + * @see #setClassAssertionStatus(String, boolean) + * @see #setPackageAssertionStatus(String, boolean) + * @since 1.4 + */ +public synchronized void clearAssertionStatus() +{ + defaultAssertionStatus = false; + packageAssertionStatus = new HashMap(); + classAssertionStatus = new HashMap(); +} }