Jumbo patch:
* Imported beans and serialization * Updated IA-64 port * Miscellaneous bug fixes From-SVN: r34028
This commit is contained in:
parent
021c89ed68
commit
6c80c45e30
125 changed files with 18458 additions and 560 deletions
|
@ -1,3 +1,489 @@
|
||||||
|
2000-05-16 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* sysdep/ia64.c (ia64_backtrace_helper): Pass NULL pointer to
|
||||||
|
build_ia64_frame_state.
|
||||||
|
* sysdep/ia64-frame.h (build_ia64_frame_state): Match with
|
||||||
|
defintion in gcc.
|
||||||
|
|
||||||
|
2000-05-15 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* gnu/gcj/beans/BeanInfoEmbryo.java: Removed.
|
||||||
|
* gnu/gcj/beans/EmptyBeanInfo.java: Removed.
|
||||||
|
* gnu/gcj/beans/ExplicitBeanInfo.java: Removed.
|
||||||
|
* gnu/gcj/beans/IntrospectionIncubator.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/ColorEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/FontEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/NativeBooleanEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/NativeByteEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/NativeDoubleEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/NativeFloatEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/NativeIntEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/NativeLongEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/NativeShortEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/editors/StringEditor.java: Removed.
|
||||||
|
* gnu/gcj/beans/info/ComponentBeanInfo.java: Removed.
|
||||||
|
* gnu/gcj/io/ClassLoaderObjectInputStream.java: Removed.
|
||||||
|
* gnu/gcj/io/NullOutputStream.java: Removed.
|
||||||
|
* gnu/gcj/io/ObjectIdentityWrapper.java: Removed.
|
||||||
|
* gnu/gcj/lang/ArrayHelper.java: Removed.
|
||||||
|
* gnu/gcj/lang/ClassHelper.java: Removed.
|
||||||
|
* gnu/gcj/lang/reflect/TypeSignature.java: Removed.
|
||||||
|
|
||||||
|
* gnu/java/beans/BeanInfoEmbryo.java: New file.
|
||||||
|
* gnu/java/beans/EmptyBeanInfo.java: New file.
|
||||||
|
* gnu/java/beans/ExplicitBeanInfo.java: New file.
|
||||||
|
* gnu/java/beans/IntrospectionIncubator.java: New file.
|
||||||
|
* gnu/java/beans/editors/ColorEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/FontEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/NativeBooleanEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/NativeByteEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/NativeDoubleEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/NativeFloatEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/NativeIntEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/NativeLongEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/NativeShortEditor.java: New file.
|
||||||
|
* gnu/java/beans/editors/StringEditor.java: New file.
|
||||||
|
* gnu/java/beans/info/ComponentBeanInfo.java: New file.
|
||||||
|
* gnu/java/io/ClassLoaderObjectInputStream.java: New file.
|
||||||
|
* gnu/java/io/NullOutputStream.java: New file.
|
||||||
|
* gnu/java/io/ObjectIdentityWrapper.java: New file.
|
||||||
|
* gnu/java/lang/ArrayHelper.java: New file.
|
||||||
|
* gnu/java/lang/ClassHelper.java: New file.
|
||||||
|
* gnu/java/lang/reflect/TypeSignature.java: New file.
|
||||||
|
|
||||||
|
* Makefile.am: Updated for moving Classpath files from gnu/gcj
|
||||||
|
namespace back to the original Classpath gnu/java namespace.
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
|
||||||
|
* java/beans/Beans.java: Namespace change.
|
||||||
|
* java/beans/EventSetDescriptor.java: Namespace change.
|
||||||
|
* java/beans/Introspector.java: Namespace change.
|
||||||
|
* java/beans/PropertyEditorManager.java: Namespace change.
|
||||||
|
* java/io/ObjectInputStream.java: Namespace change.
|
||||||
|
* java/io/ObjectOutputStream.java: Namespace change.
|
||||||
|
* java/io/ObjectStreamClass.java: Namespace change.
|
||||||
|
* java/io/ObjectStreamField.java: Namespace change.
|
||||||
|
|
||||||
|
2000-04-21 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* java/io/ObjectInputStream.java: Reverted workarounds of 2000-04-13
|
||||||
|
now that compiler patch is available.
|
||||||
|
Removed unneeded System.loadLibrary.
|
||||||
|
* java/io/ObjectOutputStream.java: Removed unneeded System.loadLibrary.
|
||||||
|
* java/io/ObjectStreamClass.java: Removed unneeded System.loadLibrary.
|
||||||
|
|
||||||
|
2000-04-19 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* java/lang/natClass.cc (_Jv_IsAssignableFrom): Make sure source
|
||||||
|
and target classes have been initialized.
|
||||||
|
|
||||||
|
2000-04-19 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* java/lang/String.java: implement Serializable, Comparable.
|
||||||
|
(compareTo (Object)): New method.
|
||||||
|
|
||||||
|
2000-04-19 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* java/io/ObjectStreamClass.java (getDefinedSUID): Use getDeclaredField
|
||||||
|
instead of getField to retrieve non-public field.
|
||||||
|
(getSerialPersistantFields): Ditto.
|
||||||
|
|
||||||
|
2000-04-18 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* mauve-libgcj: Turned off object serialization tests temporarily
|
||||||
|
due to compiler error.
|
||||||
|
|
||||||
|
2000-04-17 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* java/io/ObjectInputStream.java (DEBUG): Disabled unused method
|
||||||
|
to avoid build problem.
|
||||||
|
(DEBUGln): Ditto.
|
||||||
|
* mauve-libgcj: Turned on object serialization tests.
|
||||||
|
|
||||||
|
2000-04-17 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* libgcj.spec.in (*lib): Added -lgcjawt.
|
||||||
|
|
||||||
|
2000-04-17 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.am: Add new files:
|
||||||
|
gnu/gcj/io/SimpleSHSStream.java, gnu/gcj/io/natSimpleSHSStream.cc,
|
||||||
|
gnu/gcj/io/shs.cc.
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
|
||||||
|
* java/lang/natClass.cc (_Jv_IsAssignableFrom): Check for an
|
||||||
|
interface that has no implementations.
|
||||||
|
Check for an attempt to assign an abstract class to an interface.
|
||||||
|
|
||||||
|
* java/io/ObjectStreamClass.java (setUID): Use a SimpleSHSStream
|
||||||
|
if we fail to find MessageDigest.getInstance ("SHA").
|
||||||
|
|
||||||
|
* gnu/gcj/io/SimpleSHSStream.java: New file.
|
||||||
|
* gnu/gcj/io/natSimpleSHSStream.java: New file.
|
||||||
|
* gnu/gcj/io/shs.cc: New file.
|
||||||
|
* gnu/gcj/io/shs.h: new file.
|
||||||
|
|
||||||
|
* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Make arrays
|
||||||
|
serializable.
|
||||||
|
|
||||||
|
* gnu/gcj/lang/reflect/TypeSignature.java: Don't remove
|
||||||
|
punctuation from the classname of an array element.
|
||||||
|
|
||||||
|
* gcj/javaprims.h: Add SimpleDigestStream.
|
||||||
|
|
||||||
|
2000-04-17 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* java/lang/natClass.cc (getPrivateField): Make recursive calls
|
||||||
|
to getPrivateField for superclasses.
|
||||||
|
|
||||||
|
2000-04-14 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.am: Add new files:
|
||||||
|
java/io/ObjectOutputStream$PutField.h,
|
||||||
|
java/io/ObjectInputStream$GetField.h,java/io/natObjectInputStream.cc,
|
||||||
|
java/io/natObjectOutputStream.cc
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
* gcj/Makefile.in: Rebuilt.
|
||||||
|
* include/Makefile.in: Rebuilt.
|
||||||
|
* java/lang/Class.h (getPrivateField): New method.
|
||||||
|
(getPrivateMethod): Ditto.
|
||||||
|
Make java::io::ObjectOutputStream, java::io::ObjectInputStream,
|
||||||
|
and java::io::ObjectStreamClass our friends.
|
||||||
|
* java/lang/natClass.cc (getPrivateField): New method.
|
||||||
|
(getPrivateMethod): Ditto.
|
||||||
|
(_Jv_IsAssignableFrom): Return false for Interface with no IDT.
|
||||||
|
* gcj/javaprims.h: Add serialization classes.
|
||||||
|
* java/io/ObjectInputStream.java (setBooleanField): Rewrite in Java.
|
||||||
|
(setByteField): Ditto.
|
||||||
|
(setCharField): Ditto.
|
||||||
|
(setDoubleField): Ditto.
|
||||||
|
(setFloatField): Ditto.
|
||||||
|
(setIntField): Ditto.
|
||||||
|
(setLongField): Ditto.
|
||||||
|
(setShortField): Ditto.
|
||||||
|
(setObjectField): Ditto.
|
||||||
|
* java/io/ObjectOutputStream.java: (getBooleanField): Rewrite in
|
||||||
|
Java.
|
||||||
|
(getByteField): Ditto.
|
||||||
|
(getCharField): Ditto.
|
||||||
|
(getDoubleField): Ditto.
|
||||||
|
(getFloatField): Ditto.
|
||||||
|
(getIntField): Ditto.
|
||||||
|
(getLongField): Ditto.
|
||||||
|
(getShortField): Ditto.
|
||||||
|
(getObjectField): Ditto.
|
||||||
|
* java/io/ObjectStreamClass.java (hasClassInitializer): Rewrite in
|
||||||
|
Java.
|
||||||
|
(getSerialPersistantFields): Ditto.
|
||||||
|
(getDefinedSUID): Ditto.
|
||||||
|
* java/io/natObjectOutputStream.cc: New file.
|
||||||
|
* java/io/natObjectInputStream.cc: New file.
|
||||||
|
|
||||||
|
2000-04-13 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* java/io/ObjectInputStream.java: Temporary workarounds for compiler
|
||||||
|
problems. Revert to previous version to reproduce and when fixed.
|
||||||
|
|
||||||
|
2000-04-13 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* gnu/gcj/io/ClassLoaderObjectInputStream.java: New file.
|
||||||
|
* gnu/gcj/io/NullOutputStream.java: New file.
|
||||||
|
* gnu/gcj/lang/reflect/TypeSignature.java: New file.
|
||||||
|
* java/io/BlockDataException.java: New file.
|
||||||
|
* java/io/Externalizable.java: New file.
|
||||||
|
* java/io/InvalidClassException.java: New file.
|
||||||
|
* java/io/InvalidObjectException.java: New file.
|
||||||
|
* java/io/NotActiveException.java: New file.
|
||||||
|
* java/io/NotSerializableException.java: New file.
|
||||||
|
* java/io/ObjectInput.java: New file.
|
||||||
|
* java/io/ObjectInputStream.java: New file.
|
||||||
|
* java/io/ObjectInputValidation.java: New file.
|
||||||
|
* java/io/ObjectOutput.java: New file.
|
||||||
|
* java/io/ObjectOutputStream.java: New file.
|
||||||
|
* java/io/ObjectStreamClass.java: New file.
|
||||||
|
* java/io/ObjectStreamConstants.java: New file.
|
||||||
|
* java/io/ObjectStreamField.java: New file.
|
||||||
|
* java/io/Replaceable.java: New file.
|
||||||
|
* java/io/Resolvable.java: New file.
|
||||||
|
* java/io/SerializablePermission.java: New file.
|
||||||
|
* java/io/WriteAbortedException.java: New file.
|
||||||
|
* java/security/BasicPermission.java: New file.
|
||||||
|
* java/security/DigestOutputStream.java: New file.
|
||||||
|
* java/security/Guard.java: New file.
|
||||||
|
* java/security/Permission.java: New file.
|
||||||
|
* java/security/PermissionCollection.java: New file.
|
||||||
|
* Makefile.am: Added above files.
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
|
||||||
|
* java/beans/Beans.java (instantiate): Activated serialization code.
|
||||||
|
* java/lang/SecurityManager.java (checkPermission): New method.
|
||||||
|
|
||||||
|
2000-04-12 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* gnu/gcj/beans/BeanInfoEmbryo.java: New file.
|
||||||
|
* gnu/gcj/beans/EmptyBeanInfo.java: New file.
|
||||||
|
* gnu/gcj/beans/ExplicitBeanInfo.java: New file.
|
||||||
|
* gnu/gcj/beans/IntrospectionIncubator.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/ColorEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/FontEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/NativeBooleanEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/NativeByteEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/NativeDoubleEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/NativeFloatEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/NativeIntEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/NativeLongEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/NativeShortEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/editors/StringEditor.java: New file.
|
||||||
|
* gnu/gcj/beans/info/ComponentBeanInfo.java: New file.
|
||||||
|
* gnu/gcj/io/ObjectIdentityWrapper.java: New file.
|
||||||
|
* gnu/gcj/lang/ArrayHelper.java: New file.
|
||||||
|
* gnu/gcj/lang/ClassHelper.java: New file.
|
||||||
|
* java/beans/BeanDescriptor.java: New file.
|
||||||
|
* java/beans/BeanInfo.java: New file.
|
||||||
|
* java/beans/Beans.java: New file.
|
||||||
|
* java/beans/Customizer.java: New file.
|
||||||
|
* java/beans/DesignMode.java: New file.
|
||||||
|
* java/beans/EventSetDescriptor.java: New file.
|
||||||
|
* java/beans/FeatureDescriptor.java: New file.
|
||||||
|
* java/beans/IndexedPropertyDescriptor.java: New file.
|
||||||
|
* java/beans/IntrospectionException.java: New file.
|
||||||
|
* java/beans/Introspector.java: New file.
|
||||||
|
* java/beans/MethodDescriptor.java: New file.
|
||||||
|
* java/beans/ParameterDescriptor.java: New file.
|
||||||
|
* java/beans/PropertyChangeEvent.java: New file.
|
||||||
|
* java/beans/PropertyChangeListener.java: New file.
|
||||||
|
* java/beans/PropertyChangeSupport.java: New file.
|
||||||
|
* java/beans/PropertyDescriptor.java: New file.
|
||||||
|
* java/beans/PropertyEditor.java: New file.
|
||||||
|
* java/beans/PropertyEditorManager.java: New file.
|
||||||
|
* java/beans/PropertyEditorSupport.java: New file.
|
||||||
|
* java/beans/PropertyVetoException.java: New file.
|
||||||
|
* java/beans/SimpleBeanInfo.java: New file.
|
||||||
|
* java/beans/VetoableChangeListener.java: New file.
|
||||||
|
* java/beans/VetoableChangeSupport.java: New file.
|
||||||
|
* java/beans/Visibility.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContext.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextChild.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextChildComponentProxy.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextChildSupport.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextContainerProxy.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextEvent.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextMembershipEvent.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextMembershipListener.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextProxy.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextServiceAvailableEvent.java:
|
||||||
|
New file.
|
||||||
|
* java/beans/beancontext/BeanContextServiceProvider.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextServiceProviderBeanInfo.java:
|
||||||
|
New file.
|
||||||
|
* java/beans/beancontext/BeanContextServiceRevokedEvent.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextServiceRevokedListener.java:
|
||||||
|
New file.
|
||||||
|
* java/beans/beancontext/BeanContextServices.java: New file.
|
||||||
|
* java/beans/beancontext/BeanContextServicesListener.java: New file.
|
||||||
|
* java/util/AbstractCollection.java: New file.
|
||||||
|
* java/util/AbstractList.java: New file.
|
||||||
|
* java/util/Arrays.java: New file.
|
||||||
|
* Makefile.am: Added above files.
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
|
||||||
|
2000-04-11 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* java/awt/AWTError.java: New file.
|
||||||
|
* java/awt/AWTEvent.java: New file.
|
||||||
|
* java/awt/AWTException.java: New file.
|
||||||
|
* java/awt/ActiveEvent.java: New file.
|
||||||
|
* java/awt/Adjustable.java: New file.
|
||||||
|
* java/awt/BorderLayout.java: New file.
|
||||||
|
* java/awt/Color.java: New file.
|
||||||
|
* java/awt/Component.java: New file.
|
||||||
|
* java/awt/Container.java: New file.
|
||||||
|
* java/awt/Dimension.java: New file.
|
||||||
|
* java/awt/Event.java: New file.
|
||||||
|
* java/awt/Font.java: New file.
|
||||||
|
* java/awt/Frame.java: New file.
|
||||||
|
* java/awt/Graphics.java: New file.
|
||||||
|
* java/awt/IllegalComponentStateException.java: New file.
|
||||||
|
* java/awt/Image.java: New file.
|
||||||
|
* java/awt/ItemSelectable.java: New file.
|
||||||
|
* java/awt/LayoutManager.java: New file.
|
||||||
|
* java/awt/LayoutManager2.java: New file.
|
||||||
|
* java/awt/Menu.java: New file.
|
||||||
|
* java/awt/MenuBar.java: New file.
|
||||||
|
* java/awt/MenuComponent.java: New file.
|
||||||
|
* java/awt/MenuContainer.java: New file.
|
||||||
|
* java/awt/MenuItem.java: New file.
|
||||||
|
* java/awt/Paint.java: New file.
|
||||||
|
* java/awt/PaintContext.java: New file.
|
||||||
|
* java/awt/Point.java: New file.
|
||||||
|
* java/awt/Rectangle.java: New file.
|
||||||
|
* java/awt/Shape.java: New file.
|
||||||
|
* java/awt/TextArea.java: New file.
|
||||||
|
* java/awt/TextComponent.java: New file.
|
||||||
|
* java/awt/Toolkit.java: New file.
|
||||||
|
* java/awt/Transparency.java: New file.
|
||||||
|
* java/awt/Window.java: New file.
|
||||||
|
* java/awt/natToolkit.cc: New file.
|
||||||
|
* java/awt/event/AWTEventListener.java: New file.
|
||||||
|
* java/awt/event/ActionEvent.java: New file.
|
||||||
|
* java/awt/event/ActionListener.java: New file.
|
||||||
|
* java/awt/event/AdjustmentEvent.java: New file.
|
||||||
|
* java/awt/event/AdjustmentListener.java: New file.
|
||||||
|
* java/awt/event/ComponentAdapter.java: New file.
|
||||||
|
* java/awt/event/ComponentEvent.java: New file.
|
||||||
|
* java/awt/event/ComponentListener.java: New file.
|
||||||
|
* java/awt/event/ContainerAdapter.java: New file.
|
||||||
|
* java/awt/event/ContainerEvent.java: New file.
|
||||||
|
* java/awt/event/ContainerListener.java: New file.
|
||||||
|
* java/awt/event/FocusAdapter.java: New file.
|
||||||
|
* java/awt/event/FocusEvent.java: New file.
|
||||||
|
* java/awt/event/FocusListener.java: New file.
|
||||||
|
* java/awt/event/InputEvent.java: New file.
|
||||||
|
* java/awt/event/InputMethodEvent.java: New file.
|
||||||
|
* java/awt/event/InputMethodListener.java: New file.
|
||||||
|
* java/awt/event/InvocationEvent.java: New file.
|
||||||
|
* java/awt/event/ItemEvent.java: New file.
|
||||||
|
* java/awt/event/ItemListener.java: New file.
|
||||||
|
* java/awt/event/KeyAdapter.java: New file.
|
||||||
|
* java/awt/event/KeyEvent.java: New file.
|
||||||
|
* java/awt/event/KeyListener.java: New file.
|
||||||
|
* java/awt/event/MouseAdapter.java: New file.
|
||||||
|
* java/awt/event/MouseEvent.java: New file.
|
||||||
|
* java/awt/event/MouseListener.java: New file.
|
||||||
|
* java/awt/event/MouseMotionAdapter.java: New file.
|
||||||
|
* java/awt/event/MouseMotionListener.java: New file.
|
||||||
|
* java/awt/event/PaintEvent.java: New file.
|
||||||
|
* java/awt/event/TextEvent.java: New file.
|
||||||
|
* java/awt/event/TextListener.java: New file.
|
||||||
|
* java/awt/event/WindowAdapter.java: New file.
|
||||||
|
* java/awt/event/WindowEvent.java: New file.
|
||||||
|
* java/awt/event/WindowListener.java: New file.
|
||||||
|
* java/awt/geom/Dimension2D.java: New file.
|
||||||
|
* java/awt/geom/Point2D.java: New file.
|
||||||
|
* java/awt/peer/ComponentPeer.java: New file.
|
||||||
|
* java/awt/peer/ContainerPeer.java: New file.
|
||||||
|
* java/awt/peer/FramePeer.java: New file.
|
||||||
|
* java/awt/peer/WindowPeer.java: New file.
|
||||||
|
* java/util/Collection.java: New file.
|
||||||
|
* java/util/Comparator.java: New file.
|
||||||
|
* java/util/Iterator.java: New file.
|
||||||
|
* java/util/List.java: New file.
|
||||||
|
* java/util/ListIterator.java: New file.
|
||||||
|
* Makefile.am: Added above files.
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
|
||||||
|
2000-04-10 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
* gnu/gcj/runtime/MethodInvocation.java: Fixed copyright.
|
||||||
|
* java/lang/FirstThread.java: Ditto.
|
||||||
|
* java/lang/StringBuffer.java: Ditto.
|
||||||
|
* mauve-libgcj: Turned on java.math, java.sql and java.security tests.
|
||||||
|
|
||||||
|
* gnu/gcj/math/MPN.java (rshift): Undid Boehm's patch of 03-14.
|
||||||
|
Special case handled in java.math.BigInteger.
|
||||||
|
* java/math/BigInteger.java (divide): Handle the special case when
|
||||||
|
dividing by 1 and the high bit of the dividend is set.
|
||||||
|
(setShiftRight): Handle case when count == 0.
|
||||||
|
|
||||||
|
2000-04-05 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* java/net/URL.java (setURLStreamHandler): Make "file" protocol a
|
||||||
|
special case.
|
||||||
|
|
||||||
|
2000-04-05 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* sysdep/ia64.c (rse_address_add): Delete.
|
||||||
|
(IS_NaT_COLLECTION_ADDR): Delete.
|
||||||
|
(ia64_backtrace_helper): check for null unwind_info.
|
||||||
|
|
||||||
|
* sysdep/ia64-frame.h: add calc_caller_bsp.
|
||||||
|
|
||||||
|
* java/lang/natThrowable.cc (printRawStackTrace): Flush
|
||||||
|
PrintWriter.
|
||||||
|
|
||||||
|
* prims.cc (_Jv_divI): Use _Jv_ThrowSignal.
|
||||||
|
(_Jv_remI): Likewise.
|
||||||
|
(_Jv_divJ): Likewise.
|
||||||
|
(_Jv_remJ): Likewise.
|
||||||
|
|
||||||
|
* interpret.cc (continue1): Use divide subroutines to guarantee
|
||||||
|
correct Java standard behaviour.
|
||||||
|
Floating-point division should not abort; make it so.
|
||||||
|
|
||||||
|
2000-03-29 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* configure: Rebuilt.
|
||||||
|
* configure.in: Test against `libgcj_sjlj', not
|
||||||
|
`enable_sjlj_exceptions'. Rearranged code to allow SYSDEP_SOURCES
|
||||||
|
to be set even when using sjlj.
|
||||||
|
|
||||||
|
2000-03-24 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.am: Add file addr2name.awk.
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
* addr2name.awk: New file.
|
||||||
|
* name-finder.cc (_Jv_name_finder): Call addr2name.awk to do name
|
||||||
|
lookups on ia64.
|
||||||
|
* java/lang/natThrowable.cc(printRawStackTrace): Don't print out a
|
||||||
|
blank line.
|
||||||
|
|
||||||
|
2000-03-22 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* configure.host: Add -funwind-tables for IA64.
|
||||||
|
* Makefile.am (c_source_files): Add SYSDEP_SORCES.
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
* java/lang/natThrowable.cc (fillInStackTrace): Add ia64 case.
|
||||||
|
* sysdep/ia64.c: New file.
|
||||||
|
* sysdep/ia64-frame.h: New file.
|
||||||
|
* configure.in: Add sysdep/ia64.c for ia64.
|
||||||
|
* configure: Rebuilt.
|
||||||
|
|
||||||
|
2000-03-17 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* java/lang/natString.cc: Remove `register' keyword.
|
||||||
|
interpret.cc: ditto.
|
||||||
|
|
||||||
|
2000-03-16 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* configure.host (ia64): Enable interpreter.
|
||||||
|
|
||||||
|
2000-03-14 Hans Boehm <boehm@acm.org>
|
||||||
|
|
||||||
|
* gnu/gcj/math/MPN.java (rshift): Handle shift 32 specially.
|
||||||
|
|
||||||
|
* include/java-cpool.h (_Jv_storeLong, _Jv_loadLong,
|
||||||
|
_Jv_storeDouble, _Jv_loadDouble): Define differently on 64 bit
|
||||||
|
machine.
|
||||||
|
* java/lang/ieeefp.h: Define __IEEE_BIG_ENDIAN or
|
||||||
|
__IEEE_LITTLE_ENDIAN appropriately on IA64.
|
||||||
|
* java/lang/mprec.h: Don't define Pack_32 on 64 bit machine.
|
||||||
|
* javaprims.h (_Jv_word): Added `l' and `d' entries in 64 bit
|
||||||
|
case.
|
||||||
|
* resolve.cc (FFI_PREP_RAW_CLOSURE): New define.
|
||||||
|
(FFI_RAW_SIZE): Likewise.
|
||||||
|
(_Jv_InterpMethod::ncode): Use them.
|
||||||
|
* interpret.cc (PUSHL, PUSHD, POPL, POPD, LOADL, LOADD, STOREL,
|
||||||
|
STORED): Define differently on a 64 bit machine.
|
||||||
|
(continue1): Use ffi_java_raw_call when appropriate.
|
||||||
|
|
||||||
|
2000-03-14 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* include/default-signal.h (MAKE_THROW_FRAME): Add arg
|
||||||
|
`_exception'.
|
||||||
|
|
||||||
|
2000-03-10 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* java/lang/ieeefp.h: Import latest version from fdlibm.
|
||||||
|
|
||||||
|
2000-03-14 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
|
* prims.cc (_Jv_ThrowSignal): New function.
|
||||||
|
(catch_segv): Add arg `_exception' to MAKE_THROW_FRAME.
|
||||||
|
(catch_fpe): Ditto.
|
||||||
|
* include/sparc-signal.h (MAKE_THROW_FRAME): Ditto
|
||||||
|
* include/i386-signal.h (MAKE_THROW_FRAME): Ditto.
|
||||||
|
* include/ppc-signal.h: New file.
|
||||||
|
|
||||||
2000-05-18 Bryce McKinlay <bryce@albatross.co.nz>
|
2000-05-18 Bryce McKinlay <bryce@albatross.co.nz>
|
||||||
|
|
||||||
* java/lang/Thread.java: Declare `data' as Object, not RawData.
|
* java/lang/Thread.java: Declare `data' as Object, not RawData.
|
||||||
|
|
|
@ -41,6 +41,8 @@ if NATIVE
|
||||||
bin_PROGRAMS = jv-convert gij
|
bin_PROGRAMS = jv-convert gij
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
bin_SCRIPTS = addr2name.awk
|
||||||
|
|
||||||
## ################################################################
|
## ################################################################
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -232,7 +234,9 @@ $(awto_files) $(javao_files): libgcj.zip
|
||||||
## Header files used when compiling some of the nat* files.
|
## Header files used when compiling some of the nat* files.
|
||||||
nat_headers = $(ordinary_java_source_files:.java=.h) \
|
nat_headers = $(ordinary_java_source_files:.java=.h) \
|
||||||
$(built_java_source_files:.java=.h) \
|
$(built_java_source_files:.java=.h) \
|
||||||
$(cond_awt_java_source_files:.java=.h)
|
$(cond_awt_java_source_files:.java=.h) \
|
||||||
|
java/io/ObjectOutputStream$$PutField.h \
|
||||||
|
java/io/ObjectInputStream$$GetField.h
|
||||||
|
|
||||||
$(nat_headers): libgcj.zip
|
$(nat_headers): libgcj.zip
|
||||||
|
|
||||||
|
@ -298,6 +302,14 @@ gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip
|
||||||
-friend 'java::lang::ClassLoader;' \
|
-friend 'java::lang::ClassLoader;' \
|
||||||
$(basename $<)
|
$(basename $<)
|
||||||
|
|
||||||
|
java/io/ObjectInputStream$$GetField.h: java/io/ObjectInputStream$$GetField.class libgcj.zip
|
||||||
|
$(GCJH) -classpath $(top_builddir) \
|
||||||
|
'java/io/ObjectInputStream$$GetField'
|
||||||
|
|
||||||
|
java/io/ObjectOutputStream$$PutField.h: java/io/ObjectOutputStream$$PutField.class libgcj.zip
|
||||||
|
$(GCJH) -classpath $(top_builddir) \
|
||||||
|
'java/io/ObjectOutputStream$$PutField'
|
||||||
|
|
||||||
## Headers we maintain by hand and which we want to install.
|
## Headers we maintain by hand and which we want to install.
|
||||||
extra_headers = java/lang/Object.h java/lang/Class.h
|
extra_headers = java/lang/Object.h java/lang/Class.h
|
||||||
|
|
||||||
|
@ -492,23 +504,48 @@ gnu/gcj/convert/UnicodeToBytes.java
|
||||||
special_java_source_files = java/lang/Class.java java/lang/Object.java
|
special_java_source_files = java/lang/Class.java java/lang/Object.java
|
||||||
|
|
||||||
awt_java_source_files = \
|
awt_java_source_files = \
|
||||||
java/awt/AWTError.java \
|
java/awt/event/ActionEvent.java \
|
||||||
|
java/awt/event/ActionListener.java \
|
||||||
|
java/awt/event/ComponentEvent.java \
|
||||||
|
java/awt/event/KeyAdapter.java \
|
||||||
|
java/awt/event/InputEvent.java \
|
||||||
|
java/awt/event/KeyEvent.java \
|
||||||
|
java/awt/event/KeyListener.java \
|
||||||
|
java/awt/event/TextEvent.java \
|
||||||
|
java/awt/event/TextListener.java \
|
||||||
|
java/awt/event/WindowAdapter.java \
|
||||||
|
java/awt/event/WindowEvent.java \
|
||||||
|
java/awt/event/WindowListener.java \
|
||||||
|
java/awt/event/InputMethodListener.java \
|
||||||
|
java/awt/event/ComponentListener.java \
|
||||||
|
java/awt/event/AdjustmentListener.java \
|
||||||
|
java/awt/event/AWTEventListener.java \
|
||||||
|
java/awt/event/FocusListener.java \
|
||||||
|
java/awt/event/AdjustmentEvent.java \
|
||||||
|
java/awt/event/ItemListener.java \
|
||||||
|
java/awt/event/ContainerListener.java \
|
||||||
|
java/awt/event/MouseListener.java \
|
||||||
|
java/awt/event/MouseMotionListener.java \
|
||||||
|
java/awt/event/ComponentAdapter.java \
|
||||||
|
java/awt/event/ContainerAdapter.java \
|
||||||
|
java/awt/event/FocusAdapter.java \
|
||||||
|
java/awt/event/MouseAdapter.java \
|
||||||
|
java/awt/event/MouseMotionAdapter.java \
|
||||||
|
java/awt/event/FocusEvent.java \
|
||||||
|
java/awt/event/InputMethodEvent.java \
|
||||||
|
java/awt/event/MouseEvent.java \
|
||||||
|
java/awt/event/ItemEvent.java \
|
||||||
|
java/awt/event/InvocationEvent.java \
|
||||||
|
java/awt/event/PaintEvent.java \
|
||||||
|
java/awt/event/ContainerEvent.java \
|
||||||
java/awt/AWTEvent.java \
|
java/awt/AWTEvent.java \
|
||||||
java/awt/AWTException.java \
|
|
||||||
java/awt/ActiveEvent.java \
|
|
||||||
java/awt/Adjustable.java \
|
|
||||||
java/awt/BorderLayout.java \
|
java/awt/BorderLayout.java \
|
||||||
java/awt/Color.java \
|
|
||||||
java/awt/Component.java \
|
java/awt/Component.java \
|
||||||
java/awt/Container.java \
|
java/awt/Container.java \
|
||||||
java/awt/Dimension.java \
|
java/awt/Dimension.java \
|
||||||
java/awt/Event.java \
|
java/awt/Event.java \
|
||||||
java/awt/Font.java \
|
java/awt/Font.java \
|
||||||
java/awt/Frame.java \
|
java/awt/Frame.java \
|
||||||
java/awt/Graphics.java \
|
|
||||||
java/awt/IllegalComponentStateException.java \
|
|
||||||
java/awt/Image.java \
|
|
||||||
java/awt/ItemSelectable.java \
|
|
||||||
java/awt/LayoutManager.java \
|
java/awt/LayoutManager.java \
|
||||||
java/awt/LayoutManager2.java \
|
java/awt/LayoutManager2.java \
|
||||||
java/awt/Menu.java \
|
java/awt/Menu.java \
|
||||||
|
@ -516,56 +553,31 @@ java/awt/MenuBar.java \
|
||||||
java/awt/MenuComponent.java \
|
java/awt/MenuComponent.java \
|
||||||
java/awt/MenuContainer.java \
|
java/awt/MenuContainer.java \
|
||||||
java/awt/MenuItem.java \
|
java/awt/MenuItem.java \
|
||||||
java/awt/Paint.java \
|
|
||||||
java/awt/PaintContext.java \
|
|
||||||
java/awt/Point.java \
|
java/awt/Point.java \
|
||||||
java/awt/Rectangle.java \
|
java/awt/AWTError.java \
|
||||||
java/awt/Shape.java \
|
java/awt/Shape.java \
|
||||||
java/awt/TextArea.java \
|
java/awt/TextArea.java \
|
||||||
java/awt/TextComponent.java \
|
java/awt/TextComponent.java \
|
||||||
java/awt/Toolkit.java \
|
java/awt/Toolkit.java \
|
||||||
java/awt/Transparency.java \
|
|
||||||
java/awt/Window.java \
|
java/awt/Window.java \
|
||||||
java/awt/event/AWTEventListener.java \
|
|
||||||
java/awt/event/ActionEvent.java \
|
|
||||||
java/awt/event/ActionListener.java \
|
|
||||||
java/awt/event/AdjustmentEvent.java \
|
|
||||||
java/awt/event/AdjustmentListener.java \
|
|
||||||
java/awt/event/ComponentAdapter.java \
|
|
||||||
java/awt/event/ComponentEvent.java \
|
|
||||||
java/awt/event/ComponentListener.java \
|
|
||||||
java/awt/event/ContainerAdapter.java \
|
|
||||||
java/awt/event/ContainerEvent.java \
|
|
||||||
java/awt/event/ContainerListener.java \
|
|
||||||
java/awt/event/FocusAdapter.java \
|
|
||||||
java/awt/event/FocusEvent.java \
|
|
||||||
java/awt/event/FocusListener.java \
|
|
||||||
java/awt/event/InputEvent.java \
|
|
||||||
java/awt/event/InputMethodEvent.java \
|
|
||||||
java/awt/event/InputMethodListener.java \
|
|
||||||
java/awt/event/InvocationEvent.java \
|
|
||||||
java/awt/event/ItemEvent.java \
|
|
||||||
java/awt/event/ItemListener.java \
|
|
||||||
java/awt/event/KeyAdapter.java \
|
|
||||||
java/awt/event/KeyEvent.java \
|
|
||||||
java/awt/event/KeyListener.java \
|
|
||||||
java/awt/event/MouseAdapter.java \
|
|
||||||
java/awt/event/MouseEvent.java \
|
|
||||||
java/awt/event/MouseListener.java \
|
|
||||||
java/awt/event/MouseMotionAdapter.java \
|
|
||||||
java/awt/event/MouseMotionListener.java \
|
|
||||||
java/awt/event/PaintEvent.java \
|
|
||||||
java/awt/event/TextEvent.java \
|
|
||||||
java/awt/event/TextListener.java \
|
|
||||||
java/awt/event/WindowAdapter.java \
|
|
||||||
java/awt/event/WindowEvent.java \
|
|
||||||
java/awt/event/WindowListener.java \
|
|
||||||
java/awt/geom/Dimension2D.java \
|
java/awt/geom/Dimension2D.java \
|
||||||
java/awt/geom/Point2D.java \
|
java/awt/geom/Point2D.java \
|
||||||
java/awt/peer/ComponentPeer.java \
|
java/awt/peer/ComponentPeer.java \
|
||||||
java/awt/peer/ContainerPeer.java \
|
java/awt/peer/ContainerPeer.java \
|
||||||
java/awt/peer/FramePeer.java \
|
java/awt/peer/FramePeer.java \
|
||||||
java/awt/peer/WindowPeer.java
|
java/awt/peer/WindowPeer.java \
|
||||||
|
java/awt/Adjustable.java \
|
||||||
|
java/awt/Color.java \
|
||||||
|
java/awt/Graphics.java \
|
||||||
|
java/awt/Image.java \
|
||||||
|
java/awt/Paint.java \
|
||||||
|
java/awt/PaintContext.java \
|
||||||
|
java/awt/Transparency.java \
|
||||||
|
java/awt/ItemSelectable.java \
|
||||||
|
java/awt/AWTException.java \
|
||||||
|
java/awt/ActiveEvent.java \
|
||||||
|
java/awt/Rectangle.java \
|
||||||
|
java/awt/IllegalComponentStateException.java
|
||||||
|
|
||||||
if AWT
|
if AWT
|
||||||
cond_awt_java_source_files = $(awt_java_source_files)
|
cond_awt_java_source_files = $(awt_java_source_files)
|
||||||
|
@ -582,11 +594,12 @@ built_java_source_files = java/lang/ConcreteProcess.java
|
||||||
## convert_source_files. If the .java file has a hand-maintained
|
## convert_source_files. If the .java file has a hand-maintained
|
||||||
## header, please list it in special_java_source_files.
|
## header, please list it in special_java_source_files.
|
||||||
ordinary_java_source_files = $(convert_source_files) \
|
ordinary_java_source_files = $(convert_source_files) \
|
||||||
gnu/gcj/io/DefaultMimeTypes.java \
|
gnu/gcj/protocol/http/Connection.java \
|
||||||
gnu/gcj/io/MimeTypes.java \
|
gnu/gcj/protocol/http/Handler.java \
|
||||||
gnu/gcj/jni/NativeThread.java \
|
gnu/gcj/protocol/file/Connection.java \
|
||||||
gnu/gcj/runtime/VMClassLoader.java \
|
gnu/gcj/protocol/file/Handler.java \
|
||||||
gnu/gcj/runtime/FirstThread.java \
|
gnu/gcj/protocol/jar/Connection.java \
|
||||||
|
gnu/gcj/protocol/jar/Handler.java \
|
||||||
gnu/gcj/text/BaseBreakIterator.java \
|
gnu/gcj/text/BaseBreakIterator.java \
|
||||||
gnu/gcj/text/CharacterBreakIterator.java \
|
gnu/gcj/text/CharacterBreakIterator.java \
|
||||||
gnu/gcj/text/LineBreakIterator.java \
|
gnu/gcj/text/LineBreakIterator.java \
|
||||||
|
@ -594,15 +607,36 @@ gnu/gcj/text/LocaleData_en.java \
|
||||||
gnu/gcj/text/LocaleData_en_US.java \
|
gnu/gcj/text/LocaleData_en_US.java \
|
||||||
gnu/gcj/text/SentenceBreakIterator.java \
|
gnu/gcj/text/SentenceBreakIterator.java \
|
||||||
gnu/gcj/text/WordBreakIterator.java \
|
gnu/gcj/text/WordBreakIterator.java \
|
||||||
gnu/gcj/math/MPN.java \
|
|
||||||
gnu/gcj/protocol/file/Connection.java \
|
|
||||||
gnu/gcj/protocol/file/Handler.java \
|
|
||||||
gnu/gcj/protocol/http/Connection.java \
|
|
||||||
gnu/gcj/protocol/http/Handler.java \
|
|
||||||
gnu/gcj/protocol/jar/Handler.java \
|
|
||||||
gnu/gcj/protocol/jar/Connection.java \
|
|
||||||
gnu/gcj/RawData.java \
|
|
||||||
gnu/gcj/util/EnumerationChain.java \
|
gnu/gcj/util/EnumerationChain.java \
|
||||||
|
gnu/gcj/RawData.java \
|
||||||
|
gnu/gcj/math/MPN.java \
|
||||||
|
gnu/gcj/runtime/VMClassLoader.java \
|
||||||
|
gnu/gcj/runtime/FirstThread.java \
|
||||||
|
gnu/gcj/jni/NativeThread.java \
|
||||||
|
gnu/gcj/io/DefaultMimeTypes.java \
|
||||||
|
gnu/gcj/io/MimeTypes.java \
|
||||||
|
gnu/gcj/io/SimpleSHSStream.java \
|
||||||
|
gnu/java/beans/editors/ColorEditor.java \
|
||||||
|
gnu/java/beans/editors/FontEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeBooleanEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeByteEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeDoubleEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeFloatEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeIntEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeLongEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeShortEditor.java \
|
||||||
|
gnu/java/beans/editors/StringEditor.java \
|
||||||
|
gnu/java/beans/info/ComponentBeanInfo.java \
|
||||||
|
gnu/java/beans/BeanInfoEmbryo.java \
|
||||||
|
gnu/java/beans/EmptyBeanInfo.java \
|
||||||
|
gnu/java/beans/ExplicitBeanInfo.java \
|
||||||
|
gnu/java/beans/IntrospectionIncubator.java \
|
||||||
|
gnu/java/io/ClassLoaderObjectInputStream.java \
|
||||||
|
gnu/java/io/NullOutputStream.java \
|
||||||
|
gnu/java/io/ObjectIdentityWrapper.java \
|
||||||
|
gnu/java/lang/reflect/TypeSignature.java \
|
||||||
|
gnu/java/lang/ArrayHelper.java \
|
||||||
|
gnu/java/lang/ClassHelper.java \
|
||||||
java/io/BufferedInputStream.java \
|
java/io/BufferedInputStream.java \
|
||||||
java/io/BufferedOutputStream.java \
|
java/io/BufferedOutputStream.java \
|
||||||
java/io/BufferedReader.java \
|
java/io/BufferedReader.java \
|
||||||
|
@ -618,7 +652,6 @@ java/io/DataOutput.java \
|
||||||
java/io/DataOutputStream.java \
|
java/io/DataOutputStream.java \
|
||||||
java/io/EOFException.java \
|
java/io/EOFException.java \
|
||||||
java/io/File.java \
|
java/io/File.java \
|
||||||
java/io/FileDescriptor.java \
|
|
||||||
java/io/FileInputStream.java \
|
java/io/FileInputStream.java \
|
||||||
java/io/FileNotFoundException.java \
|
java/io/FileNotFoundException.java \
|
||||||
java/io/FileOutputStream.java \
|
java/io/FileOutputStream.java \
|
||||||
|
@ -635,11 +668,10 @@ java/io/InputStreamReader.java \
|
||||||
java/io/InterruptedIOException.java \
|
java/io/InterruptedIOException.java \
|
||||||
java/io/LineNumberInputStream.java \
|
java/io/LineNumberInputStream.java \
|
||||||
java/io/LineNumberReader.java \
|
java/io/LineNumberReader.java \
|
||||||
java/io/ObjectStreamException.java \
|
|
||||||
java/io/OptionalDataException.java \
|
|
||||||
java/io/OutputStream.java \
|
java/io/OutputStream.java \
|
||||||
java/io/OutputStreamWriter.java \
|
java/io/OutputStreamWriter.java \
|
||||||
java/io/PipedInputStream.java \
|
java/io/Externalizable.java \
|
||||||
|
java/io/FileDescriptor.java \
|
||||||
java/io/PipedOutputStream.java \
|
java/io/PipedOutputStream.java \
|
||||||
java/io/PipedReader.java \
|
java/io/PipedReader.java \
|
||||||
java/io/PipedWriter.java \
|
java/io/PipedWriter.java \
|
||||||
|
@ -651,7 +683,6 @@ java/io/RandomAccessFile.java \
|
||||||
java/io/Reader.java \
|
java/io/Reader.java \
|
||||||
java/io/SequenceInputStream.java \
|
java/io/SequenceInputStream.java \
|
||||||
java/io/Serializable.java \
|
java/io/Serializable.java \
|
||||||
java/io/StreamCorruptedException.java \
|
|
||||||
java/io/StreamTokenizer.java \
|
java/io/StreamTokenizer.java \
|
||||||
java/io/StringBufferInputStream.java \
|
java/io/StringBufferInputStream.java \
|
||||||
java/io/StringReader.java \
|
java/io/StringReader.java \
|
||||||
|
@ -660,6 +691,35 @@ java/io/SyncFailedException.java \
|
||||||
java/io/UTFDataFormatException.java \
|
java/io/UTFDataFormatException.java \
|
||||||
java/io/UnsupportedEncodingException.java \
|
java/io/UnsupportedEncodingException.java \
|
||||||
java/io/Writer.java \
|
java/io/Writer.java \
|
||||||
|
java/io/ObjectStreamException.java \
|
||||||
|
java/io/OptionalDataException.java \
|
||||||
|
java/io/StreamCorruptedException.java \
|
||||||
|
java/io/BlockDataException.java \
|
||||||
|
java/io/InvalidClassException.java \
|
||||||
|
java/io/InvalidObjectException.java \
|
||||||
|
java/io/NotActiveException.java \
|
||||||
|
java/io/NotSerializableException.java \
|
||||||
|
java/io/ObjectInput.java \
|
||||||
|
java/io/ObjectInputStream.java \
|
||||||
|
java/io/ObjectInputValidation.java \
|
||||||
|
java/io/ObjectOutput.java \
|
||||||
|
java/io/ObjectOutputStream.java \
|
||||||
|
java/io/ObjectStreamClass.java \
|
||||||
|
java/io/ObjectStreamConstants.java \
|
||||||
|
java/io/ObjectStreamField.java \
|
||||||
|
java/io/Replaceable.java \
|
||||||
|
java/io/Resolvable.java \
|
||||||
|
java/io/SerializablePermission.java \
|
||||||
|
java/io/WriteAbortedException.java \
|
||||||
|
java/io/PipedInputStream.java \
|
||||||
|
java/lang/reflect/Constructor.java \
|
||||||
|
java/lang/reflect/AccessibleObject.java \
|
||||||
|
java/lang/reflect/Array.java \
|
||||||
|
java/lang/reflect/Method.java \
|
||||||
|
java/lang/reflect/Field.java \
|
||||||
|
java/lang/reflect/InvocationTargetException.java \
|
||||||
|
java/lang/reflect/Member.java \
|
||||||
|
java/lang/reflect/Modifier.java \
|
||||||
java/lang/AbstractMethodError.java \
|
java/lang/AbstractMethodError.java \
|
||||||
java/lang/ArithmeticException.java \
|
java/lang/ArithmeticException.java \
|
||||||
java/lang/ArrayIndexOutOfBoundsException.java \
|
java/lang/ArrayIndexOutOfBoundsException.java \
|
||||||
|
@ -688,10 +748,10 @@ java/lang/IllegalMonitorStateException.java \
|
||||||
java/lang/IllegalStateException.java \
|
java/lang/IllegalStateException.java \
|
||||||
java/lang/IllegalThreadStateException.java \
|
java/lang/IllegalThreadStateException.java \
|
||||||
java/lang/IncompatibleClassChangeError.java \
|
java/lang/IncompatibleClassChangeError.java \
|
||||||
java/lang/IndexOutOfBoundsException.java \
|
|
||||||
java/lang/InstantiationError.java \
|
java/lang/InstantiationError.java \
|
||||||
java/lang/InstantiationException.java \
|
|
||||||
java/lang/Integer.java \
|
java/lang/Integer.java \
|
||||||
|
java/lang/IndexOutOfBoundsException.java \
|
||||||
|
java/lang/InstantiationException.java \
|
||||||
java/lang/InternalError.java \
|
java/lang/InternalError.java \
|
||||||
java/lang/InterruptedException.java \
|
java/lang/InterruptedException.java \
|
||||||
java/lang/LinkageError.java \
|
java/lang/LinkageError.java \
|
||||||
|
@ -729,48 +789,123 @@ java/lang/UnsupportedOperationException.java \
|
||||||
java/lang/VerifyError.java \
|
java/lang/VerifyError.java \
|
||||||
java/lang/VirtualMachineError.java \
|
java/lang/VirtualMachineError.java \
|
||||||
java/lang/Void.java \
|
java/lang/Void.java \
|
||||||
java/lang/reflect/AccessibleObject.java \
|
|
||||||
java/lang/reflect/Array.java \
|
|
||||||
java/lang/reflect/Constructor.java \
|
|
||||||
java/lang/reflect/Field.java \
|
|
||||||
java/lang/reflect/InvocationTargetException.java \
|
|
||||||
java/lang/reflect/Member.java \
|
|
||||||
java/lang/reflect/Method.java \
|
|
||||||
java/lang/reflect/Modifier.java \
|
|
||||||
java/math/BigDecimal.java \
|
|
||||||
java/math/BigInteger.java \
|
|
||||||
java/net/BindException.java \
|
java/net/BindException.java \
|
||||||
java/net/ConnectException.java \
|
java/net/ConnectException.java \
|
||||||
java/net/ContentHandler.java \
|
java/net/ContentHandler.java \
|
||||||
java/net/ContentHandlerFactory.java \
|
java/net/ContentHandlerFactory.java \
|
||||||
java/net/DatagramPacket.java \
|
|
||||||
java/net/DatagramSocket.java \
|
|
||||||
java/net/DatagramSocketImpl.java \
|
|
||||||
java/net/FileNameMap.java \
|
java/net/FileNameMap.java \
|
||||||
java/net/HttpURLConnection.java \
|
java/net/HttpURLConnection.java \
|
||||||
java/net/InetAddress.java \
|
java/net/InetAddress.java \
|
||||||
java/net/JarURLConnection.java \
|
|
||||||
java/net/MalformedURLException.java \
|
java/net/MalformedURLException.java \
|
||||||
java/net/MulticastSocket.java \
|
|
||||||
java/net/NoRouteToHostException.java \
|
java/net/NoRouteToHostException.java \
|
||||||
java/net/PlainDatagramSocketImpl.java \
|
|
||||||
java/net/PlainSocketImpl.java \
|
java/net/PlainSocketImpl.java \
|
||||||
java/net/ProtocolException.java \
|
java/net/ProtocolException.java \
|
||||||
java/net/ServerSocket.java \
|
java/net/ServerSocket.java \
|
||||||
|
java/net/URL.java \
|
||||||
java/net/Socket.java \
|
java/net/Socket.java \
|
||||||
java/net/SocketException.java \
|
java/net/SocketException.java \
|
||||||
java/net/SocketImpl.java \
|
java/net/SocketImpl.java \
|
||||||
java/net/SocketImplFactory.java \
|
java/net/SocketImplFactory.java \
|
||||||
java/net/SocketOptions.java \
|
|
||||||
java/net/URL.java \
|
|
||||||
java/net/URLClassLoader.java \
|
|
||||||
java/net/URLConnection.java \
|
java/net/URLConnection.java \
|
||||||
java/net/URLDecoder.java \
|
|
||||||
java/net/URLEncoder.java \
|
|
||||||
java/net/URLStreamHandler.java \
|
java/net/URLStreamHandler.java \
|
||||||
java/net/URLStreamHandlerFactory.java \
|
java/net/URLStreamHandlerFactory.java \
|
||||||
java/net/UnknownHostException.java \
|
java/net/UnknownHostException.java \
|
||||||
java/net/UnknownServiceException.java \
|
java/net/UnknownServiceException.java \
|
||||||
|
java/net/URLDecoder.java \
|
||||||
|
java/net/URLEncoder.java \
|
||||||
|
java/net/DatagramPacket.java \
|
||||||
|
java/net/DatagramSocket.java \
|
||||||
|
java/net/DatagramSocketImpl.java \
|
||||||
|
java/net/MulticastSocket.java \
|
||||||
|
java/net/PlainDatagramSocketImpl.java \
|
||||||
|
java/net/SocketOptions.java \
|
||||||
|
java/net/JarURLConnection.java \
|
||||||
|
java/net/URLClassLoader.java \
|
||||||
|
java/text/Collator.java \
|
||||||
|
java/text/BreakIterator.java \
|
||||||
|
java/text/CharacterIterator.java \
|
||||||
|
java/text/ChoiceFormat.java \
|
||||||
|
java/text/DateFormat.java \
|
||||||
|
java/text/DateFormatSymbols.java \
|
||||||
|
java/text/DecimalFormat.java \
|
||||||
|
java/text/DecimalFormatSymbols.java \
|
||||||
|
java/text/FieldPosition.java \
|
||||||
|
java/text/Format.java \
|
||||||
|
java/text/MessageFormat.java \
|
||||||
|
java/text/NumberFormat.java \
|
||||||
|
java/text/ParseException.java \
|
||||||
|
java/text/ParsePosition.java \
|
||||||
|
java/text/SimpleDateFormat.java \
|
||||||
|
java/text/StringCharacterIterator.java \
|
||||||
|
java/text/CollationElementIterator.java \
|
||||||
|
java/text/CollationKey.java \
|
||||||
|
java/text/RuleBasedCollator.java \
|
||||||
|
java/util/zip/Adler32.java \
|
||||||
|
java/util/zip/CRC32.java \
|
||||||
|
java/util/zip/Checksum.java \
|
||||||
|
java/util/zip/Deflater.java \
|
||||||
|
java/util/zip/DeflaterOutputStream.java \
|
||||||
|
java/util/zip/ZipConstants.java \
|
||||||
|
java/util/zip/ZipEntry.java \
|
||||||
|
java/util/zip/ZipException.java \
|
||||||
|
java/util/zip/ZipFile.java \
|
||||||
|
java/util/zip/ZipOutputStream.java \
|
||||||
|
java/util/zip/InflaterInputStream.java \
|
||||||
|
java/util/zip/ZipInputStream.java \
|
||||||
|
java/util/zip/DataFormatException.java \
|
||||||
|
java/util/zip/CheckedInputStream.java \
|
||||||
|
java/util/zip/CheckedOutputStream.java \
|
||||||
|
java/util/zip/Inflater.java \
|
||||||
|
java/util/zip/GZIPInputStream.java \
|
||||||
|
java/util/zip/GZIPOutputStream.java \
|
||||||
|
java/util/jar/JarEntry.java \
|
||||||
|
java/util/jar/JarFile.java \
|
||||||
|
java/util/jar/JarInputStream.java \
|
||||||
|
java/util/BitSet.java \
|
||||||
|
java/util/Calendar.java \
|
||||||
|
java/util/ConcurrentModificationException.java \
|
||||||
|
java/util/Date.java \
|
||||||
|
java/util/Dictionary.java \
|
||||||
|
java/util/EmptyStackException.java \
|
||||||
|
java/util/Enumeration.java \
|
||||||
|
java/util/EventListener.java \
|
||||||
|
java/util/EventObject.java \
|
||||||
|
java/util/GregorianCalendar.java \
|
||||||
|
java/util/Hashtable.java \
|
||||||
|
java/util/ListResourceBundle.java \
|
||||||
|
java/util/Locale.java \
|
||||||
|
java/util/MissingResourceException.java \
|
||||||
|
java/util/NoSuchElementException.java \
|
||||||
|
java/util/Observable.java \
|
||||||
|
java/util/Observer.java \
|
||||||
|
java/util/Properties.java \
|
||||||
|
java/util/Random.java \
|
||||||
|
java/util/ResourceBundle.java \
|
||||||
|
java/util/SimpleTimeZone.java \
|
||||||
|
java/util/Stack.java \
|
||||||
|
java/util/StringTokenizer.java \
|
||||||
|
java/util/TimeZone.java \
|
||||||
|
java/util/TooManyListenersException.java \
|
||||||
|
java/util/Vector.java \
|
||||||
|
java/util/List.java \
|
||||||
|
java/util/Collection.java \
|
||||||
|
java/util/Comparator.java \
|
||||||
|
java/util/Iterator.java \
|
||||||
|
java/util/PropertyResourceBundle.java \
|
||||||
|
java/util/Arrays.java \
|
||||||
|
java/util/ListIterator.java \
|
||||||
|
java/util/AbstractCollection.java \
|
||||||
|
java/util/AbstractList.java \
|
||||||
|
java/security/MessageDigest.java \
|
||||||
|
java/security/NoSuchAlgorithmException.java \
|
||||||
|
java/security/SecureClassLoader.java \
|
||||||
|
java/security/interfaces/DSAKey.java \
|
||||||
|
java/security/interfaces/DSAParams.java \
|
||||||
|
java/security/interfaces/DSAPrivateKey.java \
|
||||||
|
java/security/interfaces/DSAPublicKey.java \
|
||||||
|
java/security/interfaces/RSAPrivateCrtKey.java \
|
||||||
|
java/security/interfaces/RSAPrivateKey.java \
|
||||||
|
java/security/interfaces/RSAPublicKey.java \
|
||||||
java/security/AlgorithmParameterGeneratorSpi.java \
|
java/security/AlgorithmParameterGeneratorSpi.java \
|
||||||
java/security/DigestException.java \
|
java/security/DigestException.java \
|
||||||
java/security/GeneralSecurityException.java \
|
java/security/GeneralSecurityException.java \
|
||||||
|
@ -782,24 +917,14 @@ java/security/KeyException.java \
|
||||||
java/security/KeyPair.java \
|
java/security/KeyPair.java \
|
||||||
java/security/KeyPairGenerator.java \
|
java/security/KeyPairGenerator.java \
|
||||||
java/security/KeyPairGeneratorSpi.java \
|
java/security/KeyPairGeneratorSpi.java \
|
||||||
java/security/MessageDigest.java \
|
|
||||||
java/security/NoSuchAlgorithmException.java \
|
|
||||||
java/security/NoSuchProviderException.java \
|
java/security/NoSuchProviderException.java \
|
||||||
java/security/PrivateKey.java \
|
java/security/PrivateKey.java \
|
||||||
java/security/Provider.java \
|
java/security/Provider.java \
|
||||||
java/security/PublicKey.java \
|
java/security/PublicKey.java \
|
||||||
java/security/SecureClassLoader.java \
|
|
||||||
java/security/SecureRandom.java \
|
java/security/SecureRandom.java \
|
||||||
java/security/Security.java \
|
java/security/Security.java \
|
||||||
java/security/Signature.java \
|
java/security/Signature.java \
|
||||||
java/security/SignatureException.java \
|
java/security/SignatureException.java \
|
||||||
java/security/interfaces/DSAKey.java \
|
|
||||||
java/security/interfaces/DSAParams.java \
|
|
||||||
java/security/interfaces/DSAPrivateKey.java \
|
|
||||||
java/security/interfaces/DSAPublicKey.java \
|
|
||||||
java/security/interfaces/RSAPrivateCrtKey.java \
|
|
||||||
java/security/interfaces/RSAPrivateKey.java \
|
|
||||||
java/security/interfaces/RSAPublicKey.java \
|
|
||||||
java/security/spec/AlgorithmParameterSpec.java \
|
java/security/spec/AlgorithmParameterSpec.java \
|
||||||
java/security/spec/InvalidKeySpecException.java \
|
java/security/spec/InvalidKeySpecException.java \
|
||||||
java/security/spec/InvalidParameterSpecException.java \
|
java/security/spec/InvalidParameterSpecException.java \
|
||||||
|
@ -807,6 +932,13 @@ java/security/spec/KeySpec.java \
|
||||||
java/security/spec/RSAPrivateCrtKeySpec.java \
|
java/security/spec/RSAPrivateCrtKeySpec.java \
|
||||||
java/security/spec/RSAPrivateKeySpec.java \
|
java/security/spec/RSAPrivateKeySpec.java \
|
||||||
java/security/spec/RSAPublicKeySpec.java \
|
java/security/spec/RSAPublicKeySpec.java \
|
||||||
|
java/security/BasicPermission.java \
|
||||||
|
java/security/Guard.java \
|
||||||
|
java/security/DigestOutputStream.java \
|
||||||
|
java/security/Permission.java \
|
||||||
|
java/security/PermissionCollection.java \
|
||||||
|
java/math/BigDecimal.java \
|
||||||
|
java/math/BigInteger.java \
|
||||||
java/sql/CallableStatement.java \
|
java/sql/CallableStatement.java \
|
||||||
java/sql/Connection.java \
|
java/sql/Connection.java \
|
||||||
java/sql/DataTruncation.java \
|
java/sql/DataTruncation.java \
|
||||||
|
@ -824,78 +956,46 @@ java/sql/Statement.java \
|
||||||
java/sql/Time.java \
|
java/sql/Time.java \
|
||||||
java/sql/Timestamp.java \
|
java/sql/Timestamp.java \
|
||||||
java/sql/Types.java \
|
java/sql/Types.java \
|
||||||
java/text/BreakIterator.java \
|
java/beans/beancontext/BeanContext.java \
|
||||||
java/text/CharacterIterator.java \
|
java/beans/beancontext/BeanContextChild.java \
|
||||||
java/text/ChoiceFormat.java \
|
java/beans/beancontext/BeanContextChildComponentProxy.java \
|
||||||
java/text/CollationElementIterator.java \
|
java/beans/beancontext/BeanContextChildSupport.java \
|
||||||
java/text/CollationKey.java \
|
java/beans/beancontext/BeanContextContainerProxy.java \
|
||||||
java/text/Collator.java \
|
java/beans/beancontext/BeanContextEvent.java \
|
||||||
java/text/DateFormat.java \
|
java/beans/beancontext/BeanContextMembershipEvent.java \
|
||||||
java/text/DateFormatSymbols.java \
|
java/beans/beancontext/BeanContextMembershipListener.java \
|
||||||
java/text/DecimalFormat.java \
|
java/beans/beancontext/BeanContextProxy.java \
|
||||||
java/text/DecimalFormatSymbols.java \
|
java/beans/beancontext/BeanContextServiceAvailableEvent.java \
|
||||||
java/text/FieldPosition.java \
|
java/beans/beancontext/BeanContextServiceProvider.java \
|
||||||
java/text/Format.java \
|
java/beans/beancontext/BeanContextServiceProviderBeanInfo.java \
|
||||||
java/text/MessageFormat.java \
|
java/beans/beancontext/BeanContextServiceRevokedEvent.java \
|
||||||
java/text/NumberFormat.java \
|
java/beans/beancontext/BeanContextServiceRevokedListener.java \
|
||||||
java/text/ParseException.java \
|
java/beans/beancontext/BeanContextServices.java \
|
||||||
java/text/ParsePosition.java \
|
java/beans/beancontext/BeanContextServicesListener.java \
|
||||||
java/text/RuleBasedCollator.java \
|
java/beans/BeanDescriptor.java \
|
||||||
java/text/SimpleDateFormat.java \
|
java/beans/BeanInfo.java \
|
||||||
java/text/StringCharacterIterator.java \
|
java/beans/Beans.java \
|
||||||
java/util/BitSet.java \
|
java/beans/Customizer.java \
|
||||||
java/util/Calendar.java \
|
java/beans/DesignMode.java \
|
||||||
java/util/Collection.java \
|
java/beans/EventSetDescriptor.java \
|
||||||
java/util/Comparator.java \
|
java/beans/FeatureDescriptor.java \
|
||||||
java/util/ConcurrentModificationException.java \
|
java/beans/IndexedPropertyDescriptor.java \
|
||||||
java/util/Date.java \
|
java/beans/IntrospectionException.java \
|
||||||
java/util/Dictionary.java \
|
java/beans/Introspector.java \
|
||||||
java/util/EmptyStackException.java \
|
java/beans/MethodDescriptor.java \
|
||||||
java/util/Enumeration.java \
|
java/beans/ParameterDescriptor.java \
|
||||||
java/util/EventListener.java \
|
java/beans/PropertyChangeEvent.java \
|
||||||
java/util/EventObject.java \
|
java/beans/PropertyChangeListener.java \
|
||||||
java/util/GregorianCalendar.java \
|
java/beans/PropertyChangeSupport.java \
|
||||||
java/util/Hashtable.java \
|
java/beans/PropertyDescriptor.java \
|
||||||
java/util/Iterator.java \
|
java/beans/PropertyEditor.java \
|
||||||
java/util/List.java \
|
java/beans/PropertyEditorManager.java \
|
||||||
java/util/ListIterator.java \
|
java/beans/PropertyEditorSupport.java \
|
||||||
java/util/ListResourceBundle.java \
|
java/beans/PropertyVetoException.java \
|
||||||
java/util/Locale.java \
|
java/beans/SimpleBeanInfo.java \
|
||||||
java/util/MissingResourceException.java \
|
java/beans/VetoableChangeListener.java \
|
||||||
java/util/NoSuchElementException.java \
|
java/beans/VetoableChangeSupport.java \
|
||||||
java/util/Observable.java \
|
java/beans/Visibility.java
|
||||||
java/util/Observer.java \
|
|
||||||
java/util/Properties.java \
|
|
||||||
java/util/PropertyResourceBundle.java \
|
|
||||||
java/util/Random.java \
|
|
||||||
java/util/ResourceBundle.java \
|
|
||||||
java/util/SimpleTimeZone.java \
|
|
||||||
java/util/Stack.java \
|
|
||||||
java/util/StringTokenizer.java \
|
|
||||||
java/util/TimeZone.java \
|
|
||||||
java/util/TooManyListenersException.java \
|
|
||||||
java/util/Vector.java \
|
|
||||||
java/util/jar/JarFile.java \
|
|
||||||
java/util/jar/JarInputStream.java \
|
|
||||||
java/util/jar/JarEntry.java \
|
|
||||||
java/util/zip/Adler32.java \
|
|
||||||
java/util/zip/CRC32.java \
|
|
||||||
java/util/zip/CheckedInputStream.java \
|
|
||||||
java/util/zip/CheckedOutputStream.java \
|
|
||||||
java/util/zip/Checksum.java \
|
|
||||||
java/util/zip/DataFormatException.java \
|
|
||||||
java/util/zip/Deflater.java \
|
|
||||||
java/util/zip/DeflaterOutputStream.java \
|
|
||||||
java/util/zip/GZIPInputStream.java \
|
|
||||||
java/util/zip/GZIPOutputStream.java \
|
|
||||||
java/util/zip/Inflater.java \
|
|
||||||
java/util/zip/InflaterInputStream.java \
|
|
||||||
java/util/zip/ZipConstants.java \
|
|
||||||
java/util/zip/ZipEntry.java \
|
|
||||||
java/util/zip/ZipException.java \
|
|
||||||
java/util/zip/ZipFile.java \
|
|
||||||
java/util/zip/ZipInputStream.java \
|
|
||||||
java/util/zip/ZipOutputStream.java
|
|
||||||
|
|
||||||
java_source_files = $(ordinary_java_source_files) $(special_java_source_files)
|
java_source_files = $(ordinary_java_source_files) $(special_java_source_files)
|
||||||
|
|
||||||
|
@ -927,10 +1027,14 @@ gnu/gcj/convert/natInput_EUCJIS.cc \
|
||||||
gnu/gcj/convert/natInput_SJIS.cc \
|
gnu/gcj/convert/natInput_SJIS.cc \
|
||||||
gnu/gcj/convert/natOutput_EUCJIS.cc \
|
gnu/gcj/convert/natOutput_EUCJIS.cc \
|
||||||
gnu/gcj/convert/natOutput_SJIS.cc \
|
gnu/gcj/convert/natOutput_SJIS.cc \
|
||||||
|
gnu/gcj/io/natSimpleSHSStream.cc \
|
||||||
|
gnu/gcj/io/shs.cc \
|
||||||
gnu/gcj/jni/natNativeThread.cc \
|
gnu/gcj/jni/natNativeThread.cc \
|
||||||
gnu/gcj/runtime/natFirstThread.cc \
|
gnu/gcj/runtime/natFirstThread.cc \
|
||||||
java/io/natFile.cc \
|
java/io/natFile.cc \
|
||||||
java/io/natFileDescriptor.cc \
|
java/io/natFileDescriptor.cc \
|
||||||
|
java/io/natObjectInputStream.cc \
|
||||||
|
java/io/natObjectOutputStream.cc \
|
||||||
java/lang/natCharacter.cc \
|
java/lang/natCharacter.cc \
|
||||||
java/lang/natClass.cc \
|
java/lang/natClass.cc \
|
||||||
java/lang/natClassLoader.cc \
|
java/lang/natClassLoader.cc \
|
||||||
|
@ -1035,12 +1139,3 @@ distclean-multi:
|
||||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
|
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
|
||||||
maintainer-clean-multi:
|
maintainer-clean-multi:
|
||||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
|
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
|
||||||
|
|
||||||
|
|
||||||
## ################################################################
|
|
||||||
|
|
||||||
|
|
||||||
## See above.
|
|
||||||
cygnus_hack =
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,7 @@ OBJDUMP = @OBJDUMP@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PERL = @PERL@
|
PERL = @PERL@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
|
SYSDEP_SOURCES = @SYSDEP_SOURCES@
|
||||||
SYSTEMSPEC = @SYSTEMSPEC@
|
SYSTEMSPEC = @SYSTEMSPEC@
|
||||||
THREADDEPS = @THREADDEPS@
|
THREADDEPS = @THREADDEPS@
|
||||||
THREADINCS = @THREADINCS@
|
THREADINCS = @THREADINCS@
|
||||||
|
@ -138,6 +139,8 @@ data_DATA = libgcj.zip
|
||||||
|
|
||||||
@NATIVE_TRUE@bin_PROGRAMS = \
|
@NATIVE_TRUE@bin_PROGRAMS = \
|
||||||
@NATIVE_TRUE@jv-convert gij
|
@NATIVE_TRUE@jv-convert gij
|
||||||
|
|
||||||
|
bin_SCRIPTS = addr2name.awk
|
||||||
@CANADIAN_TRUE@@NULL_TARGET_TRUE@GCJ = \
|
@CANADIAN_TRUE@@NULL_TARGET_TRUE@GCJ = \
|
||||||
@CANADIAN_TRUE@@NULL_TARGET_TRUE@gcj
|
@CANADIAN_TRUE@@NULL_TARGET_TRUE@gcj
|
||||||
@CANADIAN_TRUE@@NULL_TARGET_FALSE@GCJ = \
|
@CANADIAN_TRUE@@NULL_TARGET_FALSE@GCJ = \
|
||||||
|
@ -229,7 +232,9 @@ SUFFIXES = .class .java .h
|
||||||
|
|
||||||
nat_headers = $(ordinary_java_source_files:.java=.h) \
|
nat_headers = $(ordinary_java_source_files:.java=.h) \
|
||||||
$(built_java_source_files:.java=.h) \
|
$(built_java_source_files:.java=.h) \
|
||||||
$(cond_awt_java_source_files:.java=.h)
|
$(cond_awt_java_source_files:.java=.h) \
|
||||||
|
java/io/ObjectOutputStream$$PutField.h \
|
||||||
|
java/io/ObjectInputStream$$GetField.h
|
||||||
|
|
||||||
|
|
||||||
extra_headers = java/lang/Object.h java/lang/Class.h
|
extra_headers = java/lang/Object.h java/lang/Class.h
|
||||||
|
@ -293,23 +298,48 @@ gnu/gcj/convert/UnicodeToBytes.java
|
||||||
special_java_source_files = java/lang/Class.java java/lang/Object.java
|
special_java_source_files = java/lang/Class.java java/lang/Object.java
|
||||||
|
|
||||||
awt_java_source_files = \
|
awt_java_source_files = \
|
||||||
java/awt/AWTError.java \
|
java/awt/event/ActionEvent.java \
|
||||||
|
java/awt/event/ActionListener.java \
|
||||||
|
java/awt/event/ComponentEvent.java \
|
||||||
|
java/awt/event/KeyAdapter.java \
|
||||||
|
java/awt/event/InputEvent.java \
|
||||||
|
java/awt/event/KeyEvent.java \
|
||||||
|
java/awt/event/KeyListener.java \
|
||||||
|
java/awt/event/TextEvent.java \
|
||||||
|
java/awt/event/TextListener.java \
|
||||||
|
java/awt/event/WindowAdapter.java \
|
||||||
|
java/awt/event/WindowEvent.java \
|
||||||
|
java/awt/event/WindowListener.java \
|
||||||
|
java/awt/event/InputMethodListener.java \
|
||||||
|
java/awt/event/ComponentListener.java \
|
||||||
|
java/awt/event/AdjustmentListener.java \
|
||||||
|
java/awt/event/AWTEventListener.java \
|
||||||
|
java/awt/event/FocusListener.java \
|
||||||
|
java/awt/event/AdjustmentEvent.java \
|
||||||
|
java/awt/event/ItemListener.java \
|
||||||
|
java/awt/event/ContainerListener.java \
|
||||||
|
java/awt/event/MouseListener.java \
|
||||||
|
java/awt/event/MouseMotionListener.java \
|
||||||
|
java/awt/event/ComponentAdapter.java \
|
||||||
|
java/awt/event/ContainerAdapter.java \
|
||||||
|
java/awt/event/FocusAdapter.java \
|
||||||
|
java/awt/event/MouseAdapter.java \
|
||||||
|
java/awt/event/MouseMotionAdapter.java \
|
||||||
|
java/awt/event/FocusEvent.java \
|
||||||
|
java/awt/event/InputMethodEvent.java \
|
||||||
|
java/awt/event/MouseEvent.java \
|
||||||
|
java/awt/event/ItemEvent.java \
|
||||||
|
java/awt/event/InvocationEvent.java \
|
||||||
|
java/awt/event/PaintEvent.java \
|
||||||
|
java/awt/event/ContainerEvent.java \
|
||||||
java/awt/AWTEvent.java \
|
java/awt/AWTEvent.java \
|
||||||
java/awt/AWTException.java \
|
|
||||||
java/awt/ActiveEvent.java \
|
|
||||||
java/awt/Adjustable.java \
|
|
||||||
java/awt/BorderLayout.java \
|
java/awt/BorderLayout.java \
|
||||||
java/awt/Color.java \
|
|
||||||
java/awt/Component.java \
|
java/awt/Component.java \
|
||||||
java/awt/Container.java \
|
java/awt/Container.java \
|
||||||
java/awt/Dimension.java \
|
java/awt/Dimension.java \
|
||||||
java/awt/Event.java \
|
java/awt/Event.java \
|
||||||
java/awt/Font.java \
|
java/awt/Font.java \
|
||||||
java/awt/Frame.java \
|
java/awt/Frame.java \
|
||||||
java/awt/Graphics.java \
|
|
||||||
java/awt/IllegalComponentStateException.java \
|
|
||||||
java/awt/Image.java \
|
|
||||||
java/awt/ItemSelectable.java \
|
|
||||||
java/awt/LayoutManager.java \
|
java/awt/LayoutManager.java \
|
||||||
java/awt/LayoutManager2.java \
|
java/awt/LayoutManager2.java \
|
||||||
java/awt/Menu.java \
|
java/awt/Menu.java \
|
||||||
|
@ -317,56 +347,31 @@ java/awt/MenuBar.java \
|
||||||
java/awt/MenuComponent.java \
|
java/awt/MenuComponent.java \
|
||||||
java/awt/MenuContainer.java \
|
java/awt/MenuContainer.java \
|
||||||
java/awt/MenuItem.java \
|
java/awt/MenuItem.java \
|
||||||
java/awt/Paint.java \
|
|
||||||
java/awt/PaintContext.java \
|
|
||||||
java/awt/Point.java \
|
java/awt/Point.java \
|
||||||
java/awt/Rectangle.java \
|
java/awt/AWTError.java \
|
||||||
java/awt/Shape.java \
|
java/awt/Shape.java \
|
||||||
java/awt/TextArea.java \
|
java/awt/TextArea.java \
|
||||||
java/awt/TextComponent.java \
|
java/awt/TextComponent.java \
|
||||||
java/awt/Toolkit.java \
|
java/awt/Toolkit.java \
|
||||||
java/awt/Transparency.java \
|
|
||||||
java/awt/Window.java \
|
java/awt/Window.java \
|
||||||
java/awt/event/AWTEventListener.java \
|
|
||||||
java/awt/event/ActionEvent.java \
|
|
||||||
java/awt/event/ActionListener.java \
|
|
||||||
java/awt/event/AdjustmentEvent.java \
|
|
||||||
java/awt/event/AdjustmentListener.java \
|
|
||||||
java/awt/event/ComponentAdapter.java \
|
|
||||||
java/awt/event/ComponentEvent.java \
|
|
||||||
java/awt/event/ComponentListener.java \
|
|
||||||
java/awt/event/ContainerAdapter.java \
|
|
||||||
java/awt/event/ContainerEvent.java \
|
|
||||||
java/awt/event/ContainerListener.java \
|
|
||||||
java/awt/event/FocusAdapter.java \
|
|
||||||
java/awt/event/FocusEvent.java \
|
|
||||||
java/awt/event/FocusListener.java \
|
|
||||||
java/awt/event/InputEvent.java \
|
|
||||||
java/awt/event/InputMethodEvent.java \
|
|
||||||
java/awt/event/InputMethodListener.java \
|
|
||||||
java/awt/event/InvocationEvent.java \
|
|
||||||
java/awt/event/ItemEvent.java \
|
|
||||||
java/awt/event/ItemListener.java \
|
|
||||||
java/awt/event/KeyAdapter.java \
|
|
||||||
java/awt/event/KeyEvent.java \
|
|
||||||
java/awt/event/KeyListener.java \
|
|
||||||
java/awt/event/MouseAdapter.java \
|
|
||||||
java/awt/event/MouseEvent.java \
|
|
||||||
java/awt/event/MouseListener.java \
|
|
||||||
java/awt/event/MouseMotionAdapter.java \
|
|
||||||
java/awt/event/MouseMotionListener.java \
|
|
||||||
java/awt/event/PaintEvent.java \
|
|
||||||
java/awt/event/TextEvent.java \
|
|
||||||
java/awt/event/TextListener.java \
|
|
||||||
java/awt/event/WindowAdapter.java \
|
|
||||||
java/awt/event/WindowEvent.java \
|
|
||||||
java/awt/event/WindowListener.java \
|
|
||||||
java/awt/geom/Dimension2D.java \
|
java/awt/geom/Dimension2D.java \
|
||||||
java/awt/geom/Point2D.java \
|
java/awt/geom/Point2D.java \
|
||||||
java/awt/peer/ComponentPeer.java \
|
java/awt/peer/ComponentPeer.java \
|
||||||
java/awt/peer/ContainerPeer.java \
|
java/awt/peer/ContainerPeer.java \
|
||||||
java/awt/peer/FramePeer.java \
|
java/awt/peer/FramePeer.java \
|
||||||
java/awt/peer/WindowPeer.java
|
java/awt/peer/WindowPeer.java \
|
||||||
|
java/awt/Adjustable.java \
|
||||||
|
java/awt/Color.java \
|
||||||
|
java/awt/Graphics.java \
|
||||||
|
java/awt/Image.java \
|
||||||
|
java/awt/Paint.java \
|
||||||
|
java/awt/PaintContext.java \
|
||||||
|
java/awt/Transparency.java \
|
||||||
|
java/awt/ItemSelectable.java \
|
||||||
|
java/awt/AWTException.java \
|
||||||
|
java/awt/ActiveEvent.java \
|
||||||
|
java/awt/Rectangle.java \
|
||||||
|
java/awt/IllegalComponentStateException.java
|
||||||
|
|
||||||
@AWT_TRUE@cond_awt_java_source_files = \
|
@AWT_TRUE@cond_awt_java_source_files = \
|
||||||
@AWT_TRUE@$(awt_java_source_files)
|
@AWT_TRUE@$(awt_java_source_files)
|
||||||
|
@ -375,11 +380,12 @@ java/awt/peer/WindowPeer.java
|
||||||
built_java_source_files = java/lang/ConcreteProcess.java
|
built_java_source_files = java/lang/ConcreteProcess.java
|
||||||
|
|
||||||
ordinary_java_source_files = $(convert_source_files) \
|
ordinary_java_source_files = $(convert_source_files) \
|
||||||
gnu/gcj/io/DefaultMimeTypes.java \
|
gnu/gcj/protocol/http/Connection.java \
|
||||||
gnu/gcj/io/MimeTypes.java \
|
gnu/gcj/protocol/http/Handler.java \
|
||||||
gnu/gcj/jni/NativeThread.java \
|
gnu/gcj/protocol/file/Connection.java \
|
||||||
gnu/gcj/runtime/VMClassLoader.java \
|
gnu/gcj/protocol/file/Handler.java \
|
||||||
gnu/gcj/runtime/FirstThread.java \
|
gnu/gcj/protocol/jar/Connection.java \
|
||||||
|
gnu/gcj/protocol/jar/Handler.java \
|
||||||
gnu/gcj/text/BaseBreakIterator.java \
|
gnu/gcj/text/BaseBreakIterator.java \
|
||||||
gnu/gcj/text/CharacterBreakIterator.java \
|
gnu/gcj/text/CharacterBreakIterator.java \
|
||||||
gnu/gcj/text/LineBreakIterator.java \
|
gnu/gcj/text/LineBreakIterator.java \
|
||||||
|
@ -387,15 +393,36 @@ gnu/gcj/text/LocaleData_en.java \
|
||||||
gnu/gcj/text/LocaleData_en_US.java \
|
gnu/gcj/text/LocaleData_en_US.java \
|
||||||
gnu/gcj/text/SentenceBreakIterator.java \
|
gnu/gcj/text/SentenceBreakIterator.java \
|
||||||
gnu/gcj/text/WordBreakIterator.java \
|
gnu/gcj/text/WordBreakIterator.java \
|
||||||
gnu/gcj/math/MPN.java \
|
|
||||||
gnu/gcj/protocol/file/Connection.java \
|
|
||||||
gnu/gcj/protocol/file/Handler.java \
|
|
||||||
gnu/gcj/protocol/http/Connection.java \
|
|
||||||
gnu/gcj/protocol/http/Handler.java \
|
|
||||||
gnu/gcj/protocol/jar/Handler.java \
|
|
||||||
gnu/gcj/protocol/jar/Connection.java \
|
|
||||||
gnu/gcj/RawData.java \
|
|
||||||
gnu/gcj/util/EnumerationChain.java \
|
gnu/gcj/util/EnumerationChain.java \
|
||||||
|
gnu/gcj/RawData.java \
|
||||||
|
gnu/gcj/math/MPN.java \
|
||||||
|
gnu/gcj/runtime/VMClassLoader.java \
|
||||||
|
gnu/gcj/runtime/FirstThread.java \
|
||||||
|
gnu/gcj/jni/NativeThread.java \
|
||||||
|
gnu/gcj/io/DefaultMimeTypes.java \
|
||||||
|
gnu/gcj/io/MimeTypes.java \
|
||||||
|
gnu/gcj/io/SimpleSHSStream.java \
|
||||||
|
gnu/java/beans/editors/ColorEditor.java \
|
||||||
|
gnu/java/beans/editors/FontEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeBooleanEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeByteEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeDoubleEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeFloatEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeIntEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeLongEditor.java \
|
||||||
|
gnu/java/beans/editors/NativeShortEditor.java \
|
||||||
|
gnu/java/beans/editors/StringEditor.java \
|
||||||
|
gnu/java/beans/info/ComponentBeanInfo.java \
|
||||||
|
gnu/java/beans/BeanInfoEmbryo.java \
|
||||||
|
gnu/java/beans/EmptyBeanInfo.java \
|
||||||
|
gnu/java/beans/ExplicitBeanInfo.java \
|
||||||
|
gnu/java/beans/IntrospectionIncubator.java \
|
||||||
|
gnu/java/io/ClassLoaderObjectInputStream.java \
|
||||||
|
gnu/java/io/NullOutputStream.java \
|
||||||
|
gnu/java/io/ObjectIdentityWrapper.java \
|
||||||
|
gnu/java/lang/reflect/TypeSignature.java \
|
||||||
|
gnu/java/lang/ArrayHelper.java \
|
||||||
|
gnu/java/lang/ClassHelper.java \
|
||||||
java/io/BufferedInputStream.java \
|
java/io/BufferedInputStream.java \
|
||||||
java/io/BufferedOutputStream.java \
|
java/io/BufferedOutputStream.java \
|
||||||
java/io/BufferedReader.java \
|
java/io/BufferedReader.java \
|
||||||
|
@ -411,7 +438,6 @@ java/io/DataOutput.java \
|
||||||
java/io/DataOutputStream.java \
|
java/io/DataOutputStream.java \
|
||||||
java/io/EOFException.java \
|
java/io/EOFException.java \
|
||||||
java/io/File.java \
|
java/io/File.java \
|
||||||
java/io/FileDescriptor.java \
|
|
||||||
java/io/FileInputStream.java \
|
java/io/FileInputStream.java \
|
||||||
java/io/FileNotFoundException.java \
|
java/io/FileNotFoundException.java \
|
||||||
java/io/FileOutputStream.java \
|
java/io/FileOutputStream.java \
|
||||||
|
@ -428,11 +454,10 @@ java/io/InputStreamReader.java \
|
||||||
java/io/InterruptedIOException.java \
|
java/io/InterruptedIOException.java \
|
||||||
java/io/LineNumberInputStream.java \
|
java/io/LineNumberInputStream.java \
|
||||||
java/io/LineNumberReader.java \
|
java/io/LineNumberReader.java \
|
||||||
java/io/ObjectStreamException.java \
|
|
||||||
java/io/OptionalDataException.java \
|
|
||||||
java/io/OutputStream.java \
|
java/io/OutputStream.java \
|
||||||
java/io/OutputStreamWriter.java \
|
java/io/OutputStreamWriter.java \
|
||||||
java/io/PipedInputStream.java \
|
java/io/Externalizable.java \
|
||||||
|
java/io/FileDescriptor.java \
|
||||||
java/io/PipedOutputStream.java \
|
java/io/PipedOutputStream.java \
|
||||||
java/io/PipedReader.java \
|
java/io/PipedReader.java \
|
||||||
java/io/PipedWriter.java \
|
java/io/PipedWriter.java \
|
||||||
|
@ -444,7 +469,6 @@ java/io/RandomAccessFile.java \
|
||||||
java/io/Reader.java \
|
java/io/Reader.java \
|
||||||
java/io/SequenceInputStream.java \
|
java/io/SequenceInputStream.java \
|
||||||
java/io/Serializable.java \
|
java/io/Serializable.java \
|
||||||
java/io/StreamCorruptedException.java \
|
|
||||||
java/io/StreamTokenizer.java \
|
java/io/StreamTokenizer.java \
|
||||||
java/io/StringBufferInputStream.java \
|
java/io/StringBufferInputStream.java \
|
||||||
java/io/StringReader.java \
|
java/io/StringReader.java \
|
||||||
|
@ -453,6 +477,35 @@ java/io/SyncFailedException.java \
|
||||||
java/io/UTFDataFormatException.java \
|
java/io/UTFDataFormatException.java \
|
||||||
java/io/UnsupportedEncodingException.java \
|
java/io/UnsupportedEncodingException.java \
|
||||||
java/io/Writer.java \
|
java/io/Writer.java \
|
||||||
|
java/io/ObjectStreamException.java \
|
||||||
|
java/io/OptionalDataException.java \
|
||||||
|
java/io/StreamCorruptedException.java \
|
||||||
|
java/io/BlockDataException.java \
|
||||||
|
java/io/InvalidClassException.java \
|
||||||
|
java/io/InvalidObjectException.java \
|
||||||
|
java/io/NotActiveException.java \
|
||||||
|
java/io/NotSerializableException.java \
|
||||||
|
java/io/ObjectInput.java \
|
||||||
|
java/io/ObjectInputStream.java \
|
||||||
|
java/io/ObjectInputValidation.java \
|
||||||
|
java/io/ObjectOutput.java \
|
||||||
|
java/io/ObjectOutputStream.java \
|
||||||
|
java/io/ObjectStreamClass.java \
|
||||||
|
java/io/ObjectStreamConstants.java \
|
||||||
|
java/io/ObjectStreamField.java \
|
||||||
|
java/io/Replaceable.java \
|
||||||
|
java/io/Resolvable.java \
|
||||||
|
java/io/SerializablePermission.java \
|
||||||
|
java/io/WriteAbortedException.java \
|
||||||
|
java/io/PipedInputStream.java \
|
||||||
|
java/lang/reflect/Constructor.java \
|
||||||
|
java/lang/reflect/AccessibleObject.java \
|
||||||
|
java/lang/reflect/Array.java \
|
||||||
|
java/lang/reflect/Method.java \
|
||||||
|
java/lang/reflect/Field.java \
|
||||||
|
java/lang/reflect/InvocationTargetException.java \
|
||||||
|
java/lang/reflect/Member.java \
|
||||||
|
java/lang/reflect/Modifier.java \
|
||||||
java/lang/AbstractMethodError.java \
|
java/lang/AbstractMethodError.java \
|
||||||
java/lang/ArithmeticException.java \
|
java/lang/ArithmeticException.java \
|
||||||
java/lang/ArrayIndexOutOfBoundsException.java \
|
java/lang/ArrayIndexOutOfBoundsException.java \
|
||||||
|
@ -481,10 +534,10 @@ java/lang/IllegalMonitorStateException.java \
|
||||||
java/lang/IllegalStateException.java \
|
java/lang/IllegalStateException.java \
|
||||||
java/lang/IllegalThreadStateException.java \
|
java/lang/IllegalThreadStateException.java \
|
||||||
java/lang/IncompatibleClassChangeError.java \
|
java/lang/IncompatibleClassChangeError.java \
|
||||||
java/lang/IndexOutOfBoundsException.java \
|
|
||||||
java/lang/InstantiationError.java \
|
java/lang/InstantiationError.java \
|
||||||
java/lang/InstantiationException.java \
|
|
||||||
java/lang/Integer.java \
|
java/lang/Integer.java \
|
||||||
|
java/lang/IndexOutOfBoundsException.java \
|
||||||
|
java/lang/InstantiationException.java \
|
||||||
java/lang/InternalError.java \
|
java/lang/InternalError.java \
|
||||||
java/lang/InterruptedException.java \
|
java/lang/InterruptedException.java \
|
||||||
java/lang/LinkageError.java \
|
java/lang/LinkageError.java \
|
||||||
|
@ -522,48 +575,123 @@ java/lang/UnsupportedOperationException.java \
|
||||||
java/lang/VerifyError.java \
|
java/lang/VerifyError.java \
|
||||||
java/lang/VirtualMachineError.java \
|
java/lang/VirtualMachineError.java \
|
||||||
java/lang/Void.java \
|
java/lang/Void.java \
|
||||||
java/lang/reflect/AccessibleObject.java \
|
|
||||||
java/lang/reflect/Array.java \
|
|
||||||
java/lang/reflect/Constructor.java \
|
|
||||||
java/lang/reflect/Field.java \
|
|
||||||
java/lang/reflect/InvocationTargetException.java \
|
|
||||||
java/lang/reflect/Member.java \
|
|
||||||
java/lang/reflect/Method.java \
|
|
||||||
java/lang/reflect/Modifier.java \
|
|
||||||
java/math/BigDecimal.java \
|
|
||||||
java/math/BigInteger.java \
|
|
||||||
java/net/BindException.java \
|
java/net/BindException.java \
|
||||||
java/net/ConnectException.java \
|
java/net/ConnectException.java \
|
||||||
java/net/ContentHandler.java \
|
java/net/ContentHandler.java \
|
||||||
java/net/ContentHandlerFactory.java \
|
java/net/ContentHandlerFactory.java \
|
||||||
java/net/DatagramPacket.java \
|
|
||||||
java/net/DatagramSocket.java \
|
|
||||||
java/net/DatagramSocketImpl.java \
|
|
||||||
java/net/FileNameMap.java \
|
java/net/FileNameMap.java \
|
||||||
java/net/HttpURLConnection.java \
|
java/net/HttpURLConnection.java \
|
||||||
java/net/InetAddress.java \
|
java/net/InetAddress.java \
|
||||||
java/net/JarURLConnection.java \
|
|
||||||
java/net/MalformedURLException.java \
|
java/net/MalformedURLException.java \
|
||||||
java/net/MulticastSocket.java \
|
|
||||||
java/net/NoRouteToHostException.java \
|
java/net/NoRouteToHostException.java \
|
||||||
java/net/PlainDatagramSocketImpl.java \
|
|
||||||
java/net/PlainSocketImpl.java \
|
java/net/PlainSocketImpl.java \
|
||||||
java/net/ProtocolException.java \
|
java/net/ProtocolException.java \
|
||||||
java/net/ServerSocket.java \
|
java/net/ServerSocket.java \
|
||||||
|
java/net/URL.java \
|
||||||
java/net/Socket.java \
|
java/net/Socket.java \
|
||||||
java/net/SocketException.java \
|
java/net/SocketException.java \
|
||||||
java/net/SocketImpl.java \
|
java/net/SocketImpl.java \
|
||||||
java/net/SocketImplFactory.java \
|
java/net/SocketImplFactory.java \
|
||||||
java/net/SocketOptions.java \
|
|
||||||
java/net/URL.java \
|
|
||||||
java/net/URLClassLoader.java \
|
|
||||||
java/net/URLConnection.java \
|
java/net/URLConnection.java \
|
||||||
java/net/URLDecoder.java \
|
|
||||||
java/net/URLEncoder.java \
|
|
||||||
java/net/URLStreamHandler.java \
|
java/net/URLStreamHandler.java \
|
||||||
java/net/URLStreamHandlerFactory.java \
|
java/net/URLStreamHandlerFactory.java \
|
||||||
java/net/UnknownHostException.java \
|
java/net/UnknownHostException.java \
|
||||||
java/net/UnknownServiceException.java \
|
java/net/UnknownServiceException.java \
|
||||||
|
java/net/URLDecoder.java \
|
||||||
|
java/net/URLEncoder.java \
|
||||||
|
java/net/DatagramPacket.java \
|
||||||
|
java/net/DatagramSocket.java \
|
||||||
|
java/net/DatagramSocketImpl.java \
|
||||||
|
java/net/MulticastSocket.java \
|
||||||
|
java/net/PlainDatagramSocketImpl.java \
|
||||||
|
java/net/SocketOptions.java \
|
||||||
|
java/net/JarURLConnection.java \
|
||||||
|
java/net/URLClassLoader.java \
|
||||||
|
java/text/Collator.java \
|
||||||
|
java/text/BreakIterator.java \
|
||||||
|
java/text/CharacterIterator.java \
|
||||||
|
java/text/ChoiceFormat.java \
|
||||||
|
java/text/DateFormat.java \
|
||||||
|
java/text/DateFormatSymbols.java \
|
||||||
|
java/text/DecimalFormat.java \
|
||||||
|
java/text/DecimalFormatSymbols.java \
|
||||||
|
java/text/FieldPosition.java \
|
||||||
|
java/text/Format.java \
|
||||||
|
java/text/MessageFormat.java \
|
||||||
|
java/text/NumberFormat.java \
|
||||||
|
java/text/ParseException.java \
|
||||||
|
java/text/ParsePosition.java \
|
||||||
|
java/text/SimpleDateFormat.java \
|
||||||
|
java/text/StringCharacterIterator.java \
|
||||||
|
java/text/CollationElementIterator.java \
|
||||||
|
java/text/CollationKey.java \
|
||||||
|
java/text/RuleBasedCollator.java \
|
||||||
|
java/util/zip/Adler32.java \
|
||||||
|
java/util/zip/CRC32.java \
|
||||||
|
java/util/zip/Checksum.java \
|
||||||
|
java/util/zip/Deflater.java \
|
||||||
|
java/util/zip/DeflaterOutputStream.java \
|
||||||
|
java/util/zip/ZipConstants.java \
|
||||||
|
java/util/zip/ZipEntry.java \
|
||||||
|
java/util/zip/ZipException.java \
|
||||||
|
java/util/zip/ZipFile.java \
|
||||||
|
java/util/zip/ZipOutputStream.java \
|
||||||
|
java/util/zip/InflaterInputStream.java \
|
||||||
|
java/util/zip/ZipInputStream.java \
|
||||||
|
java/util/zip/DataFormatException.java \
|
||||||
|
java/util/zip/CheckedInputStream.java \
|
||||||
|
java/util/zip/CheckedOutputStream.java \
|
||||||
|
java/util/zip/Inflater.java \
|
||||||
|
java/util/zip/GZIPInputStream.java \
|
||||||
|
java/util/zip/GZIPOutputStream.java \
|
||||||
|
java/util/jar/JarEntry.java \
|
||||||
|
java/util/jar/JarFile.java \
|
||||||
|
java/util/jar/JarInputStream.java \
|
||||||
|
java/util/BitSet.java \
|
||||||
|
java/util/Calendar.java \
|
||||||
|
java/util/ConcurrentModificationException.java \
|
||||||
|
java/util/Date.java \
|
||||||
|
java/util/Dictionary.java \
|
||||||
|
java/util/EmptyStackException.java \
|
||||||
|
java/util/Enumeration.java \
|
||||||
|
java/util/EventListener.java \
|
||||||
|
java/util/EventObject.java \
|
||||||
|
java/util/GregorianCalendar.java \
|
||||||
|
java/util/Hashtable.java \
|
||||||
|
java/util/ListResourceBundle.java \
|
||||||
|
java/util/Locale.java \
|
||||||
|
java/util/MissingResourceException.java \
|
||||||
|
java/util/NoSuchElementException.java \
|
||||||
|
java/util/Observable.java \
|
||||||
|
java/util/Observer.java \
|
||||||
|
java/util/Properties.java \
|
||||||
|
java/util/Random.java \
|
||||||
|
java/util/ResourceBundle.java \
|
||||||
|
java/util/SimpleTimeZone.java \
|
||||||
|
java/util/Stack.java \
|
||||||
|
java/util/StringTokenizer.java \
|
||||||
|
java/util/TimeZone.java \
|
||||||
|
java/util/TooManyListenersException.java \
|
||||||
|
java/util/Vector.java \
|
||||||
|
java/util/List.java \
|
||||||
|
java/util/Collection.java \
|
||||||
|
java/util/Comparator.java \
|
||||||
|
java/util/Iterator.java \
|
||||||
|
java/util/PropertyResourceBundle.java \
|
||||||
|
java/util/Arrays.java \
|
||||||
|
java/util/ListIterator.java \
|
||||||
|
java/util/AbstractCollection.java \
|
||||||
|
java/util/AbstractList.java \
|
||||||
|
java/security/MessageDigest.java \
|
||||||
|
java/security/NoSuchAlgorithmException.java \
|
||||||
|
java/security/SecureClassLoader.java \
|
||||||
|
java/security/interfaces/DSAKey.java \
|
||||||
|
java/security/interfaces/DSAParams.java \
|
||||||
|
java/security/interfaces/DSAPrivateKey.java \
|
||||||
|
java/security/interfaces/DSAPublicKey.java \
|
||||||
|
java/security/interfaces/RSAPrivateCrtKey.java \
|
||||||
|
java/security/interfaces/RSAPrivateKey.java \
|
||||||
|
java/security/interfaces/RSAPublicKey.java \
|
||||||
java/security/AlgorithmParameterGeneratorSpi.java \
|
java/security/AlgorithmParameterGeneratorSpi.java \
|
||||||
java/security/DigestException.java \
|
java/security/DigestException.java \
|
||||||
java/security/GeneralSecurityException.java \
|
java/security/GeneralSecurityException.java \
|
||||||
|
@ -575,24 +703,14 @@ java/security/KeyException.java \
|
||||||
java/security/KeyPair.java \
|
java/security/KeyPair.java \
|
||||||
java/security/KeyPairGenerator.java \
|
java/security/KeyPairGenerator.java \
|
||||||
java/security/KeyPairGeneratorSpi.java \
|
java/security/KeyPairGeneratorSpi.java \
|
||||||
java/security/MessageDigest.java \
|
|
||||||
java/security/NoSuchAlgorithmException.java \
|
|
||||||
java/security/NoSuchProviderException.java \
|
java/security/NoSuchProviderException.java \
|
||||||
java/security/PrivateKey.java \
|
java/security/PrivateKey.java \
|
||||||
java/security/Provider.java \
|
java/security/Provider.java \
|
||||||
java/security/PublicKey.java \
|
java/security/PublicKey.java \
|
||||||
java/security/SecureClassLoader.java \
|
|
||||||
java/security/SecureRandom.java \
|
java/security/SecureRandom.java \
|
||||||
java/security/Security.java \
|
java/security/Security.java \
|
||||||
java/security/Signature.java \
|
java/security/Signature.java \
|
||||||
java/security/SignatureException.java \
|
java/security/SignatureException.java \
|
||||||
java/security/interfaces/DSAKey.java \
|
|
||||||
java/security/interfaces/DSAParams.java \
|
|
||||||
java/security/interfaces/DSAPrivateKey.java \
|
|
||||||
java/security/interfaces/DSAPublicKey.java \
|
|
||||||
java/security/interfaces/RSAPrivateCrtKey.java \
|
|
||||||
java/security/interfaces/RSAPrivateKey.java \
|
|
||||||
java/security/interfaces/RSAPublicKey.java \
|
|
||||||
java/security/spec/AlgorithmParameterSpec.java \
|
java/security/spec/AlgorithmParameterSpec.java \
|
||||||
java/security/spec/InvalidKeySpecException.java \
|
java/security/spec/InvalidKeySpecException.java \
|
||||||
java/security/spec/InvalidParameterSpecException.java \
|
java/security/spec/InvalidParameterSpecException.java \
|
||||||
|
@ -600,6 +718,13 @@ java/security/spec/KeySpec.java \
|
||||||
java/security/spec/RSAPrivateCrtKeySpec.java \
|
java/security/spec/RSAPrivateCrtKeySpec.java \
|
||||||
java/security/spec/RSAPrivateKeySpec.java \
|
java/security/spec/RSAPrivateKeySpec.java \
|
||||||
java/security/spec/RSAPublicKeySpec.java \
|
java/security/spec/RSAPublicKeySpec.java \
|
||||||
|
java/security/BasicPermission.java \
|
||||||
|
java/security/Guard.java \
|
||||||
|
java/security/DigestOutputStream.java \
|
||||||
|
java/security/Permission.java \
|
||||||
|
java/security/PermissionCollection.java \
|
||||||
|
java/math/BigDecimal.java \
|
||||||
|
java/math/BigInteger.java \
|
||||||
java/sql/CallableStatement.java \
|
java/sql/CallableStatement.java \
|
||||||
java/sql/Connection.java \
|
java/sql/Connection.java \
|
||||||
java/sql/DataTruncation.java \
|
java/sql/DataTruncation.java \
|
||||||
|
@ -617,78 +742,46 @@ java/sql/Statement.java \
|
||||||
java/sql/Time.java \
|
java/sql/Time.java \
|
||||||
java/sql/Timestamp.java \
|
java/sql/Timestamp.java \
|
||||||
java/sql/Types.java \
|
java/sql/Types.java \
|
||||||
java/text/BreakIterator.java \
|
java/beans/beancontext/BeanContext.java \
|
||||||
java/text/CharacterIterator.java \
|
java/beans/beancontext/BeanContextChild.java \
|
||||||
java/text/ChoiceFormat.java \
|
java/beans/beancontext/BeanContextChildComponentProxy.java \
|
||||||
java/text/CollationElementIterator.java \
|
java/beans/beancontext/BeanContextChildSupport.java \
|
||||||
java/text/CollationKey.java \
|
java/beans/beancontext/BeanContextContainerProxy.java \
|
||||||
java/text/Collator.java \
|
java/beans/beancontext/BeanContextEvent.java \
|
||||||
java/text/DateFormat.java \
|
java/beans/beancontext/BeanContextMembershipEvent.java \
|
||||||
java/text/DateFormatSymbols.java \
|
java/beans/beancontext/BeanContextMembershipListener.java \
|
||||||
java/text/DecimalFormat.java \
|
java/beans/beancontext/BeanContextProxy.java \
|
||||||
java/text/DecimalFormatSymbols.java \
|
java/beans/beancontext/BeanContextServiceAvailableEvent.java \
|
||||||
java/text/FieldPosition.java \
|
java/beans/beancontext/BeanContextServiceProvider.java \
|
||||||
java/text/Format.java \
|
java/beans/beancontext/BeanContextServiceProviderBeanInfo.java \
|
||||||
java/text/MessageFormat.java \
|
java/beans/beancontext/BeanContextServiceRevokedEvent.java \
|
||||||
java/text/NumberFormat.java \
|
java/beans/beancontext/BeanContextServiceRevokedListener.java \
|
||||||
java/text/ParseException.java \
|
java/beans/beancontext/BeanContextServices.java \
|
||||||
java/text/ParsePosition.java \
|
java/beans/beancontext/BeanContextServicesListener.java \
|
||||||
java/text/RuleBasedCollator.java \
|
java/beans/BeanDescriptor.java \
|
||||||
java/text/SimpleDateFormat.java \
|
java/beans/BeanInfo.java \
|
||||||
java/text/StringCharacterIterator.java \
|
java/beans/Beans.java \
|
||||||
java/util/BitSet.java \
|
java/beans/Customizer.java \
|
||||||
java/util/Calendar.java \
|
java/beans/DesignMode.java \
|
||||||
java/util/Collection.java \
|
java/beans/EventSetDescriptor.java \
|
||||||
java/util/Comparator.java \
|
java/beans/FeatureDescriptor.java \
|
||||||
java/util/ConcurrentModificationException.java \
|
java/beans/IndexedPropertyDescriptor.java \
|
||||||
java/util/Date.java \
|
java/beans/IntrospectionException.java \
|
||||||
java/util/Dictionary.java \
|
java/beans/Introspector.java \
|
||||||
java/util/EmptyStackException.java \
|
java/beans/MethodDescriptor.java \
|
||||||
java/util/Enumeration.java \
|
java/beans/ParameterDescriptor.java \
|
||||||
java/util/EventListener.java \
|
java/beans/PropertyChangeEvent.java \
|
||||||
java/util/EventObject.java \
|
java/beans/PropertyChangeListener.java \
|
||||||
java/util/GregorianCalendar.java \
|
java/beans/PropertyChangeSupport.java \
|
||||||
java/util/Hashtable.java \
|
java/beans/PropertyDescriptor.java \
|
||||||
java/util/Iterator.java \
|
java/beans/PropertyEditor.java \
|
||||||
java/util/List.java \
|
java/beans/PropertyEditorManager.java \
|
||||||
java/util/ListIterator.java \
|
java/beans/PropertyEditorSupport.java \
|
||||||
java/util/ListResourceBundle.java \
|
java/beans/PropertyVetoException.java \
|
||||||
java/util/Locale.java \
|
java/beans/SimpleBeanInfo.java \
|
||||||
java/util/MissingResourceException.java \
|
java/beans/VetoableChangeListener.java \
|
||||||
java/util/NoSuchElementException.java \
|
java/beans/VetoableChangeSupport.java \
|
||||||
java/util/Observable.java \
|
java/beans/Visibility.java
|
||||||
java/util/Observer.java \
|
|
||||||
java/util/Properties.java \
|
|
||||||
java/util/PropertyResourceBundle.java \
|
|
||||||
java/util/Random.java \
|
|
||||||
java/util/ResourceBundle.java \
|
|
||||||
java/util/SimpleTimeZone.java \
|
|
||||||
java/util/Stack.java \
|
|
||||||
java/util/StringTokenizer.java \
|
|
||||||
java/util/TimeZone.java \
|
|
||||||
java/util/TooManyListenersException.java \
|
|
||||||
java/util/Vector.java \
|
|
||||||
java/util/jar/JarFile.java \
|
|
||||||
java/util/jar/JarInputStream.java \
|
|
||||||
java/util/jar/JarEntry.java \
|
|
||||||
java/util/zip/Adler32.java \
|
|
||||||
java/util/zip/CRC32.java \
|
|
||||||
java/util/zip/CheckedInputStream.java \
|
|
||||||
java/util/zip/CheckedOutputStream.java \
|
|
||||||
java/util/zip/Checksum.java \
|
|
||||||
java/util/zip/DataFormatException.java \
|
|
||||||
java/util/zip/Deflater.java \
|
|
||||||
java/util/zip/DeflaterOutputStream.java \
|
|
||||||
java/util/zip/GZIPInputStream.java \
|
|
||||||
java/util/zip/GZIPOutputStream.java \
|
|
||||||
java/util/zip/Inflater.java \
|
|
||||||
java/util/zip/InflaterInputStream.java \
|
|
||||||
java/util/zip/ZipConstants.java \
|
|
||||||
java/util/zip/ZipEntry.java \
|
|
||||||
java/util/zip/ZipException.java \
|
|
||||||
java/util/zip/ZipFile.java \
|
|
||||||
java/util/zip/ZipInputStream.java \
|
|
||||||
java/util/zip/ZipOutputStream.java
|
|
||||||
|
|
||||||
|
|
||||||
java_source_files = $(ordinary_java_source_files) $(special_java_source_files)
|
java_source_files = $(ordinary_java_source_files) $(special_java_source_files)
|
||||||
|
@ -720,10 +813,14 @@ gnu/gcj/convert/natInput_EUCJIS.cc \
|
||||||
gnu/gcj/convert/natInput_SJIS.cc \
|
gnu/gcj/convert/natInput_SJIS.cc \
|
||||||
gnu/gcj/convert/natOutput_EUCJIS.cc \
|
gnu/gcj/convert/natOutput_EUCJIS.cc \
|
||||||
gnu/gcj/convert/natOutput_SJIS.cc \
|
gnu/gcj/convert/natOutput_SJIS.cc \
|
||||||
|
gnu/gcj/io/natSimpleSHSStream.cc \
|
||||||
|
gnu/gcj/io/shs.cc \
|
||||||
gnu/gcj/jni/natNativeThread.cc \
|
gnu/gcj/jni/natNativeThread.cc \
|
||||||
gnu/gcj/runtime/natFirstThread.cc \
|
gnu/gcj/runtime/natFirstThread.cc \
|
||||||
java/io/natFile.cc \
|
java/io/natFile.cc \
|
||||||
java/io/natFileDescriptor.cc \
|
java/io/natFileDescriptor.cc \
|
||||||
|
java/io/natObjectInputStream.cc \
|
||||||
|
java/io/natObjectOutputStream.cc \
|
||||||
java/lang/natCharacter.cc \
|
java/lang/natCharacter.cc \
|
||||||
java/lang/natClass.cc \
|
java/lang/natClass.cc \
|
||||||
java/lang/natClassLoader.cc \
|
java/lang/natClassLoader.cc \
|
||||||
|
@ -800,8 +897,6 @@ MULTIDIRS =
|
||||||
MULTISUBDIR =
|
MULTISUBDIR =
|
||||||
MULTIDO = true
|
MULTIDO = true
|
||||||
MULTICLEAN = true
|
MULTICLEAN = true
|
||||||
|
|
||||||
cygnus_hack =
|
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
||||||
CONFIG_HEADER = ./include/config.h
|
CONFIG_HEADER = ./include/config.h
|
||||||
|
@ -829,6 +924,8 @@ jv_convert_OBJECTS =
|
||||||
gij_OBJECTS = gij.o
|
gij_OBJECTS = gij.o
|
||||||
gen_from_JIS_OBJECTS =
|
gen_from_JIS_OBJECTS =
|
||||||
gen_from_JIS_LDFLAGS =
|
gen_from_JIS_LDFLAGS =
|
||||||
|
SCRIPTS = $(bin_SCRIPTS)
|
||||||
|
|
||||||
CXXFLAGS = @CXXFLAGS@
|
CXXFLAGS = @CXXFLAGS@
|
||||||
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||||
LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||||
|
@ -868,8 +965,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
|
||||||
.deps/gnu/gcj/convert/Output_iconv.P \
|
.deps/gnu/gcj/convert/Output_iconv.P \
|
||||||
.deps/gnu/gcj/convert/UnicodeToBytes.P \
|
.deps/gnu/gcj/convert/UnicodeToBytes.P \
|
||||||
.deps/gnu/gcj/io/DefaultMimeTypes.P .deps/gnu/gcj/io/MimeTypes.P \
|
.deps/gnu/gcj/io/DefaultMimeTypes.P .deps/gnu/gcj/io/MimeTypes.P \
|
||||||
.deps/gnu/gcj/jni/NativeThread.P .deps/gnu/gcj/math/MPN.P \
|
.deps/gnu/gcj/io/SimpleSHSStream.P .deps/gnu/gcj/jni/NativeThread.P \
|
||||||
.deps/gnu/gcj/protocol/file/Connection.P \
|
.deps/gnu/gcj/math/MPN.P .deps/gnu/gcj/protocol/file/Connection.P \
|
||||||
.deps/gnu/gcj/protocol/file/Handler.P \
|
.deps/gnu/gcj/protocol/file/Handler.P \
|
||||||
.deps/gnu/gcj/protocol/http/Connection.P \
|
.deps/gnu/gcj/protocol/http/Connection.P \
|
||||||
.deps/gnu/gcj/protocol/http/Handler.P \
|
.deps/gnu/gcj/protocol/http/Handler.P \
|
||||||
|
@ -884,7 +981,27 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
|
||||||
.deps/gnu/gcj/text/LocaleData_en_US.P \
|
.deps/gnu/gcj/text/LocaleData_en_US.P \
|
||||||
.deps/gnu/gcj/text/SentenceBreakIterator.P \
|
.deps/gnu/gcj/text/SentenceBreakIterator.P \
|
||||||
.deps/gnu/gcj/text/WordBreakIterator.P \
|
.deps/gnu/gcj/text/WordBreakIterator.P \
|
||||||
.deps/gnu/gcj/util/EnumerationChain.P .deps/interpret.P \
|
.deps/gnu/gcj/util/EnumerationChain.P \
|
||||||
|
.deps/gnu/java/beans/BeanInfoEmbryo.P \
|
||||||
|
.deps/gnu/java/beans/EmptyBeanInfo.P \
|
||||||
|
.deps/gnu/java/beans/ExplicitBeanInfo.P \
|
||||||
|
.deps/gnu/java/beans/IntrospectionIncubator.P \
|
||||||
|
.deps/gnu/java/beans/editors/ColorEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/FontEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/NativeBooleanEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/NativeByteEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/NativeDoubleEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/NativeFloatEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/NativeIntEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/NativeLongEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/NativeShortEditor.P \
|
||||||
|
.deps/gnu/java/beans/editors/StringEditor.P \
|
||||||
|
.deps/gnu/java/beans/info/ComponentBeanInfo.P \
|
||||||
|
.deps/gnu/java/io/ClassLoaderObjectInputStream.P \
|
||||||
|
.deps/gnu/java/io/NullOutputStream.P \
|
||||||
|
.deps/gnu/java/io/ObjectIdentityWrapper.P \
|
||||||
|
.deps/gnu/java/lang/ArrayHelper.P .deps/gnu/java/lang/ClassHelper.P \
|
||||||
|
.deps/gnu/java/lang/reflect/TypeSignature.P .deps/interpret.P \
|
||||||
.deps/java/awt/AWTError.P .deps/java/awt/AWTEvent.P \
|
.deps/java/awt/AWTError.P .deps/java/awt/AWTEvent.P \
|
||||||
.deps/java/awt/AWTException.P .deps/java/awt/ActiveEvent.P \
|
.deps/java/awt/AWTException.P .deps/java/awt/ActiveEvent.P \
|
||||||
.deps/java/awt/Adjustable.P .deps/java/awt/BorderLayout.P \
|
.deps/java/awt/Adjustable.P .deps/java/awt/BorderLayout.P \
|
||||||
|
@ -930,37 +1047,83 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
|
||||||
.deps/java/awt/event/WindowListener.P .deps/java/awt/geom/Dimension2D.P \
|
.deps/java/awt/event/WindowListener.P .deps/java/awt/geom/Dimension2D.P \
|
||||||
.deps/java/awt/geom/Point2D.P .deps/java/awt/peer/ComponentPeer.P \
|
.deps/java/awt/geom/Point2D.P .deps/java/awt/peer/ComponentPeer.P \
|
||||||
.deps/java/awt/peer/ContainerPeer.P .deps/java/awt/peer/FramePeer.P \
|
.deps/java/awt/peer/ContainerPeer.P .deps/java/awt/peer/FramePeer.P \
|
||||||
.deps/java/awt/peer/WindowPeer.P .deps/java/io/BufferedInputStream.P \
|
.deps/java/awt/peer/WindowPeer.P .deps/java/beans/BeanDescriptor.P \
|
||||||
|
.deps/java/beans/BeanInfo.P .deps/java/beans/Beans.P \
|
||||||
|
.deps/java/beans/Customizer.P .deps/java/beans/DesignMode.P \
|
||||||
|
.deps/java/beans/EventSetDescriptor.P \
|
||||||
|
.deps/java/beans/FeatureDescriptor.P \
|
||||||
|
.deps/java/beans/IndexedPropertyDescriptor.P \
|
||||||
|
.deps/java/beans/IntrospectionException.P \
|
||||||
|
.deps/java/beans/Introspector.P .deps/java/beans/MethodDescriptor.P \
|
||||||
|
.deps/java/beans/ParameterDescriptor.P \
|
||||||
|
.deps/java/beans/PropertyChangeEvent.P \
|
||||||
|
.deps/java/beans/PropertyChangeListener.P \
|
||||||
|
.deps/java/beans/PropertyChangeSupport.P \
|
||||||
|
.deps/java/beans/PropertyDescriptor.P .deps/java/beans/PropertyEditor.P \
|
||||||
|
.deps/java/beans/PropertyEditorManager.P \
|
||||||
|
.deps/java/beans/PropertyEditorSupport.P \
|
||||||
|
.deps/java/beans/PropertyVetoException.P \
|
||||||
|
.deps/java/beans/SimpleBeanInfo.P \
|
||||||
|
.deps/java/beans/VetoableChangeListener.P \
|
||||||
|
.deps/java/beans/VetoableChangeSupport.P .deps/java/beans/Visibility.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContext.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextChild.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextChildComponentProxy.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextChildSupport.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextContainerProxy.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextEvent.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextMembershipEvent.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextMembershipListener.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextProxy.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextServiceAvailableEvent.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextServiceProvider.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextServiceProviderBeanInfo.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextServiceRevokedEvent.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextServiceRevokedListener.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextServices.P \
|
||||||
|
.deps/java/beans/beancontext/BeanContextServicesListener.P \
|
||||||
|
.deps/java/io/BlockDataException.P .deps/java/io/BufferedInputStream.P \
|
||||||
.deps/java/io/BufferedOutputStream.P .deps/java/io/BufferedReader.P \
|
.deps/java/io/BufferedOutputStream.P .deps/java/io/BufferedReader.P \
|
||||||
.deps/java/io/BufferedWriter.P .deps/java/io/ByteArrayInputStream.P \
|
.deps/java/io/BufferedWriter.P .deps/java/io/ByteArrayInputStream.P \
|
||||||
.deps/java/io/ByteArrayOutputStream.P .deps/java/io/CharArrayReader.P \
|
.deps/java/io/ByteArrayOutputStream.P .deps/java/io/CharArrayReader.P \
|
||||||
.deps/java/io/CharArrayWriter.P .deps/java/io/CharConversionException.P \
|
.deps/java/io/CharArrayWriter.P .deps/java/io/CharConversionException.P \
|
||||||
.deps/java/io/DataInput.P .deps/java/io/DataInputStream.P \
|
.deps/java/io/DataInput.P .deps/java/io/DataInputStream.P \
|
||||||
.deps/java/io/DataOutput.P .deps/java/io/DataOutputStream.P \
|
.deps/java/io/DataOutput.P .deps/java/io/DataOutputStream.P \
|
||||||
.deps/java/io/EOFException.P .deps/java/io/File.P \
|
.deps/java/io/EOFException.P .deps/java/io/Externalizable.P \
|
||||||
.deps/java/io/FileDescriptor.P .deps/java/io/FileInputStream.P \
|
.deps/java/io/File.P .deps/java/io/FileDescriptor.P \
|
||||||
.deps/java/io/FileNotFoundException.P .deps/java/io/FileOutputStream.P \
|
.deps/java/io/FileInputStream.P .deps/java/io/FileNotFoundException.P \
|
||||||
.deps/java/io/FileReader.P .deps/java/io/FileWriter.P \
|
.deps/java/io/FileOutputStream.P .deps/java/io/FileReader.P \
|
||||||
.deps/java/io/FilenameFilter.P .deps/java/io/FilterInputStream.P \
|
.deps/java/io/FileWriter.P .deps/java/io/FilenameFilter.P \
|
||||||
.deps/java/io/FilterOutputStream.P .deps/java/io/FilterReader.P \
|
.deps/java/io/FilterInputStream.P .deps/java/io/FilterOutputStream.P \
|
||||||
.deps/java/io/FilterWriter.P .deps/java/io/IOException.P \
|
.deps/java/io/FilterReader.P .deps/java/io/FilterWriter.P \
|
||||||
.deps/java/io/InputStream.P .deps/java/io/InputStreamReader.P \
|
.deps/java/io/IOException.P .deps/java/io/InputStream.P \
|
||||||
|
.deps/java/io/InputStreamReader.P \
|
||||||
.deps/java/io/InterruptedIOException.P \
|
.deps/java/io/InterruptedIOException.P \
|
||||||
|
.deps/java/io/InvalidClassException.P \
|
||||||
|
.deps/java/io/InvalidObjectException.P \
|
||||||
.deps/java/io/LineNumberInputStream.P .deps/java/io/LineNumberReader.P \
|
.deps/java/io/LineNumberInputStream.P .deps/java/io/LineNumberReader.P \
|
||||||
.deps/java/io/ObjectStreamException.P \
|
.deps/java/io/NotActiveException.P \
|
||||||
|
.deps/java/io/NotSerializableException.P .deps/java/io/ObjectInput.P \
|
||||||
|
.deps/java/io/ObjectInputStream.P .deps/java/io/ObjectInputValidation.P \
|
||||||
|
.deps/java/io/ObjectOutput.P .deps/java/io/ObjectOutputStream.P \
|
||||||
|
.deps/java/io/ObjectStreamClass.P .deps/java/io/ObjectStreamConstants.P \
|
||||||
|
.deps/java/io/ObjectStreamException.P .deps/java/io/ObjectStreamField.P \
|
||||||
.deps/java/io/OptionalDataException.P .deps/java/io/OutputStream.P \
|
.deps/java/io/OptionalDataException.P .deps/java/io/OutputStream.P \
|
||||||
.deps/java/io/OutputStreamWriter.P .deps/java/io/PipedInputStream.P \
|
.deps/java/io/OutputStreamWriter.P .deps/java/io/PipedInputStream.P \
|
||||||
.deps/java/io/PipedOutputStream.P .deps/java/io/PipedReader.P \
|
.deps/java/io/PipedOutputStream.P .deps/java/io/PipedReader.P \
|
||||||
.deps/java/io/PipedWriter.P .deps/java/io/PrintStream.P \
|
.deps/java/io/PipedWriter.P .deps/java/io/PrintStream.P \
|
||||||
.deps/java/io/PrintWriter.P .deps/java/io/PushbackInputStream.P \
|
.deps/java/io/PrintWriter.P .deps/java/io/PushbackInputStream.P \
|
||||||
.deps/java/io/PushbackReader.P .deps/java/io/RandomAccessFile.P \
|
.deps/java/io/PushbackReader.P .deps/java/io/RandomAccessFile.P \
|
||||||
.deps/java/io/Reader.P .deps/java/io/SequenceInputStream.P \
|
.deps/java/io/Reader.P .deps/java/io/Replaceable.P \
|
||||||
.deps/java/io/Serializable.P .deps/java/io/StreamCorruptedException.P \
|
.deps/java/io/Resolvable.P .deps/java/io/SequenceInputStream.P \
|
||||||
|
.deps/java/io/Serializable.P .deps/java/io/SerializablePermission.P \
|
||||||
|
.deps/java/io/StreamCorruptedException.P \
|
||||||
.deps/java/io/StreamTokenizer.P .deps/java/io/StringBufferInputStream.P \
|
.deps/java/io/StreamTokenizer.P .deps/java/io/StringBufferInputStream.P \
|
||||||
.deps/java/io/StringReader.P .deps/java/io/StringWriter.P \
|
.deps/java/io/StringReader.P .deps/java/io/StringWriter.P \
|
||||||
.deps/java/io/SyncFailedException.P \
|
.deps/java/io/SyncFailedException.P \
|
||||||
.deps/java/io/UTFDataFormatException.P \
|
.deps/java/io/UTFDataFormatException.P \
|
||||||
.deps/java/io/UnsupportedEncodingException.P .deps/java/io/Writer.P \
|
.deps/java/io/UnsupportedEncodingException.P \
|
||||||
|
.deps/java/io/WriteAbortedException.P .deps/java/io/Writer.P \
|
||||||
.deps/java/lang/AbstractMethodError.P \
|
.deps/java/lang/AbstractMethodError.P \
|
||||||
.deps/java/lang/ArithmeticException.P \
|
.deps/java/lang/ArithmeticException.P \
|
||||||
.deps/java/lang/ArrayIndexOutOfBoundsException.P \
|
.deps/java/lang/ArrayIndexOutOfBoundsException.P \
|
||||||
|
@ -1054,8 +1217,11 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
|
||||||
.deps/java/net/UnknownHostException.P \
|
.deps/java/net/UnknownHostException.P \
|
||||||
.deps/java/net/UnknownServiceException.P \
|
.deps/java/net/UnknownServiceException.P \
|
||||||
.deps/java/security/AlgorithmParameterGeneratorSpi.P \
|
.deps/java/security/AlgorithmParameterGeneratorSpi.P \
|
||||||
|
.deps/java/security/BasicPermission.P \
|
||||||
.deps/java/security/DigestException.P \
|
.deps/java/security/DigestException.P \
|
||||||
|
.deps/java/security/DigestOutputStream.P \
|
||||||
.deps/java/security/GeneralSecurityException.P \
|
.deps/java/security/GeneralSecurityException.P \
|
||||||
|
.deps/java/security/Guard.P \
|
||||||
.deps/java/security/InvalidAlgorithmParameterException.P \
|
.deps/java/security/InvalidAlgorithmParameterException.P \
|
||||||
.deps/java/security/InvalidKeyException.P \
|
.deps/java/security/InvalidKeyException.P \
|
||||||
.deps/java/security/InvalidParameterException.P \
|
.deps/java/security/InvalidParameterException.P \
|
||||||
|
@ -1065,6 +1231,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
|
||||||
.deps/java/security/MessageDigest.P \
|
.deps/java/security/MessageDigest.P \
|
||||||
.deps/java/security/NoSuchAlgorithmException.P \
|
.deps/java/security/NoSuchAlgorithmException.P \
|
||||||
.deps/java/security/NoSuchProviderException.P \
|
.deps/java/security/NoSuchProviderException.P \
|
||||||
|
.deps/java/security/Permission.P \
|
||||||
|
.deps/java/security/PermissionCollection.P \
|
||||||
.deps/java/security/PrivateKey.P .deps/java/security/Provider.P \
|
.deps/java/security/PrivateKey.P .deps/java/security/Provider.P \
|
||||||
.deps/java/security/PublicKey.P .deps/java/security/SecureClassLoader.P \
|
.deps/java/security/PublicKey.P .deps/java/security/SecureClassLoader.P \
|
||||||
.deps/java/security/SecureRandom.P .deps/java/security/Security.P \
|
.deps/java/security/SecureRandom.P .deps/java/security/Security.P \
|
||||||
|
@ -1102,7 +1270,9 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
|
||||||
.deps/java/text/MessageFormat.P .deps/java/text/NumberFormat.P \
|
.deps/java/text/MessageFormat.P .deps/java/text/NumberFormat.P \
|
||||||
.deps/java/text/ParseException.P .deps/java/text/ParsePosition.P \
|
.deps/java/text/ParseException.P .deps/java/text/ParsePosition.P \
|
||||||
.deps/java/text/RuleBasedCollator.P .deps/java/text/SimpleDateFormat.P \
|
.deps/java/text/RuleBasedCollator.P .deps/java/text/SimpleDateFormat.P \
|
||||||
.deps/java/text/StringCharacterIterator.P .deps/java/util/BitSet.P \
|
.deps/java/text/StringCharacterIterator.P \
|
||||||
|
.deps/java/util/AbstractCollection.P .deps/java/util/AbstractList.P \
|
||||||
|
.deps/java/util/Arrays.P .deps/java/util/BitSet.P \
|
||||||
.deps/java/util/Calendar.P .deps/java/util/Collection.P \
|
.deps/java/util/Calendar.P .deps/java/util/Collection.P \
|
||||||
.deps/java/util/Comparator.P \
|
.deps/java/util/Comparator.P \
|
||||||
.deps/java/util/ConcurrentModificationException.P \
|
.deps/java/util/ConcurrentModificationException.P \
|
||||||
|
@ -1335,6 +1505,25 @@ gij$(EXEEXT): $(gij_OBJECTS) $(gij_DEPENDENCIES)
|
||||||
gen-from-JIS$(EXEEXT): $(gen_from_JIS_OBJECTS) $(gen_from_JIS_DEPENDENCIES)
|
gen-from-JIS$(EXEEXT): $(gen_from_JIS_OBJECTS) $(gen_from_JIS_DEPENDENCIES)
|
||||||
@rm -f gen-from-JIS$(EXEEXT)
|
@rm -f gen-from-JIS$(EXEEXT)
|
||||||
$(LINK) $(gen_from_JIS_LDFLAGS) $(gen_from_JIS_OBJECTS) $(gen_from_JIS_LDADD) $(LIBS)
|
$(LINK) $(gen_from_JIS_LDFLAGS) $(gen_from_JIS_OBJECTS) $(gen_from_JIS_LDADD) $(LIBS)
|
||||||
|
|
||||||
|
install-binSCRIPTS: $(bin_SCRIPTS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||||
|
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||||
|
if test -f $$p; then \
|
||||||
|
echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
|
||||||
|
$(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||||
|
else if test -f $(srcdir)/$$p; then \
|
||||||
|
echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
|
||||||
|
$(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||||
|
else :; fi; fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-binSCRIPTS:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||||
|
rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||||
|
done
|
||||||
.cc.o:
|
.cc.o:
|
||||||
$(CXXCOMPILE) -c $<
|
$(CXXCOMPILE) -c $<
|
||||||
.cc.lo:
|
.cc.lo:
|
||||||
|
@ -1593,7 +1782,7 @@ install-info-am:
|
||||||
install-info: install-info-recursive
|
install-info: install-info-recursive
|
||||||
install-exec-am: install-toolexeclibLIBRARIES \
|
install-exec-am: install-toolexeclibLIBRARIES \
|
||||||
install-toolexeclibLTLIBRARIES install-binPROGRAMS \
|
install-toolexeclibLTLIBRARIES install-binPROGRAMS \
|
||||||
install-toolexeclibDATA
|
install-binSCRIPTS install-toolexeclibDATA
|
||||||
install-exec: install-exec-recursive
|
install-exec: install-exec-recursive
|
||||||
|
|
||||||
install-data-am: install-dataDATA install-data-local
|
install-data-am: install-dataDATA install-data-local
|
||||||
|
@ -1604,9 +1793,11 @@ install-am: all-am
|
||||||
install: install-recursive
|
install: install-recursive
|
||||||
uninstall-am: uninstall-toolexeclibLIBRARIES \
|
uninstall-am: uninstall-toolexeclibLIBRARIES \
|
||||||
uninstall-toolexeclibLTLIBRARIES uninstall-binPROGRAMS \
|
uninstall-toolexeclibLTLIBRARIES uninstall-binPROGRAMS \
|
||||||
uninstall-dataDATA uninstall-toolexeclibDATA
|
uninstall-binSCRIPTS uninstall-dataDATA \
|
||||||
|
uninstall-toolexeclibDATA
|
||||||
uninstall: uninstall-recursive
|
uninstall: uninstall-recursive
|
||||||
all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(PROGRAMS) $(DATA)
|
all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) \
|
||||||
|
$(DATA)
|
||||||
all-redirect: all-recursive
|
all-redirect: all-recursive
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
|
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
|
||||||
|
@ -1614,7 +1805,8 @@ installdirs: installdirs-recursive
|
||||||
installdirs-am:
|
installdirs-am:
|
||||||
$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir) \
|
$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir) \
|
||||||
$(DESTDIR)$(toolexeclibdir) $(DESTDIR)$(bindir) \
|
$(DESTDIR)$(toolexeclibdir) $(DESTDIR)$(bindir) \
|
||||||
$(DESTDIR)$(datadir) $(DESTDIR)$(toolexeclibdir)
|
$(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
|
||||||
|
$(DESTDIR)$(toolexeclibdir)
|
||||||
|
|
||||||
|
|
||||||
mostlyclean-generic:
|
mostlyclean-generic:
|
||||||
|
@ -1680,7 +1872,8 @@ uninstall-toolexeclibLTLIBRARIES install-toolexeclibLTLIBRARIES \
|
||||||
mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
|
mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
|
||||||
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
|
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
|
||||||
mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \
|
mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \
|
||||||
clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS uninstall-dataDATA \
|
clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \
|
||||||
|
uninstall-binSCRIPTS install-binSCRIPTS uninstall-dataDATA \
|
||||||
install-dataDATA uninstall-toolexeclibDATA install-toolexeclibDATA \
|
install-dataDATA uninstall-toolexeclibDATA install-toolexeclibDATA \
|
||||||
install-data-recursive uninstall-data-recursive install-exec-recursive \
|
install-data-recursive uninstall-data-recursive install-exec-recursive \
|
||||||
uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
|
uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
|
||||||
|
@ -1805,6 +1998,14 @@ gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip
|
||||||
-friend 'java::lang::ClassLoader;' \
|
-friend 'java::lang::ClassLoader;' \
|
||||||
$(basename $<)
|
$(basename $<)
|
||||||
|
|
||||||
|
java/io/ObjectInputStream$$GetField.h: java/io/ObjectInputStream$$GetField.class libgcj.zip
|
||||||
|
$(GCJH) -classpath $(top_builddir) \
|
||||||
|
'java/io/ObjectInputStream$$GetField'
|
||||||
|
|
||||||
|
java/io/ObjectOutputStream$$PutField.h: java/io/ObjectOutputStream$$PutField.class libgcj.zip
|
||||||
|
$(GCJH) -classpath $(top_builddir) \
|
||||||
|
'java/io/ObjectOutputStream$$PutField'
|
||||||
|
|
||||||
install-data-local:
|
install-data-local:
|
||||||
$(PRE_INSTALL)
|
$(PRE_INSTALL)
|
||||||
@for f in $(nat_headers) $(extra_headers); do \
|
@for f in $(nat_headers) $(extra_headers); do \
|
||||||
|
|
46
libjava/addr2name.awk
Executable file
46
libjava/addr2name.awk
Executable file
|
@ -0,0 +1,46 @@
|
||||||
|
#!/bin/awk -f
|
||||||
|
|
||||||
|
# Copyright (C) 2000 Free Software Foundation
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# This script emulates a little of the functionality of addr2line for
|
||||||
|
# those systems that don't have it. The only command line argument is
|
||||||
|
# an executable name. The script reads hexadecimal addresses from
|
||||||
|
# stdin and prints the corresponding symbol names to stdout. The
|
||||||
|
# addresses must begin with "0x" and be fully zero filled or this
|
||||||
|
# won't work.
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
object = ARGV[1];
|
||||||
|
ARGV[1] = "";
|
||||||
|
|
||||||
|
while ("nm " object "| sort" | getline) {
|
||||||
|
if ($2 == "t" || $2 == "T") {
|
||||||
|
address[i] = "0x" $1; name[i] = $3;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
syms = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
lo = 0;
|
||||||
|
hi = syms - 1;
|
||||||
|
|
||||||
|
while ((hi-1) > lo)
|
||||||
|
{
|
||||||
|
try = int ((hi + lo) / 2);
|
||||||
|
if ($0 < address[try])
|
||||||
|
hi = try;
|
||||||
|
else if ($0 >= address[try])
|
||||||
|
lo = try;
|
||||||
|
}
|
||||||
|
print name[lo] "\n"; fflush();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
20
libjava/configure
vendored
20
libjava/configure
vendored
|
@ -5118,24 +5118,33 @@ done
|
||||||
test -n "$PERL" || PERL="false"
|
test -n "$PERL" || PERL="false"
|
||||||
|
|
||||||
|
|
||||||
if test "$enable_sjlj_exceptions" = yes; then
|
SYSDEP_SOURCES=
|
||||||
SIGNAL_HANDLER=include/default-signal.h
|
|
||||||
else
|
case "${host}" in
|
||||||
case "${host}" in
|
|
||||||
i?86-*-linux*)
|
i?86-*-linux*)
|
||||||
SIGNAL_HANDLER=include/i386-signal.h
|
SIGNAL_HANDLER=include/i386-signal.h
|
||||||
;;
|
;;
|
||||||
sparc-sun-solaris*)
|
sparc-sun-solaris*)
|
||||||
SIGNAL_HANDLER=include/sparc-signal.h
|
SIGNAL_HANDLER=include/sparc-signal.h
|
||||||
;;
|
;;
|
||||||
|
ia64-*)
|
||||||
|
SYSDEP_SOURCES=sysdep/ia64.c
|
||||||
|
test -d sysdep || mkdir sysdep
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
SIGNAL_HANDLER=include/default-signal.h
|
SIGNAL_HANDLER=include/default-signal.h
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# If we're using sjlj exceptions, forget what we just learned.
|
||||||
|
if test "$libgcj_sjlj" = yes; then
|
||||||
|
SIGNAL_HANDLER=include/default-signal.h
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if test "${multilib}" = "yes"; then
|
if test "${multilib}" = "yes"; then
|
||||||
multilib_arg="--enable-multilib"
|
multilib_arg="--enable-multilib"
|
||||||
else
|
else
|
||||||
|
@ -5367,6 +5376,7 @@ s%@EH_COMMON_INCLUDE@%$EH_COMMON_INCLUDE%g
|
||||||
s%@AM_RUNTESTFLAGS@%$AM_RUNTESTFLAGS%g
|
s%@AM_RUNTESTFLAGS@%$AM_RUNTESTFLAGS%g
|
||||||
s%@ALLOCA@%$ALLOCA%g
|
s%@ALLOCA@%$ALLOCA%g
|
||||||
s%@PERL@%$PERL%g
|
s%@PERL@%$PERL%g
|
||||||
|
s%@SYSDEP_SOURCES@%$SYSDEP_SOURCES%g
|
||||||
s%@here@%$here%g
|
s%@here@%$here%g
|
||||||
|
|
||||||
CEOF
|
CEOF
|
||||||
|
|
|
@ -66,6 +66,11 @@ case "${host}" in
|
||||||
;;
|
;;
|
||||||
sparc-*)
|
sparc-*)
|
||||||
;;
|
;;
|
||||||
|
ia64-*)
|
||||||
|
libgcj_flags="${libgcj_flags} -funwind-tables"
|
||||||
|
libgcj_sjlj=yes
|
||||||
|
libgcj_interpreter=yes
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
libgcj_sjlj=yes
|
libgcj_sjlj=yes
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -733,22 +733,31 @@ AC_FUNC_ALLOCA
|
||||||
|
|
||||||
AC_CHECK_PROGS(PERL, perl, false)
|
AC_CHECK_PROGS(PERL, perl, false)
|
||||||
|
|
||||||
if test "$enable_sjlj_exceptions" = yes; then
|
SYSDEP_SOURCES=
|
||||||
SIGNAL_HANDLER=include/default-signal.h
|
|
||||||
else
|
case "${host}" in
|
||||||
case "${host}" in
|
|
||||||
i?86-*-linux*)
|
i?86-*-linux*)
|
||||||
SIGNAL_HANDLER=include/i386-signal.h
|
SIGNAL_HANDLER=include/i386-signal.h
|
||||||
;;
|
;;
|
||||||
sparc-sun-solaris*)
|
sparc-sun-solaris*)
|
||||||
SIGNAL_HANDLER=include/sparc-signal.h
|
SIGNAL_HANDLER=include/sparc-signal.h
|
||||||
;;
|
;;
|
||||||
|
ia64-*)
|
||||||
|
SYSDEP_SOURCES=sysdep/ia64.c
|
||||||
|
test -d sysdep || mkdir sysdep
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
SIGNAL_HANDLER=include/default-signal.h
|
SIGNAL_HANDLER=include/default-signal.h
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# If we're using sjlj exceptions, forget what we just learned.
|
||||||
|
if test "$libgcj_sjlj" = yes; then
|
||||||
|
SIGNAL_HANDLER=include/default-signal.h
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(SYSDEP_SOURCES)
|
||||||
|
|
||||||
AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
|
AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
|
||||||
|
|
||||||
if test "${multilib}" = "yes"; then
|
if test "${multilib}" = "yes"; then
|
||||||
|
|
|
@ -99,6 +99,7 @@ OBJDUMP = @OBJDUMP@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PERL = @PERL@
|
PERL = @PERL@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
|
SYSDEP_SOURCES = @SYSDEP_SOURCES@
|
||||||
SYSTEMSPEC = @SYSTEMSPEC@
|
SYSTEMSPEC = @SYSTEMSPEC@
|
||||||
THREADDEPS = @THREADDEPS@
|
THREADDEPS = @THREADDEPS@
|
||||||
THREADINCS = @THREADINCS@
|
THREADINCS = @THREADINCS@
|
||||||
|
|
|
@ -69,8 +69,24 @@ extern "Java"
|
||||||
class InputStream;
|
class InputStream;
|
||||||
class InputStreamReader;
|
class InputStreamReader;
|
||||||
class InterruptedIOException;
|
class InterruptedIOException;
|
||||||
|
class InvalidClassException;
|
||||||
|
class InvalidObjectException;
|
||||||
class LineNumberInputStream;
|
class LineNumberInputStream;
|
||||||
class LineNumberReader;
|
class LineNumberReader;
|
||||||
|
class NotActiveException;
|
||||||
|
class NotSerializableException;
|
||||||
|
class ObjectInput;
|
||||||
|
class ObjectInputStream;
|
||||||
|
class ObjectInputStream$GetField;
|
||||||
|
class ObjectInputValidation;
|
||||||
|
class ObjectOutput;
|
||||||
|
class ObjectOutputStream;
|
||||||
|
class ObjectOutputStream$PutField;
|
||||||
|
class ObjectStreamClass;
|
||||||
|
class ObjectStreamConstants;
|
||||||
|
class ObjectStreamException;
|
||||||
|
class ObjectStreamField;
|
||||||
|
class OptionalDataException;
|
||||||
class OutputStream;
|
class OutputStream;
|
||||||
class OutputStreamWriter;
|
class OutputStreamWriter;
|
||||||
class PipedInputStream;
|
class PipedInputStream;
|
||||||
|
@ -85,6 +101,9 @@ extern "Java"
|
||||||
class Reader;
|
class Reader;
|
||||||
class SequenceInputStream;
|
class SequenceInputStream;
|
||||||
class Serializable;
|
class Serializable;
|
||||||
|
class SerializablePermission;
|
||||||
|
class SimpleDigestStream;
|
||||||
|
class StreamCorruptedException;
|
||||||
class StreamTokenizer;
|
class StreamTokenizer;
|
||||||
class StringBufferInputStream;
|
class StringBufferInputStream;
|
||||||
class StringReader;
|
class StringReader;
|
||||||
|
|
66
libjava/gnu/gcj/io/SimpleSHSStream.java
Normal file
66
libjava/gnu/gcj/io/SimpleSHSStream.java
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
// SimpleSHSStream.java
|
||||||
|
|
||||||
|
/* Copyright (C) 2000 Free Software Foundation
|
||||||
|
|
||||||
|
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 gnu.gcj.io;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.io.*;
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
public class SimpleSHSStream extends java.io.DataOutputStream
|
||||||
|
{
|
||||||
|
int counter;
|
||||||
|
|
||||||
|
final int SHS_BLOCKSIZE = 64;
|
||||||
|
final int SHS_DIGESTSIZE = 20;
|
||||||
|
|
||||||
|
byte buf[];
|
||||||
|
byte shs_info[];
|
||||||
|
|
||||||
|
native static byte [] shsFinal (byte info[]);
|
||||||
|
native static void shsUpdate (byte info[], byte buf[], int count);
|
||||||
|
native static byte [] shsInit ();
|
||||||
|
|
||||||
|
private void update (byte b)
|
||||||
|
{
|
||||||
|
buf [counter++] = b;
|
||||||
|
if (counter % SHS_BLOCKSIZE == 0)
|
||||||
|
{
|
||||||
|
counter = 0;
|
||||||
|
shsUpdate (shs_info, buf, SHS_BLOCKSIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write (int b) throws IOException
|
||||||
|
{
|
||||||
|
update ((byte)b);
|
||||||
|
super.write (b);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write (byte[] b, int off, int len) throws IOException
|
||||||
|
{
|
||||||
|
for (int i = 0; i < len; i++)
|
||||||
|
write (b[i+off]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] digest()
|
||||||
|
{
|
||||||
|
shsUpdate (shs_info, buf, counter);
|
||||||
|
return shsFinal (shs_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleSHSStream (OutputStream out)
|
||||||
|
{
|
||||||
|
super (out);
|
||||||
|
buf = new byte[SHS_BLOCKSIZE];
|
||||||
|
shs_info = shsInit ();
|
||||||
|
counter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
55
libjava/gnu/gcj/io/natSimpleSHSStream.cc
Normal file
55
libjava/gnu/gcj/io/natSimpleSHSStream.cc
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
// natSimpleSHSStream.cc
|
||||||
|
|
||||||
|
/* Copyright (C) 2000 Free Software Foundation
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <gnu/gcj/io/SimpleSHSStream.h>
|
||||||
|
|
||||||
|
#include <gcj/cni.h>
|
||||||
|
#include <jvm.h>
|
||||||
|
|
||||||
|
#define PROTO
|
||||||
|
#include "shs.h"
|
||||||
|
|
||||||
|
|
||||||
|
jbyteArray
|
||||||
|
gnu::gcj::io::SimpleSHSStream::shsFinal (jbyteArray shs_info)
|
||||||
|
{
|
||||||
|
SHS_INFO *info = (SHS_INFO *)elements(shs_info);
|
||||||
|
::shsFinal (info);
|
||||||
|
|
||||||
|
jbyteArray buffer = JvNewByteArray (SHS_DIGESTSIZE);
|
||||||
|
memcpy (elements (buffer), (jbyte *)&info->digest, SHS_DIGESTSIZE);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gnu::gcj::io::SimpleSHSStream::shsUpdate (jbyteArray shs_info, jbyteArray buf, jint count)
|
||||||
|
{
|
||||||
|
SHS_INFO *info = (SHS_INFO *)elements(shs_info);
|
||||||
|
BYTE *buffer = (BYTE *)elements(buf);
|
||||||
|
|
||||||
|
::shsUpdate (info, buffer, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
jbyteArray
|
||||||
|
gnu::gcj::io::SimpleSHSStream::shsInit ()
|
||||||
|
{
|
||||||
|
jbyteArray result = JvNewByteArray (sizeof (SHS_INFO));
|
||||||
|
SHS_INFO *info = (SHS_INFO *)elements(result);
|
||||||
|
|
||||||
|
::shsInit (info);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
280
libjava/gnu/gcj/io/shs.cc
Normal file
280
libjava/gnu/gcj/io/shs.cc
Normal file
|
@ -0,0 +1,280 @@
|
||||||
|
|
||||||
|
/* --------------------------------- SHS.CC ------------------------------- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NIST proposed Secure Hash Standard.
|
||||||
|
*
|
||||||
|
* Written 2 September 1992, Peter C. Gutmann.
|
||||||
|
* This implementation placed in the public domain.
|
||||||
|
*
|
||||||
|
* Comments to pgut1@cs.aukuni.ac.nz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include "shs.h"
|
||||||
|
|
||||||
|
/* The SHS f()-functions */
|
||||||
|
|
||||||
|
#define f1(x,y,z) ( ( x & y ) | ( ~x & z ) ) /* Rounds 0-19 */
|
||||||
|
#define f2(x,y,z) ( x ^ y ^ z ) /* Rounds 20-39 */
|
||||||
|
#define f3(x,y,z) ( ( x & y ) | ( x & z ) | ( y & z ) ) /* Rounds 40-59 */
|
||||||
|
#define f4(x,y,z) ( x ^ y ^ z ) /* Rounds 60-79 */
|
||||||
|
|
||||||
|
/* The SHS Mysterious Constants */
|
||||||
|
|
||||||
|
#define K1 0x5A827999L /* Rounds 0-19 */
|
||||||
|
#define K2 0x6ED9EBA1L /* Rounds 20-39 */
|
||||||
|
#define K3 0x8F1BBCDCL /* Rounds 40-59 */
|
||||||
|
#define K4 0xCA62C1D6L /* Rounds 60-79 */
|
||||||
|
|
||||||
|
/* SHS initial values */
|
||||||
|
|
||||||
|
#define h0init 0x67452301L
|
||||||
|
#define h1init 0xEFCDAB89L
|
||||||
|
#define h2init 0x98BADCFEL
|
||||||
|
#define h3init 0x10325476L
|
||||||
|
#define h4init 0xC3D2E1F0L
|
||||||
|
|
||||||
|
/* 32-bit rotate - kludged with shifts */
|
||||||
|
|
||||||
|
#define S(n,X) ((X << n) | (X >> (32 - n)))
|
||||||
|
|
||||||
|
/* The initial expanding function */
|
||||||
|
|
||||||
|
#define expand(count) W [count] = W [count - 3] ^ W [count - 8] ^ W [count - 14] ^ W [count - 16]
|
||||||
|
|
||||||
|
/* The four SHS sub-rounds */
|
||||||
|
|
||||||
|
#define subRound1(count) \
|
||||||
|
{ \
|
||||||
|
temp = S (5, A) + f1 (B, C, D) + E + W [count] + K1; \
|
||||||
|
E = D; \
|
||||||
|
D = C; \
|
||||||
|
C = S (30, B); \
|
||||||
|
B = A; \
|
||||||
|
A = temp; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define subRound2(count) \
|
||||||
|
{ \
|
||||||
|
temp = S (5, A) + f2 (B, C, D) + E + W [count] + K2; \
|
||||||
|
E = D; \
|
||||||
|
D = C; \
|
||||||
|
C = S (30, B); \
|
||||||
|
B = A; \
|
||||||
|
A = temp; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define subRound3(count) \
|
||||||
|
{ \
|
||||||
|
temp = S (5, A) + f3 (B, C, D) + E + W [count] + K3; \
|
||||||
|
E = D; \
|
||||||
|
D = C; \
|
||||||
|
C = S (30, B); \
|
||||||
|
B = A; \
|
||||||
|
A = temp; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define subRound4(count) \
|
||||||
|
{ \
|
||||||
|
temp = S (5, A) + f4 (B, C, D) + E + W [count] + K4; \
|
||||||
|
E = D; \
|
||||||
|
D = C; \
|
||||||
|
C = S (30, B); \
|
||||||
|
B = A; \
|
||||||
|
A = temp; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The two buffers of 5 32-bit words */
|
||||||
|
|
||||||
|
LONG h0, h1, h2, h3, h4;
|
||||||
|
LONG A, B, C, D, E;
|
||||||
|
|
||||||
|
local void byteReverse OF((LONG *buffer, int byteCount));
|
||||||
|
void shsTransform OF((SHS_INFO *shsInfo));
|
||||||
|
|
||||||
|
/* Initialize the SHS values */
|
||||||
|
|
||||||
|
void shsInit (SHS_INFO *shsInfo)
|
||||||
|
{
|
||||||
|
/* Set the h-vars to their initial values */
|
||||||
|
shsInfo->digest [0] = h0init;
|
||||||
|
shsInfo->digest [1] = h1init;
|
||||||
|
shsInfo->digest [2] = h2init;
|
||||||
|
shsInfo->digest [3] = h3init;
|
||||||
|
shsInfo->digest [4] = h4init;
|
||||||
|
|
||||||
|
/* Initialise bit count */
|
||||||
|
shsInfo->countLo = shsInfo->countHi = 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform the SHS transformation. Note that this code, like MD5, seems to
|
||||||
|
* break some optimizing compilers - it may be necessary to split it into
|
||||||
|
* sections, eg based on the four subrounds
|
||||||
|
*/
|
||||||
|
|
||||||
|
void shsTransform (SHS_INFO *shsInfo)
|
||||||
|
{
|
||||||
|
LONG W [80], temp;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Step A. Copy the data buffer into the local work buffer */
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
W [i] = shsInfo->data [i];
|
||||||
|
|
||||||
|
/* Step B. Expand the 16 words into 64 temporary data words */
|
||||||
|
expand (16); expand (17); expand (18); expand (19); expand (20);
|
||||||
|
expand (21); expand (22); expand (23); expand (24); expand (25);
|
||||||
|
expand (26); expand (27); expand (28); expand (29); expand (30);
|
||||||
|
expand (31); expand (32); expand (33); expand (34); expand (35);
|
||||||
|
expand (36); expand (37); expand (38); expand (39); expand (40);
|
||||||
|
expand (41); expand (42); expand (43); expand (44); expand (45);
|
||||||
|
expand (46); expand (47); expand (48); expand (49); expand (50);
|
||||||
|
expand (51); expand (52); expand (53); expand (54); expand (55);
|
||||||
|
expand (56); expand (57); expand (58); expand (59); expand (60);
|
||||||
|
expand (61); expand (62); expand (63); expand (64); expand (65);
|
||||||
|
expand (66); expand (67); expand (68); expand (69); expand (70);
|
||||||
|
expand (71); expand (72); expand (73); expand (74); expand (75);
|
||||||
|
expand (76); expand (77); expand (78); expand (79);
|
||||||
|
|
||||||
|
/* Step C. Set up first buffer */
|
||||||
|
A = shsInfo->digest [0];
|
||||||
|
B = shsInfo->digest [1];
|
||||||
|
C = shsInfo->digest [2];
|
||||||
|
D = shsInfo->digest [3];
|
||||||
|
E = shsInfo->digest [4];
|
||||||
|
|
||||||
|
/* Step D. Serious mangling, divided into four sub-rounds */
|
||||||
|
subRound1 (0); subRound1 (1); subRound1 (2); subRound1 (3);
|
||||||
|
subRound1 (4); subRound1 (5); subRound1 (6); subRound1 (7);
|
||||||
|
subRound1 (8); subRound1 (9); subRound1 (10); subRound1 (11);
|
||||||
|
subRound1 (12); subRound1 (13); subRound1 (14); subRound1 (15);
|
||||||
|
subRound1 (16); subRound1 (17); subRound1 (18); subRound1 (19);
|
||||||
|
|
||||||
|
subRound2 (20); subRound2 (21); subRound2 (22); subRound2 (23);
|
||||||
|
subRound2 (24); subRound2 (25); subRound2 (26); subRound2 (27);
|
||||||
|
subRound2 (28); subRound2 (29); subRound2 (30); subRound2 (31);
|
||||||
|
subRound2 (32); subRound2 (33); subRound2 (34); subRound2 (35);
|
||||||
|
subRound2 (36); subRound2 (37); subRound2 (38); subRound2 (39);
|
||||||
|
|
||||||
|
subRound3 (40); subRound3 (41); subRound3 (42); subRound3 (43);
|
||||||
|
subRound3 (44); subRound3 (45); subRound3 (46); subRound3 (47);
|
||||||
|
subRound3 (48); subRound3 (49); subRound3 (50); subRound3 (51);
|
||||||
|
subRound3 (52); subRound3 (53); subRound3 (54); subRound3 (55);
|
||||||
|
subRound3 (56); subRound3 (57); subRound3 (58); subRound3 (59);
|
||||||
|
|
||||||
|
subRound4 (60); subRound4 (61); subRound4 (62); subRound4 (63);
|
||||||
|
subRound4 (64); subRound4 (65); subRound4 (66); subRound4 (67);
|
||||||
|
subRound4 (68); subRound4 (69); subRound4 (70); subRound4 (71);
|
||||||
|
subRound4 (72); subRound4 (73); subRound4 (74); subRound4 (75);
|
||||||
|
subRound4 (76); subRound4 (77); subRound4 (78); subRound4 (79);
|
||||||
|
|
||||||
|
/* Step E. Build message digest */
|
||||||
|
shsInfo->digest [0] += A;
|
||||||
|
shsInfo->digest [1] += B;
|
||||||
|
shsInfo->digest [2] += C;
|
||||||
|
shsInfo->digest [3] += D;
|
||||||
|
shsInfo->digest [4] += E;
|
||||||
|
}
|
||||||
|
|
||||||
|
local void byteReverse (LONG *buffer, int byteCount)
|
||||||
|
{
|
||||||
|
LONG value;
|
||||||
|
int count;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Find out what the byte order is on this machine.
|
||||||
|
* Big endian is for machines that place the most significant byte
|
||||||
|
* first (eg. Sun SPARC). Little endian is for machines that place
|
||||||
|
* the least significant byte first (eg. VAX).
|
||||||
|
*
|
||||||
|
* We figure out the byte order by stuffing a 2 byte string into a
|
||||||
|
* short and examining the left byte. '@' = 0x40 and 'P' = 0x50
|
||||||
|
* If the left byte is the 'high' byte, then it is 'big endian'.
|
||||||
|
* If the left byte is the 'low' byte, then the machine is 'little
|
||||||
|
* endian'.
|
||||||
|
*
|
||||||
|
* -- Shawn A. Clifford (sac@eng.ufl.edu)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Several bugs fixed -- Pat Myrto (pat@rwing.uucp)
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((*(unsigned short *) ("@P") >> 8) == '@')
|
||||||
|
return;
|
||||||
|
|
||||||
|
byteCount /= sizeof (LONG);
|
||||||
|
for (count = 0; count < byteCount; count++) {
|
||||||
|
value = (buffer [count] << 16) | (buffer [count] >> 16);
|
||||||
|
buffer [count] = ((value & 0xFF00FF00L) >> 8) | ((value & 0x00FF00FFL) << 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update SHS for a block of data. This code assumes that the buffer size is
|
||||||
|
* a multiple of SHS_BLOCKSIZE bytes long, which makes the code a lot more
|
||||||
|
* efficient since it does away with the need to handle partial blocks
|
||||||
|
* between calls to shsUpdate()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void shsUpdate (SHS_INFO *shsInfo, BYTE *buffer, int count)
|
||||||
|
{
|
||||||
|
/* Update bitcount */
|
||||||
|
if ((shsInfo->countLo + ((LONG) count << 3)) < shsInfo->countLo)
|
||||||
|
shsInfo->countHi++; /* Carry from low to high bitCount */
|
||||||
|
shsInfo->countLo += ((LONG) count << 3);
|
||||||
|
shsInfo->countHi += ((LONG) count >> 29);
|
||||||
|
|
||||||
|
/* Process data in SHS_BLOCKSIZE chunks */
|
||||||
|
while (count >= SHS_BLOCKSIZE) {
|
||||||
|
memcpy (shsInfo->data, buffer, SHS_BLOCKSIZE);
|
||||||
|
byteReverse (shsInfo->data, SHS_BLOCKSIZE);
|
||||||
|
shsTransform (shsInfo);
|
||||||
|
buffer += SHS_BLOCKSIZE;
|
||||||
|
count -= SHS_BLOCKSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle any remaining bytes of data.
|
||||||
|
* This should only happen once on the final lot of data
|
||||||
|
*/
|
||||||
|
memcpy (shsInfo->data, buffer, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
void shsFinal (SHS_INFO *shsInfo)
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
LONG lowBitcount = shsInfo->countLo, highBitcount = shsInfo->countHi;
|
||||||
|
|
||||||
|
/* Compute number of bytes mod 64 */
|
||||||
|
count = (int) ((shsInfo->countLo >> 3) & 0x3F);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the first char of padding to 0x80.
|
||||||
|
* This is safe since there is always at least one byte free
|
||||||
|
*/
|
||||||
|
((BYTE *) shsInfo->data) [count++] = 0x80;
|
||||||
|
|
||||||
|
/* Pad out to 56 mod 64 */
|
||||||
|
if (count > 56) {
|
||||||
|
/* Two lots of padding: Pad the first block to 64 bytes */
|
||||||
|
memset ((BYTE *) shsInfo->data + count, 0, 64 - count);
|
||||||
|
byteReverse (shsInfo->data, SHS_BLOCKSIZE);
|
||||||
|
shsTransform (shsInfo);
|
||||||
|
|
||||||
|
/* Now fill the next block with 56 bytes */
|
||||||
|
memset (shsInfo->data, 0, 56);
|
||||||
|
} else
|
||||||
|
/* Pad block to 56 bytes */
|
||||||
|
memset ((BYTE *) shsInfo->data + count, 0, 56 - count);
|
||||||
|
byteReverse (shsInfo->data, SHS_BLOCKSIZE);
|
||||||
|
|
||||||
|
/* Append length in bits and transform */
|
||||||
|
shsInfo->data [14] = highBitcount;
|
||||||
|
shsInfo->data [15] = lowBitcount;
|
||||||
|
|
||||||
|
shsTransform (shsInfo);
|
||||||
|
byteReverse (shsInfo->data, SHS_DIGESTSIZE);
|
||||||
|
}
|
51
libjava/gnu/gcj/io/shs.h
Normal file
51
libjava/gnu/gcj/io/shs.h
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/* --------------------------------- SHS.H ------------------------------- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NIST proposed Secure Hash Standard.
|
||||||
|
*
|
||||||
|
* Written 2 September 1992, Peter C. Gutmann.
|
||||||
|
* This implementation placed in the public domain.
|
||||||
|
*
|
||||||
|
* Comments to pgut1@cs.aukuni.ac.nz
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Useful defines/typedefs */
|
||||||
|
|
||||||
|
#ifndef SHS_H
|
||||||
|
#define SHS_H
|
||||||
|
|
||||||
|
typedef unsigned char BYTE;
|
||||||
|
typedef unsigned int LONG; /* A 32-bit type */
|
||||||
|
|
||||||
|
/* The SHS block size and message digest sizes, in bytes */
|
||||||
|
|
||||||
|
#define SHS_BLOCKSIZE 64
|
||||||
|
#define SHS_DIGESTSIZE 20
|
||||||
|
|
||||||
|
/* The structure for storing SHS info */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
LONG digest [5]; /* Message digest */
|
||||||
|
LONG countLo, countHi; /* 64-bit bit count */
|
||||||
|
LONG data [16]; /* SHS data buffer */
|
||||||
|
} SHS_INFO;
|
||||||
|
|
||||||
|
/* Turn off prototypes if requested */
|
||||||
|
#if (defined(NOPROTO) && defined(PROTO))
|
||||||
|
# undef PROTO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Used to remove arguments in function prototypes for non-ANSI C */
|
||||||
|
#ifdef PROTO
|
||||||
|
# define OF(a) a
|
||||||
|
#else /* !PROTO */
|
||||||
|
# define OF(a) ()
|
||||||
|
#endif /* ?PROTO */
|
||||||
|
|
||||||
|
#define local static
|
||||||
|
|
||||||
|
void shsInit OF((SHS_INFO *shsInfo));
|
||||||
|
void shsUpdate OF((SHS_INFO *shsInfo, BYTE *buffer, int count));
|
||||||
|
void shsFinal OF((SHS_INFO *shsInfo));
|
||||||
|
|
||||||
|
#endif
|
146
libjava/gnu/java/beans/BeanInfoEmbryo.java
Normal file
146
libjava/gnu/java/beans/BeanInfoEmbryo.java
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
/* gnu.java.beans.BeanInfoEmbryo
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import gnu.java.lang.*;
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** A BeanInfoEmbryo accumulates information about a Bean
|
||||||
|
** while it is in the process of being created, and then
|
||||||
|
** when you are done accumulating the information, the
|
||||||
|
** getBeanInfo() method may be called to create a BeanInfo
|
||||||
|
** object based on the information.<P>
|
||||||
|
**
|
||||||
|
** This class is not well-synchronized. (It can be, it
|
||||||
|
** just isn't yet.)
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 30 Jul 1998
|
||||||
|
** @see java.beans.BeanInfo
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class BeanInfoEmbryo {
|
||||||
|
Hashtable properties = new Hashtable();
|
||||||
|
Hashtable events = new Hashtable();
|
||||||
|
Vector methods = new Vector();
|
||||||
|
|
||||||
|
BeanDescriptor beanDescriptor;
|
||||||
|
BeanInfo[] additionalBeanInfo;
|
||||||
|
java.awt.Image[] im;
|
||||||
|
String defaultPropertyName;
|
||||||
|
String defaultEventName;
|
||||||
|
|
||||||
|
public BeanInfoEmbryo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public BeanInfo getBeanInfo() {
|
||||||
|
int defaultProperty = -1;
|
||||||
|
int defaultEvent = -1;
|
||||||
|
|
||||||
|
PropertyDescriptor[] Aproperties = new PropertyDescriptor[properties.size()];
|
||||||
|
int i = 0;
|
||||||
|
Enumeration enum = properties.elements();
|
||||||
|
while(enum.hasMoreElements()) {
|
||||||
|
Aproperties[i] = (PropertyDescriptor)enum.nextElement();
|
||||||
|
if(defaultPropertyName != null && Aproperties[i].getName().equals(defaultPropertyName)) {
|
||||||
|
defaultProperty = i;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
EventSetDescriptor[] Aevents = new EventSetDescriptor[events.size()];
|
||||||
|
i = 0;
|
||||||
|
enum = events.elements();
|
||||||
|
while(enum.hasMoreElements()) {
|
||||||
|
Aevents[i] = (EventSetDescriptor)enum.nextElement();
|
||||||
|
if(defaultEventName != null && Aevents[i].getName().equals(defaultEventName)) {
|
||||||
|
defaultEvent = i;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
MethodDescriptor[] Amethods = new MethodDescriptor[methods.size()];
|
||||||
|
methods.copyInto(Amethods);
|
||||||
|
|
||||||
|
return new ExplicitBeanInfo(beanDescriptor,additionalBeanInfo,Aproperties,defaultProperty,Aevents,defaultEvent,Amethods,im);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBeanDescriptor(BeanDescriptor b) {
|
||||||
|
beanDescriptor = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAdditionalBeanInfo(BeanInfo[] b) {
|
||||||
|
additionalBeanInfo = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasProperty(PropertyDescriptor p) {
|
||||||
|
return properties.get(p.getName()) != null;
|
||||||
|
}
|
||||||
|
public void addProperty(PropertyDescriptor p) {
|
||||||
|
properties.put(p.getName(),p);
|
||||||
|
}
|
||||||
|
public void addIndexedProperty(IndexedPropertyDescriptor p) {
|
||||||
|
properties.put(p.getName(),p);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasEvent(EventSetDescriptor e) {
|
||||||
|
return events.get(e.getName()) != null;
|
||||||
|
}
|
||||||
|
public void addEvent(EventSetDescriptor e) {
|
||||||
|
events.put(e.getName(),e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasMethod(MethodDescriptor m) {
|
||||||
|
for(int i=0;i<methods.size();i++) {
|
||||||
|
Method thisMethod = ((MethodDescriptor)methods.elementAt(i)).getMethod();
|
||||||
|
if(m.getMethod().getName().equals(thisMethod.getName())
|
||||||
|
&& ArrayHelper.equalsArray(m.getMethod().getParameterTypes(), thisMethod.getParameterTypes())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public void addMethod(MethodDescriptor m) {
|
||||||
|
methods.addElement(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultPropertyName(String defaultPropertyName) {
|
||||||
|
this.defaultPropertyName = defaultPropertyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultEventName(String defaultEventName) {
|
||||||
|
this.defaultEventName = defaultEventName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIcons(java.awt.Image[] im) {
|
||||||
|
this.im = im;
|
||||||
|
}
|
||||||
|
}
|
59
libjava/gnu/java/beans/EmptyBeanInfo.java
Normal file
59
libjava/gnu/java/beans/EmptyBeanInfo.java
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/* gnu.java.beans.EmptyBeanInfo
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** EmptyBeanInfo is a BeanInfo that discloses no
|
||||||
|
** information about the Bean and does not allow
|
||||||
|
** Introspection. The Introspector uses instances of this
|
||||||
|
** class to create empty BeanInfos, but it could also be
|
||||||
|
** used as a base class for BeanInfos that do not allow
|
||||||
|
** Introspection and provide only a little bit of
|
||||||
|
** information.<P>
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 30 Jul 1998
|
||||||
|
** @see gnu.java.beans.ExplicitBeanInfo
|
||||||
|
** @see java.beans.BeanInfo
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class EmptyBeanInfo extends ExplicitBeanInfo {
|
||||||
|
/** Create a new EmptyBeanInfo. **/
|
||||||
|
public EmptyBeanInfo(Class beanClass) {
|
||||||
|
super(new BeanDescriptor(beanClass,null),
|
||||||
|
new BeanInfo[0],
|
||||||
|
new PropertyDescriptor[0],
|
||||||
|
-1,
|
||||||
|
new EventSetDescriptor[0],
|
||||||
|
-1,
|
||||||
|
new MethodDescriptor[0],
|
||||||
|
null);
|
||||||
|
}
|
||||||
|
}
|
133
libjava/gnu/java/beans/ExplicitBeanInfo.java
Normal file
133
libjava/gnu/java/beans/ExplicitBeanInfo.java
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
/* gnu.java.beans.ExplicitBeanInfo
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** ExplicitBeanInfo lets you specify in the constructor
|
||||||
|
** all the various parts of the BeanInfo.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 30 Jul 1998
|
||||||
|
** @see java.beans.BeanInfo
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class ExplicitBeanInfo implements BeanInfo {
|
||||||
|
/** The BeanDescriptor returned by getBeanDescriptor. **/
|
||||||
|
protected BeanDescriptor beanDescriptor;
|
||||||
|
|
||||||
|
/** The EventSetDescriptor array returned by
|
||||||
|
** getEventSetDescriptors().
|
||||||
|
**/
|
||||||
|
protected EventSetDescriptor[] eventSetDescriptors = new EventSetDescriptor[0];
|
||||||
|
|
||||||
|
/** The PropertyDescriptor array returned by
|
||||||
|
** getPropertyDescriptors().
|
||||||
|
**/
|
||||||
|
protected PropertyDescriptor[] propertyDescriptors = new PropertyDescriptor[0];
|
||||||
|
|
||||||
|
/** The MethodDescriptor array returned by
|
||||||
|
** getMethodDescriptors().
|
||||||
|
**/
|
||||||
|
protected MethodDescriptor[] methodDescriptors;
|
||||||
|
|
||||||
|
/** The default property index. **/
|
||||||
|
protected int defaultPropertyIndex;
|
||||||
|
|
||||||
|
/** The default event index. **/
|
||||||
|
protected int defaultEventIndex;
|
||||||
|
|
||||||
|
/** The BeanInfo array returned by
|
||||||
|
** getAdditionalBeanInfo().
|
||||||
|
**/
|
||||||
|
protected BeanInfo[] additionalBeanInfo;
|
||||||
|
|
||||||
|
/** The set of icons. **/
|
||||||
|
protected java.awt.Image[] icons;
|
||||||
|
|
||||||
|
public ExplicitBeanInfo(BeanDescriptor beanDescriptor,
|
||||||
|
BeanInfo[] additionalBeanInfo,
|
||||||
|
PropertyDescriptor[] propertyDescriptors,
|
||||||
|
int defaultPropertyIndex,
|
||||||
|
EventSetDescriptor[] eventSetDescriptors,
|
||||||
|
int defaultEventIndex,
|
||||||
|
MethodDescriptor[] methodDescriptors,
|
||||||
|
java.awt.Image[] icons) {
|
||||||
|
this.beanDescriptor = beanDescriptor;
|
||||||
|
this.additionalBeanInfo = additionalBeanInfo;
|
||||||
|
this.propertyDescriptors = propertyDescriptors;
|
||||||
|
this.defaultPropertyIndex = defaultPropertyIndex;
|
||||||
|
this.eventSetDescriptors = eventSetDescriptors;
|
||||||
|
this.defaultEventIndex = defaultEventIndex;
|
||||||
|
this.methodDescriptors = methodDescriptors;
|
||||||
|
this.icons = icons;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Bean descriptor. **/
|
||||||
|
public BeanDescriptor getBeanDescriptor() {
|
||||||
|
return beanDescriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Bean events. **/
|
||||||
|
public EventSetDescriptor[] getEventSetDescriptors() {
|
||||||
|
return eventSetDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get default event set. **/
|
||||||
|
public int getDefaultEventIndex() {
|
||||||
|
return defaultEventIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Bean properties. **/
|
||||||
|
public PropertyDescriptor[] getPropertyDescriptors() {
|
||||||
|
return propertyDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get "default" property. **/
|
||||||
|
public int getDefaultPropertyIndex() {
|
||||||
|
return defaultPropertyIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Bean methods. **/
|
||||||
|
public MethodDescriptor[] getMethodDescriptors() {
|
||||||
|
return methodDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get additional Bean info. **/
|
||||||
|
public BeanInfo[] getAdditionalBeanInfo() {
|
||||||
|
return additionalBeanInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Bean icons.
|
||||||
|
** @param iconType the type of icon
|
||||||
|
**/
|
||||||
|
public java.awt.Image getIcon(int iconType) {
|
||||||
|
return icons != null ? icons[iconType] : null;
|
||||||
|
}
|
||||||
|
}
|
344
libjava/gnu/java/beans/IntrospectionIncubator.java
Normal file
344
libjava/gnu/java/beans/IntrospectionIncubator.java
Normal file
|
@ -0,0 +1,344 @@
|
||||||
|
/* gnu.java.beans.IntrospectionIncubator
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
import gnu.java.lang.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** IntrospectionIncubator takes in a bunch of Methods, and
|
||||||
|
** Introspects only those Methods you give it.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 30 Jul 1998
|
||||||
|
** @see gnu.java.beans.ExplicitBeanInfo
|
||||||
|
** @see java.beans.BeanInfo
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class IntrospectionIncubator {
|
||||||
|
Hashtable propertyMethods = new Hashtable();
|
||||||
|
Hashtable listenerMethods = new Hashtable();
|
||||||
|
Vector otherMethods = new Vector();
|
||||||
|
|
||||||
|
Class propertyStopClass;
|
||||||
|
Class eventStopClass;
|
||||||
|
Class methodStopClass;
|
||||||
|
|
||||||
|
public IntrospectionIncubator() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paving the way for automatic Introspection */
|
||||||
|
public void addMethod(Method method) {
|
||||||
|
if(Modifier.isPublic(method.getModifiers()) && !Modifier.isStatic(method.getModifiers())) {
|
||||||
|
String name = ClassHelper.getTruncatedName(method.getName());
|
||||||
|
Class retType = method.getReturnType();
|
||||||
|
Class[] params = method.getParameterTypes();
|
||||||
|
boolean isVoid = retType.equals(java.lang.Void.TYPE);
|
||||||
|
Class methodClass = method.getDeclaringClass();
|
||||||
|
if(propertyStopClass == null || (propertyStopClass.isAssignableFrom(methodClass) && !propertyStopClass.equals(methodClass))) {
|
||||||
|
if(name.startsWith("is")
|
||||||
|
&& retType.equals(java.lang.Boolean.TYPE)
|
||||||
|
&& params.length == 0) {
|
||||||
|
addToPropertyHash(name,method,IS);
|
||||||
|
} else if(name.startsWith("get") && !isVoid) {
|
||||||
|
if(params.length == 0) {
|
||||||
|
addToPropertyHash(name,method,GET);
|
||||||
|
} else if(params.length == 1 && params[0].equals(java.lang.Integer.TYPE)) {
|
||||||
|
addToPropertyHash(name,method,GET_I);
|
||||||
|
} else {
|
||||||
|
otherMethods.addElement(method);
|
||||||
|
}
|
||||||
|
} else if(name.startsWith("set") && isVoid) {
|
||||||
|
if(params.length == 1) {
|
||||||
|
addToPropertyHash(name,method,SET);
|
||||||
|
} else if(params.length == 2 && params[0].equals(java.lang.Integer.TYPE)) {
|
||||||
|
addToPropertyHash(name,method,SET_I);
|
||||||
|
} else {
|
||||||
|
otherMethods.addElement(method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(eventStopClass == null || (eventStopClass.isAssignableFrom(methodClass) && !eventStopClass.equals(methodClass))) {
|
||||||
|
if(name.startsWith("add")
|
||||||
|
&& isVoid
|
||||||
|
&& params.length == 1
|
||||||
|
&& java.util.EventListener.class.isAssignableFrom(params[0])) {
|
||||||
|
addToListenerHash(name,method,ADD);
|
||||||
|
} else if(name.startsWith("remove")
|
||||||
|
&& isVoid
|
||||||
|
&& params.length == 1
|
||||||
|
&& java.util.EventListener.class.isAssignableFrom(params[0])) {
|
||||||
|
addToListenerHash(name,method,REMOVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(methodStopClass == null || (methodStopClass.isAssignableFrom(methodClass) && !methodStopClass.equals(methodClass))) {
|
||||||
|
otherMethods.addElement(method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMethods(Method[] m) {
|
||||||
|
for(int i=0;i<m.length;i++) {
|
||||||
|
addMethod(m[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyStopClass(Class c) {
|
||||||
|
propertyStopClass = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEventStopClass(Class c) {
|
||||||
|
eventStopClass = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMethodStopClass(Class c) {
|
||||||
|
methodStopClass = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public BeanInfoEmbryo getBeanInfoEmbryo() throws IntrospectionException {
|
||||||
|
BeanInfoEmbryo b = new BeanInfoEmbryo();
|
||||||
|
findXXX(b,IS);
|
||||||
|
findXXXInt(b,GET_I);
|
||||||
|
findXXXInt(b,SET_I);
|
||||||
|
findXXX(b,GET);
|
||||||
|
findXXX(b,SET);
|
||||||
|
findAddRemovePairs(b);
|
||||||
|
for(int i=0;i<otherMethods.size();i++) {
|
||||||
|
MethodDescriptor newMethod = new MethodDescriptor((Method)otherMethods.elementAt(i));
|
||||||
|
if(!b.hasMethod(newMethod)) {
|
||||||
|
b.addMethod(new MethodDescriptor((Method)otherMethods.elementAt(i)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BeanInfo getBeanInfo() throws IntrospectionException {
|
||||||
|
return getBeanInfoEmbryo().getBeanInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void findAddRemovePairs(BeanInfoEmbryo b) throws IntrospectionException {
|
||||||
|
Enumeration listenerEnum = listenerMethods.keys();
|
||||||
|
while(listenerEnum.hasMoreElements()) {
|
||||||
|
DoubleKey k = (DoubleKey)listenerEnum.nextElement();
|
||||||
|
Method[] m = (Method[])listenerMethods.get(k);
|
||||||
|
if(m[ADD] != null && m[REMOVE] != null) {
|
||||||
|
EventSetDescriptor e = new EventSetDescriptor(Introspector.decapitalize(k.getName()),
|
||||||
|
k.getType(), k.getType().getMethods(),
|
||||||
|
m[ADD],m[REMOVE]);
|
||||||
|
e.setUnicast(ArrayHelper.contains(m[ADD].getExceptionTypes(),java.util.TooManyListenersException.class));
|
||||||
|
if(!b.hasEvent(e)) {
|
||||||
|
b.addEvent(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void findXXX(BeanInfoEmbryo b, int funcType) throws IntrospectionException {
|
||||||
|
Enumeration keys = propertyMethods.keys();
|
||||||
|
while(keys.hasMoreElements()) {
|
||||||
|
DoubleKey k = (DoubleKey)keys.nextElement();
|
||||||
|
Method[] m = (Method[])propertyMethods.get(k);
|
||||||
|
if(m[funcType] != null) {
|
||||||
|
PropertyDescriptor p = new PropertyDescriptor(Introspector.decapitalize(k.getName()),
|
||||||
|
m[IS] != null ? m[IS] : m[GET],
|
||||||
|
m[SET]);
|
||||||
|
if(m[SET] != null) {
|
||||||
|
p.setConstrained(ArrayHelper.contains(m[SET].getExceptionTypes(),java.beans.PropertyVetoException.class));
|
||||||
|
}
|
||||||
|
if(!b.hasProperty(p)) {
|
||||||
|
b.addProperty(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void findXXXInt(BeanInfoEmbryo b, int funcType) throws IntrospectionException {
|
||||||
|
Enumeration keys = propertyMethods.keys();
|
||||||
|
while(keys.hasMoreElements()) {
|
||||||
|
DoubleKey k = (DoubleKey)keys.nextElement();
|
||||||
|
Method[] m = (Method[])propertyMethods.get(k);
|
||||||
|
if(m[funcType] != null) {
|
||||||
|
boolean constrained;
|
||||||
|
if(m[SET_I] != null) {
|
||||||
|
constrained = ArrayHelper.contains(m[SET_I].getExceptionTypes(),java.beans.PropertyVetoException.class);
|
||||||
|
} else {
|
||||||
|
constrained = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Find out if there is an array type get or set **/
|
||||||
|
Class arrayType = Array.newInstance(k.getType(),0).getClass();
|
||||||
|
DoubleKey findSetArray = new DoubleKey(arrayType,k.getName());
|
||||||
|
Method[] m2 = (Method[])propertyMethods.get(findSetArray);
|
||||||
|
IndexedPropertyDescriptor p;
|
||||||
|
if(m2 == null) {
|
||||||
|
p = new IndexedPropertyDescriptor(Introspector.decapitalize(k.getName()),
|
||||||
|
null,null,
|
||||||
|
m[GET_I],m[SET_I]);
|
||||||
|
} else {
|
||||||
|
if(constrained && m2[SET] != null) {
|
||||||
|
constrained = ArrayHelper.contains(m2[SET].getExceptionTypes(),java.beans.PropertyVetoException.class);
|
||||||
|
}
|
||||||
|
p = new IndexedPropertyDescriptor(Introspector.decapitalize(k.getName()),
|
||||||
|
m2[GET],m2[SET],
|
||||||
|
m[GET_I],m[SET_I]);
|
||||||
|
}
|
||||||
|
p.setConstrained(constrained);
|
||||||
|
if(!b.hasProperty(p)) {
|
||||||
|
b.addProperty(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static final int IS=0;
|
||||||
|
static final int GET_I=1;
|
||||||
|
static final int SET_I=2;
|
||||||
|
static final int GET=3;
|
||||||
|
static final int SET=4;
|
||||||
|
|
||||||
|
static final int ADD=0;
|
||||||
|
static final int REMOVE=1;
|
||||||
|
|
||||||
|
void addToPropertyHash(String name, Method method, int funcType) {
|
||||||
|
String newName;
|
||||||
|
Class type;
|
||||||
|
|
||||||
|
switch(funcType) {
|
||||||
|
case IS:
|
||||||
|
type = java.lang.Boolean.TYPE;
|
||||||
|
newName = name.substring(2);
|
||||||
|
break;
|
||||||
|
case GET_I:
|
||||||
|
type = method.getReturnType();
|
||||||
|
newName = name.substring(3);
|
||||||
|
break;
|
||||||
|
case SET_I:
|
||||||
|
type = method.getParameterTypes()[1];
|
||||||
|
newName = name.substring(3);
|
||||||
|
break;
|
||||||
|
case GET:
|
||||||
|
type = method.getReturnType();
|
||||||
|
newName = name.substring(3);
|
||||||
|
break;
|
||||||
|
case SET:
|
||||||
|
type = method.getParameterTypes()[0];
|
||||||
|
newName = name.substring(3);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
newName = capitalize(newName);
|
||||||
|
|
||||||
|
DoubleKey k = new DoubleKey(type,newName);
|
||||||
|
Method[] methods = (Method[])propertyMethods.get(k);
|
||||||
|
if(methods == null) {
|
||||||
|
methods = new Method[5];
|
||||||
|
propertyMethods.put(k,methods);
|
||||||
|
}
|
||||||
|
methods[funcType] = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void addToListenerHash(String name, Method method, int funcType) {
|
||||||
|
String newName;
|
||||||
|
Class type;
|
||||||
|
|
||||||
|
switch(funcType) {
|
||||||
|
case ADD:
|
||||||
|
type = method.getParameterTypes()[0];
|
||||||
|
newName = name.substring(3,name.length()-8);
|
||||||
|
break;
|
||||||
|
case REMOVE:
|
||||||
|
type = method.getParameterTypes()[0];
|
||||||
|
newName = name.substring(6,name.length()-8);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
newName = capitalize(newName);
|
||||||
|
|
||||||
|
DoubleKey k = new DoubleKey(type,newName);
|
||||||
|
Method[] methods = (Method[])listenerMethods.get(k);
|
||||||
|
if(methods == null) {
|
||||||
|
methods = new Method[2];
|
||||||
|
listenerMethods.put(k,methods);
|
||||||
|
}
|
||||||
|
methods[funcType] = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String capitalize(String name) {
|
||||||
|
try {
|
||||||
|
if(Character.isUpperCase(name.charAt(0))) {
|
||||||
|
return name;
|
||||||
|
} else {
|
||||||
|
char[] c = name.toCharArray();
|
||||||
|
c[0] = Character.toLowerCase(c[0]);
|
||||||
|
return new String(c);
|
||||||
|
}
|
||||||
|
} catch(StringIndexOutOfBoundsException E) {
|
||||||
|
return name;
|
||||||
|
} catch(NullPointerException E) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DoubleKey {
|
||||||
|
Class type;
|
||||||
|
String name;
|
||||||
|
|
||||||
|
DoubleKey(Class type, String name) {
|
||||||
|
this.type = type;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
Class getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if(o instanceof DoubleKey) {
|
||||||
|
DoubleKey d = (DoubleKey)o;
|
||||||
|
return d.type.equals(type) && d.name.equals(name);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
return type.hashCode() ^ name.hashCode();
|
||||||
|
}
|
||||||
|
}
|
89
libjava/gnu/java/beans/editors/ColorEditor.java
Normal file
89
libjava/gnu/java/beans/editors/ColorEditor.java
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
/* gnu.java.beans.editors.ColorEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeByteEditor is a property editor for the
|
||||||
|
** byte type.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class ColorEditor extends PropertyEditorSupport {
|
||||||
|
Color[] stdColors = {Color.black,Color.blue,Color.cyan,
|
||||||
|
Color.darkGray,Color.gray,Color.green,
|
||||||
|
Color.lightGray,Color.magenta,Color.orange,
|
||||||
|
Color.pink,Color.red,Color.white,
|
||||||
|
Color.yellow};
|
||||||
|
String[] stdColorNames = {"black","blue","cyan",
|
||||||
|
"dark gray","gray","green",
|
||||||
|
"light gray","magenta","orange",
|
||||||
|
"pink","red","white",
|
||||||
|
"yellow"};
|
||||||
|
|
||||||
|
/** setAsText for Color checks for standard color names
|
||||||
|
** and then checks for a #RRGGBB value or just RRGGBB,
|
||||||
|
** both in hex.
|
||||||
|
**/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
if(val.length() == 0) {
|
||||||
|
throw new IllegalArgumentException("Tried to set empty value!");
|
||||||
|
}
|
||||||
|
for(int i=0;i<stdColorNames.length;i++) {
|
||||||
|
if(stdColorNames[i].equalsIgnoreCase(val)) {
|
||||||
|
setValue(stdColors[i]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(val.charAt(0) == '#') {
|
||||||
|
setValue(new Color(Integer.parseInt(val.substring(1),16)));
|
||||||
|
} else {
|
||||||
|
setValue(new Color(Integer.parseInt(val,16)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText for Color turns the color into either one of the standard
|
||||||
|
** colors or into an RGB hex value with # prepended. **/
|
||||||
|
public String getAsText() {
|
||||||
|
for(int i=0;i<stdColors.length;i++) {
|
||||||
|
if(stdColors[i].equals(getValue())) {
|
||||||
|
return stdColorNames[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "#" + Integer.toHexString(((Color)getValue()).getRGB() & 0x00FFFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getTags for Color returns a list of standard colors. **/
|
||||||
|
public String[] getTags() {
|
||||||
|
return stdColorNames;
|
||||||
|
}
|
||||||
|
}
|
66
libjava/gnu/java/beans/editors/FontEditor.java
Normal file
66
libjava/gnu/java/beans/editors/FontEditor.java
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
/* gnu.java.beans.editors.FontEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
import java.awt.Font;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** FontEditor is a property editor for java.awt.Font.
|
||||||
|
**
|
||||||
|
** <STRONG>To Do:</STRONG> Add custom font chooser
|
||||||
|
** component.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class FontEditor extends PropertyEditorSupport {
|
||||||
|
/** setAsText for Font calls Font.decode(). **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
setValue(Font.decode(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText for Font returns a value in the format
|
||||||
|
** expected by Font.decode().
|
||||||
|
**/
|
||||||
|
public String getAsText() {
|
||||||
|
Font f = (Font)getValue();
|
||||||
|
if(f.isBold()) {
|
||||||
|
if(f.isItalic()) {
|
||||||
|
return f.getName()+"-bolditalic-"+f.getSize();
|
||||||
|
} else {
|
||||||
|
return f.getName()+"-bold-"+f.getSize();
|
||||||
|
}
|
||||||
|
} else if(f.isItalic()) {
|
||||||
|
return f.getName()+"-italic-"+f.getSize();
|
||||||
|
} else {
|
||||||
|
return f.getName()+"-"+f.getSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
62
libjava/gnu/java/beans/editors/NativeBooleanEditor.java
Normal file
62
libjava/gnu/java/beans/editors/NativeBooleanEditor.java
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/* gnu.java.beans.editors.NativeBooleanEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeBooleanEditor is a property editor for the
|
||||||
|
** boolean type.<P>
|
||||||
|
**
|
||||||
|
** <STRONG>To Do:</STRONG> add support for a checkbox
|
||||||
|
** as the custom editor.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class NativeBooleanEditor extends PropertyEditorSupport {
|
||||||
|
String[] tags = {"true","false"};
|
||||||
|
|
||||||
|
/** setAsText for boolean checks for true or false or t or f. "" also means false. **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
if(val.equalsIgnoreCase("true") || val.equalsIgnoreCase("t")) {
|
||||||
|
setValue(Boolean.FALSE);
|
||||||
|
} else if(val.equalsIgnoreCase("false") || val.equalsIgnoreCase("f") || val.equals("")) {
|
||||||
|
setValue(Boolean.TRUE);
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Value must be true, false, t, f or empty.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** getAsText for boolean calls Boolean.toString(). **/
|
||||||
|
public String getAsText() {
|
||||||
|
return getValue().toString();
|
||||||
|
}
|
||||||
|
}
|
50
libjava/gnu/java/beans/editors/NativeByteEditor.java
Normal file
50
libjava/gnu/java/beans/editors/NativeByteEditor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* gnu.java.beans.editors.NativeByteEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeByteEditor is a property editor for the
|
||||||
|
** byte type.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class NativeByteEditor extends PropertyEditorSupport {
|
||||||
|
/** setAsText for byte calls Byte.valueOf(). **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
setValue(Byte.valueOf(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText for byte calls Byte.toString(). **/
|
||||||
|
public String getAsText() {
|
||||||
|
return getValue().toString();
|
||||||
|
}
|
||||||
|
}
|
50
libjava/gnu/java/beans/editors/NativeDoubleEditor.java
Normal file
50
libjava/gnu/java/beans/editors/NativeDoubleEditor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* gnu.java.beans.editors.NativeDoubleEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeDoubleEditor is a property editor for the
|
||||||
|
** double type.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class NativeDoubleEditor extends PropertyEditorSupport {
|
||||||
|
/** setAsText for double calls Double.valueOf(). **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
setValue(Double.valueOf(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText for double calls Double.toString(). **/
|
||||||
|
public String getAsText() {
|
||||||
|
return getValue().toString();
|
||||||
|
}
|
||||||
|
}
|
50
libjava/gnu/java/beans/editors/NativeFloatEditor.java
Normal file
50
libjava/gnu/java/beans/editors/NativeFloatEditor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* gnu.java.beans.editors.NativeFloatEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeFloatEditor is a property editor for the
|
||||||
|
** float type.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class NativeFloatEditor extends PropertyEditorSupport {
|
||||||
|
/** setAsText for float calls Float.valueOf(). **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
setValue(Float.valueOf(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText for float calls Float.toString(). **/
|
||||||
|
public String getAsText() {
|
||||||
|
return getValue().toString();
|
||||||
|
}
|
||||||
|
}
|
50
libjava/gnu/java/beans/editors/NativeIntEditor.java
Normal file
50
libjava/gnu/java/beans/editors/NativeIntEditor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* gnu.java.beans.editors.NativeIntEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeIntEditor is a property editor for the
|
||||||
|
** int type.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class NativeIntEditor extends PropertyEditorSupport {
|
||||||
|
/** setAsText for int calls Integer.valueOf(). **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
setValue(Integer.valueOf(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText for int calls Integer.toString(). **/
|
||||||
|
public String getAsText() {
|
||||||
|
return getValue().toString();
|
||||||
|
}
|
||||||
|
}
|
50
libjava/gnu/java/beans/editors/NativeLongEditor.java
Normal file
50
libjava/gnu/java/beans/editors/NativeLongEditor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* gnu.java.beans.editors.NativeLongEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeLongEditor is a property editor for the
|
||||||
|
** long type.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class NativeLongEditor extends PropertyEditorSupport {
|
||||||
|
/** setAsText for long calls Long.valueOf(). **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
setValue(Long.valueOf(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText for long calls Long.toString(). **/
|
||||||
|
public String getAsText() {
|
||||||
|
return getValue().toString();
|
||||||
|
}
|
||||||
|
}
|
50
libjava/gnu/java/beans/editors/NativeShortEditor.java
Normal file
50
libjava/gnu/java/beans/editors/NativeShortEditor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* gnu.java.beans.editors.NativeShortEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeShortEditor is a property editor for the
|
||||||
|
** short type.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class NativeShortEditor extends PropertyEditorSupport {
|
||||||
|
/** setAsText for short calls Short.valueOf(). **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
setValue(Short.valueOf(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText for short calls Short.toString(). **/
|
||||||
|
public String getAsText() {
|
||||||
|
return getValue().toString();
|
||||||
|
}
|
||||||
|
}
|
50
libjava/gnu/java/beans/editors/StringEditor.java
Normal file
50
libjava/gnu/java/beans/editors/StringEditor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* gnu.java.beans.editors.StringEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.editors;
|
||||||
|
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** NativeByteEditor is a property editor for the
|
||||||
|
** byte type.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class StringEditor extends PropertyEditorSupport {
|
||||||
|
/** setAsText just sets the value. **/
|
||||||
|
public void setAsText(String val) throws IllegalArgumentException {
|
||||||
|
setValue(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** getAsText just returns the value. **/
|
||||||
|
public String getAsText() {
|
||||||
|
return (String)getValue();
|
||||||
|
}
|
||||||
|
}
|
63
libjava/gnu/java/beans/info/ComponentBeanInfo.java
Normal file
63
libjava/gnu/java/beans/info/ComponentBeanInfo.java
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/* gnu.java.beans.info.ComponentBeanInfo
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.beans.info;
|
||||||
|
|
||||||
|
import gnu.java.beans.*;
|
||||||
|
import java.beans.*;
|
||||||
|
|
||||||
|
/** BeanInfo class for java.awt.Component.
|
||||||
|
** This provides a few properties, but that's
|
||||||
|
** it.
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, Aug 1 1998
|
||||||
|
**/
|
||||||
|
public class ComponentBeanInfo extends SimpleBeanInfo {
|
||||||
|
static PropertyDescriptor[] properties;
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
properties = new PropertyDescriptor[6];
|
||||||
|
properties[0] = new PropertyDescriptor("name",java.awt.Component.class);
|
||||||
|
properties[1] = new PropertyDescriptor("background",java.awt.Component.class);
|
||||||
|
properties[2] = new PropertyDescriptor("foreground",java.awt.Component.class);
|
||||||
|
properties[3] = new PropertyDescriptor("font",java.awt.Component.class);
|
||||||
|
properties[4] = new PropertyDescriptor("enabled",java.awt.Component.class);
|
||||||
|
properties[5] = new PropertyDescriptor("visible",java.awt.Component.class);
|
||||||
|
} catch(IntrospectionException E) {
|
||||||
|
properties = null;
|
||||||
|
throw new UnknownError("Could not introspect some java.awt.Component properties.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public ComponentBeanInfo() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PropertyDescriptor[] getPropertyDescriptors() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
59
libjava/gnu/java/io/ClassLoaderObjectInputStream.java
Normal file
59
libjava/gnu/java/io/ClassLoaderObjectInputStream.java
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/* gnu.java.io.ClassLoaderObjectInputStream
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.io;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClassLoaderObjectInputStream is ObjectInputStream, with
|
||||||
|
* the ability to use a specific ClassLoader.
|
||||||
|
*
|
||||||
|
* @author Geoff Berry
|
||||||
|
* @version 1.1.0, 29 Jul 1998
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ClassLoaderObjectInputStream extends ObjectInputStream {
|
||||||
|
ClassLoader myClassLoader;
|
||||||
|
|
||||||
|
/** Create the new ClassLoaderObjectInputStream.
|
||||||
|
* @param in the InputStream to read the Objects from.
|
||||||
|
* @param myClassLoader the ClassLoader to load classes
|
||||||
|
* with.
|
||||||
|
*/
|
||||||
|
public ClassLoaderObjectInputStream(InputStream in, ClassLoader myClassLoader) throws IOException,StreamCorruptedException {
|
||||||
|
super(in);
|
||||||
|
this.myClassLoader = myClassLoader;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Overriden method to use the loadClass() method from
|
||||||
|
* the ClassLoader.
|
||||||
|
*/
|
||||||
|
public Class resolveClass(String name) throws IOException, ClassNotFoundException {
|
||||||
|
return myClassLoader.loadClass(name);
|
||||||
|
}
|
||||||
|
}
|
45
libjava/gnu/java/io/NullOutputStream.java
Normal file
45
libjava/gnu/java/io/NullOutputStream.java
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/* NullOutputStream.java -- OutputStream that does absolutely nothing
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.io;
|
||||||
|
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
This is a placeholder OutputStream that does absolutley nothing
|
||||||
|
when written to. It is intended to be used in the same manner as
|
||||||
|
/dev/null. None of this class's methods do anything at all.
|
||||||
|
*/
|
||||||
|
public class NullOutputStream extends OutputStream
|
||||||
|
{
|
||||||
|
public NullOutputStream() {}
|
||||||
|
public void write( int b ) {}
|
||||||
|
public void write( byte b[] ) {}
|
||||||
|
public void write( byte b[], int off, int len ) {}
|
||||||
|
public void flush() {}
|
||||||
|
public void close() {}
|
||||||
|
}
|
89
libjava/gnu/java/io/ObjectIdentityWrapper.java
Normal file
89
libjava/gnu/java/io/ObjectIdentityWrapper.java
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
/* ObjectIdentityWrapper.java -- Wrapper class used to override equals()
|
||||||
|
and hashCode() to be as discriminating as possible
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
This class is a thin wrapper around <code>Object</code> that makes
|
||||||
|
the methods <code>hashCode()</code> and <code>equals(Object)</code>
|
||||||
|
as discriminating as possible.
|
||||||
|
*/
|
||||||
|
public class ObjectIdentityWrapper
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
Constructs a <code>ObjectIdentityWrapper</code> that is wrapped
|
||||||
|
around o.
|
||||||
|
*/
|
||||||
|
public ObjectIdentityWrapper( Object o )
|
||||||
|
{
|
||||||
|
object = o;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Uses <code>System.identityHashCode(Object)</code> to compute a
|
||||||
|
hash code for the object wrapped by this
|
||||||
|
<code>ObjectIdentityWrapper</code>.
|
||||||
|
|
||||||
|
@see java.lang.System#identityHashCode(java.lang.Object)
|
||||||
|
@see java.util.Hashtable
|
||||||
|
@see java.lang.Object#hashCode()
|
||||||
|
*/
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return System.identityHashCode( object );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Uses the <code>==</code> operator to test for equality between
|
||||||
|
the object wrapped by this <code>ObjectIdentityWrapper</code> and
|
||||||
|
the object wrapped by the <code>ObjectIdentityWrapper</code> o.
|
||||||
|
Returns false if o is not a <code>ObjectIdentityWrapper</code>.
|
||||||
|
|
||||||
|
@see java.util.Hashtable
|
||||||
|
@see java.lang.Object#equals()
|
||||||
|
*/
|
||||||
|
public boolean equals( Object o )
|
||||||
|
{
|
||||||
|
if( o instanceof ObjectIdentityWrapper )
|
||||||
|
return object == ((ObjectIdentityWrapper)o).object;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "ObjectIdentityWrapper< " + object + ", " + hashCode() + " >";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
The <code>Object</code> wrapped by this
|
||||||
|
<code>ObjectIdentityWrapper</code>.
|
||||||
|
*/
|
||||||
|
public Object object;
|
||||||
|
}
|
63
libjava/gnu/java/lang/ArrayHelper.java
Normal file
63
libjava/gnu/java/lang/ArrayHelper.java
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/* gnu.java.lang.ArrayHelper
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.lang;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** ArrayHelper helps you do things with arrays.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class ArrayHelper {
|
||||||
|
public static boolean contains(Object[] array, Object searchFor) {
|
||||||
|
return indexOf(array,searchFor) != -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int indexOf(Object[] array, Object searchFor) {
|
||||||
|
for(int i=0;i<array.length;i++) {
|
||||||
|
if(array[i].equals(searchFor)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean equalsArray(Object[] a, Object[] b) {
|
||||||
|
if(a.length == b.length) {
|
||||||
|
for(int i=0;i<a.length;i++) {
|
||||||
|
if(!a[i].equals(b[i])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
232
libjava/gnu/java/lang/ClassHelper.java
Normal file
232
libjava/gnu/java/lang/ClassHelper.java
Normal file
|
@ -0,0 +1,232 @@
|
||||||
|
/* gnu.java.lang.ClassHelper
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.lang;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** ClassHelper has various methods that ought to have been
|
||||||
|
** in class.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class ClassHelper {
|
||||||
|
/** Strip the package part from the class name.
|
||||||
|
** @param clazz the class to get the truncated name from
|
||||||
|
** @return the truncated class name.
|
||||||
|
**/
|
||||||
|
public static String getTruncatedClassName(Class clazz) {
|
||||||
|
return getTruncatedName(clazz.getName());
|
||||||
|
}
|
||||||
|
/** Strip the package part from the class name, or the
|
||||||
|
** class part from the method or field name.
|
||||||
|
** @param name the name to truncate.
|
||||||
|
** @return the truncated name.
|
||||||
|
**/
|
||||||
|
public static String getTruncatedName(String name) {
|
||||||
|
int lastInd = name.lastIndexOf('.');
|
||||||
|
if(lastInd == -1) {
|
||||||
|
return name;
|
||||||
|
} else {
|
||||||
|
return name.substring(lastInd+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Strip the last portion of the name (after the last
|
||||||
|
** dot).
|
||||||
|
** @param name the name to get package of.
|
||||||
|
** @return the package name. "" if no package.
|
||||||
|
**/
|
||||||
|
public static String getPackagePortion(String name) {
|
||||||
|
int lastInd = name.lastIndexOf('.');
|
||||||
|
if(lastInd == -1) {
|
||||||
|
return "";
|
||||||
|
} else {
|
||||||
|
return name.substring(0,lastInd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Hashtable allMethods = new Hashtable();
|
||||||
|
static Hashtable allMethodsAtDeclaration = new Hashtable();
|
||||||
|
|
||||||
|
/** Get all the methods, public, private and
|
||||||
|
** otherwise, from the class, getting them
|
||||||
|
** from the most recent class to find them.
|
||||||
|
**/
|
||||||
|
public static Method[] getAllMethods(Class clazz) {
|
||||||
|
Method[] retval = (Method[])allMethods.get(clazz);
|
||||||
|
if(retval == null) {
|
||||||
|
Method[] superMethods;
|
||||||
|
if(clazz.getSuperclass() != null) {
|
||||||
|
superMethods = getAllMethods(clazz.getSuperclass());
|
||||||
|
} else {
|
||||||
|
superMethods = new Method[0];
|
||||||
|
}
|
||||||
|
Vector v = new Vector();
|
||||||
|
Method[] currentMethods = clazz.getDeclaredMethods();
|
||||||
|
for(int i=0;i<currentMethods.length;i++) {
|
||||||
|
v.addElement(currentMethods[i]);
|
||||||
|
}
|
||||||
|
for(int i=0;i<superMethods.length;i++) {
|
||||||
|
boolean addOK = true;
|
||||||
|
for(int j=0;j<currentMethods.length;j++) {
|
||||||
|
if(getTruncatedName(superMethods[i].getName()).equals(getTruncatedName(currentMethods[j].getName()))
|
||||||
|
&& ArrayHelper.equalsArray(superMethods[i].getParameterTypes(),currentMethods[j].getParameterTypes())) {
|
||||||
|
addOK = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(addOK) {
|
||||||
|
v.addElement(superMethods[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = new Method[v.size()];
|
||||||
|
v.copyInto(retval);
|
||||||
|
allMethods.put(clazz,retval);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get all the methods, public, private and
|
||||||
|
** otherwise, from the class, and get them from
|
||||||
|
** their point of declaration.
|
||||||
|
**/
|
||||||
|
public static Method[] getAllMethodsAtDeclaration(Class clazz) {
|
||||||
|
Method[] retval = (Method[])allMethodsAtDeclaration.get(clazz);
|
||||||
|
if(retval == null) {
|
||||||
|
Method[] superMethods;
|
||||||
|
if(clazz.getSuperclass() != null) {
|
||||||
|
superMethods = getAllMethodsAtDeclaration(clazz.getSuperclass());
|
||||||
|
} else {
|
||||||
|
superMethods = new Method[0];
|
||||||
|
}
|
||||||
|
Vector v = new Vector();
|
||||||
|
Method[] currentMethods = clazz.getDeclaredMethods();
|
||||||
|
for(int i=0;i<superMethods.length;i++) {
|
||||||
|
v.addElement(superMethods[i]);
|
||||||
|
}
|
||||||
|
for(int i=0;i<superMethods.length;i++) {
|
||||||
|
boolean addOK = true;
|
||||||
|
for(int j=0;j<currentMethods.length;j++) {
|
||||||
|
if(getTruncatedName(superMethods[i].getName()).equals(getTruncatedName(currentMethods[j].getName()))
|
||||||
|
&& ArrayHelper.equalsArray(superMethods[i].getParameterTypes(),currentMethods[j].getParameterTypes())) {
|
||||||
|
addOK = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(addOK) {
|
||||||
|
v.addElement(superMethods[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = new Method[v.size()];
|
||||||
|
v.copyInto(retval);
|
||||||
|
allMethodsAtDeclaration.put(clazz,retval);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Hashtable allFields = new Hashtable();
|
||||||
|
static Hashtable allFieldsAtDeclaration = new Hashtable();
|
||||||
|
|
||||||
|
/** Get all the fields, public, private and
|
||||||
|
** otherwise, from the class, getting them
|
||||||
|
** from the most recent class to find them.
|
||||||
|
**/
|
||||||
|
public static Field[] getAllFields(Class clazz) {
|
||||||
|
Field[] retval = (Field[])allFields.get(clazz);
|
||||||
|
if(retval == null) {
|
||||||
|
Field[] superFields;
|
||||||
|
if(clazz.getSuperclass() != null) {
|
||||||
|
superFields = getAllFields(clazz.getSuperclass());
|
||||||
|
} else {
|
||||||
|
superFields = new Field[0];
|
||||||
|
}
|
||||||
|
Vector v = new Vector();
|
||||||
|
Field[] currentFields = clazz.getDeclaredFields();
|
||||||
|
for(int i=0;i<currentFields.length;i++) {
|
||||||
|
v.addElement(currentFields[i]);
|
||||||
|
}
|
||||||
|
for(int i=0;i<superFields.length;i++) {
|
||||||
|
boolean addOK = true;
|
||||||
|
for(int j=0;j<currentFields.length;j++) {
|
||||||
|
if(getTruncatedName(superFields[i].getName()).equals(getTruncatedName(currentFields[j].getName()))) {
|
||||||
|
addOK = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(addOK) {
|
||||||
|
v.addElement(superFields[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = new Field[v.size()];
|
||||||
|
v.copyInto(retval);
|
||||||
|
allFields.put(clazz,retval);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get all the fields, public, private and
|
||||||
|
** otherwise, from the class, and get them from
|
||||||
|
** their point of declaration.
|
||||||
|
**/
|
||||||
|
public static Field[] getAllFieldsAtDeclaration(Class clazz) {
|
||||||
|
Field[] retval = (Field[])allFieldsAtDeclaration.get(clazz);
|
||||||
|
if(retval == null) {
|
||||||
|
Field[] superFields;
|
||||||
|
if(clazz.getSuperclass() != null) {
|
||||||
|
superFields = getAllFieldsAtDeclaration(clazz.getSuperclass());
|
||||||
|
} else {
|
||||||
|
superFields = new Field[0];
|
||||||
|
}
|
||||||
|
Vector v = new Vector();
|
||||||
|
Field[] currentFields = clazz.getDeclaredFields();
|
||||||
|
for(int i=0;i<superFields.length;i++) {
|
||||||
|
v.addElement(superFields[i]);
|
||||||
|
}
|
||||||
|
for(int i=0;i<superFields.length;i++) {
|
||||||
|
boolean addOK = true;
|
||||||
|
for(int j=0;j<currentFields.length;j++) {
|
||||||
|
if(getTruncatedName(superFields[i].getName()).equals(getTruncatedName(currentFields[j].getName()))) {
|
||||||
|
addOK = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(addOK) {
|
||||||
|
v.addElement(superFields[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = new Field[v.size()];
|
||||||
|
v.copyInto(retval);
|
||||||
|
allFieldsAtDeclaration.put(clazz,retval);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
}
|
262
libjava/gnu/java/lang/reflect/TypeSignature.java
Normal file
262
libjava/gnu/java/lang/reflect/TypeSignature.java
Normal file
|
@ -0,0 +1,262 @@
|
||||||
|
/* TypeSignature.java -- Class used to compute type signatures
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package gnu.java.lang.reflect;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Member;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
/**
|
||||||
|
This class provides static methods that can be used to compute
|
||||||
|
type-signatures of <code>Class</code>s or <code>Member</code>s.
|
||||||
|
More specific methods are also provided for computing the
|
||||||
|
type-signature of <code>Constructor</code>s and
|
||||||
|
<code>Method</code>s. Methods are also provided to go in the
|
||||||
|
reverse direction.
|
||||||
|
*/
|
||||||
|
public class TypeSignature
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a <code>String</code> representing the type-encoding of
|
||||||
|
CLAZZ. Type-encodings are computed as follows:
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
boolean -> "Z"
|
||||||
|
byte -> "B"
|
||||||
|
char -> "C"
|
||||||
|
double -> "D"
|
||||||
|
float -> "F"
|
||||||
|
int -> "I"
|
||||||
|
long -> "J"
|
||||||
|
short -> "S"
|
||||||
|
void -> "V"
|
||||||
|
arrays -> "[" + type-encoding of component type
|
||||||
|
object -> "L"
|
||||||
|
+ fully qualified class name with "."'s replaced by "/"'s
|
||||||
|
+ ";"</pre>
|
||||||
|
*/
|
||||||
|
public static String getEncodingOfClass( Class clazz )
|
||||||
|
{
|
||||||
|
if( clazz.isPrimitive() )
|
||||||
|
{
|
||||||
|
if( clazz == Boolean.TYPE )
|
||||||
|
return "Z";
|
||||||
|
if( clazz == Byte.TYPE )
|
||||||
|
return "B";
|
||||||
|
if( clazz == Character.TYPE )
|
||||||
|
return "C";
|
||||||
|
if( clazz == Double.TYPE )
|
||||||
|
return "D";
|
||||||
|
if( clazz == Float.TYPE )
|
||||||
|
return "F";
|
||||||
|
if( clazz == Integer.TYPE )
|
||||||
|
return "I";
|
||||||
|
if( clazz == Long.TYPE )
|
||||||
|
return "J";
|
||||||
|
if( clazz == Short.TYPE )
|
||||||
|
return "S";
|
||||||
|
if( clazz == Void.TYPE )
|
||||||
|
return "V";
|
||||||
|
else
|
||||||
|
throw new RuntimeException( "Unknown primitive class " + clazz );
|
||||||
|
}
|
||||||
|
else if( clazz.isArray() )
|
||||||
|
{
|
||||||
|
return '[' + getEncodingOfClass( clazz.getComponentType() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String classname = clazz.getName();
|
||||||
|
int name_len = classname.length();
|
||||||
|
char[] buf = new char[ name_len + 2 ];
|
||||||
|
buf[0] = 'L';
|
||||||
|
classname.getChars( 0, name_len, buf, 1 );
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for( i=1; i <= name_len; i++ )
|
||||||
|
{
|
||||||
|
if( buf[i] == '.' )
|
||||||
|
buf[i] = '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
buf[i] = ';';
|
||||||
|
return new String( buf );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function is the inverse of <code>getEncodingOfClass</code>.
|
||||||
|
|
||||||
|
@see getEncodingOfClass
|
||||||
|
|
||||||
|
@exception ClassNotFoundException If class encoded as type_code
|
||||||
|
cannot be located.
|
||||||
|
*/
|
||||||
|
public static Class getClassForEncoding( String type_code )
|
||||||
|
throws ClassNotFoundException
|
||||||
|
{
|
||||||
|
if( type_code.equals( "B" ) )
|
||||||
|
return Byte.TYPE;
|
||||||
|
if( type_code.equals( "C" ) )
|
||||||
|
return Character.TYPE;
|
||||||
|
if( type_code.equals( "D" ) )
|
||||||
|
return Double.TYPE;
|
||||||
|
if( type_code.equals( "F" ) )
|
||||||
|
return Float.TYPE;
|
||||||
|
if( type_code.equals( "I" ) )
|
||||||
|
return Integer.TYPE;
|
||||||
|
if( type_code.equals( "J" ) )
|
||||||
|
return Long.TYPE;
|
||||||
|
if( type_code.equals( "S" ) )
|
||||||
|
return Short.TYPE;
|
||||||
|
if( type_code.equals( "Z" ) )
|
||||||
|
return Boolean.TYPE;
|
||||||
|
if( type_code.charAt( 0 ) == 'L' )
|
||||||
|
{
|
||||||
|
return Class.forName(
|
||||||
|
type_code.substring( 1, type_code.length() - 1 ).replace( '/', '.' ));
|
||||||
|
}
|
||||||
|
if( type_code.charAt( 0 ) == '[' )
|
||||||
|
{
|
||||||
|
int last_bracket = type_code.lastIndexOf( '[' );
|
||||||
|
String brackets = type_code.substring( 0, last_bracket + 1 );
|
||||||
|
String component = type_code.substring( last_bracket + 1 );
|
||||||
|
|
||||||
|
// ??? This is what the Classpath implementation did, but I don't
|
||||||
|
// think that it's correct. The JLS says that Class.forName takes the
|
||||||
|
// classname of an array element in fully qualified form, whereas this
|
||||||
|
// code is tring to strip off the punctuation.
|
||||||
|
|
||||||
|
// if( component.charAt( 0 ) == 'L' )
|
||||||
|
// component =
|
||||||
|
// component.substring( 1, component.length() - 1 ).replace('/', '.');
|
||||||
|
|
||||||
|
if( component.charAt( 0 ) == 'L' )
|
||||||
|
component = component.replace('/', '.');
|
||||||
|
|
||||||
|
return Class.forName( brackets + component );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new ClassNotFoundException( "Type code cannot be parsed as a valid class name" );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a <code>String</code> representing the type-encoding of
|
||||||
|
M. The type-encoding of a method is:
|
||||||
|
|
||||||
|
"(" + type-encodings of parameter types + ")"
|
||||||
|
+ type-encoding of return type
|
||||||
|
*/
|
||||||
|
public static String getEncodingOfMethod( Method m )
|
||||||
|
{
|
||||||
|
String returnEncoding = getEncodingOfClass( m.getReturnType() );
|
||||||
|
Class[] paramTypes = m.getParameterTypes();
|
||||||
|
String[] paramEncodings = new String[ paramTypes.length ];
|
||||||
|
|
||||||
|
String paramEncoding;
|
||||||
|
int size = 2; // make room for parens
|
||||||
|
for( int i=0; i < paramTypes.length; i++ )
|
||||||
|
{
|
||||||
|
paramEncoding = getEncodingOfClass( paramTypes[i] );
|
||||||
|
size += paramEncoding.length();
|
||||||
|
paramEncodings[i] = paramEncoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
size += returnEncoding.length();
|
||||||
|
|
||||||
|
StringBuffer buf = new StringBuffer( size );
|
||||||
|
buf.append( '(' );
|
||||||
|
|
||||||
|
for( int i=0; i < paramTypes.length; i++ )
|
||||||
|
{
|
||||||
|
buf.append( paramEncodings[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.append( ')' );
|
||||||
|
buf.append( returnEncoding );
|
||||||
|
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a <code>String</code> representing the type-encoding of
|
||||||
|
C. The type-encoding of a method is:
|
||||||
|
|
||||||
|
"(" + type-encodings of parameter types + ")V"
|
||||||
|
*/
|
||||||
|
public static String getEncodingOfConstructor( Constructor c )
|
||||||
|
{
|
||||||
|
Class[] paramTypes = c.getParameterTypes();
|
||||||
|
String[] paramEncodings = new String[ paramTypes.length ];
|
||||||
|
|
||||||
|
String paramEncoding;
|
||||||
|
int size = 3; // make room for parens and V for return type
|
||||||
|
for( int i=0; i < paramTypes.length; i++ )
|
||||||
|
{
|
||||||
|
paramEncoding = getEncodingOfClass( paramTypes[i] );
|
||||||
|
size += paramEncoding.length();
|
||||||
|
paramEncodings[i] = paramEncoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuffer buf = new StringBuffer( size );
|
||||||
|
buf.append( '(' );
|
||||||
|
|
||||||
|
for( int i=0; i < paramTypes.length; i++ )
|
||||||
|
{
|
||||||
|
buf.append( paramEncodings[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.append( ")V" );
|
||||||
|
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a <code>String</code> representing the type-encoding of
|
||||||
|
MEM. <code>Constructor</code>s are handled by
|
||||||
|
<code>getEncodingOfConstructor</code>. <code>Method</code>s are
|
||||||
|
handled by <code>getEncodingOfMethod</code>. <code>Field</code>s
|
||||||
|
are handled by returning the encoding of the type of the
|
||||||
|
<code>Field</code>.
|
||||||
|
*/
|
||||||
|
public static String getEncodingOfMember( Member mem )
|
||||||
|
{
|
||||||
|
if( mem instanceof Constructor )
|
||||||
|
return getEncodingOfConstructor( (Constructor)mem );
|
||||||
|
if( mem instanceof Method )
|
||||||
|
return getEncodingOfMethod( (Method)mem );
|
||||||
|
else // Field
|
||||||
|
return getEncodingOfClass( ((Field)mem).getType() );
|
||||||
|
}
|
||||||
|
}
|
|
@ -99,6 +99,7 @@ OBJDUMP = @OBJDUMP@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PERL = @PERL@
|
PERL = @PERL@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
|
SYSDEP_SOURCES = @SYSDEP_SOURCES@
|
||||||
SYSTEMSPEC = @SYSTEMSPEC@
|
SYSTEMSPEC = @SYSTEMSPEC@
|
||||||
THREADDEPS = @THREADDEPS@
|
THREADDEPS = @THREADDEPS@
|
||||||
THREADINCS = @THREADINCS@
|
THREADINCS = @THREADINCS@
|
||||||
|
@ -127,7 +128,7 @@ DIST_COMMON = ./stamp-h.in Makefile.am Makefile.in config.h.in
|
||||||
|
|
||||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
|
||||||
TAR = gtar
|
TAR = tar
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
all: all-redirect
|
all: all-redirect
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
|
@ -224,7 +225,7 @@ distdir: $(DISTFILES)
|
||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
if test -d $$d/$$file; then \
|
if test -d $$d/$$file; then \
|
||||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
cp -pr $$/$$file $(distdir)/$$file; \
|
||||||
else \
|
else \
|
||||||
test -f $(distdir)/$$file \
|
test -f $(distdir)/$$file \
|
||||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||||
|
|
|
@ -344,8 +344,14 @@
|
||||||
/* Version number of package */
|
/* Version number of package */
|
||||||
#undef VERSION
|
#undef VERSION
|
||||||
|
|
||||||
/* Define if gethostbyname_r is only declared if _REENTRANT is defined */
|
/* Required define if using POSIX threads */
|
||||||
#undef GETHOSTBYNAME_R_NEEDS_REENTRANT
|
#undef _REENTRANT
|
||||||
|
|
||||||
|
/* Required define if using POSIX threads */
|
||||||
|
#undef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
|
||||||
|
/* Required define if using POSIX threads */
|
||||||
|
#undef _REENTRANT
|
||||||
|
|
||||||
/* Define if struct hostent_data is defined in netdb.h */
|
/* Define if struct hostent_data is defined in netdb.h */
|
||||||
#undef HAVE_STRUCT_HOSTENT_DATA
|
#undef HAVE_STRUCT_HOSTENT_DATA
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// default-signal.h - Catch runtime signals and turn them into exceptions.
|
// default-signal.h - Catch runtime signals and turn them into exceptions.
|
||||||
|
|
||||||
/* Copyright (C) 1998, 1999 Free Software Foundation
|
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
|
||||||
|
|
||||||
This file is part of libgcj.
|
This file is part of libgcj.
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ do \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
|
||||||
#define MAKE_THROW_FRAME do {} while (0)
|
#define MAKE_THROW_FRAME(_exception) do {} while (0)
|
||||||
|
|
||||||
#else /* SJLJ_EXCEPTIONS */
|
#else /* SJLJ_EXCEPTIONS */
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ details. */
|
||||||
#define SIGNAL_HANDLER(_name) \
|
#define SIGNAL_HANDLER(_name) \
|
||||||
static void _name (int _dummy)
|
static void _name (int _dummy)
|
||||||
|
|
||||||
#define MAKE_THROW_FRAME \
|
#define MAKE_THROW_FRAME(_exception) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
void **_p = (void **)&_dummy; \
|
void **_p = (void **)&_dummy; \
|
||||||
|
|
|
@ -48,11 +48,6 @@ static void throw_incompatible_class_change_error (jstring msg)
|
||||||
static void throw_null_pointer_exception ()
|
static void throw_null_pointer_exception ()
|
||||||
__attribute__ ((__noreturn__));
|
__attribute__ ((__noreturn__));
|
||||||
#endif
|
#endif
|
||||||
#ifndef HANDLE_FPE
|
|
||||||
static void throw_arithmetic_exception ()
|
|
||||||
__attribute__ ((__noreturn__));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" double __ieee754_fmod __P((double,double));
|
extern "C" double __ieee754_fmod __P((double,double));
|
||||||
|
|
||||||
|
@ -193,12 +188,6 @@ static jint get4(unsigned char* loc) {
|
||||||
do { if ((X)==NULL) throw_null_pointer_exception (); } while (0)
|
do { if ((X)==NULL) throw_null_pointer_exception (); } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HANDLE_FPE
|
|
||||||
#define ZEROCHECK(X)
|
|
||||||
#else
|
|
||||||
#define ZEROCHECK(X) \
|
|
||||||
do { if ((X) == 0) throw_arithmetic_exception (); } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// this method starts the actual running of the method. It is inlined
|
// this method starts the actual running of the method. It is inlined
|
||||||
// in three different variants in the static methods run_normal,
|
// in three different variants in the static methods run_normal,
|
||||||
|
@ -408,8 +397,8 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
using namespace java::lang::reflect;
|
using namespace java::lang::reflect;
|
||||||
|
|
||||||
register _Jv_word *sp = inv->sp;
|
_Jv_word *sp = inv->sp;
|
||||||
register unsigned char *pc = inv->pc;
|
unsigned char *pc = inv->pc;
|
||||||
_Jv_word *locals = inv->local_base ();
|
_Jv_word *locals = inv->local_base ();
|
||||||
|
|
||||||
_Jv_word *pool_data = defining_class->constants.data;
|
_Jv_word *pool_data = defining_class->constants.data;
|
||||||
|
@ -1390,8 +1379,7 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
jint value2 = POPI();
|
jint value2 = POPI();
|
||||||
jint value1 = POPI();
|
jint value1 = POPI();
|
||||||
ZEROCHECK (value2);
|
jint res = _Jv_divI (value1, value2);
|
||||||
jint res = value1 / value2;
|
|
||||||
PUSHI (res);
|
PUSHI (res);
|
||||||
}
|
}
|
||||||
NEXT_INSN;
|
NEXT_INSN;
|
||||||
|
@ -1401,8 +1389,7 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
jlong value2 = POPL();
|
jlong value2 = POPL();
|
||||||
jlong value1 = POPL();
|
jlong value1 = POPL();
|
||||||
ZEROCHECK (value2);
|
jlong res = _Jv_divJ (value1, value2);
|
||||||
jlong res = value1 / value2;
|
|
||||||
PUSHL (res);
|
PUSHL (res);
|
||||||
}
|
}
|
||||||
NEXT_INSN;
|
NEXT_INSN;
|
||||||
|
@ -1412,7 +1399,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
jfloat value2 = POPF();
|
jfloat value2 = POPF();
|
||||||
jfloat value1 = POPF();
|
jfloat value1 = POPF();
|
||||||
ZEROCHECK (value2);
|
|
||||||
jfloat res = value1 / value2;
|
jfloat res = value1 / value2;
|
||||||
PUSHF (res);
|
PUSHF (res);
|
||||||
}
|
}
|
||||||
|
@ -1423,7 +1409,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
jdouble value2 = POPD();
|
jdouble value2 = POPD();
|
||||||
jdouble value1 = POPD();
|
jdouble value1 = POPD();
|
||||||
ZEROCHECK (value2);
|
|
||||||
jdouble res = value1 / value2;
|
jdouble res = value1 / value2;
|
||||||
PUSHD (res);
|
PUSHD (res);
|
||||||
}
|
}
|
||||||
|
@ -1434,8 +1419,7 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
jint value2 = POPI();
|
jint value2 = POPI();
|
||||||
jint value1 = POPI();
|
jint value1 = POPI();
|
||||||
ZEROCHECK (value2);
|
jint res = _Jv_remI (value1, value2);
|
||||||
jint res = value1 % value2;
|
|
||||||
PUSHI (res);
|
PUSHI (res);
|
||||||
}
|
}
|
||||||
NEXT_INSN;
|
NEXT_INSN;
|
||||||
|
@ -1445,8 +1429,7 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
jlong value2 = POPL();
|
jlong value2 = POPL();
|
||||||
jlong value1 = POPL();
|
jlong value1 = POPL();
|
||||||
ZEROCHECK (value2);
|
jlong res = _Jv_remJ (value1, value2);
|
||||||
jlong res = value1 % value2;
|
|
||||||
PUSHL (res);
|
PUSHL (res);
|
||||||
}
|
}
|
||||||
NEXT_INSN;
|
NEXT_INSN;
|
||||||
|
@ -1456,7 +1439,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
jfloat value2 = POPF();
|
jfloat value2 = POPF();
|
||||||
jfloat value1 = POPF();
|
jfloat value1 = POPF();
|
||||||
ZEROCHECK (value2);
|
|
||||||
jfloat res = __ieee754_fmod (value1, value2);
|
jfloat res = __ieee754_fmod (value1, value2);
|
||||||
PUSHF (res);
|
PUSHF (res);
|
||||||
}
|
}
|
||||||
|
@ -1467,7 +1449,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
||||||
{
|
{
|
||||||
jdouble value2 = POPD();
|
jdouble value2 = POPD();
|
||||||
jdouble value1 = POPD();
|
jdouble value1 = POPD();
|
||||||
ZEROCHECK (value2);
|
|
||||||
jdouble res = __ieee754_fmod (value1, value2);
|
jdouble res = __ieee754_fmod (value1, value2);
|
||||||
PUSHD (res);
|
PUSHD (res);
|
||||||
}
|
}
|
||||||
|
@ -2447,18 +2428,4 @@ throw_null_pointer_exception ()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HANDLE_FPE
|
|
||||||
static java::lang::ArithmeticException *arithmetic_exc;
|
|
||||||
static void
|
|
||||||
throw_arithmetic_exception ()
|
|
||||||
{
|
|
||||||
if (arithmetic_exc == NULL)
|
|
||||||
arithmetic_exc = new java::lang::ArithmeticException
|
|
||||||
(JvNewStringLatin1 ("/ by zero"));
|
|
||||||
|
|
||||||
JvThrow (arithmetic_exc);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif // INTERPRETER
|
#endif // INTERPRETER
|
||||||
|
|
72
libjava/java/beans/BeanDescriptor.java
Normal file
72
libjava/java/beans/BeanDescriptor.java
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/* java.beans.BeanDescriptor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** BeanDescriptor describes general information about a Bean, plus
|
||||||
|
** stores the Bean's Class and it's customizer's Class.<P>
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 31 May 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class BeanDescriptor extends FeatureDescriptor {
|
||||||
|
Class beanClass;
|
||||||
|
Class customizerClass;
|
||||||
|
|
||||||
|
/** Create a new BeanDescriptor with the given beanClass and
|
||||||
|
** no customizer class.
|
||||||
|
** @param beanClass the class of the Bean.
|
||||||
|
**/
|
||||||
|
public BeanDescriptor(Class beanClass) {
|
||||||
|
this(beanClass,null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new BeanDescriptor with the given bean class and
|
||||||
|
** customizer class.
|
||||||
|
** @param beanClass the class of the Bean.
|
||||||
|
** @param customizerClass the class of the Bean's Customizer.
|
||||||
|
**/
|
||||||
|
public BeanDescriptor(Class beanClass, Class customizerClass) {
|
||||||
|
this.beanClass = beanClass;
|
||||||
|
this.customizerClass = customizerClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the Bean's class. **/
|
||||||
|
public Class getBeanClass() {
|
||||||
|
return beanClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the Bean's customizer's class. **/
|
||||||
|
public Class getCustomizerClass() {
|
||||||
|
return customizerClass;
|
||||||
|
}
|
||||||
|
}
|
170
libjava/java/beans/BeanInfo.java
Normal file
170
libjava/java/beans/BeanInfo.java
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
/* java.beans.BeanInfo
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** BeanInfo can be implemented in order to provide explicit information to the Introspector.
|
||||||
|
**
|
||||||
|
** When you write a BeanInfo class, you implement this interface
|
||||||
|
** and provide explicit information by returning a non-null
|
||||||
|
** value from the appropriate method. If you wish the
|
||||||
|
** Introspector to determine certain information in the normal
|
||||||
|
** way, just return null (or in the case of int methods, return
|
||||||
|
** -1). There is a class called SimpleBeanInfo which returns
|
||||||
|
** null from all methods, which you may extend and only
|
||||||
|
** override the methods you wish to override.<P>
|
||||||
|
**
|
||||||
|
** When you have written the class, give it the name
|
||||||
|
** <CODE><Bean Class Name>BeanInfo</CODE> and place it in
|
||||||
|
** the same package as the Bean, or in the bean info search path
|
||||||
|
** (see Introspector for information on search paths).<P>
|
||||||
|
**
|
||||||
|
** A simple note about the way the Introspector interacts with
|
||||||
|
** BeanInfo. Introspectors look at a Bean class and determine
|
||||||
|
** if there is a BeanInfo class with it. If there is not a
|
||||||
|
** BeanInfo class, it will behave as if the BeanInfo class
|
||||||
|
** provided was a SimpleBeanInfo class (i.e. it will determine
|
||||||
|
** all information automatically).<P>If there is a BeanInfo
|
||||||
|
** class, then any methods that do *not* return null are
|
||||||
|
** regarded as providing definitive information about the class
|
||||||
|
** and all of its superclasses for those information types.
|
||||||
|
** Even if a parent BeanInfo class explicitly returns that
|
||||||
|
** information, it will not be used.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 28 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public interface BeanInfo {
|
||||||
|
/** Use this as a parameter for the getIcon() command to retrieve a certain type of icon. **/
|
||||||
|
public static int ICON_COLOR_16x16 = 1;
|
||||||
|
/** Use this as a parameter for the getIcon() command to retrieve a certain type of icon. **/
|
||||||
|
public static int ICON_COLOR_32x32 = 2;
|
||||||
|
/** Use this as a parameter for the getIcon() command to retrieve a certain type of icon. **/
|
||||||
|
public static int ICON_MONO_16x16 = 3;
|
||||||
|
/** Use this as a parameter for the getIcon() command to retrieve a certain type of icon. **/
|
||||||
|
public static int ICON_MONO_32x32 = 4;
|
||||||
|
|
||||||
|
/** Get the general description of this Bean type.
|
||||||
|
** @return the BeanDescriptor for the Bean, or null if
|
||||||
|
** the BeanDescriptor should be obtained by
|
||||||
|
** Introspection.
|
||||||
|
**/
|
||||||
|
public abstract BeanDescriptor getBeanDescriptor();
|
||||||
|
|
||||||
|
/** Get the events this Bean type fires.
|
||||||
|
** @return the EventDescriptors representing events this
|
||||||
|
** Bean fires. Returns <CODE>null</CODE> if the
|
||||||
|
** events are to be acquired by Introspection.
|
||||||
|
**/
|
||||||
|
public abstract EventSetDescriptor[] getEventSetDescriptors();
|
||||||
|
|
||||||
|
/** Get the "default" event, basically the one a RAD tool
|
||||||
|
** user is most likely to select.
|
||||||
|
** @return the index into the getEventSetDescriptors()
|
||||||
|
** that the user is most likely to use. Returns
|
||||||
|
** <CODE>-1</CODE> if there is no default event.
|
||||||
|
**/
|
||||||
|
public abstract int getDefaultEventIndex();
|
||||||
|
|
||||||
|
/** Get the properties (get/set method pairs) this Bean
|
||||||
|
** type supports.
|
||||||
|
** @return the PropertyDescriptors representing the
|
||||||
|
** properties this Bean type supports.
|
||||||
|
** Returns <CODE>null</CODE> if the properties
|
||||||
|
** are to be obtained by Introspection.
|
||||||
|
**/
|
||||||
|
public abstract PropertyDescriptor[] getPropertyDescriptors();
|
||||||
|
|
||||||
|
/** Get the "default" property, basically the one a RAD
|
||||||
|
** tool user is most likely to select.
|
||||||
|
** @return the index into the getPropertyDescriptors()
|
||||||
|
** that the user is most likely to use. Returns
|
||||||
|
** <CODE>-1</CODE> if there is no default event.
|
||||||
|
**/
|
||||||
|
public abstract int getDefaultPropertyIndex();
|
||||||
|
|
||||||
|
/** Get the methods this Bean type supports.
|
||||||
|
** @return the MethodDescriptors representing the
|
||||||
|
** methods this Bean type supports. Returns
|
||||||
|
** <CODE>null</CODE> if the methods are to be
|
||||||
|
** obtained by Introspection.
|
||||||
|
**/
|
||||||
|
public abstract MethodDescriptor[] getMethodDescriptors();
|
||||||
|
|
||||||
|
/** Get additional BeanInfos representing this Bean.
|
||||||
|
** In this version of JavaBeans, this method is used so
|
||||||
|
** that space and time can be saved by reading a BeanInfo
|
||||||
|
** for each class in the hierarchy (super, super(super),
|
||||||
|
** and so on).<P>
|
||||||
|
**
|
||||||
|
** The order of precedence when two pieces of BeanInfo
|
||||||
|
** conflict (such as two PropertyDescriptors that have
|
||||||
|
** the same name), in order from highest precedence to
|
||||||
|
** lowest, is:
|
||||||
|
** <OL>
|
||||||
|
** <LI>This BeanInfo object.</LI>
|
||||||
|
** <LI><CODE>getAdditionalBeanInfo()[getAdditionalBeanInfo().length]</CODE></LI>
|
||||||
|
** <LI> ... </LI>
|
||||||
|
** <LI><CODE>getAdditionalBeanInfo()[1]</CODE></LI>
|
||||||
|
** <LI><CODE>getAdditionalBeanInfo()[0]</CODE></LI>
|
||||||
|
** </OL><P>
|
||||||
|
**
|
||||||
|
** <STRONG>Spec Note:</STRONG> It is possible that
|
||||||
|
** returning <CODE>null</CODE> from this method could
|
||||||
|
** stop Introspection in its tracks, but it is unclear
|
||||||
|
** from the spec whether this is the case.
|
||||||
|
**
|
||||||
|
** @return additional BeanInfos representing this Bean.
|
||||||
|
** <CODE>null</CODE> may be returned (see Spec
|
||||||
|
** Note, above).
|
||||||
|
**/
|
||||||
|
public abstract BeanInfo[] getAdditionalBeanInfo();
|
||||||
|
|
||||||
|
/** Get a visual icon for this Bean.
|
||||||
|
** A Bean does not have to support icons, and if it does
|
||||||
|
** support icons, it does not have to support every single
|
||||||
|
** type. Sun recommends that if you only support one
|
||||||
|
** type, you support 16x16 color. Sun also notes that you
|
||||||
|
** should try to use a type (like GIF) that allows for
|
||||||
|
** transparent pixels, so that the background of the RAD
|
||||||
|
** tool can show through.<P>
|
||||||
|
**
|
||||||
|
** <STRONG>Spec Note:</STRONG> If you do not support the
|
||||||
|
** type of icon that is being asked for, but you do
|
||||||
|
** support another type, it is unclear whether you should
|
||||||
|
** return the other type or not. I would presume not.
|
||||||
|
**
|
||||||
|
** @param iconType the type of icon to get (see the
|
||||||
|
** ICON_* constants in this class).
|
||||||
|
** @return the icon, or null if that type of icon is
|
||||||
|
** unsupported by this Bean.
|
||||||
|
**/
|
||||||
|
public abstract java.awt.Image getIcon(int iconType);
|
||||||
|
}
|
199
libjava/java/beans/Beans.java
Normal file
199
libjava/java/beans/Beans.java
Normal file
|
@ -0,0 +1,199 @@
|
||||||
|
/* java.beans.Beans
|
||||||
|
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
// import java.applet.*;
|
||||||
|
import gnu.java.io.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code>Beans</code> provides some helper methods that allow the basic operations of Bean-ness.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.1
|
||||||
|
* @version 1.1.0, 29 Jul 1998
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Beans {
|
||||||
|
static boolean designTime = false;
|
||||||
|
static boolean guiAvailable = true;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Once again, we have a java.beans class with only
|
||||||
|
* static methods that can be instantiated. When
|
||||||
|
* will the madness end? :)
|
||||||
|
*/
|
||||||
|
public Beans() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows you to instantiate a Bean. This method takes
|
||||||
|
* a ClassLoader from which to read the Bean and the
|
||||||
|
* name of the Bean.<P>
|
||||||
|
*
|
||||||
|
* The Bean name should be a dotted name, like a class.
|
||||||
|
* It can represent several things. Beans will search
|
||||||
|
* for the Bean using the name like this:<P>
|
||||||
|
* <OL>
|
||||||
|
* <LI>Searches for a serialized instance of the Bean
|
||||||
|
* using getResource(), mangling the Bean name by
|
||||||
|
* replacing the dots with slashes and appending .ser
|
||||||
|
* (for example, gnu.beans.BlahDeBlah would cause
|
||||||
|
* Beans to search for gnu/beans/BlahDeBlah.ser using
|
||||||
|
* getResource()).</LI>
|
||||||
|
* <LI>Searches for the Bean class using the beanName,
|
||||||
|
* and then instantiates it with the no-arg constructor.
|
||||||
|
* At that point, if it is an Applet, it provides it
|
||||||
|
* with AppletContext and AppletStub, and then calls
|
||||||
|
* init().</LI>
|
||||||
|
* </OL>
|
||||||
|
* @param cl the ClassLoader to use, or <CODE>null</CODE>
|
||||||
|
* to use the default ClassLoader.
|
||||||
|
* @param beanName the name of the Bean.
|
||||||
|
* @return the Bean.
|
||||||
|
* @XXX
|
||||||
|
*/
|
||||||
|
public static Object instantiate(ClassLoader cl, String beanName) throws IOException, ClassNotFoundException {
|
||||||
|
Object bean;
|
||||||
|
|
||||||
|
InputStream serStream;
|
||||||
|
if(cl == null) {
|
||||||
|
serStream = ClassLoader.getSystemResourceAsStream(beanName.replace('.','/')+".ser");
|
||||||
|
} else {
|
||||||
|
serStream = cl.getResourceAsStream(beanName.replace('.','/')+".ser");
|
||||||
|
}
|
||||||
|
if(serStream != null) {
|
||||||
|
if(cl == null) {
|
||||||
|
ObjectInputStream ois = new ObjectInputStream(serStream);
|
||||||
|
bean = ois.readObject();
|
||||||
|
} else {
|
||||||
|
ClassLoaderObjectInputStream ois = new ClassLoaderObjectInputStream(serStream, cl);
|
||||||
|
bean = ois.readObject();
|
||||||
|
}
|
||||||
|
} else if(cl == null) {
|
||||||
|
Class beanClass = Class.forName(beanName);
|
||||||
|
try {
|
||||||
|
bean = beanClass.newInstance();
|
||||||
|
} catch(IllegalAccessException E) {
|
||||||
|
bean = null;
|
||||||
|
} catch(InstantiationException E) {
|
||||||
|
bean = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Class beanClass = cl.loadClass(beanName);
|
||||||
|
try {
|
||||||
|
bean = beanClass.newInstance();
|
||||||
|
} catch(IllegalAccessException E) {
|
||||||
|
bean = null;
|
||||||
|
} catch(InstantiationException E) {
|
||||||
|
bean = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME - Turned off since java.applet doesn't exist for libgcj.
|
||||||
|
* FIXME if(bean instanceof Applet) {
|
||||||
|
* FIXME Applet a = (Applet)bean;
|
||||||
|
* FIXME //a.setAppletContext(???);
|
||||||
|
* FIXME //a.setStub(???);
|
||||||
|
* FIXME if(serStream == null) {
|
||||||
|
* FIXME a.init();
|
||||||
|
* FIXME }
|
||||||
|
* FIXME }
|
||||||
|
* FIXME ********************************************************/
|
||||||
|
|
||||||
|
return bean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Bean as a different class type.
|
||||||
|
* This should be used instead of casting to get a new
|
||||||
|
* type view of a Bean, because in the future there may
|
||||||
|
* be new types of Bean, even Beans spanning multiple
|
||||||
|
* Objects.
|
||||||
|
* @param bean the Bean to cast.
|
||||||
|
* @param newClass the Class to cast it to.
|
||||||
|
* @return the Bean as a new view, or if the operation
|
||||||
|
* could not be performed, the Bean itself.
|
||||||
|
*/
|
||||||
|
public static Object getInstanceOf(Object bean, Class newClass) {
|
||||||
|
return bean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the Bean can be cast to a different
|
||||||
|
* class type.
|
||||||
|
* This should be used instead of instanceof to determine
|
||||||
|
* a Bean's castability, because in the future there may
|
||||||
|
* be new types of Bean, even Beans spanning multiple
|
||||||
|
* Objects.
|
||||||
|
* @param bean the Bean to cast.
|
||||||
|
* @param newClass the Class to cast it to.
|
||||||
|
* @return whether the Bean can be cast to the class type
|
||||||
|
* in question.
|
||||||
|
*/
|
||||||
|
public static boolean isInstanceOf(Object bean, Class newBeanClass) {
|
||||||
|
return newBeanClass.isInstance(bean);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find out whether the GUI is available to use.
|
||||||
|
* Defaults to true.
|
||||||
|
* @return whether the GUI is available to use.
|
||||||
|
*/
|
||||||
|
public static boolean isGuiAvailable() {
|
||||||
|
return guiAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find out whether it is design time. Design time means
|
||||||
|
* we are in a RAD tool.
|
||||||
|
* Defaults to false.
|
||||||
|
* @return whether it is design time.
|
||||||
|
*/
|
||||||
|
public static boolean isDesignTime() {
|
||||||
|
return designTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether the GUI is available to use.
|
||||||
|
* @param guiAvailable whether the GUI is available to use.
|
||||||
|
*/
|
||||||
|
public static void setGuiAvailable(boolean guiAvailable) throws SecurityException {
|
||||||
|
Beans.guiAvailable = guiAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether it is design time. Design time means we
|
||||||
|
* are in a RAD tool.
|
||||||
|
* @param designTime whether it is design time.
|
||||||
|
*/
|
||||||
|
public static void setDesignTime(boolean designTime) throws SecurityException {
|
||||||
|
Beans.designTime = designTime;
|
||||||
|
}
|
||||||
|
}
|
75
libjava/java/beans/Customizer.java
Normal file
75
libjava/java/beans/Customizer.java
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/* java.beans.Customizer
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** You may explicitly provide a Customizer for your Bean
|
||||||
|
** class, which allows you complete control of the editing
|
||||||
|
** of the Bean.<P>
|
||||||
|
**
|
||||||
|
** A Customizer is meant to be embedded in an RAD tool,
|
||||||
|
** and thus must be a descendant of <CODE>java.awt.Component</CODE>.<P>
|
||||||
|
**
|
||||||
|
** It must also have a constructor with no arguments. This
|
||||||
|
** is the constructor that will be called by the RAD tool to
|
||||||
|
** instantiate the Customizer.<P>
|
||||||
|
**
|
||||||
|
** Over its lifetime, an instance of a Customizer will only
|
||||||
|
** customize one single Bean. A new instance of the
|
||||||
|
** Customizer will be instantiated to edit any other Beans.<P>
|
||||||
|
**
|
||||||
|
** The Customizer is responsible for notifying its
|
||||||
|
** PropertyChangeListeners of any changes that are made,
|
||||||
|
** according to the rules of PropertyChangeListeners (i.e.
|
||||||
|
** notify the clients <EM>after</EM> the property has
|
||||||
|
** changed).
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
** @see java.beans.BeanDescriptor.getCustomizerClass()
|
||||||
|
**/
|
||||||
|
|
||||||
|
public interface Customizer {
|
||||||
|
/** Set the object to Customize. This will always be a
|
||||||
|
** Bean that had a BeanDescriptor indicating this
|
||||||
|
** Customizer.
|
||||||
|
** @param bean the Bean to customize.
|
||||||
|
**/
|
||||||
|
public abstract void setObject(Object bean);
|
||||||
|
|
||||||
|
/** Add a PropertyChangeListener.
|
||||||
|
** @param l the PropertyChangeListener to add.
|
||||||
|
**/
|
||||||
|
public abstract void addPropertyChangeListener(PropertyChangeListener l);
|
||||||
|
|
||||||
|
/** Remove a PropertyChangeListener.
|
||||||
|
** @param l the PropertyChangeListener to remove.
|
||||||
|
**/
|
||||||
|
public abstract void removePropertyChangeListener(PropertyChangeListener l);
|
||||||
|
}
|
82
libjava/java/beans/DesignMode.java
Normal file
82
libjava/java/beans/DesignMode.java
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/* java.beans.DesignMode
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code>BeanContextChild</code> implementors implement this to get information about whether they are in a design time or runtime environment.
|
||||||
|
* The reason this is restricted to <code>BeanContextChild</code>ren is that
|
||||||
|
* only things in the <code>BeanContext</code> hierarchy are given this
|
||||||
|
* information in the first place.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
* @see java.beans.beancontext.BeanContextChild
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface DesignMode {
|
||||||
|
/**
|
||||||
|
* Use this name when firing <code>PropertyChangeEvent</code>s from your Bean.
|
||||||
|
* @fixme Check whether PROPERTYNAME is set to same value as Sun.
|
||||||
|
*/
|
||||||
|
public static final String PROPERTYNAME = "designTime";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The environment will call this method on your
|
||||||
|
* <code>BeanContextChild</code> when it is registered in a parent
|
||||||
|
* <code>BeanContext</code> or when behavior needs to switch from
|
||||||
|
* design time to runtime behavior (or vice versa).
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <code>BeanContext</code>s are required to fire
|
||||||
|
* <code>PropertyChangeEvent</code>s when properties change.
|
||||||
|
* <code>designTime</code> is a property, and therefore when you
|
||||||
|
* implement <code>setDesignTime()</code>, you need to fire a
|
||||||
|
* <code>PropertyChangeEvent</code> with the old value, the new
|
||||||
|
* value and using <code>PROPERTYNAME</code> as the property name.
|
||||||
|
*
|
||||||
|
* @param designTime the new value of design time,
|
||||||
|
* <code>true</code> if it is design time,
|
||||||
|
* <code>false</code> if it is runtime.
|
||||||
|
*
|
||||||
|
* @fixme I'm frankly not really sure whether it's the case that
|
||||||
|
* the BeanContext can <em>change</em> the status of the Bean from
|
||||||
|
* design time to runtime. But it appears that it may be so.
|
||||||
|
*
|
||||||
|
* @see java.util.PropertyChangeEvent
|
||||||
|
* @see java.beans.beancontext.BeanContext
|
||||||
|
* @see #PROPERTYNAME
|
||||||
|
*/
|
||||||
|
public void setDesignTime(boolean designTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method should tell whether it is design time or runtime.
|
||||||
|
* @return <code>true</code> if design time, <code>false</code> if
|
||||||
|
* runtime.
|
||||||
|
*/
|
||||||
|
public boolean isDesignTime();
|
||||||
|
}
|
429
libjava/java/beans/EventSetDescriptor.java
Normal file
429
libjava/java/beans/EventSetDescriptor.java
Normal file
|
@ -0,0 +1,429 @@
|
||||||
|
/* java.beans.EventSetDescriptor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
import gnu.java.lang.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** EventSetDescriptor describes the hookup between an event source
|
||||||
|
** class and an event listener class.
|
||||||
|
**
|
||||||
|
** EventSets have several attributes: the listener class, the events
|
||||||
|
** that can be fired to the listener (methods in the listener class), and
|
||||||
|
** an add and remove listener method from the event firer's class.<P>
|
||||||
|
**
|
||||||
|
** The methods have these constraints on them:<P>
|
||||||
|
** <UL>
|
||||||
|
** <LI>event firing methods: must have <CODE>void</CODE> return value. Any
|
||||||
|
** parameters and exceptions are allowed. May be public, protected or
|
||||||
|
** package-protected. (Don't ask me why that is, I'm just following the spec.
|
||||||
|
** The only place it is even mentioned is in the Java Beans white paper, and
|
||||||
|
** there it is only implied.)</LI>
|
||||||
|
** <LI>add listener method: must have <CODE>void</CODE> return value. Must
|
||||||
|
** take exactly one argument, of the listener class's type. May fire either
|
||||||
|
** zero exceptions, or one exception of type <CODE>java.util.TooManyListenersException</CODE>.
|
||||||
|
** Must be public.</LI>
|
||||||
|
** <LI>remove listener method: must have <CODE>void</CODE> return value.
|
||||||
|
** Must take exactly one argument, of the listener class's type. May not
|
||||||
|
** fire any exceptions. Must be public.</LI>
|
||||||
|
** </UL>
|
||||||
|
**
|
||||||
|
** A final constraint is that event listener classes must extend from EventListener.<P>
|
||||||
|
**
|
||||||
|
** There are also various design patterns associated with some of the methods
|
||||||
|
** of construction. Those are explained in more detail in the appropriate
|
||||||
|
** constructors.<P>
|
||||||
|
**
|
||||||
|
** <STRONG>Documentation Convention:</STRONG> for proper
|
||||||
|
** Internalization of Beans inside an RAD tool, sometimes there
|
||||||
|
** are two names for a property or method: a programmatic, or
|
||||||
|
** locale-independent name, which can be used anywhere, and a
|
||||||
|
** localized, display name, for ease of use. In the
|
||||||
|
** documentation I will specify different String values as
|
||||||
|
** either <EM>programmatic</EM> or <EM>localized</EM> to
|
||||||
|
** make this distinction clear.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 31 May 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class EventSetDescriptor extends FeatureDescriptor {
|
||||||
|
private Method addListenerMethod;
|
||||||
|
private Method removeListenerMethod;
|
||||||
|
private Class listenerType;
|
||||||
|
private MethodDescriptor[] listenerMethodDescriptors;
|
||||||
|
private Method[] listenerMethods;
|
||||||
|
|
||||||
|
private boolean unicast;
|
||||||
|
private boolean inDefaultEventSet = true;
|
||||||
|
|
||||||
|
/** Create a new EventSetDescriptor.
|
||||||
|
** This version of the constructor enforces the rules imposed on the methods
|
||||||
|
** described at the top of this class, as well as searching for:<P>
|
||||||
|
** <OL>
|
||||||
|
** <LI>The event-firing method must be non-private with signature
|
||||||
|
** <CODE>void <listenerMethodName>(<eventSetName>Event)</CODE>
|
||||||
|
** (where <CODE><eventSetName></CODE> has its first character capitalized
|
||||||
|
** by the constructor and the Event is a descendant of
|
||||||
|
** <CODE>java.util.EventObject</CODE>) in class <CODE>listenerType</CODE>
|
||||||
|
** (any exceptions may be thrown).
|
||||||
|
** <B>Implementation note:</B> Note that there could conceivably be multiple
|
||||||
|
** methods with this type of signature (example: java.util.MouseEvent vs.
|
||||||
|
** my.very.own.MouseEvent). In this implementation, all methods fitting the
|
||||||
|
** description will be put into the <CODE>EventSetDescriptor</CODE>, even
|
||||||
|
** though the spec says only one should be chosen (they probably weren't thinking as
|
||||||
|
** pathologically as I was). I don't like arbitrarily choosing things.
|
||||||
|
** If your class has only one such signature, as most do, you'll have no problems.</LI>
|
||||||
|
** <LI>The add and remove methods must be public and named
|
||||||
|
** <CODE>void add<eventSetName>Listener(<listenerType>)</CODE> and
|
||||||
|
** <CODE>void remove<eventSetName>Listener(<listenerType>)</CODE> in
|
||||||
|
** in class <CODE>eventSourceClass</CODE>, where
|
||||||
|
** <CODE><eventSetName></CODE> will have its first letter capitalized.
|
||||||
|
** Standard exception rules (see class description) apply.</LI>
|
||||||
|
** </OL>
|
||||||
|
** @param eventSourceClass the class containing the add/remove listener methods.
|
||||||
|
** @param eventSetName the programmatic name of the event set, generally starting
|
||||||
|
** with a lowercase letter (i.e. fooManChu instead of FooManChu). This will be used
|
||||||
|
** to generate the name of the event object as well as the names of the add and
|
||||||
|
** remove methods.
|
||||||
|
** @param listenerType the class containing the event firing method.
|
||||||
|
** @param listenerMethodName the name of the event firing method.
|
||||||
|
** @exception IntrospectionException if listenerType is not an EventListener,
|
||||||
|
** or if methods are not found or are invalid.
|
||||||
|
**/
|
||||||
|
public EventSetDescriptor(Class eventSourceClass,
|
||||||
|
String eventSetName,
|
||||||
|
Class listenerType,
|
||||||
|
String listenerMethodName) throws IntrospectionException {
|
||||||
|
setName(eventSetName);
|
||||||
|
if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {
|
||||||
|
throw new IntrospectionException("Listener type is not an EventListener.");
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] names = new String[1];
|
||||||
|
names[0] = listenerMethodName;
|
||||||
|
|
||||||
|
try {
|
||||||
|
eventSetName = Character.toUpperCase(eventSetName.charAt(0)) + eventSetName.substring(1);
|
||||||
|
} catch(StringIndexOutOfBoundsException e) {
|
||||||
|
eventSetName = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethods(eventSourceClass,listenerType,names,"add"+eventSetName+"Listener","remove"+eventSetName+"Listener",eventSetName+"Event");
|
||||||
|
this.listenerType = listenerType;
|
||||||
|
checkAddListenerUnicast();
|
||||||
|
if(this.removeListenerMethod.getExceptionTypes().length > 0) {
|
||||||
|
throw new IntrospectionException("Listener remove method throws exceptions.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new EventSetDescriptor.
|
||||||
|
** This form of the constructor allows you to specify the names of the methods and adds
|
||||||
|
** no new constraints on top of the rules already described at the top of the class.<P>
|
||||||
|
**
|
||||||
|
** @param eventSourceClass the class containing the add and remove listener methods.
|
||||||
|
** @param eventSetName the programmatic name of the event set, generally starting
|
||||||
|
** with a lowercase letter (i.e. fooManChu instead of FooManChu).
|
||||||
|
** @param listenerType the class containing the event firing methods.
|
||||||
|
** @param listenerMethodNames the names of the even firing methods.
|
||||||
|
** @param addListenerMethodName the name of the add listener method.
|
||||||
|
** @param removeListenerMethodName the name of the remove listener method.
|
||||||
|
** @exception IntrospectionException if listenerType is not an EventListener
|
||||||
|
** or if methods are not found or are invalid.
|
||||||
|
**/
|
||||||
|
public EventSetDescriptor(Class eventSourceClass,
|
||||||
|
String eventSetName,
|
||||||
|
Class listenerType,
|
||||||
|
String[] listenerMethodNames,
|
||||||
|
String addListenerMethodName,
|
||||||
|
String removeListenerMethodName) throws IntrospectionException {
|
||||||
|
setName(eventSetName);
|
||||||
|
if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {
|
||||||
|
throw new IntrospectionException("Listener type is not an EventListener.");
|
||||||
|
}
|
||||||
|
|
||||||
|
findMethods(eventSourceClass,listenerType,listenerMethodNames,addListenerMethodName,removeListenerMethodName,null);
|
||||||
|
this.listenerType = listenerType;
|
||||||
|
checkAddListenerUnicast();
|
||||||
|
if(this.removeListenerMethod.getExceptionTypes().length > 0) {
|
||||||
|
throw new IntrospectionException("Listener remove method throws exceptions.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new EventSetDescriptor.
|
||||||
|
** This form of constructor allows you to explicitly say which methods do what, and
|
||||||
|
** no reflection is done by the EventSetDescriptor. The methods are, however,
|
||||||
|
** checked to ensure that they follow the rules set forth at the top of the class.
|
||||||
|
** @param eventSetName the programmatic name of the event set, generally starting
|
||||||
|
** with a lowercase letter (i.e. fooManChu instead of FooManChu).
|
||||||
|
** @param listenerType the class containing the listenerMethods.
|
||||||
|
** @param listenerMethods the event firing methods.
|
||||||
|
** @param addListenerMethod the add listener method.
|
||||||
|
** @param removeListenerMethod the remove listener method.
|
||||||
|
** @exception IntrospectionException if the listenerType is not an EventListener,
|
||||||
|
** or any of the methods are invalid.
|
||||||
|
**/
|
||||||
|
public EventSetDescriptor(String eventSetName,
|
||||||
|
Class listenerType,
|
||||||
|
Method[] listenerMethods,
|
||||||
|
Method addListenerMethod,
|
||||||
|
Method removeListenerMethod) throws IntrospectionException {
|
||||||
|
setName(eventSetName);
|
||||||
|
if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {
|
||||||
|
throw new IntrospectionException("Listener type is not an EventListener.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.listenerMethods = listenerMethods;
|
||||||
|
this.addListenerMethod = addListenerMethod;
|
||||||
|
this.removeListenerMethod = removeListenerMethod;
|
||||||
|
this.listenerType = listenerType;
|
||||||
|
checkMethods();
|
||||||
|
checkAddListenerUnicast();
|
||||||
|
if(this.removeListenerMethod.getExceptionTypes().length > 0) {
|
||||||
|
throw new IntrospectionException("Listener remove method throws exceptions.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new EventSetDescriptor.
|
||||||
|
** This form of constructor allows you to explicitly say which methods do what, and
|
||||||
|
** no reflection is done by the EventSetDescriptor. The methods are, however,
|
||||||
|
** checked to ensure that they follow the rules set forth at the top of the class.
|
||||||
|
** @param eventSetName the programmatic name of the event set, generally starting
|
||||||
|
** with a lowercase letter (i.e. fooManChu instead of FooManChu).
|
||||||
|
** @param listenerType the class containing the listenerMethods.
|
||||||
|
** @param listenerMethodDescriptors the event firing methods.
|
||||||
|
** @param addListenerMethod the add listener method.
|
||||||
|
** @param removeListenerMethod the remove listener method.
|
||||||
|
** @exception IntrospectionException if the listenerType is not an EventListener,
|
||||||
|
** or any of the methods are invalid.
|
||||||
|
**/
|
||||||
|
public EventSetDescriptor(String eventSetName,
|
||||||
|
Class listenerType,
|
||||||
|
MethodDescriptor[] listenerMethodDescriptors,
|
||||||
|
Method addListenerMethod,
|
||||||
|
Method removeListenerMethod) throws IntrospectionException {
|
||||||
|
setName(eventSetName);
|
||||||
|
if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {
|
||||||
|
throw new IntrospectionException("Listener type is not an EventListener.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.listenerMethodDescriptors = listenerMethodDescriptors;
|
||||||
|
this.listenerMethods = new Method[listenerMethodDescriptors.length];
|
||||||
|
for(int i=0;i<this.listenerMethodDescriptors.length;i++) {
|
||||||
|
this.listenerMethods[i] = this.listenerMethodDescriptors[i].getMethod();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.addListenerMethod = addListenerMethod;
|
||||||
|
this.removeListenerMethod = removeListenerMethod;
|
||||||
|
this.listenerType = listenerType;
|
||||||
|
checkMethods();
|
||||||
|
checkAddListenerUnicast();
|
||||||
|
if(this.removeListenerMethod.getExceptionTypes().length > 0) {
|
||||||
|
throw new IntrospectionException("Listener remove method throws exceptions.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the class that contains the event firing methods. **/
|
||||||
|
public Class getListenerType() {
|
||||||
|
return listenerType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the event firing methods. **/
|
||||||
|
public Method[] getListenerMethods() {
|
||||||
|
return listenerMethods;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the event firing methods as MethodDescriptors. **/
|
||||||
|
public MethodDescriptor[] getListenerMethodDescriptors() {
|
||||||
|
if(listenerMethodDescriptors == null) {
|
||||||
|
listenerMethodDescriptors = new MethodDescriptor[listenerMethods.length];
|
||||||
|
for(int i=0;i<listenerMethods.length;i++) {
|
||||||
|
listenerMethodDescriptors[i] = new MethodDescriptor(listenerMethods[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return listenerMethodDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the add listener method. **/
|
||||||
|
public Method getAddListenerMethod() {
|
||||||
|
return addListenerMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the remove listener method. **/
|
||||||
|
public Method getRemoveListenerMethod() {
|
||||||
|
return removeListenerMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set whether or not multiple listeners may be added.
|
||||||
|
** @param unicast whether or not multiple listeners may be added.
|
||||||
|
**/
|
||||||
|
public void setUnicast(boolean unicast) {
|
||||||
|
this.unicast = unicast;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get whether or not multiple listeners may be added. (Defaults to false.) **/
|
||||||
|
public boolean isUnicast() {
|
||||||
|
return unicast;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set whether or not this is in the default event set.
|
||||||
|
** @param inDefaultEventSet whether this is in the default event set.
|
||||||
|
**/
|
||||||
|
public void setInDefaultEventSet(boolean inDefaultEventSet) {
|
||||||
|
this.inDefaultEventSet = inDefaultEventSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get whether or not this is in the default event set. (Defaults to true.)**/
|
||||||
|
public boolean isInDefaultEventSet() {
|
||||||
|
return inDefaultEventSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkAddListenerUnicast() throws IntrospectionException {
|
||||||
|
Class[] addListenerExceptions = this.addListenerMethod.getExceptionTypes();
|
||||||
|
if(addListenerExceptions.length > 1) {
|
||||||
|
throw new IntrospectionException("Listener add method throws too many exceptions.");
|
||||||
|
} else if(addListenerExceptions.length == 1
|
||||||
|
&& !java.util.TooManyListenersException.class.isAssignableFrom(addListenerExceptions[0])) {
|
||||||
|
throw new IntrospectionException("Listener add method throws too many exceptions.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkMethods() throws IntrospectionException {
|
||||||
|
if(!addListenerMethod.getDeclaringClass().isAssignableFrom(removeListenerMethod.getDeclaringClass())
|
||||||
|
&& !removeListenerMethod.getDeclaringClass().isAssignableFrom(addListenerMethod.getDeclaringClass())) {
|
||||||
|
throw new IntrospectionException("add and remove listener methods do not come from the same class. This is bad.");
|
||||||
|
}
|
||||||
|
if(!addListenerMethod.getReturnType().equals(java.lang.Void.TYPE)
|
||||||
|
|| addListenerMethod.getParameterTypes().length != 1
|
||||||
|
|| !listenerType.equals(addListenerMethod.getParameterTypes()[0])
|
||||||
|
|| !Modifier.isPublic(addListenerMethod.getModifiers())) {
|
||||||
|
throw new IntrospectionException("Add Listener Method invalid.");
|
||||||
|
}
|
||||||
|
if(!removeListenerMethod.getReturnType().equals(java.lang.Void.TYPE)
|
||||||
|
|| removeListenerMethod.getParameterTypes().length != 1
|
||||||
|
|| !listenerType.equals(removeListenerMethod.getParameterTypes()[0])
|
||||||
|
|| removeListenerMethod.getExceptionTypes().length > 0
|
||||||
|
|| !Modifier.isPublic(removeListenerMethod.getModifiers())) {
|
||||||
|
throw new IntrospectionException("Remove Listener Method invalid.");
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=0;i<listenerMethods.length;i++) {
|
||||||
|
if(!listenerMethods[i].getReturnType().equals(java.lang.Void.TYPE)
|
||||||
|
|| Modifier.isPrivate(listenerMethods[i].getModifiers())) {
|
||||||
|
throw new IntrospectionException("Event Method " + listenerMethods[i].getName() + " non-void or private.");
|
||||||
|
}
|
||||||
|
if(!listenerMethods[i].getDeclaringClass().isAssignableFrom(listenerType)) {
|
||||||
|
throw new IntrospectionException("Event Method " + listenerMethods[i].getName() + " not from class " + listenerType.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void findMethods(Class eventSourceClass,
|
||||||
|
Class listenerType,
|
||||||
|
String listenerMethodNames[],
|
||||||
|
String addListenerMethodName,
|
||||||
|
String removeListenerMethodName,
|
||||||
|
String absurdEventClassCheckName) throws IntrospectionException {
|
||||||
|
|
||||||
|
/* Find add listener method and remove listener method. */
|
||||||
|
Class[] listenerArgList = new Class[1];
|
||||||
|
listenerArgList[0] = listenerType;
|
||||||
|
try {
|
||||||
|
this.addListenerMethod = eventSourceClass.getMethod(addListenerMethodName,listenerArgList);
|
||||||
|
} catch(SecurityException E) {
|
||||||
|
throw new IntrospectionException("SecurityException trying to access method " + addListenerMethodName + ".");
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
throw new IntrospectionException("Could not find method " + addListenerMethodName + ".");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.addListenerMethod == null || !this.addListenerMethod.getReturnType().equals(java.lang.Void.TYPE)) {
|
||||||
|
throw new IntrospectionException("Add listener method does not exist, is not public, or is not void.");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.removeListenerMethod = eventSourceClass.getMethod(removeListenerMethodName,listenerArgList);
|
||||||
|
} catch(SecurityException E) {
|
||||||
|
throw new IntrospectionException("SecurityException trying to access method " + removeListenerMethodName + ".");
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
throw new IntrospectionException("Could not find method " + removeListenerMethodName + ".");
|
||||||
|
}
|
||||||
|
if(this.removeListenerMethod == null || !this.removeListenerMethod.getReturnType().equals(java.lang.Void.TYPE)) {
|
||||||
|
throw new IntrospectionException("Remove listener method does not exist, is not public, or is not void.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find the listener methods. */
|
||||||
|
Method[] methods;
|
||||||
|
try {
|
||||||
|
methods = ClassHelper.getAllMethods(listenerType);
|
||||||
|
} catch(SecurityException E) {
|
||||||
|
throw new IntrospectionException("Security: You cannot access fields in this class.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector chosenMethods = new Vector();
|
||||||
|
boolean[] listenerMethodFound = new boolean[listenerMethodNames.length];
|
||||||
|
for(int i=0;i<methods.length;i++) {
|
||||||
|
if(Modifier.isPrivate(methods[i].getModifiers())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Method currentMethod = methods[i];
|
||||||
|
Class retval = currentMethod.getReturnType();
|
||||||
|
if(retval.equals(java.lang.Void.TYPE)) {
|
||||||
|
for(int j=0;j<listenerMethodNames.length;j++) {
|
||||||
|
if(currentMethod.getName().equals(listenerMethodNames[j])
|
||||||
|
&& (absurdEventClassCheckName == null
|
||||||
|
|| (currentMethod.getParameterTypes().length == 1
|
||||||
|
&& ((currentMethod.getParameterTypes()[0]).getName().equals(absurdEventClassCheckName)
|
||||||
|
|| (currentMethod.getParameterTypes()[0]).getName().endsWith("."+absurdEventClassCheckName)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
chosenMethods.addElement(currentMethod);
|
||||||
|
listenerMethodFound[j] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure we found all the methods we were looking for. */
|
||||||
|
for(int i=0;i<listenerMethodFound.length;i++) {
|
||||||
|
if(!listenerMethodFound[i]) {
|
||||||
|
throw new IntrospectionException("Could not find event method " + listenerMethodNames[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now that we've chosen the listener methods we want, store them. */
|
||||||
|
this.listenerMethods = new Method[chosenMethods.size()];
|
||||||
|
for(int i=0;i<chosenMethods.size();i++) {
|
||||||
|
this.listenerMethods[i] = (Method)chosenMethods.elementAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
155
libjava/java/beans/FeatureDescriptor.java
Normal file
155
libjava/java/beans/FeatureDescriptor.java
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
/* java.beans.FeatureDescriptor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** FeatureDescriptor is the common superclass for all JavaBeans Descriptor classes.
|
||||||
|
** JavaBeans descriptors are abstract descriptors of properties,
|
||||||
|
** events, methods, beans, etc.<P>
|
||||||
|
**
|
||||||
|
** <STRONG>Documentation Convention:</STRONG> for proper
|
||||||
|
** Internalization of Beans inside an RAD tool, sometimes there
|
||||||
|
** are two names for a property or method: a programmatic, or
|
||||||
|
** locale-independent name, which can be used anywhere, and a
|
||||||
|
** localized, display name, for ease of use. In the
|
||||||
|
** documentation I will specify different String values as
|
||||||
|
** either <EM>programmatic</EM> or <EM>localized</EM> to
|
||||||
|
** make this distinction clear.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 31 May 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class FeatureDescriptor {
|
||||||
|
String name;
|
||||||
|
String displayName;
|
||||||
|
String shortDescription;
|
||||||
|
boolean expert;
|
||||||
|
boolean hidden;
|
||||||
|
|
||||||
|
Hashtable valueHash;
|
||||||
|
|
||||||
|
/** Instantiate this FeatureDescriptor with appropriate default values.**/
|
||||||
|
public FeatureDescriptor() {
|
||||||
|
valueHash = new Hashtable();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the programmatic name of this feature. **/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the programmatic name of this feature.
|
||||||
|
** @param name the new name for this feature.
|
||||||
|
**/
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the localized (display) name of this feature. **/
|
||||||
|
public String getDisplayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the localized (display) name of this feature.
|
||||||
|
** @param displayName the new display name for this feature.
|
||||||
|
**/
|
||||||
|
public void setDisplayName(String displayName) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the localized short description for this feature. **/
|
||||||
|
public String getShortDescription() {
|
||||||
|
return shortDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the localized short description for this feature.
|
||||||
|
** @param shortDescription the new short description for this feature.
|
||||||
|
**/
|
||||||
|
public void setShortDescription(String shortDescription) {
|
||||||
|
this.shortDescription = shortDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Indicates whether this feature is for expert use only.
|
||||||
|
** @return true if for use by experts only, or false if anyone can use it.
|
||||||
|
**/
|
||||||
|
public boolean isExpert() {
|
||||||
|
return expert;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set whether this feature is for expert use only.
|
||||||
|
** @param expert true if for use by experts only, or false if anyone can use it.
|
||||||
|
**/
|
||||||
|
public void setExpert(boolean expert) {
|
||||||
|
this.expert = expert;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Indicates whether this feature is for use by tools only.
|
||||||
|
** If it is for use by tools only, then it should not be displayed.
|
||||||
|
** @return true if tools only should use it, or false if anyone can see it.
|
||||||
|
**/
|
||||||
|
public boolean isHidden() {
|
||||||
|
return hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set whether this feature is for use by tools only.
|
||||||
|
** If it is for use by tools only, then it should not be displayed.
|
||||||
|
** @param hidden true if tools only should use it, or false if anyone can see it.
|
||||||
|
**/
|
||||||
|
public void setHidden(boolean hidden) {
|
||||||
|
this.hidden = hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Get an arbitrary value set with setValue().
|
||||||
|
** @param name the programmatic name of the key.
|
||||||
|
** @return the value associated with this name, or null if there is none.
|
||||||
|
**/
|
||||||
|
public Object getValue(String name) {
|
||||||
|
return valueHash.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set an arbitrary string-value pair with this feature.
|
||||||
|
** @param name the programmatic name of the key.
|
||||||
|
** @param value the value to associate with the name.
|
||||||
|
**/
|
||||||
|
public void setValue(String name, Object value) {
|
||||||
|
valueHash.put(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get a list of the programmatic key names set with setValue().
|
||||||
|
** @return an Enumerator over all the programmatic key names associated
|
||||||
|
** with this feature.
|
||||||
|
**/
|
||||||
|
public Enumeration attributeNames() {
|
||||||
|
return valueHash.keys();
|
||||||
|
}
|
||||||
|
}
|
296
libjava/java/beans/IndexedPropertyDescriptor.java
Normal file
296
libjava/java/beans/IndexedPropertyDescriptor.java
Normal file
|
@ -0,0 +1,296 @@
|
||||||
|
/* java.beans.IndexedPropertyDescriptor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** IndexedPropertyDescriptor describes information about a JavaBean
|
||||||
|
** indexed property, by which we mean an array-like property that
|
||||||
|
** has been exposed via a pair of get and set methods and another
|
||||||
|
** pair that allows you to get to the property by an index.<P>
|
||||||
|
**
|
||||||
|
** An example property would have four methods like this:<P>
|
||||||
|
** <CODE>FooBar[] getFoo()</CODE><BR>
|
||||||
|
** <CODE>void setFoo(FooBar[])</CODE><BR>
|
||||||
|
** <CODE>FooBar getFoo(int)</CODE><BR>
|
||||||
|
** <CODE>void setFoo(int,FooBar)</CODE><P>
|
||||||
|
**
|
||||||
|
** The constraints put on get and set methods are:<P>
|
||||||
|
** <OL>
|
||||||
|
** <LI>There must be at least a get(int) or a set(int,...) method.
|
||||||
|
** Nothing else is required. <B>Spec note:</B>One nice restriction
|
||||||
|
** would be that if there is a get() there must be a get(int), same
|
||||||
|
** with set, but that is not in the spec and is fairly harmless.)</LI>
|
||||||
|
** <LI>A get array method must have signature
|
||||||
|
** <CODE><propertyType>[] <getMethodName>()</CODE></LI>
|
||||||
|
** <LI>A set array method must have signature
|
||||||
|
** <CODE>void <setMethodName>(<propertyType>[])</CODE></LI>
|
||||||
|
** <LI>A get index method must have signature
|
||||||
|
** <CODE><propertyType> <getMethodName>(int)</CODE></LI>
|
||||||
|
** <LI>A set index method must have signature
|
||||||
|
** <CODE>void <setMethodName>(int,<propertyType>)</CODE></LI>
|
||||||
|
** <LI>All these methods may throw any exception.</LI>
|
||||||
|
** <LI>All these methods must be public.</LI>
|
||||||
|
** </OL>
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 26 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class IndexedPropertyDescriptor extends PropertyDescriptor {
|
||||||
|
private Class indexedPropertyType;
|
||||||
|
private Method setIndex;
|
||||||
|
private Method getIndex;
|
||||||
|
|
||||||
|
/** Create a new IndexedPropertyDescriptor by introspection.
|
||||||
|
** This form of constructor creates the PropertyDescriptor by
|
||||||
|
** looking for getter methods named <CODE>get<name>()</CODE>
|
||||||
|
** and setter methods named
|
||||||
|
** <CODE>set<name>()</CODE> in class
|
||||||
|
** <CODE><beanClass></CODE>, where <name> has its
|
||||||
|
** first letter capitalized by the constructor.<P>
|
||||||
|
**
|
||||||
|
** <B>Implementation note:</B> If there is a get(int) method,
|
||||||
|
** then the return type of that method is used to find the
|
||||||
|
** remaining methods. If there is no get method, then the
|
||||||
|
** set(int) method is searched for exhaustively and that type
|
||||||
|
** is used to find the others.<P>
|
||||||
|
**
|
||||||
|
** <B>Spec note:</B>
|
||||||
|
** If there is no get(int) method and multiple set(int) methods with
|
||||||
|
** the same name and the correct parameters (different type of course),
|
||||||
|
** then an IntrospectionException is thrown. While Sun's spec
|
||||||
|
** does not state this, it can make Bean behavior different on
|
||||||
|
** different systems (since method order is not guaranteed) and as
|
||||||
|
** such, can be treated as a bug in the spec. I am not aware of
|
||||||
|
** whether Sun's implementation catches this.
|
||||||
|
**
|
||||||
|
** @param name the programmatic name of the property, usually
|
||||||
|
** starting with a lowercase letter (e.g. fooManChu
|
||||||
|
** instead of FooManChu).
|
||||||
|
** @param beanClass the class the get and set methods live in.
|
||||||
|
** @exception IntrospectionException if the methods are not found or invalid.
|
||||||
|
**/
|
||||||
|
public IndexedPropertyDescriptor(String name, Class beanClass) throws IntrospectionException {
|
||||||
|
super(name);
|
||||||
|
String capitalized;
|
||||||
|
try {
|
||||||
|
capitalized = Character.toUpperCase(name.charAt(0)) + name.substring(1);
|
||||||
|
} catch(StringIndexOutOfBoundsException e) {
|
||||||
|
capitalized = "";
|
||||||
|
}
|
||||||
|
findMethods(beanClass, "get" + capitalized, "set" + capitalized, "get" + capitalized, "set" + capitalized);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new IndexedPropertyDescriptor by introspection.
|
||||||
|
** This form of constructor allows you to specify the
|
||||||
|
** names of the get and set methods to search for.<P>
|
||||||
|
**
|
||||||
|
** <B>Implementation note:</B> If there is a get(int) method,
|
||||||
|
** then the return type of that method is used to find the
|
||||||
|
** remaining methods. If there is no get method, then the
|
||||||
|
** set(int) method is searched for exhaustively and that type
|
||||||
|
** is used to find the others.<P>
|
||||||
|
**
|
||||||
|
** <B>Spec note:</B>
|
||||||
|
** If there is no get(int) method and multiple set(int) methods with
|
||||||
|
** the same name and the correct parameters (different type of course),
|
||||||
|
** then an IntrospectionException is thrown. While Sun's spec
|
||||||
|
** does not state this, it can make Bean behavior different on
|
||||||
|
** different systems (since method order is not guaranteed) and as
|
||||||
|
** such, can be treated as a bug in the spec. I am not aware of
|
||||||
|
** whether Sun's implementation catches this.
|
||||||
|
**
|
||||||
|
** @param name the programmatic name of the property, usually
|
||||||
|
** starting with a lowercase letter (e.g. fooManChu
|
||||||
|
** instead of FooManChu).
|
||||||
|
** @param beanClass the class the get and set methods live in.
|
||||||
|
** @param getMethodName the name of the get array method.
|
||||||
|
** @param setMethodName the name of the set array method.
|
||||||
|
** @param getIndexName the name of the get index method.
|
||||||
|
** @param setIndexName the name of the set index method.
|
||||||
|
** @exception IntrospectionException if the methods are not found or invalid.
|
||||||
|
**/
|
||||||
|
public IndexedPropertyDescriptor(String name, Class beanClass, String getMethodName, String setMethodName, String getIndexName, String setIndexName) throws IntrospectionException {
|
||||||
|
super(name);
|
||||||
|
findMethods(beanClass, getMethodName, setMethodName, getIndexName, setIndexName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new PropertyDescriptor using explicit Methods.
|
||||||
|
** Note that the methods will be checked for conformance to standard
|
||||||
|
** Property method rules, as described above at the top of this class.
|
||||||
|
**
|
||||||
|
** @param name the programmatic name of the property, usually
|
||||||
|
** starting with a lowercase letter (e.g. fooManChu
|
||||||
|
** instead of FooManChu).
|
||||||
|
** @param getMethod the get array method.
|
||||||
|
** @param setMethod the set array method.
|
||||||
|
** @param getIndex the get index method.
|
||||||
|
** @param setIndex the set index method.
|
||||||
|
** @exception IntrospectionException if the methods are not found or invalid.
|
||||||
|
**/
|
||||||
|
public IndexedPropertyDescriptor(String name, Method getMethod, Method setMethod, Method getIndex, Method setIndex) throws IntrospectionException {
|
||||||
|
super(name);
|
||||||
|
if(getMethod != null && getMethod.getParameterTypes().length > 0) {
|
||||||
|
throw new IntrospectionException("get method has parameters");
|
||||||
|
}
|
||||||
|
if(getMethod != null && setMethod.getParameterTypes().length != 1) {
|
||||||
|
throw new IntrospectionException("set method does not have exactly one parameter");
|
||||||
|
}
|
||||||
|
if(getMethod != null && setMethod != null) {
|
||||||
|
if(!getMethod.getReturnType().equals(setMethod.getParameterTypes()[0])) {
|
||||||
|
throw new IntrospectionException("set and get methods do not share the same type");
|
||||||
|
}
|
||||||
|
if(!getMethod.getDeclaringClass().isAssignableFrom(setMethod.getDeclaringClass())
|
||||||
|
&& !setMethod.getDeclaringClass().isAssignableFrom(getMethod.getDeclaringClass())) {
|
||||||
|
throw new IntrospectionException("set and get methods are not in the same class.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(getIndex != null && (getIndex.getParameterTypes().length != 1
|
||||||
|
|| !(getIndex.getParameterTypes()[0]).equals(java.lang.Integer.TYPE))) {
|
||||||
|
throw new IntrospectionException("get index method has wrong parameters");
|
||||||
|
}
|
||||||
|
if(setIndex != null && (setIndex.getParameterTypes().length != 2
|
||||||
|
|| !(setIndex.getParameterTypes()[0]).equals(java.lang.Integer.TYPE))) {
|
||||||
|
throw new IntrospectionException("set index method has wrong parameters");
|
||||||
|
}
|
||||||
|
if(getIndex != null && setIndex != null) {
|
||||||
|
if(!getIndex.getReturnType().equals(setIndex.getParameterTypes()[1])) {
|
||||||
|
throw new IntrospectionException("set index methods do not share the same type");
|
||||||
|
}
|
||||||
|
if(!getIndex.getDeclaringClass().isAssignableFrom(setIndex.getDeclaringClass())
|
||||||
|
&& !setIndex.getDeclaringClass().isAssignableFrom(getIndex.getDeclaringClass())) {
|
||||||
|
throw new IntrospectionException("get and set index methods are not in the same class.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(getIndex != null && getMethod != null && !getIndex.getDeclaringClass().isAssignableFrom(getMethod.getDeclaringClass())
|
||||||
|
&& !getMethod.getDeclaringClass().isAssignableFrom(getIndex.getDeclaringClass())) {
|
||||||
|
throw new IntrospectionException("methods are not in the same class.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(getIndex != null && getMethod != null && !Array.newInstance(getIndex.getReturnType(),0).getClass().equals(getMethod.getReturnType())) {
|
||||||
|
throw new IntrospectionException("array methods do not match index methods.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getMethod = getMethod;
|
||||||
|
this.setMethod = setMethod;
|
||||||
|
this.getIndex = getIndex;
|
||||||
|
this.setIndex = getIndex;
|
||||||
|
this.indexedPropertyType = getIndex != null ? getIndex.getReturnType() : setIndex.getParameterTypes()[1];
|
||||||
|
this.propertyType = getMethod != null ? getMethod.getReturnType() : (setMethod != null ? setMethod.getParameterTypes()[0] : Array.newInstance(this.indexedPropertyType,0).getClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class getIndexedPropertyType() {
|
||||||
|
return indexedPropertyType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Method getIndexedReadMethod() {
|
||||||
|
return getIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Method getIndexedWriteMethod() {
|
||||||
|
return setIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void findMethods(Class beanClass, String getMethodName, String setMethodName, String getIndexName, String setIndexName) throws IntrospectionException {
|
||||||
|
try {
|
||||||
|
if(getIndexName != null) {
|
||||||
|
try {
|
||||||
|
Class[] getArgs = new Class[1];
|
||||||
|
getArgs[0] = java.lang.Integer.TYPE;
|
||||||
|
getIndex = beanClass.getMethod(getIndexName,getArgs);
|
||||||
|
indexedPropertyType = getIndex.getReturnType();
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(getIndex != null) {
|
||||||
|
if(setIndexName != null) {
|
||||||
|
try {
|
||||||
|
Class[] setArgs = new Class[2];
|
||||||
|
setArgs[0] = java.lang.Integer.TYPE;
|
||||||
|
setArgs[1] = indexedPropertyType;
|
||||||
|
setIndex = beanClass.getMethod(setIndexName,setArgs);
|
||||||
|
if(!setIndex.getReturnType().equals(java.lang.Void.TYPE)) {
|
||||||
|
throw new IntrospectionException(setIndexName + " has non-void return type");
|
||||||
|
}
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(setIndexName != null) {
|
||||||
|
Method[] m = beanClass.getMethods();
|
||||||
|
for(int i=0;i<m.length;i++) {
|
||||||
|
Method current = m[i];
|
||||||
|
if(current.getName().equals(setIndexName)
|
||||||
|
&& current.getParameterTypes().length == 2
|
||||||
|
&& (current.getParameterTypes()[0]).equals(java.lang.Integer.TYPE)
|
||||||
|
&& current.getReturnType().equals(java.lang.Void.TYPE)) {
|
||||||
|
if(setIndex != null) {
|
||||||
|
throw new IntrospectionException("Multiple, different set methods found that fit the bill!");
|
||||||
|
} else {
|
||||||
|
setIndex = current;
|
||||||
|
indexedPropertyType = current.getParameterTypes()[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(setIndex == null) {
|
||||||
|
throw new IntrospectionException("Cannot find get or set methods.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new IntrospectionException("Cannot find get or set methods.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Class arrayType = Array.newInstance(indexedPropertyType,0).getClass();
|
||||||
|
|
||||||
|
Class[] setArgs = new Class[1];
|
||||||
|
setArgs[0] = arrayType;
|
||||||
|
try {
|
||||||
|
setMethod = beanClass.getMethod(setMethodName,setArgs);
|
||||||
|
if(!setMethod.getReturnType().equals(java.lang.Void.TYPE)) {
|
||||||
|
setMethod = null;
|
||||||
|
}
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
}
|
||||||
|
|
||||||
|
Class[] getArgs = new Class[0];
|
||||||
|
try {
|
||||||
|
getMethod = beanClass.getMethod(getMethodName,getArgs);
|
||||||
|
if(!getMethod.getReturnType().equals(arrayType)) {
|
||||||
|
getMethod = null;
|
||||||
|
}
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
}
|
||||||
|
} catch(SecurityException E) {
|
||||||
|
throw new IntrospectionException("SecurityException while trying to find methods.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
46
libjava/java/beans/IntrospectionException.java
Normal file
46
libjava/java/beans/IntrospectionException.java
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
/* java.beans.IntrospectionException
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** IntrospectionException is thrown when the Introspector fails. Surprise, surprise.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 31 May 1998
|
||||||
|
** @see java.beans.Introspector
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class IntrospectionException extends Exception {
|
||||||
|
/** Instantiate this exception with the given message.
|
||||||
|
** @param msg the message for the exception.
|
||||||
|
**/
|
||||||
|
public IntrospectionException(String msg) {
|
||||||
|
super(msg);
|
||||||
|
}
|
||||||
|
}
|
427
libjava/java/beans/Introspector.java
Normal file
427
libjava/java/beans/Introspector.java
Normal file
|
@ -0,0 +1,427 @@
|
||||||
|
/* java.beans.Introspector
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import gnu.java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
import gnu.java.lang.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** Introspector is the class that does the bulk of the
|
||||||
|
** design-time work in Java Beans. Every class must have
|
||||||
|
** a BeanInfo in order for an RAD tool to use it; but, as
|
||||||
|
** promised, you don't have to write the BeanInfo class
|
||||||
|
** yourself if you don't want to. All you have to do is
|
||||||
|
** call getBeanInfo() in the Introspector and it will use
|
||||||
|
** standard JavaBeans-defined method signatures to
|
||||||
|
** determine the information about your class.<P>
|
||||||
|
**
|
||||||
|
** Don't worry about it too much, though: you can provide
|
||||||
|
** JavaBeans with as much customized information as you
|
||||||
|
** want, or as little as you want, using the BeanInfo
|
||||||
|
** interface (see BeanInfo for details).<P>
|
||||||
|
**
|
||||||
|
** <STRONG>Order of Operations</STRONG><P>
|
||||||
|
**
|
||||||
|
** When you call getBeanInfo(class c), the Introspector
|
||||||
|
** first searches for BeanInfo class to see if you
|
||||||
|
** provided any explicit information. It searches for a
|
||||||
|
** class named <bean class name>BeanInfo in different
|
||||||
|
** packages, first searching the bean class's package
|
||||||
|
** and then moving on to search the beanInfoSearchPath.<P>
|
||||||
|
**
|
||||||
|
** If it does not find a BeanInfo class, it acts as though
|
||||||
|
** it had found a BeanInfo class returning null from all
|
||||||
|
** methods (meaning it should discover everything through
|
||||||
|
** Introspection). If it does, then it takes the
|
||||||
|
** information it finds in the BeanInfo class to be
|
||||||
|
** canonical (that is, the information speaks for its
|
||||||
|
** class as well as all superclasses).<P>
|
||||||
|
**
|
||||||
|
** When it has introspected the class, calls
|
||||||
|
** getBeanInfo(c.getSuperclass) and adds that information
|
||||||
|
** to the information it has, not adding to any information
|
||||||
|
** it already has that is canonical.<P>
|
||||||
|
**
|
||||||
|
** <STRONG>Introspection Design Patterns</STRONG><P>
|
||||||
|
**
|
||||||
|
** When the Introspector goes in to read the class, it
|
||||||
|
** follows a well-defined order in order to not leave any
|
||||||
|
** methods unaccounted for. Its job is to step over all
|
||||||
|
** of the public methods in a class and determine whether
|
||||||
|
** they are part of a property, an event, or a method (in
|
||||||
|
** that order).
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** <STRONG>Properties:</STRONG><P>
|
||||||
|
**
|
||||||
|
** <OL>
|
||||||
|
** <LI>If there is a <CODE>public boolean isXXX()</CODE>
|
||||||
|
** method, then XXX is a read-only boolean property.
|
||||||
|
** <CODE>boolean getXXX()</CODE> may be supplied in
|
||||||
|
** addition to this method, although isXXX() is the
|
||||||
|
** one that will be used in this case and getXXX()
|
||||||
|
** will be ignored. If there is a
|
||||||
|
** <CODE>public void setXXX(boolean)</CODE> method,
|
||||||
|
** it is part of this group and makes it a read-write
|
||||||
|
** property.</LI>
|
||||||
|
** <LI>If there is a
|
||||||
|
** <CODE>public <type> getXXX(int)</CODE>
|
||||||
|
** method, then XXX is a read-only indexed property of
|
||||||
|
** type <type>. If there is a
|
||||||
|
** <CODE>public void setXXX(int,<type>)</CODE>
|
||||||
|
** method, then it is a read-write indexed property of
|
||||||
|
** type <type>. There may also be a
|
||||||
|
** <CODE>public <type>[] getXXX()</CODE> and a
|
||||||
|
** <CODE>public void setXXX(<type>)</CODE>
|
||||||
|
** method as well.</CODE></LI>
|
||||||
|
** <LI>If there is a
|
||||||
|
** <CODE>public void setXXX(int,<type>)</CODE>
|
||||||
|
** method, then it is a write-only indexed property of
|
||||||
|
** type <type>. There may also be a
|
||||||
|
** <CODE>public <type>[] getXXX()</CODE> and a
|
||||||
|
** <CODE>public void setXXX(<type>)</CODE>
|
||||||
|
** method as well.</CODE></LI>
|
||||||
|
** <LI>If there is a
|
||||||
|
** <CODE>public <type> getXXX()</CODE> method,
|
||||||
|
** then XXX is a read-only property of type
|
||||||
|
** <type>. If there is a
|
||||||
|
** <CODE>public void setXXX(<type>)</CODE>
|
||||||
|
** method, then it will be used for the property and
|
||||||
|
** the property will be considered read-write.</LI>
|
||||||
|
** <LI>If there is a
|
||||||
|
** <CODE>public void setXXX(<type>)</CODE>
|
||||||
|
** method, then as long as XXX is not already used as
|
||||||
|
** the name of a property, XXX is assumed to be a
|
||||||
|
** write-only property of type <type>.</LI>
|
||||||
|
** <LI>In all of the above cases, if the setXXX() method
|
||||||
|
** throws <CODE>PropertyVetoException</CODE>, then the
|
||||||
|
** property in question is assumed to be constrained.
|
||||||
|
** No properties are ever assumed to be bound
|
||||||
|
** (<STRONG>Spec Note:</STRONG> this is not in the
|
||||||
|
** spec, it just makes sense). See PropertyDescriptor
|
||||||
|
** for a description of bound and constrained
|
||||||
|
** properties.</LI>
|
||||||
|
** </OL>
|
||||||
|
**
|
||||||
|
** <STRONG>Events:</STRONG><P>
|
||||||
|
**
|
||||||
|
** If there is a pair of methods,
|
||||||
|
** <CODE>public void addXXX(<type>)</CODE> and
|
||||||
|
** <CODE>public void removeXXX(<type>)</CODE>, where
|
||||||
|
** <type> is a descendant of
|
||||||
|
** <CODE>java.util.EventListener</CODE>, then the pair of
|
||||||
|
** methods imply that this Bean will fire events to
|
||||||
|
** listeners of type <type>.<P>
|
||||||
|
**
|
||||||
|
** If the addXXX() method throws
|
||||||
|
** <CODE>java.util.TooManyListenersException</CODE>, then
|
||||||
|
** the event set is assumed to be <EM>unicast</EM>. See
|
||||||
|
** EventSetDescriptor for a discussion of unicast event
|
||||||
|
** sets.<P>
|
||||||
|
**
|
||||||
|
** <STRONG>Spec Note:</STRONG> the spec seems to say that
|
||||||
|
** the listener type's classname must be equal to the XXX
|
||||||
|
** part of addXXX() and removeXXX(), but that is not the
|
||||||
|
** case in Sun's implementation, so I am assuming it is
|
||||||
|
** not the case in general.<P>
|
||||||
|
**
|
||||||
|
** <STRONG>Methods:</STRONG><P>
|
||||||
|
**
|
||||||
|
** Any public methods (including those which were used
|
||||||
|
** for Properties or Events) are used as Methods.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
** @see java.beans.BeanInfo
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class Introspector {
|
||||||
|
static String[] beanInfoSearchPath = {"gnu.java.beans.info", "sun.beans.infos"};
|
||||||
|
static Hashtable beanInfoCache = new Hashtable();
|
||||||
|
|
||||||
|
private Introspector() {}
|
||||||
|
|
||||||
|
/** Get the BeanInfo for class <CODE>beanClass</CODE>,
|
||||||
|
** first by looking for explicit information, next by
|
||||||
|
** using standard design patterns to determine
|
||||||
|
** information about the class.
|
||||||
|
** @param beanClass the class to get BeanInfo about.
|
||||||
|
** @return the BeanInfo object representing the class.
|
||||||
|
**/
|
||||||
|
public static BeanInfo getBeanInfo(Class beanClass) throws IntrospectionException {
|
||||||
|
BeanInfo cachedInfo;
|
||||||
|
synchronized(beanClass) {
|
||||||
|
cachedInfo = (BeanInfo)beanInfoCache.get(beanClass);
|
||||||
|
if(cachedInfo != null) {
|
||||||
|
return cachedInfo;
|
||||||
|
}
|
||||||
|
cachedInfo = getBeanInfo(beanClass,null);
|
||||||
|
beanInfoCache.put(beanClass,cachedInfo);
|
||||||
|
return cachedInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the BeanInfo for class <CODE>beanClass</CODE>,
|
||||||
|
** first by looking for explicit information, next by
|
||||||
|
** using standard design patterns to determine
|
||||||
|
** information about the class. It crawls up the
|
||||||
|
** inheritance tree until it hits <CODE>topClass</CODE>.
|
||||||
|
** @param beanClass the Bean class.
|
||||||
|
** @param stopClass the class to stop at.
|
||||||
|
** @return the BeanInfo object representing the class.
|
||||||
|
**/
|
||||||
|
public static BeanInfo getBeanInfo(Class beanClass, Class stopClass) throws IntrospectionException {
|
||||||
|
ExplicitInfo explicit = new ExplicitInfo(beanClass,stopClass);
|
||||||
|
|
||||||
|
IntrospectionIncubator ii = new IntrospectionIncubator();
|
||||||
|
ii.setPropertyStopClass(explicit.propertyStopClass);
|
||||||
|
ii.setEventStopClass(explicit.eventStopClass);
|
||||||
|
ii.setMethodStopClass(explicit.methodStopClass);
|
||||||
|
ii.addMethods(beanClass.getMethods());
|
||||||
|
|
||||||
|
BeanInfoEmbryo currentInfo = ii.getBeanInfoEmbryo();
|
||||||
|
PropertyDescriptor[] p = explicit.explicitPropertyDescriptors;
|
||||||
|
if(p!=null) {
|
||||||
|
for(int i=0;i<p.length;i++) {
|
||||||
|
if(!currentInfo.hasProperty(p[i])) {
|
||||||
|
currentInfo.addProperty(p[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(explicit.defaultProperty != -1) {
|
||||||
|
currentInfo.setDefaultPropertyName(p[explicit.defaultProperty].getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EventSetDescriptor[] e = explicit.explicitEventSetDescriptors;
|
||||||
|
if(e!=null) {
|
||||||
|
for(int i=0;i<e.length;i++) {
|
||||||
|
if(!currentInfo.hasEvent(e[i])) {
|
||||||
|
currentInfo.addEvent(e[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(explicit.defaultEvent != -1) {
|
||||||
|
currentInfo.setDefaultEventName(e[explicit.defaultEvent].getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MethodDescriptor[] m = explicit.explicitMethodDescriptors;
|
||||||
|
if(m!=null) {
|
||||||
|
for(int i=0;i<m.length;i++) {
|
||||||
|
if(!currentInfo.hasMethod(m[i])) {
|
||||||
|
currentInfo.addMethod(m[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(explicit.explicitBeanDescriptor != null) {
|
||||||
|
currentInfo.setBeanDescriptor(new BeanDescriptor(beanClass,explicit.explicitBeanDescriptor.getCustomizerClass()));
|
||||||
|
} else {
|
||||||
|
currentInfo.setBeanDescriptor(new BeanDescriptor(beanClass,null));
|
||||||
|
}
|
||||||
|
|
||||||
|
currentInfo.setAdditionalBeanInfo(explicit.explicitBeanInfo);
|
||||||
|
currentInfo.setIcons(explicit.im);
|
||||||
|
|
||||||
|
return currentInfo.getBeanInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the search path for BeanInfo classes.
|
||||||
|
** @return the BeanInfo search path.
|
||||||
|
**/
|
||||||
|
public static String[] getBeanInfoSearchPath() {
|
||||||
|
return beanInfoSearchPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the search path for BeanInfo classes.
|
||||||
|
** @param beanInfoSearchPath the new BeanInfo search
|
||||||
|
** path.
|
||||||
|
**/
|
||||||
|
public static void setBeanInfoSearchPath(String[] beanInfoSearchPath) {
|
||||||
|
Introspector.beanInfoSearchPath = beanInfoSearchPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** A helper method to convert a name to standard Java
|
||||||
|
** naming conventions: anything with two capitals as the
|
||||||
|
** first two letters remains the same, otherwise the
|
||||||
|
** first letter is decapitalized. URL = URL, I = i,
|
||||||
|
** MyMethod = myMethod.
|
||||||
|
** @param name the name to decapitalize.
|
||||||
|
** @return the decapitalized name.
|
||||||
|
**/
|
||||||
|
public static String decapitalize(String name) {
|
||||||
|
try {
|
||||||
|
if(!Character.isUpperCase(name.charAt(0))) {
|
||||||
|
return name;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
if(Character.isUpperCase(name.charAt(1))) {
|
||||||
|
return name;
|
||||||
|
} else {
|
||||||
|
char[] c = name.toCharArray();
|
||||||
|
c[0] = Character.toLowerCase(c[0]);
|
||||||
|
return new String(c);
|
||||||
|
}
|
||||||
|
} catch(StringIndexOutOfBoundsException E) {
|
||||||
|
char[] c = new char[1];
|
||||||
|
c[0] = Character.toLowerCase(name.charAt(0));
|
||||||
|
return new String(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch(StringIndexOutOfBoundsException E) {
|
||||||
|
return name;
|
||||||
|
} catch(NullPointerException E) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static BeanInfo copyBeanInfo(BeanInfo b) {
|
||||||
|
java.awt.Image[] icons = new java.awt.Image[4];
|
||||||
|
for(int i=1;i<=4;i++) {
|
||||||
|
icons[i-1] = b.getIcon(i);
|
||||||
|
}
|
||||||
|
return new ExplicitBeanInfo(b.getBeanDescriptor(),b.getAdditionalBeanInfo(),
|
||||||
|
b.getPropertyDescriptors(),b.getDefaultPropertyIndex(),
|
||||||
|
b.getEventSetDescriptors(),b.getDefaultEventIndex(),
|
||||||
|
b.getMethodDescriptors(),icons);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ExplicitInfo {
|
||||||
|
BeanDescriptor explicitBeanDescriptor;
|
||||||
|
BeanInfo[] explicitBeanInfo;
|
||||||
|
|
||||||
|
PropertyDescriptor[] explicitPropertyDescriptors;
|
||||||
|
EventSetDescriptor[] explicitEventSetDescriptors;
|
||||||
|
MethodDescriptor[] explicitMethodDescriptors;
|
||||||
|
|
||||||
|
int defaultProperty;
|
||||||
|
int defaultEvent;
|
||||||
|
|
||||||
|
java.awt.Image[] im = new java.awt.Image[4];
|
||||||
|
|
||||||
|
Class propertyStopClass;
|
||||||
|
Class eventStopClass;
|
||||||
|
Class methodStopClass;
|
||||||
|
|
||||||
|
ExplicitInfo(Class beanClass, Class stopClass) {
|
||||||
|
while(beanClass != null && !beanClass.equals(stopClass)) {
|
||||||
|
BeanInfo explicit = findExplicitBeanInfo(beanClass);
|
||||||
|
if(explicit != null) {
|
||||||
|
if(explicitBeanDescriptor == null) {
|
||||||
|
explicitBeanDescriptor = explicit.getBeanDescriptor();
|
||||||
|
}
|
||||||
|
if(explicitBeanInfo == null) {
|
||||||
|
explicitBeanInfo = explicit.getAdditionalBeanInfo();
|
||||||
|
}
|
||||||
|
if(explicitPropertyDescriptors == null) {
|
||||||
|
if(explicit.getPropertyDescriptors() != null) {
|
||||||
|
explicitPropertyDescriptors = explicit.getPropertyDescriptors();
|
||||||
|
defaultProperty = explicit.getDefaultPropertyIndex();
|
||||||
|
propertyStopClass = beanClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(explicitEventSetDescriptors == null) {
|
||||||
|
if(explicit.getEventSetDescriptors() != null) {
|
||||||
|
explicitEventSetDescriptors = explicit.getEventSetDescriptors();
|
||||||
|
defaultEvent = explicit.getDefaultEventIndex();
|
||||||
|
eventStopClass = beanClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(explicitMethodDescriptors == null) {
|
||||||
|
if(explicit.getMethodDescriptors() != null) {
|
||||||
|
explicitMethodDescriptors = explicit.getMethodDescriptors();
|
||||||
|
methodStopClass = beanClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(im[0] == null
|
||||||
|
&& im[1] == null
|
||||||
|
&& im[2] == null
|
||||||
|
&& im[3] == null) {
|
||||||
|
im[0] = explicit.getIcon(0);
|
||||||
|
im[1] = explicit.getIcon(1);
|
||||||
|
im[2] = explicit.getIcon(2);
|
||||||
|
im[3] = explicit.getIcon(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
beanClass = beanClass.getSuperclass();
|
||||||
|
}
|
||||||
|
if(propertyStopClass == null) {
|
||||||
|
propertyStopClass = stopClass;
|
||||||
|
}
|
||||||
|
if(eventStopClass == null) {
|
||||||
|
eventStopClass = stopClass;
|
||||||
|
}
|
||||||
|
if(methodStopClass == null) {
|
||||||
|
methodStopClass = stopClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Hashtable explicitBeanInfos = new Hashtable();
|
||||||
|
static Vector emptyBeanInfos = new Vector();
|
||||||
|
|
||||||
|
static BeanInfo findExplicitBeanInfo(Class beanClass) {
|
||||||
|
BeanInfo retval = (BeanInfo)explicitBeanInfos.get(beanClass);
|
||||||
|
if(retval != null) {
|
||||||
|
return retval;
|
||||||
|
} else if(emptyBeanInfos.indexOf(beanClass) != -1) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
retval = reallyFindExplicitBeanInfo(beanClass);
|
||||||
|
if(retval != null) {
|
||||||
|
explicitBeanInfos.put(beanClass,retval);
|
||||||
|
} else {
|
||||||
|
emptyBeanInfos.addElement(beanClass);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static BeanInfo reallyFindExplicitBeanInfo(Class beanClass) {
|
||||||
|
try {
|
||||||
|
try {
|
||||||
|
return (BeanInfo)Class.forName(beanClass.getName()+"BeanInfo").newInstance();
|
||||||
|
} catch(ClassNotFoundException E) {
|
||||||
|
}
|
||||||
|
String newName = ClassHelper.getTruncatedClassName(beanClass) + "BeanInfo";
|
||||||
|
for(int i=0;i<Introspector.beanInfoSearchPath.length;i++) {
|
||||||
|
try {
|
||||||
|
if(Introspector.beanInfoSearchPath[i].equals("")) {
|
||||||
|
return (BeanInfo)Class.forName(newName).newInstance();
|
||||||
|
} else {
|
||||||
|
return (BeanInfo)Class.forName(Introspector.beanInfoSearchPath[i] + "." + newName).newInstance();
|
||||||
|
}
|
||||||
|
} catch(ClassNotFoundException E) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch(IllegalAccessException E) {
|
||||||
|
} catch(InstantiationException E) {
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
77
libjava/java/beans/MethodDescriptor.java
Normal file
77
libjava/java/beans/MethodDescriptor.java
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
/* java.beans.MethodDescriptor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
/** MethodDescriptor describes information about a JavaBeans method.
|
||||||
|
** It's a fairly straightforward class (at least something in this
|
||||||
|
** package is straightforward!).
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 26 Jul 1998
|
||||||
|
**/
|
||||||
|
public class MethodDescriptor extends FeatureDescriptor {
|
||||||
|
private Method m;
|
||||||
|
private ParameterDescriptor[] parameterDescriptors;
|
||||||
|
|
||||||
|
/** Create a new MethodDescriptor.
|
||||||
|
** This method sets the name to the name of the method (Method.getName()).
|
||||||
|
** @param m the method it will represent.
|
||||||
|
**/
|
||||||
|
public MethodDescriptor(Method m) {
|
||||||
|
setName(m.getName());
|
||||||
|
this.m = m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new MethodDescriptor.
|
||||||
|
** This method sets the name to the name of the method (Method.getName()).
|
||||||
|
** @param m the method it will represent.
|
||||||
|
** @param parameterDescriptors descriptions of the parameters (especially names).
|
||||||
|
**/
|
||||||
|
public MethodDescriptor(Method m, ParameterDescriptor[] parameterDescriptors) {
|
||||||
|
setName(m.getName());
|
||||||
|
this.m = m;
|
||||||
|
this.parameterDescriptors = parameterDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the parameter descriptors from this method.
|
||||||
|
** Since MethodDescriptor has no way of determining what
|
||||||
|
** the parameter names were, this defaults to null.
|
||||||
|
**/
|
||||||
|
public ParameterDescriptor[] getParameterDescriptors() {
|
||||||
|
return parameterDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the method this MethodDescriptor represents. **/
|
||||||
|
public Method getMethod() {
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
41
libjava/java/beans/ParameterDescriptor.java
Normal file
41
libjava/java/beans/ParameterDescriptor.java
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/* java.beans.MethodDescriptor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/** ParameterDescriptor represents a single parameter to a method.
|
||||||
|
** As it turns out, FeatureDescriptor is sufficient to hold all
|
||||||
|
** the information. Use its constructor and methods to set
|
||||||
|
** the appropriate values.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 26 Jul 1998
|
||||||
|
**/
|
||||||
|
public class ParameterDescriptor extends FeatureDescriptor {
|
||||||
|
|
||||||
|
}
|
111
libjava/java/beans/PropertyChangeEvent.java
Normal file
111
libjava/java/beans/PropertyChangeEvent.java
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
/* java.beans.PropertyChangeEvent
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** PropertyChangeEvents are fired in the PropertyChange
|
||||||
|
** and VetoableChange event classes. They represent the
|
||||||
|
** old and new values as well as the source Bean.<P>
|
||||||
|
**
|
||||||
|
** If the old or new value is a primitive type, it must
|
||||||
|
** be wrapped in the appropriate wrapper type
|
||||||
|
** (java.lang.Integer for int, etc., etc.).<P>
|
||||||
|
**
|
||||||
|
** If the old or new values are unknown (although why
|
||||||
|
** that would be I do not know), they may be null.<P>
|
||||||
|
**
|
||||||
|
** Right now Sun put in a propagationId, reserved for
|
||||||
|
** future use. Read the comments on the constructor
|
||||||
|
** and on setPropagationId for more information.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class PropertyChangeEvent extends java.util.EventObject {
|
||||||
|
String propertyName;
|
||||||
|
Object oldVal;
|
||||||
|
Object newVal;
|
||||||
|
Object propagationId;
|
||||||
|
|
||||||
|
/** Create a new PropertyChangeEvent. Remember that if
|
||||||
|
** you received a PropertyChangeEvent and are sending
|
||||||
|
** a new one, you should also set the propagation ID
|
||||||
|
** from the old PropertyChangeEvent.
|
||||||
|
** @param source the Bean containing the property.
|
||||||
|
** @param propertyName the property's name.
|
||||||
|
** @param oldVal the old value of the property.
|
||||||
|
** @param newVal the new value of the property.
|
||||||
|
**/
|
||||||
|
public PropertyChangeEvent(Object source, String propertyName, Object oldVal, Object newVal) {
|
||||||
|
super(source);
|
||||||
|
this.propertyName = propertyName;
|
||||||
|
this.oldVal = oldVal;
|
||||||
|
this.newVal = newVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the property name.
|
||||||
|
** @return the property name.
|
||||||
|
**/
|
||||||
|
public String getPropertyName() {
|
||||||
|
return propertyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the property's old value.
|
||||||
|
** @return the property's old value.
|
||||||
|
**/
|
||||||
|
public Object getOldValue() {
|
||||||
|
return oldVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the property's new value.
|
||||||
|
** @return the property's new value.
|
||||||
|
**/
|
||||||
|
public Object getNewValue() {
|
||||||
|
return newVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the propagation ID. This is a way for the event
|
||||||
|
** to be passed from hand to hand and retain a little
|
||||||
|
** extra state. Right now it is unused, but it should
|
||||||
|
** be propagated anyway so that future versions of
|
||||||
|
** JavaBeans can use it, for God knows what.
|
||||||
|
** @param propagationId the propagation ID.
|
||||||
|
**/
|
||||||
|
public void setPropagationId(Object propagationId) {
|
||||||
|
this.propagationId = propagationId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the propagation ID.
|
||||||
|
** @return the propagation ID.
|
||||||
|
**/
|
||||||
|
public Object getPropagationId() {
|
||||||
|
return propagationId;
|
||||||
|
}
|
||||||
|
}
|
48
libjava/java/beans/PropertyChangeListener.java
Normal file
48
libjava/java/beans/PropertyChangeListener.java
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/* java.beans.PropertyChangeListener
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** PropertyChangeListener allows a class to monitor
|
||||||
|
** properties of a Bean for changes.<P>
|
||||||
|
**
|
||||||
|
** A propertyChange() event will only be fired
|
||||||
|
** <EM>after</EM> the property has changed.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
** @see java.beans.PropertyChangeSupport
|
||||||
|
**/
|
||||||
|
|
||||||
|
public interface PropertyChangeListener {
|
||||||
|
/** Fired after a Bean's property has changed.
|
||||||
|
** @param e the change (containing the old and new values)
|
||||||
|
**/
|
||||||
|
public abstract void propertyChange(PropertyChangeEvent e);
|
||||||
|
}
|
203
libjava/java/beans/PropertyChangeSupport.java
Normal file
203
libjava/java/beans/PropertyChangeSupport.java
Normal file
|
@ -0,0 +1,203 @@
|
||||||
|
/* java.beans.PropertyChangeSupport
|
||||||
|
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** PropertyChangeSupport makes it easy to fire property
|
||||||
|
** change events and handle listeners.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.2.0, 15 Mar 1999
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class PropertyChangeSupport implements java.io.Serializable {
|
||||||
|
Hashtable propertyListeners = new Hashtable();
|
||||||
|
Vector listeners = new Vector();
|
||||||
|
Object bean;
|
||||||
|
|
||||||
|
/** Create PropertyChangeSupport to work with a specific
|
||||||
|
** source bean.
|
||||||
|
** @param bean the source bean to use.
|
||||||
|
**/
|
||||||
|
public PropertyChangeSupport(Object bean) {
|
||||||
|
this.bean = bean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Adds a PropertyChangeListener to the list of listeners.
|
||||||
|
** All property change events will be sent to this listener.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** The listener add is not unique: that is, <em>n</em> adds with
|
||||||
|
** the same listener will result in <em>n</em> events being sent
|
||||||
|
** to that listener for every property change.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** Adding a null listener will cause undefined behavior.
|
||||||
|
**
|
||||||
|
** @param l the listener to add.
|
||||||
|
**/
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener l) {
|
||||||
|
listeners.addElement(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Adds a PropertyChangeListener listening on the specified property.
|
||||||
|
** Events will be sent to the listener for that particular property.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** The listener add is not unique; that is, <em>n</em> adds on a
|
||||||
|
** particular property for a particular listener will result in
|
||||||
|
** <em>n</em> events being sent to that listener when that
|
||||||
|
** property is changed.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** The effect is cumulative, too; if you are registered to listen
|
||||||
|
** to receive events on all property changes, and then you
|
||||||
|
** register on a particular property, you will receive change
|
||||||
|
** events for that property twice.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** Adding a null listener will cause undefined behavior.
|
||||||
|
**
|
||||||
|
** @param propertyName the name of the property to listen on.
|
||||||
|
** @param l the listener to add.
|
||||||
|
**/
|
||||||
|
public void addPropertyChangeListener(String propertyName, PropertyChangeListener l) {
|
||||||
|
synchronized(propertyListeners) {
|
||||||
|
Vector v = (Vector)propertyListeners.get(propertyName);
|
||||||
|
try {
|
||||||
|
v.addElement(l);
|
||||||
|
} catch(NullPointerException e) {
|
||||||
|
/* If v is not found, create a new vector. */
|
||||||
|
v = new Vector();
|
||||||
|
v.addElement(l);
|
||||||
|
propertyListeners.put(propertyName, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Removes a PropertyChangeListener from the list of listeners.
|
||||||
|
** If any specific properties are being listened on, they must
|
||||||
|
** be deregistered by themselves; this will only remove the
|
||||||
|
** general listener to all properties.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** If <code>add()</code> has been called multiple times for a
|
||||||
|
** particular listener, <code>remove()</code> will have to be
|
||||||
|
** called the same number of times to deregister it.
|
||||||
|
**
|
||||||
|
** @param l the listener to remove.
|
||||||
|
**/
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener l) {
|
||||||
|
listeners.removeElement(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Removes a PropertyChangeListener from listening to a specific property.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** If <code>add()</code> has been called multiple times for a
|
||||||
|
** particular listener on a property, <code>remove()</code> will
|
||||||
|
** have to be called the same number of times to deregister it.
|
||||||
|
**
|
||||||
|
** @param propertyName the property to stop listening on.
|
||||||
|
** @param l the listener to remove.
|
||||||
|
**/
|
||||||
|
public void removePropertyChangeListener(String propertyName, PropertyChangeListener l) {
|
||||||
|
synchronized(propertyListeners) {
|
||||||
|
Vector v = (Vector)propertyListeners.get(propertyName);
|
||||||
|
try {
|
||||||
|
v.removeElement(l);
|
||||||
|
if(v.size() == 0) {
|
||||||
|
propertyListeners.remove(propertyName);
|
||||||
|
}
|
||||||
|
} catch(NullPointerException e) {
|
||||||
|
/* if v is not found, do nothing. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fire a PropertyChangeEvent to all the listeners.
|
||||||
|
**
|
||||||
|
** @param event the event to fire.
|
||||||
|
**/
|
||||||
|
public void firePropertyChange(PropertyChangeEvent event) {
|
||||||
|
for(int i=0;i<listeners.size();i++) {
|
||||||
|
((PropertyChangeListener)listeners.elementAt(i)).propertyChange(event);
|
||||||
|
}
|
||||||
|
Vector moreListeners = (Vector)propertyListeners.get(event.getPropertyName());
|
||||||
|
if(moreListeners != null) {
|
||||||
|
for(int i=0;i<moreListeners.size();i++) {
|
||||||
|
((PropertyChangeListener)moreListeners.elementAt(i)).propertyChange(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fire a PropertyChangeEvent containing the old and new values of the property to all the listeners.
|
||||||
|
**
|
||||||
|
** @param propertyName the name of the property that changed.
|
||||||
|
** @param oldVal the old value.
|
||||||
|
** @param newVal the new value.
|
||||||
|
**/
|
||||||
|
public void firePropertyChange(String propertyName, Object oldVal, Object newVal) {
|
||||||
|
firePropertyChange(new PropertyChangeEvent(bean,propertyName,oldVal,newVal));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fire a PropertyChangeEvent containing the old and new values of the property to all the listeners.
|
||||||
|
**
|
||||||
|
** @param propertyName the name of the property that changed.
|
||||||
|
** @param oldVal the old value.
|
||||||
|
** @param newVal the new value.
|
||||||
|
**/
|
||||||
|
public void firePropertyChange(String propertyName, boolean oldVal, boolean newVal) {
|
||||||
|
firePropertyChange(new PropertyChangeEvent(bean, propertyName, new Boolean(oldVal), new Boolean(newVal)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fire a PropertyChangeEvent containing the old and new values of the property to all the listeners.
|
||||||
|
**
|
||||||
|
** @param propertyName the name of the property that changed.
|
||||||
|
** @param oldVal the old value.
|
||||||
|
** @param newVal the new value.
|
||||||
|
**/
|
||||||
|
public void firePropertyChange(String propertyName, int oldVal, int newVal) {
|
||||||
|
firePropertyChange(new PropertyChangeEvent(bean, propertyName, new Integer(oldVal), new Integer(newVal)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Tell whether the specified property is being listened on or not.
|
||||||
|
** This will only return <code>true</code> if there are listeners
|
||||||
|
** on all properties or if there is a listener specifically on this
|
||||||
|
** property.
|
||||||
|
**
|
||||||
|
** @param propertyName the property that may be listened on
|
||||||
|
** @return whether the property is being listened on
|
||||||
|
**/
|
||||||
|
public boolean hasListeners(String propertyName) {
|
||||||
|
return listeners.size() > 0 || propertyListeners.get(propertyName) != null;
|
||||||
|
}
|
||||||
|
}
|
333
libjava/java/beans/PropertyDescriptor.java
Normal file
333
libjava/java/beans/PropertyDescriptor.java
Normal file
|
@ -0,0 +1,333 @@
|
||||||
|
/* java.beans.PropertyDescriptor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
** PropertyDescriptor describes information about a JavaBean property,
|
||||||
|
** by which we mean a property that has been exposed via a pair of
|
||||||
|
** get and set methods. (There may be no get method, which means
|
||||||
|
** the property is write-only, or no set method, which means the
|
||||||
|
** the property is read-only.)<P>
|
||||||
|
**
|
||||||
|
** The constraints put on get and set methods are:<P>
|
||||||
|
** <OL>
|
||||||
|
** <LI>A get method must have signature
|
||||||
|
** <CODE><propertyType> <getMethodName>()</CODE></LI>
|
||||||
|
** <LI>A set method must have signature
|
||||||
|
** <CODE>void <setMethodName>(<propertyType>)</CODE></LI>
|
||||||
|
** <LI>Either method type may throw any exception.</LI>
|
||||||
|
** <LI>Both methods must be public.</LI>
|
||||||
|
** </OL>
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 26 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class PropertyDescriptor extends FeatureDescriptor {
|
||||||
|
Class propertyType;
|
||||||
|
Method getMethod;
|
||||||
|
Method setMethod;
|
||||||
|
|
||||||
|
Class propertyEditorClass;
|
||||||
|
boolean bound;
|
||||||
|
boolean constrained;
|
||||||
|
|
||||||
|
PropertyDescriptor(String name) {
|
||||||
|
setName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new PropertyDescriptor by introspection.
|
||||||
|
** This form of constructor creates the PropertyDescriptor by
|
||||||
|
** looking for a getter method named <CODE>get<name>()</CODE>
|
||||||
|
** (or, optionally, if the property is boolean,
|
||||||
|
** <CODE>is<name>()</CODE>) and
|
||||||
|
** <CODE>set<name>()</CODE> in class
|
||||||
|
** <CODE><beanClass></CODE>, where <name> has its
|
||||||
|
** first letter capitalized by the constructor.<P>
|
||||||
|
**
|
||||||
|
** <B>Implementation note:</B> If there is a get method (or
|
||||||
|
** boolean isXXX() method), then the return type of that method
|
||||||
|
** is used to find the set method. If there is no get method,
|
||||||
|
** then the set method is searched for exhaustively.<P>
|
||||||
|
**
|
||||||
|
** <B>Spec note:</B>
|
||||||
|
** If there is no get method and multiple set methods with
|
||||||
|
** the same name and a single parameter (different type of course),
|
||||||
|
** then an IntrospectionException is thrown. While Sun's spec
|
||||||
|
** does not state this, it can make Bean behavior different on
|
||||||
|
** different systems (since method order is not guaranteed) and as
|
||||||
|
** such, can be treated as a bug in the spec. I am not aware of
|
||||||
|
** whether Sun's implementation catches this.
|
||||||
|
**
|
||||||
|
** @param name the programmatic name of the property, usually
|
||||||
|
** starting with a lowercase letter (e.g. fooManChu
|
||||||
|
** instead of FooManChu).
|
||||||
|
** @param beanClass the class the get and set methods live in.
|
||||||
|
** @exception IntrospectionException if the methods are not found or invalid.
|
||||||
|
**/
|
||||||
|
public PropertyDescriptor(String name, Class beanClass) throws IntrospectionException {
|
||||||
|
setName(name);
|
||||||
|
String capitalized;
|
||||||
|
try {
|
||||||
|
capitalized = Character.toUpperCase(name.charAt(0)) + name.substring(1);
|
||||||
|
} catch(StringIndexOutOfBoundsException e) {
|
||||||
|
capitalized = "";
|
||||||
|
}
|
||||||
|
findMethods(beanClass, "is" + capitalized, "get" + capitalized, "set" + capitalized);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new PropertyDescriptor by introspection.
|
||||||
|
** This form of constructor allows you to specify the
|
||||||
|
** names of the get and set methods to search for.<P>
|
||||||
|
**
|
||||||
|
** <B>Implementation note:</B> If there is a get method (or
|
||||||
|
** boolean isXXX() method), then the return type of that method
|
||||||
|
** is used to find the set method. If there is no get method,
|
||||||
|
** then the set method is searched for exhaustively.<P>
|
||||||
|
**
|
||||||
|
** <B>Spec note:</B>
|
||||||
|
** If there is no get method and multiple set methods with
|
||||||
|
** the same name and a single parameter (different type of course),
|
||||||
|
** then an IntrospectionException is thrown. While Sun's spec
|
||||||
|
** does not state this, it can make Bean behavior different on
|
||||||
|
** different systems (since method order is not guaranteed) and as
|
||||||
|
** such, can be treated as a bug in the spec. I am not aware of
|
||||||
|
** whether Sun's implementation catches this.
|
||||||
|
**
|
||||||
|
** @param name the programmatic name of the property, usually
|
||||||
|
** starting with a lowercase letter (e.g. fooManChu
|
||||||
|
** instead of FooManChu).
|
||||||
|
** @param beanClass the class the get and set methods live in.
|
||||||
|
** @param getMethodName the name of the get method.
|
||||||
|
** @param setMethodName the name of the set method.
|
||||||
|
** @exception IntrospectionException if the methods are not found or invalid.
|
||||||
|
**/
|
||||||
|
public PropertyDescriptor(String name, Class beanClass, String getMethodName, String setMethodName) throws IntrospectionException {
|
||||||
|
setName(name);
|
||||||
|
findMethods(beanClass, getMethodName, null, setMethodName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new PropertyDescriptor using explicit Methods.
|
||||||
|
** Note that the methods will be checked for conformance to standard
|
||||||
|
** Property method rules, as described above at the top of this class.
|
||||||
|
**
|
||||||
|
** @param name the programmatic name of the property, usually
|
||||||
|
** starting with a lowercase letter (e.g. fooManChu
|
||||||
|
** instead of FooManChu).
|
||||||
|
** @param getMethod the get method.
|
||||||
|
** @param setMethod the set method.
|
||||||
|
** @exception IntrospectionException if the methods are not found or invalid.
|
||||||
|
**/
|
||||||
|
public PropertyDescriptor(String name, Method getMethod, Method setMethod) throws IntrospectionException {
|
||||||
|
setName(name);
|
||||||
|
if(getMethod != null && getMethod.getParameterTypes().length > 0) {
|
||||||
|
throw new IntrospectionException("get method has parameters");
|
||||||
|
}
|
||||||
|
if(setMethod != null && setMethod.getParameterTypes().length != 1) {
|
||||||
|
throw new IntrospectionException("set method does not have exactly one parameter");
|
||||||
|
}
|
||||||
|
if(getMethod != null && setMethod != null) {
|
||||||
|
if(!getMethod.getReturnType().equals(setMethod.getParameterTypes()[0])) {
|
||||||
|
throw new IntrospectionException("set and get methods do not share the same type");
|
||||||
|
}
|
||||||
|
if(!getMethod.getDeclaringClass().isAssignableFrom(setMethod.getDeclaringClass())
|
||||||
|
&& !setMethod.getDeclaringClass().isAssignableFrom(getMethod.getDeclaringClass())) {
|
||||||
|
throw new IntrospectionException("set and get methods are not in the same class.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.getMethod = getMethod;
|
||||||
|
this.setMethod = setMethod;
|
||||||
|
if(getMethod != null) {
|
||||||
|
this.propertyType = getMethod.getReturnType();
|
||||||
|
} else {
|
||||||
|
this.propertyType = setMethod.getParameterTypes()[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the property type.
|
||||||
|
** This is the type the get method returns and the set method
|
||||||
|
** takes in.
|
||||||
|
**/
|
||||||
|
public Class getPropertyType() {
|
||||||
|
return propertyType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the get method. Why they call it readMethod here and
|
||||||
|
** get everywhere else is beyond me.
|
||||||
|
**/
|
||||||
|
public Method getReadMethod() {
|
||||||
|
return getMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the set method. Why they call it writeMethod here and
|
||||||
|
** set everywhere else is beyond me.
|
||||||
|
**/
|
||||||
|
public Method getWriteMethod() {
|
||||||
|
return setMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get whether the property is bound. Defaults to false. **/
|
||||||
|
public boolean isBound() {
|
||||||
|
return bound;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set whether the property is bound.
|
||||||
|
** As long as the the bean implements addPropertyChangeListener() and
|
||||||
|
** removePropertyChangeListener(), setBound(true) may safely be called.<P>
|
||||||
|
** If these things are not true, then the behavior of the system
|
||||||
|
** will be undefined.<P>
|
||||||
|
**
|
||||||
|
** When a property is bound, its set method is required to fire the
|
||||||
|
** <CODE>PropertyChangeListener.propertyChange())</CODE event
|
||||||
|
** after the value has changed.
|
||||||
|
** @param bound whether the property is bound or not.
|
||||||
|
**/
|
||||||
|
public void setBound(boolean bound) {
|
||||||
|
this.bound = bound;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get whether the property is constrained. Defaults to false. **/
|
||||||
|
public boolean isConstrained() {
|
||||||
|
return constrained;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set whether the property is constrained.
|
||||||
|
** If the set method throws <CODE>java.beans.PropertyVetoException</CODE>
|
||||||
|
** (or subclass thereof) and the bean implements addVetoableChangeListener()
|
||||||
|
** and removeVetoableChangeListener(), then setConstrained(true) may safely
|
||||||
|
** be called. Otherwise, the system behavior is undefined.
|
||||||
|
** <B>Spec note:</B> given those strict parameters, it would be nice if it
|
||||||
|
** got set automatically by detection, but oh well.<P>
|
||||||
|
** When a property is constrained, its set method is required to:<P>
|
||||||
|
** <OL>
|
||||||
|
** <LI>Fire the <CODE>VetoableChangeListener.vetoableChange()</CODE>
|
||||||
|
** event notifying others of the change and allowing them a chance to
|
||||||
|
** say it is a bad thing.</LI>
|
||||||
|
** <LI>If any of the listeners throws a PropertyVetoException, then
|
||||||
|
** it must fire another vetoableChange() event notifying the others
|
||||||
|
** of a reversion to the old value (though, of course, the change
|
||||||
|
** was never made). Then it rethrows the PropertyVetoException and
|
||||||
|
** exits.</LI>
|
||||||
|
** <LI>If all has gone well to this point, the value may be changed.</LI>
|
||||||
|
** </OL>
|
||||||
|
** @param constrained whether the property is constrained or not.
|
||||||
|
**/
|
||||||
|
public void setConstrained(boolean constrained) {
|
||||||
|
this.constrained = constrained;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the PropertyEditor class. Defaults to null. **/
|
||||||
|
public Class getPropertyEditorClass() {
|
||||||
|
return propertyEditorClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the PropertyEditor class. If the class does not implement
|
||||||
|
** the PropertyEditor interface, you will likely get an exception
|
||||||
|
** late in the game.
|
||||||
|
** @param propertyEditorClass the PropertyEditor class for this class to use.
|
||||||
|
**/
|
||||||
|
public void setPropertyEditorClass(Class propertyEditorClass) {
|
||||||
|
this.propertyEditorClass = propertyEditorClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void findMethods(Class beanClass, String getMethodName1, String getMethodName2, String setMethodName) throws IntrospectionException {
|
||||||
|
try {
|
||||||
|
if(getMethodName1 != null) {
|
||||||
|
try {
|
||||||
|
getMethod = beanClass.getMethod(getMethodName1, new Class[0]);
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
}
|
||||||
|
if(getMethodName2 != null) {
|
||||||
|
if(getMethod != null && !getMethod.getReturnType().equals(java.lang.Boolean.TYPE)) {
|
||||||
|
// If the is() method exists but isn't boolean, we'll just go on and look for
|
||||||
|
// an ordinary get() method.
|
||||||
|
getMethod = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Method getMethod2;
|
||||||
|
try {
|
||||||
|
getMethod2 = beanClass.getMethod(getMethodName2, new Class[0]);
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
getMethod2 = null;
|
||||||
|
}
|
||||||
|
if(getMethod2 != null) {
|
||||||
|
if(getMethod != null) {
|
||||||
|
if(!getMethod.getReturnType().equals(getMethod2.getReturnType())) {
|
||||||
|
throw new IntrospectionException("Both " + getMethodName1 + " and " + getMethodName2 + " exist, and have contradictory return types.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
getMethod = getMethod2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(getMethod != null) {
|
||||||
|
propertyType = getMethod.getReturnType();
|
||||||
|
if(setMethodName != null) {
|
||||||
|
Class[] setArgs = new Class[1];
|
||||||
|
setArgs[0] = propertyType;
|
||||||
|
try {
|
||||||
|
setMethod = beanClass.getMethod(setMethodName, setArgs);
|
||||||
|
if(!setMethod.getReturnType().equals(java.lang.Void.TYPE)) {
|
||||||
|
throw new IntrospectionException(setMethodName + " has non-void return type");
|
||||||
|
}
|
||||||
|
} catch(NoSuchMethodException E) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(setMethodName != null) {
|
||||||
|
Method[] m = beanClass.getMethods();
|
||||||
|
for(int i=0;i<m.length;i++) {
|
||||||
|
Method current = m[i];
|
||||||
|
if(current.getName().equals(setMethodName)
|
||||||
|
&& current.getParameterTypes().length == 1
|
||||||
|
&& current.getReturnType().equals(java.lang.Void.TYPE)) {
|
||||||
|
if(setMethod != null) {
|
||||||
|
throw new IntrospectionException("Multiple, different set methods found that fit the bill!");
|
||||||
|
} else {
|
||||||
|
setMethod = current;
|
||||||
|
propertyType = current.getParameterTypes()[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(setMethod == null) {
|
||||||
|
throw new IntrospectionException("Cannot find get or set methods.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new IntrospectionException("Cannot find get or set methods.");
|
||||||
|
}
|
||||||
|
} catch(SecurityException E) {
|
||||||
|
throw new IntrospectionException("SecurityException thrown on attempt to access methods.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
198
libjava/java/beans/PropertyEditor.java
Normal file
198
libjava/java/beans/PropertyEditor.java
Normal file
|
@ -0,0 +1,198 @@
|
||||||
|
/* java.beans.PropertyEditor
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** PropertyEditors are custom GUI editors for specific types of values.
|
||||||
|
**
|
||||||
|
** A PropertyEditor can be used, for example, if you are editing a type of value
|
||||||
|
** that can be more easily represented graphically, such as a Point, or one that
|
||||||
|
** can be more easily represented by a list, such as a boolean (true/false).<P>
|
||||||
|
**
|
||||||
|
** A PropertyEditor must be able to display its contents when asked to and
|
||||||
|
** be able to allow the user to change its underlying field value. However, it
|
||||||
|
** is not the PropertyEditor's responsibility to make the change to the
|
||||||
|
** underlying Object; in fact, the PropertyEditor does not even know about the
|
||||||
|
** Object it is actually editing--only about the property it is currently
|
||||||
|
** editing. When a change is made to the property, the PropertyEditor must
|
||||||
|
** simply fire a PropertyChangeEvent and allow the RAD tool to actually set
|
||||||
|
** the property in the underlying Bean.<P>
|
||||||
|
**
|
||||||
|
** PropertyEditors should not change the Objects they are given by setValue().
|
||||||
|
** These Objects may or may not be the actual Objects which are properties of
|
||||||
|
** the Bean being edited. Instead, PropertyEditors should create a new Object
|
||||||
|
** and fire a PropertyChangeEvent with the old and new values.<P>
|
||||||
|
**
|
||||||
|
** PropertyEditors also must support the ability to return a Java
|
||||||
|
** initialization string. See the getJavaInitializationString() method for
|
||||||
|
** details.<P>
|
||||||
|
**
|
||||||
|
** There are several different ways a PropertyEditor may display and control
|
||||||
|
** editing of its value. When multiple types of input and display are
|
||||||
|
** given by a single PropertyEditor, the RAD tool may decide which of the call
|
||||||
|
** to support. Some RAD tools may even be text-only, so even if you support
|
||||||
|
** a graphical set and get, it may choose the text set and get whenever it can.
|
||||||
|
** <OL>
|
||||||
|
** <LI>Every PropertyEditor must support getValue() and setValue(). For
|
||||||
|
** setValue(), the component must only support it when the argument is
|
||||||
|
** the same type that the PropertyEditor supports.</LI>
|
||||||
|
** <LI>Every PropertyEditor must support getJavaInitializationString().</LI>
|
||||||
|
** <LI>You may support painting the value yourself if you wish. To do this,
|
||||||
|
** have isPaintable() return true and implement the paintValue() method.
|
||||||
|
** This method does not determine in any way how the value is edited;
|
||||||
|
** merely how it is displayed.</LI>
|
||||||
|
** <LU>Let the caller of the PropertyEditor give the user a text input. Do
|
||||||
|
** this by returning a non-null String from getAsText(). If you support
|
||||||
|
** text input, you *must* support setAsText().</LI>
|
||||||
|
** <LI>Give the caller a set of possible values, such as "true"/"false", that
|
||||||
|
** the user must select from. To do this, return the list of Strings
|
||||||
|
** from the getTags() method. The RAD tool may choose to implement the
|
||||||
|
** user input any way it wishes, and only guarantees that setAsText() will
|
||||||
|
** only be called with one of the Strings returned from getTags().</LI>
|
||||||
|
** <LI>You may support a whole custom editing control by supporting
|
||||||
|
** getCustomEditor(). To do this, return true from supportsCustomEditor()
|
||||||
|
** and return a Component that does the job. It is the component's job,
|
||||||
|
** or the PropertyEditor's job, to make sure that when the editor changes
|
||||||
|
** its value, the PropertyChangeEvent is thrown.</LI>
|
||||||
|
** </OL>
|
||||||
|
**
|
||||||
|
** The PropertyEditor for a particular Bean can be found using the
|
||||||
|
** PropertyEditorManager class, which goes through a series of different
|
||||||
|
** checks to find the appropriate class.<P>
|
||||||
|
**
|
||||||
|
** A PropertyChangeEvent should be thrown from the PropertyEditor whenever a
|
||||||
|
** bound property (a property PropertyDescriptor.isBound() set to true)
|
||||||
|
** changes. When this happens, the editor itself should *not* change the value
|
||||||
|
** itself, but rather allow the RAD tool to call setValue() or setAsText().
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 30 June 1998
|
||||||
|
** @see java.beans.PropertyEditorManager
|
||||||
|
** @see java.beans.PropertyEditorSupport
|
||||||
|
**/
|
||||||
|
|
||||||
|
public interface PropertyEditor {
|
||||||
|
/** Called by the RAD tool to set the value of this property for the PropertyEditor.
|
||||||
|
** If the property type is native, it should be wrapped in the appropriate
|
||||||
|
** wrapper type.
|
||||||
|
** @param value the value to set this property to.
|
||||||
|
**/
|
||||||
|
public abstract void setValue(Object value);
|
||||||
|
|
||||||
|
/** Accessor method to get the current value the PropertyEditor is working with.
|
||||||
|
** If the property type is native, it will be wrapped in the appropriate
|
||||||
|
** wrapper type.
|
||||||
|
** @return the current value of the PropertyEditor.
|
||||||
|
**/
|
||||||
|
public abstract Object getValue();
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the value of this property using a String.
|
||||||
|
** Whether or not this PropertyEditor is editing a String type, this converts
|
||||||
|
** the String into the type of the PropertyEditor.
|
||||||
|
** @param text the text to set it to.
|
||||||
|
** @exception IllegalArgumentException if the String is in the wrong format or setAsText() is not supported.
|
||||||
|
**/
|
||||||
|
public abstract void setAsText(String text) throws IllegalArgumentException;
|
||||||
|
|
||||||
|
/** Get the value of this property in String format.
|
||||||
|
** Many times this can simply use Object.toString().<P>
|
||||||
|
** Return null if you do not support getAsText()/setAsText().
|
||||||
|
** <code>setAsText(getAsText())</code> should be valid; i.e. the stuff you spit out in
|
||||||
|
** getAsText() should be able to go into setAsText().
|
||||||
|
** @return the value of this property in String format.
|
||||||
|
**/
|
||||||
|
public abstract String getAsText();
|
||||||
|
|
||||||
|
/** Get a list of possible Strings which this property type can have.
|
||||||
|
** The value of these will be used by the RAD tool to construct some sort
|
||||||
|
** of list box or to check text box input, and the resulting String passed
|
||||||
|
** to setAsText() should be one of these. Note, however, that like most things
|
||||||
|
** with this mammoth, unwieldy interface, this is not guaranteed. Thus, you
|
||||||
|
** must check the value in setAsText() anyway.
|
||||||
|
** @return the list of possible String values for this property type.
|
||||||
|
**/
|
||||||
|
public abstract String[] getTags();
|
||||||
|
|
||||||
|
|
||||||
|
/** The RAD tool calls this to find out whether the PropertyEditor can paint itself.
|
||||||
|
** @return true if it can paint itself graphically, false if it cannot.
|
||||||
|
**/
|
||||||
|
public abstract boolean isPaintable();
|
||||||
|
|
||||||
|
/** The RAD tool calls this to paint the actual value of the property.
|
||||||
|
** The Graphics context will have the same current font, color, etc. as the
|
||||||
|
** parent Container. You may safely change the font, color, etc. and not
|
||||||
|
** change them back.<P>
|
||||||
|
** This method should do a silent no-op if isPaintable() is false.
|
||||||
|
** @param g the Graphics context to paint on
|
||||||
|
** @param bounds the rectangle you have reserved to work in
|
||||||
|
**/
|
||||||
|
public abstract void paintValue(java.awt.Graphics g, java.awt.Rectangle bounds);
|
||||||
|
|
||||||
|
|
||||||
|
/** The RAD tool calls this to find out whether the PropertyEditor supports a custom component to edit and display itself.
|
||||||
|
** @return true if getCustomEditor() will return a component, false if not.
|
||||||
|
**/
|
||||||
|
public abstract boolean supportsCustomEditor();
|
||||||
|
|
||||||
|
/** The RAD tool calls this to grab the component that can edit this type.
|
||||||
|
** The component may be painted anywhere the RAD tool wants to paint it--
|
||||||
|
** even in its own window.<P>
|
||||||
|
** The component must hook up with the PropertyEditor and, whenever a
|
||||||
|
** change to the value is made, fire a PropertyChangeEvent to the source.<P>
|
||||||
|
** @return the custom editor for this property type.
|
||||||
|
**/
|
||||||
|
public abstract java.awt.Component getCustomEditor();
|
||||||
|
|
||||||
|
|
||||||
|
/** Adds a property change listener to this PropertyEditor.
|
||||||
|
** @param listener the listener to add
|
||||||
|
**/
|
||||||
|
public abstract void addPropertyChangeListener(PropertyChangeListener listener);
|
||||||
|
|
||||||
|
/** Removes a property change listener from this PropertyEditor.
|
||||||
|
** @param listener the listener to remove
|
||||||
|
**/
|
||||||
|
public abstract void removePropertyChangeListener(PropertyChangeListener listener);
|
||||||
|
|
||||||
|
/** Get a Java language-specific String which could be used to create an Object
|
||||||
|
** of the specified type. Every PropertyEditor must support this.<P>
|
||||||
|
** The reason for this is that while most RAD tools will serialize the Beans
|
||||||
|
** and deserialize them at runtime, some RAD tools will generate code that
|
||||||
|
** creates the Beans. Examples of Java initialization strings would be:<P>
|
||||||
|
** <OL>
|
||||||
|
** <LI><CODE>2</CODE></LI>
|
||||||
|
** <LI><CODE>"I am a String"</CODE></LI>
|
||||||
|
** <LI><CODE>new MyObject(2, "String", new StringBuffer())</CODE></LI>
|
||||||
|
** </OL>
|
||||||
|
** @return the initialization string for this object in Java.
|
||||||
|
**/
|
||||||
|
public abstract String getJavaInitializationString();
|
||||||
|
}
|
150
libjava/java/beans/PropertyEditorManager.java
Normal file
150
libjava/java/beans/PropertyEditorManager.java
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
/* java.beans.PropertyEditorManager
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import gnu.java.lang.ClassHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** PropertyEditorManager is used to find property editors
|
||||||
|
** for various types (not necessarily Beans).<P>
|
||||||
|
**
|
||||||
|
** It first checks to see if the property editor is
|
||||||
|
** already registered; if it is, that property editor is
|
||||||
|
** used. Next it takes the type's classname and appends
|
||||||
|
** "Editor" to it, and searches first in the class's
|
||||||
|
** package and then in the property editor search path.<P>
|
||||||
|
**
|
||||||
|
** Default property editors are provided for:<P>
|
||||||
|
** <OL>
|
||||||
|
** <LI>boolean, byte, short, int, long, float, and double</LI>
|
||||||
|
** <LI>java.lang.String</LI>
|
||||||
|
** <LI>java.awt.Color</LI>
|
||||||
|
** <LI>java.awt.Font</LI>
|
||||||
|
** <OL>
|
||||||
|
**
|
||||||
|
** <STRONG>Spec Suggestion:</STRONG> Perhaps an editor for
|
||||||
|
** Filename or something like it should be provided. As well
|
||||||
|
** as char.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class PropertyEditorManager {
|
||||||
|
static java.util.Hashtable editors = new java.util.Hashtable();
|
||||||
|
static String[] editorSearchPath = {"gnu.java.beans.editors","sun.beans.editors"};
|
||||||
|
|
||||||
|
static {
|
||||||
|
registerEditor(java.lang.Boolean.TYPE, gnu.java.beans.editors.NativeBooleanEditor.class);
|
||||||
|
registerEditor(java.lang.Byte.TYPE, gnu.java.beans.editors.NativeByteEditor.class);
|
||||||
|
registerEditor(java.lang.Short.TYPE, gnu.java.beans.editors.NativeShortEditor.class);
|
||||||
|
registerEditor(java.lang.Integer.TYPE, gnu.java.beans.editors.NativeIntEditor.class);
|
||||||
|
registerEditor(java.lang.Long.TYPE, gnu.java.beans.editors.NativeLongEditor.class);
|
||||||
|
registerEditor(java.lang.Float.TYPE, gnu.java.beans.editors.NativeFloatEditor.class);
|
||||||
|
registerEditor(java.lang.Double.TYPE, gnu.java.beans.editors.NativeDoubleEditor.class);
|
||||||
|
registerEditor(java.lang.String.class, gnu.java.beans.editors.StringEditor.class);
|
||||||
|
registerEditor(java.awt.Color.class, gnu.java.beans.editors.ColorEditor.class);
|
||||||
|
registerEditor(java.awt.Font.class, gnu.java.beans.editors.FontEditor.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Beats me why this class can be instantiated, but there
|
||||||
|
** you have it.
|
||||||
|
**/
|
||||||
|
public PropertyEditorManager() { }
|
||||||
|
|
||||||
|
/** Register an editor for a class. Replaces old editor
|
||||||
|
** if there was one registered before.
|
||||||
|
** @param editedClass the class that the property editor
|
||||||
|
** will edit.
|
||||||
|
** @param editorClass the PropertyEditor class.
|
||||||
|
**/
|
||||||
|
public static void registerEditor(Class editedClass, Class editorClass) {
|
||||||
|
editors.put(editedClass, editorClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns a new instance of the property editor for the
|
||||||
|
** specified class.
|
||||||
|
** @param editedClass the class that the property editor
|
||||||
|
** will edit.
|
||||||
|
** @return a PropertyEditor instance that can edit the
|
||||||
|
** specified class.
|
||||||
|
**/
|
||||||
|
public static PropertyEditor findEditor(Class editedClass) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
Class found = (Class)editors.get(editedClass);
|
||||||
|
if(found != null) {
|
||||||
|
return (PropertyEditor)found.newInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
found = Class.forName(editedClass.getName()+"Editor");
|
||||||
|
registerEditor(editedClass,found);
|
||||||
|
return (PropertyEditor)found.newInstance();
|
||||||
|
} catch(ClassNotFoundException E) {
|
||||||
|
}
|
||||||
|
|
||||||
|
String appendName = "." + ClassHelper.getTruncatedClassName(editedClass) + "Editor";
|
||||||
|
synchronized(editorSearchPath) {
|
||||||
|
for(int i=0;i<editorSearchPath.length;i++) {
|
||||||
|
try {
|
||||||
|
found = Class.forName(editorSearchPath[i] + appendName);
|
||||||
|
registerEditor(editedClass,found);
|
||||||
|
return (PropertyEditor)found.newInstance();
|
||||||
|
} catch(ClassNotFoundException E) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch(InstantiationException E) {
|
||||||
|
} catch(IllegalAccessException E) {
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the editor search path.
|
||||||
|
** As a minor departure from the spec, the default value
|
||||||
|
** for the editor search path is "gnu.java.beans.editors",
|
||||||
|
** "sun.beans.editors".
|
||||||
|
** @return the editor search path.
|
||||||
|
**/
|
||||||
|
public static String[] getEditorSearchPath() {
|
||||||
|
return editorSearchPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the editor search path.
|
||||||
|
** @param editorSearchPath the new value for the editor
|
||||||
|
** search path.
|
||||||
|
**/
|
||||||
|
public static void setEditorSearchPath(String[] editorSearchPath) {
|
||||||
|
synchronized(editorSearchPath) {
|
||||||
|
PropertyEditorManager.editorSearchPath = editorSearchPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
195
libjava/java/beans/PropertyEditorSupport.java
Normal file
195
libjava/java/beans/PropertyEditorSupport.java
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
/* java.beans.PropertyEditorSupport
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** PropertyEditorSupport helps with PropertyEditors,
|
||||||
|
** implementing base functionality that they usually must
|
||||||
|
** have but which is a pain to implement. You may extend
|
||||||
|
** from this class or use it as a standalone.<P>
|
||||||
|
**
|
||||||
|
** This class does not do any painting or actual editing.
|
||||||
|
** For that, you must use or extend it. See the
|
||||||
|
** PropertyEditor class for better descriptions of what
|
||||||
|
** the various methods do.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class PropertyEditorSupport implements PropertyEditor {
|
||||||
|
Object eventSource;
|
||||||
|
Object val;
|
||||||
|
PropertyChangeSupport pSupport;
|
||||||
|
|
||||||
|
/** Call this constructor when you are deriving from
|
||||||
|
** PropertyEditorSupport.
|
||||||
|
**/
|
||||||
|
protected PropertyEditorSupport() {
|
||||||
|
this.eventSource = this;
|
||||||
|
this.pSupport = new PropertyChangeSupport(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Call this constructor when you are using
|
||||||
|
** PropertyEditorSupport as a helper object.
|
||||||
|
** @param eventSource the source to use when firing
|
||||||
|
** property change events.
|
||||||
|
**/
|
||||||
|
protected PropertyEditorSupport(Object eventSource) {
|
||||||
|
this.eventSource = eventSource;
|
||||||
|
this.pSupport = new PropertyChangeSupport(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the current value of the property.
|
||||||
|
** <STRONG>Implementation Note</STRONG> Sun does not
|
||||||
|
** state what exactly this version of the method does.
|
||||||
|
** Thus, in this implementation, it sets the value, and
|
||||||
|
** then if the old and new values are different, it
|
||||||
|
** fires a property change event with no property name
|
||||||
|
** and the old and new values.
|
||||||
|
** @param val the new value for the property.
|
||||||
|
**/
|
||||||
|
public void setValue(Object val) {
|
||||||
|
Object oldVal = val;
|
||||||
|
this.val = val;
|
||||||
|
if(!oldVal.equals(val)) {
|
||||||
|
pSupport.firePropertyChange(null,oldVal,val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the current value of the property.
|
||||||
|
** @return the current value of the property.
|
||||||
|
**/
|
||||||
|
public Object getValue() {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get whether this object is paintable or not.
|
||||||
|
** @return <CODE>false</CODE>
|
||||||
|
**/
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Paint this object. This class does nothing in
|
||||||
|
** this method.
|
||||||
|
**/
|
||||||
|
public void paintValue(java.awt.Graphics g, java.awt.Rectangle r) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the Java initialization String for the current
|
||||||
|
** value of the Object. This class returns gibberish or
|
||||||
|
** null (though the spec does not say which).<P>
|
||||||
|
** <STRONG>Implementation Note:</STRONG> This class
|
||||||
|
** returns the string "@$#^" to make sure the code will
|
||||||
|
** be broken, so that you will know to override it when
|
||||||
|
** you create your own property editor.
|
||||||
|
** @return the Java initialization string.
|
||||||
|
**/
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return "@$#^";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the value as text.
|
||||||
|
** In this class, you cannot count on getAsText() doing
|
||||||
|
** anything useful, although in this implementation I
|
||||||
|
** do toString().
|
||||||
|
** @return the value as text.
|
||||||
|
**/
|
||||||
|
public String getAsText() {
|
||||||
|
return val != null ? val.toString() : "null";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the value as text.
|
||||||
|
** In this class, you cannot count on setAsText() doing
|
||||||
|
** anything useful across implementations.
|
||||||
|
** <STRONG>Implementation Note:</STRONG> In this
|
||||||
|
** implementation it checks if the String is "null", and
|
||||||
|
** if it is, sets the value to null, otherwise it throws
|
||||||
|
** an IllegalArgumentException.
|
||||||
|
** @param s the text to convert to a new value.
|
||||||
|
** @exception IllegalArgumentException if the text is
|
||||||
|
** malformed.
|
||||||
|
**/
|
||||||
|
public void setAsText(String s) throws IllegalArgumentException {
|
||||||
|
if(s.equals("null")) {
|
||||||
|
setValue(null);
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns a list of possible choices for the value.
|
||||||
|
** @return <CODE>null</CODE>
|
||||||
|
**/
|
||||||
|
public String[] getTags() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return a custom component to edit the value.
|
||||||
|
** @return <CODE>null</CODE> in this class.
|
||||||
|
**/
|
||||||
|
public java.awt.Component getCustomEditor() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Find out whether this property editor supports a
|
||||||
|
** custom component to edit its value.
|
||||||
|
** @return <CODE>false</CODE> in this class.
|
||||||
|
**/
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Add a property change listener to this property editor.
|
||||||
|
** @param l the listener to add.
|
||||||
|
**/
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener l) {
|
||||||
|
pSupport.addPropertyChangeListener(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Remove a property change listener from this property editor.
|
||||||
|
** @param l the listener to remove.
|
||||||
|
**/
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener l) {
|
||||||
|
pSupport.removePropertyChangeListener(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Notify people that we've changed, although we don't
|
||||||
|
** tell them just how. The only thing I can think of to
|
||||||
|
** send in the event is the new value (since the old value
|
||||||
|
** is unavailable and there is no property name).
|
||||||
|
** I confess I do not understand the point of this method.
|
||||||
|
**/
|
||||||
|
public void firePropertyChange() {
|
||||||
|
pSupport.firePropertyChange(null,null,val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
55
libjava/java/beans/PropertyVetoException.java
Normal file
55
libjava/java/beans/PropertyVetoException.java
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
/* java.beans.PropertyVetoException
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** PropertyVetoException is thrown when a VetoableChangeListener doesn't like the proposed change.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 31 May 1998
|
||||||
|
** @see java.beans.VetoableChangeListener
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class PropertyVetoException extends Exception {
|
||||||
|
PropertyChangeEvent changeEvent;
|
||||||
|
|
||||||
|
/** Instantiate this exception with the given message and property change.
|
||||||
|
** @param msg the reason for the veto.
|
||||||
|
** @param changeEvent the PropertyChangeEvent that was thrown.
|
||||||
|
**/
|
||||||
|
public PropertyVetoException(String msg, PropertyChangeEvent changeEvent) {
|
||||||
|
super(msg);
|
||||||
|
this.changeEvent = changeEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the PropertyChange event that was vetoed. **/
|
||||||
|
public PropertyChangeEvent getPropertyChangeEvent() {
|
||||||
|
return changeEvent;
|
||||||
|
}
|
||||||
|
}
|
127
libjava/java/beans/SimpleBeanInfo.java
Normal file
127
libjava/java/beans/SimpleBeanInfo.java
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
/* java.beans.SimpleBeanInfo
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** SimpleBeanInfo is a class you may extend to more easily
|
||||||
|
** provide select information to the Introspector. It
|
||||||
|
** implements all of the methods in BeanInfo by returning
|
||||||
|
** null and forces the Introspector to behave exactly as
|
||||||
|
** if there were no BeanInfo class at all (Introspecting
|
||||||
|
** everything).<P>
|
||||||
|
**
|
||||||
|
** Overriding one or two of these functions
|
||||||
|
** to give explicit information on only those things you
|
||||||
|
** wish to give explicit information is perfectly safe,
|
||||||
|
** and even desirable.<P>
|
||||||
|
**
|
||||||
|
** See the BeanInfo class for information on what the
|
||||||
|
** various methods actually do.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
** @see java.beans.BeanInfo
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class SimpleBeanInfo implements BeanInfo {
|
||||||
|
/** Force Introspection of the general bean info.
|
||||||
|
** @return <CODE>null</CODE>.
|
||||||
|
**/
|
||||||
|
public BeanDescriptor getBeanDescriptor() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Force Introspection of the events this Bean type
|
||||||
|
** fires.
|
||||||
|
** @return <CODE>null</CODE>
|
||||||
|
**/
|
||||||
|
public EventSetDescriptor[] getEventSetDescriptors() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Say that there is no "default" event set.
|
||||||
|
** @return <CODE>-1</CODE>.
|
||||||
|
**/
|
||||||
|
public int getDefaultEventIndex() {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Force Introspection of the Bean properties.
|
||||||
|
** @return <CODE>null</CODE>.
|
||||||
|
**/
|
||||||
|
public PropertyDescriptor[] getPropertyDescriptors() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Say that there is no "default" property.
|
||||||
|
** @return <CODE>-1</CODE>.
|
||||||
|
**/
|
||||||
|
public int getDefaultPropertyIndex() {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Force Introspection of the Bean's methods.
|
||||||
|
** @return <CODE>null</CODE>.
|
||||||
|
**/
|
||||||
|
public MethodDescriptor[] getMethodDescriptors() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Tell the Introspector to go look for other BeanInfo
|
||||||
|
** itself.
|
||||||
|
** @return <CODE>null</CODE>.
|
||||||
|
**/
|
||||||
|
public BeanInfo[] getAdditionalBeanInfo() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Say that this Bean has no icons.
|
||||||
|
** @param iconType the type of icon
|
||||||
|
** @return <CODE>null</CODE>.
|
||||||
|
**/
|
||||||
|
public Image getIcon(int iconType) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Helper method to load an image using the Bean class
|
||||||
|
** getResource() method on the BeanInfo class (using
|
||||||
|
** getClass(), since you'll extend this class to get
|
||||||
|
** the BeanInfo). Basically it's assumed that the Bean
|
||||||
|
** and its BeanInfo are both loaded by the same
|
||||||
|
** ClassLoader, generally a reasonable assumption.
|
||||||
|
** @param location the URL relative
|
||||||
|
** @return the Image in question.
|
||||||
|
**/
|
||||||
|
public Image loadImage(String location) {
|
||||||
|
return Toolkit.getDefaultToolkit().getImage(getClass().getResource(location));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
62
libjava/java/beans/VetoableChangeListener.java
Normal file
62
libjava/java/beans/VetoableChangeListener.java
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/* java.beans.VetoableChangeListener
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** VetoableChangeListener allows a class to monitor
|
||||||
|
** proposed changes to properties of a Bean and, if
|
||||||
|
** desired, prevent them from occurring.<P>
|
||||||
|
**
|
||||||
|
** A vetoableChange() event will be fired <EM>before</EM>
|
||||||
|
** the property has changed. If any listener rejects the
|
||||||
|
** change by throwing the PropertyChangeException, a new
|
||||||
|
** vetoableChange() event will be fired to all listeners
|
||||||
|
** who received a vetoableChange() event in the first
|
||||||
|
** place informing them of a reversion to the old value.
|
||||||
|
** The value, of course, never actually changed.<P>
|
||||||
|
**
|
||||||
|
** <STRONG>Note:</STRONG> This class may not be reliably
|
||||||
|
** used to determine whether a property has actually
|
||||||
|
** changed. Use the PropertyChangeListener interface
|
||||||
|
** for that instead.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @version 1.1.0, 29 Jul 1998
|
||||||
|
** @since JDK1.1
|
||||||
|
** @see java.beans.PropertyChangeListener
|
||||||
|
** @see java.beans.VetoableChangeSupport
|
||||||
|
**/
|
||||||
|
|
||||||
|
public interface VetoableChangeListener {
|
||||||
|
/** Fired before a Bean's property changes.
|
||||||
|
** @param e the change (containing the old and new values)
|
||||||
|
** @exception PropertyChangeException if the listener
|
||||||
|
** does not desire the change to be made.
|
||||||
|
**/
|
||||||
|
public abstract void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException;
|
||||||
|
}
|
245
libjava/java/beans/VetoableChangeSupport.java
Normal file
245
libjava/java/beans/VetoableChangeSupport.java
Normal file
|
@ -0,0 +1,245 @@
|
||||||
|
/*
|
||||||
|
* java.beans.VetoableChangeSupport: part of the Java Class Libraries project.
|
||||||
|
* Copyright (C) 1998 Free Software Foundation
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
** VetoableChangeSupport makes it easy to fire vetoable
|
||||||
|
** change events and handle listeners as well as reversion
|
||||||
|
** of old values when things go wrong.
|
||||||
|
**
|
||||||
|
** @author John Keiser
|
||||||
|
** @since JDK1.1
|
||||||
|
** @version 1.2.0, 15 Mar 1998
|
||||||
|
**/
|
||||||
|
|
||||||
|
public class VetoableChangeSupport implements java.io.Serializable {
|
||||||
|
Hashtable propertyListeners = new Hashtable();
|
||||||
|
Vector listeners = new Vector();
|
||||||
|
Object bean;
|
||||||
|
|
||||||
|
/** Create VetoableChangeSupport to work with a specific
|
||||||
|
** source bean.
|
||||||
|
** @param bean the source bean to use.
|
||||||
|
**/
|
||||||
|
public VetoableChangeSupport(Object bean) {
|
||||||
|
this.bean = bean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Adds a VetoableChangeListener to the list of listeners.
|
||||||
|
** All property change events will be sent to this listener.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** The listener add is not unique: that is, <em>n</em> adds with
|
||||||
|
** the same listener will result in <em>n</em> events being sent
|
||||||
|
** to that listener for every property change.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** Adding a null listener will cause undefined behavior.
|
||||||
|
**
|
||||||
|
** @param l the listener to add.
|
||||||
|
**/
|
||||||
|
public void addVetoableChangeListener(VetoableChangeListener l) {
|
||||||
|
listeners.addElement(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Adds a VetoableChangeListener listening on the specified property.
|
||||||
|
** Events will be sent to the listener for that particular property.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** The listener add is not unique; that is, <em>n</em> adds on a
|
||||||
|
** particular property for a particular listener will result in
|
||||||
|
** <em>n</em> events being sent to that listener when that
|
||||||
|
** property is changed.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** The effect is cumulative, too; if you are registered to listen
|
||||||
|
** to receive events on all property changes, and then you
|
||||||
|
** register on a particular property, you will receive change
|
||||||
|
** events for that property twice.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** Adding a null listener will cause undefined behavior.
|
||||||
|
**
|
||||||
|
** @param propertyName the name of the property to listen on.
|
||||||
|
** @param l the listener to add.
|
||||||
|
**/
|
||||||
|
public void addVetoableChangeListener(String propertyName, VetoableChangeListener l) {
|
||||||
|
synchronized(propertyListeners) {
|
||||||
|
Vector v = (Vector)propertyListeners.get(propertyName);
|
||||||
|
try {
|
||||||
|
v.addElement(l);
|
||||||
|
} catch(NullPointerException e) {
|
||||||
|
/* If v is not found, create a new vector. */
|
||||||
|
v = new Vector();
|
||||||
|
v.addElement(l);
|
||||||
|
propertyListeners.put(propertyName, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Removes a VetoableChangeListener from the list of listeners.
|
||||||
|
** If any specific properties are being listened on, they must
|
||||||
|
** be deregistered by themselves; this will only remove the
|
||||||
|
** general listener to all properties.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** If <code>add()</code> has been called multiple times for a
|
||||||
|
** particular listener, <code>remove()</code> will have to be
|
||||||
|
** called the same number of times to deregister it.
|
||||||
|
**
|
||||||
|
** @param l the listener to remove.
|
||||||
|
**/
|
||||||
|
public void removeVetoableChangeListener(VetoableChangeListener l) {
|
||||||
|
listeners.removeElement(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Removes a VetoableChangeListener from listening to a specific property.
|
||||||
|
** <P>
|
||||||
|
**
|
||||||
|
** If <code>add()</code> has been called multiple times for a
|
||||||
|
** particular listener on a property, <code>remove()</code> will
|
||||||
|
** have to be called the same number of times to deregister it.
|
||||||
|
**
|
||||||
|
** @param propertyName the property to stop listening on.
|
||||||
|
** @param l the listener to remove.
|
||||||
|
**/
|
||||||
|
public void removeVetoableChangeListener(String propertyName, VetoableChangeListener l) {
|
||||||
|
synchronized(propertyListeners) {
|
||||||
|
Vector v = (Vector)propertyListeners.get(propertyName);
|
||||||
|
try {
|
||||||
|
v.removeElement(l);
|
||||||
|
if(v.size() == 0) {
|
||||||
|
propertyListeners.remove(propertyName);
|
||||||
|
}
|
||||||
|
} catch(NullPointerException e) {
|
||||||
|
/* if v is not found, do nothing. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Fire a VetoableChangeEvent to all the listeners.
|
||||||
|
** If any listener objects, a reversion event will be sent to
|
||||||
|
** those listeners who received the initial event.
|
||||||
|
**
|
||||||
|
** @param proposedChange the event to send.
|
||||||
|
** @exception PropertyVetoException if the change is vetoed.
|
||||||
|
**/
|
||||||
|
public void fireVetoableChange(PropertyChangeEvent proposedChange) throws PropertyVetoException {
|
||||||
|
int currentListener=0;
|
||||||
|
try {
|
||||||
|
for(;currentListener<listeners.size();currentListener++) {
|
||||||
|
((VetoableChangeListener)listeners.elementAt(currentListener)).vetoableChange(proposedChange);
|
||||||
|
}
|
||||||
|
} catch(PropertyVetoException e) {
|
||||||
|
PropertyChangeEvent reversion = new PropertyChangeEvent(proposedChange.getSource(),proposedChange.getPropertyName(),proposedChange.getNewValue(),proposedChange.getOldValue());
|
||||||
|
for(int sendAgain=0;sendAgain<currentListener;sendAgain++) {
|
||||||
|
try {
|
||||||
|
((VetoableChangeListener)listeners.elementAt(sendAgain)).vetoableChange(reversion);
|
||||||
|
} catch(PropertyVetoException e2) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector moreListeners = (Vector)propertyListeners.get(proposedChange.getPropertyName());
|
||||||
|
if(moreListeners != null) {
|
||||||
|
try {
|
||||||
|
for(currentListener = 0; currentListener < moreListeners.size(); currentListener++) {
|
||||||
|
((VetoableChangeListener)moreListeners.elementAt(currentListener)).vetoableChange(proposedChange);
|
||||||
|
}
|
||||||
|
} catch(PropertyVetoException e) {
|
||||||
|
PropertyChangeEvent reversion = new PropertyChangeEvent(proposedChange.getSource(),proposedChange.getPropertyName(),proposedChange.getNewValue(),proposedChange.getOldValue());
|
||||||
|
for(int sendAgain=0;sendAgain<listeners.size();sendAgain++) {
|
||||||
|
try {
|
||||||
|
((VetoableChangeListener)listeners.elementAt(currentListener)).vetoableChange(proposedChange);
|
||||||
|
} catch(PropertyVetoException e2) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int sendAgain=0;sendAgain<currentListener;sendAgain++) {
|
||||||
|
try {
|
||||||
|
((VetoableChangeListener)moreListeners.elementAt(sendAgain)).vetoableChange(reversion);
|
||||||
|
} catch(PropertyVetoException e2) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fire a VetoableChangeEvent containing the old and new values of the property to all the listeners.
|
||||||
|
** If any listener objects, a reversion event will be sent to
|
||||||
|
** those listeners who received the initial event.
|
||||||
|
**
|
||||||
|
** @param propertyName the name of the property that
|
||||||
|
** changed.
|
||||||
|
** @param oldVal the old value.
|
||||||
|
** @param newVal the new value.
|
||||||
|
** @exception PropertyVetoException if the change is vetoed.
|
||||||
|
**/
|
||||||
|
public void fireVetoableChange(String propertyName, Object oldVal, Object newVal) throws PropertyVetoException {
|
||||||
|
fireVetoableChange(new PropertyChangeEvent(bean,propertyName,oldVal,newVal));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fire a VetoableChangeEvent containing the old and new values of the property to all the listeners.
|
||||||
|
** If any listener objects, a reversion event will be sent to
|
||||||
|
** those listeners who received the initial event.
|
||||||
|
**
|
||||||
|
** @param propertyName the name of the property that
|
||||||
|
** changed.
|
||||||
|
** @param oldVal the old value.
|
||||||
|
** @param newVal the new value.
|
||||||
|
** @exception PropertyVetoException if the change is vetoed.
|
||||||
|
**/
|
||||||
|
public void fireVetoableChange(String propertyName, boolean oldVal, boolean newVal) throws PropertyVetoException {
|
||||||
|
fireVetoableChange(new PropertyChangeEvent(bean,propertyName,new Boolean(oldVal),new Boolean(newVal)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fire a VetoableChangeEvent containing the old and new values of the property to all the listeners.
|
||||||
|
** If any listener objects, a reversion event will be sent to
|
||||||
|
** those listeners who received the initial event.
|
||||||
|
**
|
||||||
|
** @param propertyName the name of the property that
|
||||||
|
** changed.
|
||||||
|
** @param oldVal the old value.
|
||||||
|
** @param newVal the new value.
|
||||||
|
** @exception PropertyVetoException if the change is vetoed.
|
||||||
|
**/
|
||||||
|
public void fireVetoableChange(String propertyName, int oldVal, int newVal) throws PropertyVetoException {
|
||||||
|
fireVetoableChange(new PropertyChangeEvent(bean,propertyName,new Integer(oldVal),new Integer(newVal)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Tell whether the specified property is being listened on or not.
|
||||||
|
** This will only return <code>true</code> if there are listeners
|
||||||
|
** on all properties or if there is a listener specifically on this
|
||||||
|
** property.
|
||||||
|
**
|
||||||
|
** @param propertyName the property that may be listened on
|
||||||
|
** @return whether the property is being listened on
|
||||||
|
**/
|
||||||
|
public boolean hasListeners(String propertyName) {
|
||||||
|
return listeners.size() > 0 || propertyListeners.get(propertyName) != null;
|
||||||
|
}
|
||||||
|
}
|
74
libjava/java/beans/Visibility.java
Normal file
74
libjava/java/beans/Visibility.java
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
/* java.beans.Visibility
|
||||||
|
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Visibility is an interface a Bean may implement so that the environment
|
||||||
|
* can tell the Bean whether there is a GUI or not, and so that the Bean
|
||||||
|
* can tell the environment whether it needs one or can run without one.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Sun decided not to use standard Introspection patterns so that these
|
||||||
|
* methods did not get included when the Introspector made its sweep on
|
||||||
|
* the class.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.1
|
||||||
|
* @version 1.1.0, 29 Jul 1998
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface Visibility {
|
||||||
|
/**
|
||||||
|
* Tells whether the Bean can run without a GUI or not.
|
||||||
|
* @return false if Bean can run without a GUI, else true.
|
||||||
|
*/
|
||||||
|
public abstract boolean needsGui();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells whether Bean is trying not to use the GUI.
|
||||||
|
* If needsGui() is true, this method should always return false.
|
||||||
|
* @return true if definitely not using GUI, otherwise false.
|
||||||
|
*/
|
||||||
|
public abstract boolean avoidingGui();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells the Bean not to use GUI methods.
|
||||||
|
* If needsGUI() is false, then after this method is called,
|
||||||
|
* avoidingGui() should return true.
|
||||||
|
*/
|
||||||
|
public abstract void dontUseGui();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells the Bean it may use the GUI.
|
||||||
|
* The Bean is not required to use the GUI in this case, it is
|
||||||
|
* merely being <EM>permitted</EM> to use it. If needsGui() is
|
||||||
|
* false, avoidingGui() may return true or false after this method
|
||||||
|
* is called.
|
||||||
|
*/
|
||||||
|
public abstract void okToUseGui();
|
||||||
|
}
|
261
libjava/java/beans/beancontext/BeanContext.java
Normal file
261
libjava/java/beans/beancontext/BeanContext.java
Normal file
|
@ -0,0 +1,261 @@
|
||||||
|
/* java.beans.beancontext.BeanContext
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.beans.Visibility;
|
||||||
|
import java.beans.DesignMode;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Acts as a container for sub-beans and as a sub-bean,
|
||||||
|
* so that an entire hierarchy of beans can be made up of
|
||||||
|
* <code>BeanContext</code>s.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Since I can't sprinkle the <code>Collections</code> interface
|
||||||
|
* documentation with special information for <code>BeanContext</code>
|
||||||
|
* implementors, I'll have to document special requirements for
|
||||||
|
* implementors of those functions here.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <code><strong>add()</strong></code> or <code>addAll()</code>:
|
||||||
|
* <br>
|
||||||
|
* <OL>
|
||||||
|
* <LI>
|
||||||
|
* May add any <code>Object</code> into the hierarchy as well as a
|
||||||
|
* <code>BeanContextChild</code>, <code>BeanContext</code> or
|
||||||
|
* <code>BeanContextProxy</code> object.
|
||||||
|
* This way, any Bean can be in the hierarchy.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* Must synchronize on <code>BeanContext.globalHierarchyLock</code>.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* Don't add the <code>Object</code> if it's already there (only once
|
||||||
|
* per <code>BeanContext</code>).
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If it is a <code>BeanContextChild</code> implementor, call
|
||||||
|
* <code>setBeanContext()</code> on it. If it's a
|
||||||
|
* <code>BeanContextProxy</code> implementor, call
|
||||||
|
* <code>getBeanContextProxy().setBeanContext()</code> on it.
|
||||||
|
* If <code>setBeanContext()</code> vetoes the change, back out
|
||||||
|
* all changes so far and throw <code>IllegalStateException</code>.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If it (or its proxy) implements <code>Visibility</code>, call
|
||||||
|
* <code>dontUseGui()</code> or <code>okToUseGui()</code> on it,
|
||||||
|
* depending on whether you (the <code>BeanContext</code>) feel like
|
||||||
|
* allowing it to use the GUI or not.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If it implements <code>BeanContextChild</code> or
|
||||||
|
* <code>BeanContextProxy</code>, register yourself (the
|
||||||
|
* <code>BeanContext</code>) as both a
|
||||||
|
* <code>PropertyChangeListener</code> and
|
||||||
|
* <code>VetoableChangeListener</code> on the "beanContext"
|
||||||
|
* property (it may also add itself on any other properties it wishes
|
||||||
|
* to).
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If it is a listener or event source that you (the
|
||||||
|
* <code>BeanContext</code>) are interested in, you may register
|
||||||
|
* yourself to it or register it to you.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* Fire a <code>java.beans.beancontext.BeanContextMembershipEvent</code>
|
||||||
|
* before exiting. <code>addAll()</code> should wait until everything
|
||||||
|
* is done changing before firing the event (or events) so that if a
|
||||||
|
* failure occurs, the backing-out process can proceed without any
|
||||||
|
* events being fired at all.
|
||||||
|
* </LI>
|
||||||
|
* </OL>
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <code><strong>remove()</strong></code> or <code>removeAll()</code>:
|
||||||
|
* <br>
|
||||||
|
* <OL>
|
||||||
|
* <LI>
|
||||||
|
* Must synchronize on <code>BeanContext.globalHierarchyLock</code>.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If the specified <code>Object</code> is not a child of this
|
||||||
|
* <code>BeanContext</code>, just exit without performing any actions.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* Remove the <code>Object</code> from your collection of children.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If it is a <code>BeanContextChild</code> implementor, call
|
||||||
|
* <code>setBeanContext(null)</code> on it. If it's a
|
||||||
|
* <code>BeanContextProxy</code> implementor, call
|
||||||
|
* <code>getBeanContextProxy().setBeanContext(null)</code> on it.
|
||||||
|
* If <code>setBeanContext()</code> vetoes the change, back out
|
||||||
|
* all changes so far and throw <code>IllegalStateException</code>.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If you registered the <code>Object</code> to listen to you or
|
||||||
|
* registered yourself as a listener on the <code>Object</code> during
|
||||||
|
* <code>add()</code> or <code>addAll()</code>, undo the registration
|
||||||
|
* bycalling the appropriate <code>removeListener()</code> method.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* Fire a <code>java.beans.beancontext.BeanContextMembershipEvent</code>
|
||||||
|
* before exiting. <code>removeAll()</code> should wait until
|
||||||
|
* everything is done changing before firing the event (or events) so
|
||||||
|
* that if a failure occurs, the backing-out process can proceed
|
||||||
|
* without any events being fired at all.
|
||||||
|
* </LI>
|
||||||
|
* </OL>
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <code>addAll()</code>, <code>removeAll()</code>,
|
||||||
|
* <code>retainAll()</code> and <code>clear()</code> do not need to be
|
||||||
|
* implemented, but may be if so desired.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Similarly, <code>Visibility</code> and <code>DesignMode</code> methods
|
||||||
|
* should propagate changed values to children that implement interfaces
|
||||||
|
* of the same name.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* A hierarchy of beans is mainly useful so that different sets of beans
|
||||||
|
* can be established, each with their own set of resources.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContext
|
||||||
|
extends Collection, BeanContextChild, Visibility, DesignMode {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The global lock on changing any BeanContext hierarchy.
|
||||||
|
* It kinda sucks that there is only one lock, since there can be
|
||||||
|
* multiple hierarchies. Oh well, I didn't design, I just code.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Methods that must (or do) synchronize on the global lock:
|
||||||
|
* <BR>
|
||||||
|
* <UL>
|
||||||
|
* <LI>
|
||||||
|
* Implementors of <CODE>BeanContext.add()</CODE> and <code>addAll()</code>
|
||||||
|
* </LI>
|
||||||
|
* </UL>
|
||||||
|
* @fixme fill in the rest of the methods which use the global lock.
|
||||||
|
*/
|
||||||
|
public static final Object globalHierarchyLock = new Object();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiate a Bean using this Bean's <code>ClassLoader</code>
|
||||||
|
* and this <code>BeanContext</code> as the parent.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* This method exists mainly so that <code>BeanContext</code>
|
||||||
|
* implementations can perform extra actions on Beans that are
|
||||||
|
* created within them.
|
||||||
|
*
|
||||||
|
* @param beanName the name of the bean to instantiate
|
||||||
|
* @return the created Bean
|
||||||
|
*
|
||||||
|
* @see java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String)
|
||||||
|
* @see java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String,java.lang.BeanContext)
|
||||||
|
* @exception IOException if there is an I/O problem during
|
||||||
|
* instantiation.
|
||||||
|
* @exception ClassNotFoundException if a serialized Bean's class
|
||||||
|
* is not found.
|
||||||
|
*/
|
||||||
|
public Object instantiateChild(String beanName)
|
||||||
|
throws IOException,
|
||||||
|
ClassNotFoundException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a resource. The <code>BeanContext</code> will typically
|
||||||
|
* call <code>ClassLoader.getResource()</code>, but may do it any
|
||||||
|
* way it wants to. This allows a <code>BeanContext</code> to
|
||||||
|
* have its own set of resources separate from the rest of the
|
||||||
|
* system.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Beans should call this method on their parent rather than the
|
||||||
|
* associated <code>ClassLoader</code> method.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* I am assuming, but am not entirely sure, that if a
|
||||||
|
* <code>BeanContext</code> cannot find a resource, its
|
||||||
|
* responsibility is to call the <code>getResource</code> method
|
||||||
|
* of its parent <code>BeanContext</code>.
|
||||||
|
*
|
||||||
|
* @return a URL to the requested resource.
|
||||||
|
* @param resourceName the name of the resource requested.
|
||||||
|
* @param requestor a reference to the child requesting the resource.
|
||||||
|
* @see java.lang.ClassLoader#getResource(java.lang.String)
|
||||||
|
*/
|
||||||
|
public URL getResource(String resourceName, BeanContextChild requestor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a resource as a stream. The <code>BeanContext</code> will
|
||||||
|
* typically call <code>ClassLoader.getResourceAsStream()</code>,
|
||||||
|
* but may do it any way it wants to. This allows a
|
||||||
|
* <code>BeanContext</code>'s children to have their own set of
|
||||||
|
* resources separate from the rest of the system.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Beans should call this method on their parent rather than the
|
||||||
|
* associated <code>ClassLoader</code> method.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* I am assuming, but am not entirely sure, that if a
|
||||||
|
* <code>BeanContext</code> cannot find a resource, its
|
||||||
|
* responsibility is to call the <code>getResourceAsStream</code>
|
||||||
|
* method of its parent <code>BeanContext</code>.
|
||||||
|
*
|
||||||
|
* @return the requested resource as a stream.
|
||||||
|
* @param resourceName the name of the resource requested.
|
||||||
|
* @param requestor a reference to the child requesting the resource.
|
||||||
|
* @see java.lang.ClassLoader#getResourceAsStream(java.lang.String)
|
||||||
|
*/
|
||||||
|
public InputStream getResourceAsStream(String resourceName, BeanContextChild requestor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a listener on changes to the membership of this
|
||||||
|
* <code>BeanContext</code> object.
|
||||||
|
* @param listener the listener to add.
|
||||||
|
*/
|
||||||
|
public void addBeanContextMembershipListener(BeanContextMembershipListener listener);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a listener on changes to the membership of this
|
||||||
|
* <code>BeanContext</code> object.
|
||||||
|
* @param listener the listener to remove.
|
||||||
|
*/
|
||||||
|
public void removeBeanContextMembershipListener(BeanContextMembershipListener listener);
|
||||||
|
}
|
162
libjava/java/beans/beancontext/BeanContextChild.java
Normal file
162
libjava/java/beans/beancontext/BeanContextChild.java
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
/* java.beans.beancontext.BeanContextChild
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.VetoableChangeListener;
|
||||||
|
import java.beans.PropertyVetoException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Beans implement this to get information about the execution environment and its services and to be placed in the hierarchy.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* The difference between a <code>BeanContext</code> and a
|
||||||
|
* <code>BeanContextChild</code>, mainly, is that a
|
||||||
|
* <code>BeanContext</code> may be a parent.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <code>BeanContextChild</code> instances will be serialized at some
|
||||||
|
* point in their life, but you need to make sure your bean context does
|
||||||
|
* not contain a serializable reference (directly or indirectly) to the
|
||||||
|
* parent <code>BeanContext</code>, to any of the other
|
||||||
|
* <code>BeanContext</code>s in the tree, or to any resources obtained
|
||||||
|
* via the <code>BeanContextServices</code> interface. One way to do this
|
||||||
|
* is to mark any fields that contain such references as
|
||||||
|
* <code>transient</code>. Another way is to use a custom serializer.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If you do not do this, when the <code>BeanContext</code> is serialized,
|
||||||
|
* all the other <code>BeanContext</code>s and other unnecessary things
|
||||||
|
* will be serialized along with it.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Before dying, a <code>BeanContextChild</code> should call
|
||||||
|
* <code>getBeanContext().remove(this)</code> to detach from the
|
||||||
|
* hierarchy and exit cleanly.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
* @see java.beans.beancontext.BeanContext
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextChild {
|
||||||
|
/**
|
||||||
|
* Set the parent <code>BeanContext</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* This method is called from <code>BeanContext.add()</code> and
|
||||||
|
* should not be called directly.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* When this Object is being added to a new BeanContext or moved
|
||||||
|
* from an old one, a non-null value will be passed in.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* When this Object is being removed from the current
|
||||||
|
* <code>BeanContext</code>, <code>setBeanContext()</code> will
|
||||||
|
* receive the parameter <code>null</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* When being removed from the current <code>BeanContext</code>,
|
||||||
|
* it is the <code>BeanContextChild</code>'s responsibility to
|
||||||
|
* release all services it has obtained.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* This change should generate <code>PropertyChangeEvent</code>
|
||||||
|
* and <code>VetoableChangeEvent</code>s with the property name
|
||||||
|
* "beanContext". If the change is vetoed, it must re-throw the
|
||||||
|
* exception and not change anything. In this way, the parent
|
||||||
|
* <code>BeanContextChild</code>, who has registered himself with
|
||||||
|
* you, will have a chance to remove this child from its
|
||||||
|
* collection.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If the Bean does not wish to change the parent or be removed
|
||||||
|
* from one, it may throw the <code>PropertyVetoException</code>.
|
||||||
|
* If you veto a <code>setBeanContext(null)</code> call, then you
|
||||||
|
* should try your hardest to remedy whatever problem is keeping
|
||||||
|
* you from being removed from the <code>BeanContext</code> so
|
||||||
|
* that you can <em>not</em> veto it the next time.
|
||||||
|
* Otherwise, nasty pathological recursion stuff could occur in
|
||||||
|
* certain situations.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If you do veto the change, you must first back out any changes
|
||||||
|
* you made prior to the veto. Best not to make any such changes
|
||||||
|
* prior to the veto in the first place.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* This method is called from <code>BeanContext.add()</code> and
|
||||||
|
* should not be called directly.
|
||||||
|
*
|
||||||
|
* @param parent the new parent for the <code>BeanContextChild</code>,
|
||||||
|
* or <code>null</code> to signify removal from a tree.
|
||||||
|
* @exception PropertyVetoException if the
|
||||||
|
* <code>BeanContextChild</code> implementor does not
|
||||||
|
* wish to have its parent changed.
|
||||||
|
*/
|
||||||
|
public void setBeanContext(BeanContext parent)
|
||||||
|
throws PropertyVetoException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the parent <code>BeanContext</code>.
|
||||||
|
* @return the parent <code>BeanContext</code>.
|
||||||
|
*/
|
||||||
|
public BeanContext getBeanContext();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a listener that will be notified when a specific property changes.
|
||||||
|
* @param prop the name of the property to listen on
|
||||||
|
* @param listener the listener to listen on the property.
|
||||||
|
*/
|
||||||
|
public void addPropertyChangeListener(String prop, PropertyChangeListener listener);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a listener to a certain property.
|
||||||
|
* @param prop the name of the property being listened on
|
||||||
|
* @param listener the listener listening on the property.
|
||||||
|
*/
|
||||||
|
public void removePropertyChangeListener(String prop, PropertyChangeListener listener);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a listener that will be notified when a specific property
|
||||||
|
* change is requested (a PropertyVetoException may be thrown) as
|
||||||
|
* well as after the change is successfully made.
|
||||||
|
*
|
||||||
|
* @param prop the name of the property to listen on
|
||||||
|
* @param listener the listener to listen on the property.
|
||||||
|
*/
|
||||||
|
public void addVetoableChangeListener(String prop, VetoableChangeListener listener);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a listener to a certain property.
|
||||||
|
* @param prop the name of the property being listened on
|
||||||
|
* @param listener the listener listening on the property.
|
||||||
|
*/
|
||||||
|
public void removeVetoableChangeListener(String prop, VetoableChangeListener listener);
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* java.beans.beancontext.BeanContextChildComponentProxy
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface for <code>BeanContextChild</code>s which wish to associate an
|
||||||
|
* AWT component with them. The proxy is provided because the
|
||||||
|
* <code>addPropertyChangeListener()</code> method would conflict with
|
||||||
|
* <code>Component</code> if you tried to extend.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextChildComponentProxy {
|
||||||
|
/**
|
||||||
|
* Get the <code>Component</code> associated with this <code>BeanContextChild</code>.
|
||||||
|
* @return the <code>Component</code> associated with this
|
||||||
|
* <code>BeanContextChild</code>.
|
||||||
|
*/
|
||||||
|
public Component getComponent();
|
||||||
|
}
|
356
libjava/java/beans/beancontext/BeanContextChildSupport.java
Normal file
356
libjava/java/beans/beancontext/BeanContextChildSupport.java
Normal file
|
@ -0,0 +1,356 @@
|
||||||
|
/* java.beans.beancontext.BeanContextChildSupport
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.VetoableChangeListener;
|
||||||
|
import java.beans.PropertyVetoException;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeSupport;
|
||||||
|
import java.beans.VetoableChangeSupport;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Support for creating a <code>BeanContextChild</code>.
|
||||||
|
* This class contains the most common implementations of the methods in
|
||||||
|
* the <code>BeanContextChild</code>
|
||||||
|
*
|
||||||
|
* @specnote This class is not very well specified. I had to "fill in the
|
||||||
|
* blanks" in most places with what I thought was reasonable
|
||||||
|
* behavior. If there are problems, let me know.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
* @see java.beans.beancontext.BeanContextChild
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BeanContextChildSupport implements BeanContextChild, BeanContextServicesListener, Serializable {
|
||||||
|
/**
|
||||||
|
* The peer on which to perform <code>set</code> actions.
|
||||||
|
* This is here so that this class can be used as a peer.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* When extending this class, this variable will be set to
|
||||||
|
* <code>this</code>.
|
||||||
|
*/
|
||||||
|
public BeanContextChild beanContextChildPeer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parent <code>BeanContext</code>.
|
||||||
|
*/
|
||||||
|
protected transient BeanContext beanContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If <code>setBeanContext()</code> was vetoed once before, this
|
||||||
|
* is set to <code>true</code> so that the next time, vetoes will
|
||||||
|
* be ignored.
|
||||||
|
*/
|
||||||
|
protected transient boolean rejectedSetBCOnce;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listeners are registered here and events are fired through here.
|
||||||
|
*/
|
||||||
|
protected PropertyChangeSupport pcSupport;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listeners are registered here and events are fired through here.
|
||||||
|
*/
|
||||||
|
protected VetoableChangeSupport vcSupport;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new <code>BeanContextChildSupport</code> with itself as the peer.
|
||||||
|
* This is meant to be used when you subclass
|
||||||
|
* <code>BeanContextChildSupport</code> to create your child.
|
||||||
|
*/
|
||||||
|
public BeanContextChildSupport() {
|
||||||
|
this(null);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new <code>BeanContextChildSupport</code> with the specified peer.
|
||||||
|
* @param peer the peer to use, or <code>null</code> to specify
|
||||||
|
* <code>this</code>.
|
||||||
|
*/
|
||||||
|
public BeanContextChildSupport(BeanContextChild peer) {
|
||||||
|
if(peer == null) {
|
||||||
|
peer = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
beanContextChildPeer = peer;
|
||||||
|
pcSupport = new PropertyChangeSupport(peer);
|
||||||
|
vcSupport = new VetoableChangeSupport(peer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the parent <code>BeanContext</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* When this Object is being added to a new BeanContext or moved
|
||||||
|
* from an old one, a non-null value will be passed in.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* When this Object is being removed from the current
|
||||||
|
* <code>BeanContext</code>, <code>setBeanContext()</code> will
|
||||||
|
* receive the parameter <code>null</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Order of events:
|
||||||
|
* <OL>
|
||||||
|
* <LI>
|
||||||
|
* If the new <code>BeanContext</code> is the same as the old
|
||||||
|
* one, nothing happens.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If the change has not been rejected or vetoed before, call
|
||||||
|
* <code>validatePendingSetBeanContext()</code>. If this call
|
||||||
|
* returns <code>false</code>, the change is rejected and a
|
||||||
|
* <code>PropertyVetoException</code> is thrown.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* If the change has not been rejected or vetoed before,
|
||||||
|
* <code>VetoableChangeEvent</code>s are fired with the name
|
||||||
|
* <code>"beanContext"</code>, using the
|
||||||
|
* <code>fireVetoableChange()</code> method. If a veto
|
||||||
|
* occurs, reversion events are fired using the same method,
|
||||||
|
* the change is rejected, and the veto is rethrown.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* <code>releaseBeanContextResources()</code> is called.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* The change is made.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* <code>PropertyChangeEvent</code>s are fired using the
|
||||||
|
* <code>firePropertyChange()</code> method.
|
||||||
|
* </LI>
|
||||||
|
* <LI>
|
||||||
|
* <code>initializeBeanContextResources()</code> is called.
|
||||||
|
* </LI>
|
||||||
|
* </OL>
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* @param newBeanContext the new parent for the
|
||||||
|
* <code>BeanContextChild</code>, or <code>null</code> to
|
||||||
|
* signify removal from a tree.
|
||||||
|
* @exception PropertyVetoException if the
|
||||||
|
* <code>BeanContextChild</code> implementor does not
|
||||||
|
* wish to have its parent changed.
|
||||||
|
*/
|
||||||
|
public void setBeanContext(BeanContext newBeanContext)
|
||||||
|
throws PropertyVetoException {
|
||||||
|
synchronized(beanContextChildPeer) {
|
||||||
|
if(newBeanContext == beanContext)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!rejectedSetBCOnce) {
|
||||||
|
if(!validatePendingSetBeanContext(newBeanContext)) {
|
||||||
|
rejectedSetBCOnce = true;
|
||||||
|
throw new PropertyVetoException("validatePendingSetBeanContext() rejected change",
|
||||||
|
new PropertyChangeEvent(beanContextChildPeer, "beanContext", beanContext, newBeanContext));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
fireVetoableChange("beanContext", beanContext, newBeanContext);
|
||||||
|
} catch(PropertyVetoException e) {
|
||||||
|
rejectedSetBCOnce = true;
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
releaseBeanContextResources();
|
||||||
|
|
||||||
|
beanContext = newBeanContext;
|
||||||
|
rejectedSetBCOnce = false;
|
||||||
|
|
||||||
|
firePropertyChange("beanContext", beanContext, newBeanContext);
|
||||||
|
|
||||||
|
initializeBeanContextResources();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the parent <code>BeanContext</code>.
|
||||||
|
* @return the parent <code>BeanContext</code>.
|
||||||
|
*/
|
||||||
|
public BeanContext getBeanContext() {
|
||||||
|
return beanContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the peer (or <code>this</code> if there is no peer).
|
||||||
|
* @return the peer, or <code>this</code> if there is no peer.
|
||||||
|
*/
|
||||||
|
public BeanContextChild getBeanContextChildPeer() {
|
||||||
|
return beanContextChildPeer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether there is a peer.
|
||||||
|
* This is true iff <code>getBeanContextChildPeer() == this</code>.
|
||||||
|
* @return whether there is a peer.
|
||||||
|
*/
|
||||||
|
public boolean isDelegated() {
|
||||||
|
return beanContextChildPeer == this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a listener that will be notified when a specific property changes.
|
||||||
|
* @param propertyName the name of the property to listen on.
|
||||||
|
* @param listener the listener to listen on the property.
|
||||||
|
*/
|
||||||
|
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
|
||||||
|
pcSupport.addPropertyChangeListener(propertyName, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a listener to a certain property.
|
||||||
|
*
|
||||||
|
* @param propertyName the name of the property being listened on.
|
||||||
|
* @param listener the listener listening on the property.
|
||||||
|
*/
|
||||||
|
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
|
||||||
|
pcSupport.removePropertyChangeListener(propertyName, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a listener that will be notified when a specific property
|
||||||
|
* change is requested (a PropertyVetoException may be thrown) as
|
||||||
|
* well as after the change is successfully made.
|
||||||
|
*
|
||||||
|
* @param propertyName the name of the property to listen on.
|
||||||
|
* @param listener the listener to listen on the property.
|
||||||
|
*/
|
||||||
|
public void addVetoableChangeListener(String propertyName, VetoableChangeListener listener) {
|
||||||
|
vcSupport.addVetoableChangeListener(propertyName, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a listener to a certain property.
|
||||||
|
*
|
||||||
|
* @param propertyName the name of the property being listened on
|
||||||
|
* @param listener the listener listening on the property.
|
||||||
|
*/
|
||||||
|
public void removeVetoableChangeListener(String propertyName, VetoableChangeListener listener) {
|
||||||
|
vcSupport.removeVetoableChangeListener(propertyName, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire a property change.
|
||||||
|
*
|
||||||
|
* @param propertyName the name of the property that changed
|
||||||
|
* @param oldVal the old value of the property
|
||||||
|
* @param newVal the new value of the property
|
||||||
|
*/
|
||||||
|
public void firePropertyChange(String propertyName, Object oldVal, Object newVal) {
|
||||||
|
pcSupport.firePropertyChange(propertyName, oldVal, newVal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire a vetoable property change.
|
||||||
|
*
|
||||||
|
* @param propertyName the name of the property that changed
|
||||||
|
* @param oldVal the old value of the property
|
||||||
|
* @param newVal the new value of the property
|
||||||
|
* @exception PropertyVetoException if the change is vetoed.
|
||||||
|
*/
|
||||||
|
public void fireVetoableChange(String propertyName, Object oldVal, Object newVal)
|
||||||
|
throws PropertyVetoException {
|
||||||
|
vcSupport.fireVetoableChange(propertyName, oldVal, newVal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by <code>BeanContextServices.revokeService()</code> to indicate that a service has been revoked.
|
||||||
|
* If you have a reference to such a service, it should be
|
||||||
|
* discarded and may no longer function properly.
|
||||||
|
* <code>getService()</code> will no longer work on the specified
|
||||||
|
* service class after this event has been fired.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <EM>This method is meant to be overriden.</EM>
|
||||||
|
* <code>BeanContextChildSupport</code>'s implementation does
|
||||||
|
* nothing.
|
||||||
|
*
|
||||||
|
* @param event the service revoked event.
|
||||||
|
* @see java.beans.beancontext.BeanContextServices#revokeService(java.lang.Class,java.beans.beancontext.BeanContextServiceProvider,boolean)
|
||||||
|
*/
|
||||||
|
public void serviceRevoked(BeanContextServiceRevokedEvent event) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by <code>BeanContextServices</code> whenever a service is made available.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <EM>This method is meant to be overriden.</EM>
|
||||||
|
* <code>BeanContextChildSupport</code>'s implementation does
|
||||||
|
* nothing.
|
||||||
|
*
|
||||||
|
* @param event the service revoked event, with useful information
|
||||||
|
* about the new service.
|
||||||
|
*/
|
||||||
|
public void serviceAvailable(BeanContextServiceAvailableEvent event) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by <code>setBeanContext()</code> to determine whether the set should be rejected.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <EM>This method is meant to be overriden.</EM>
|
||||||
|
* <code>BeanContextChildSupport</code>'s implementation simply
|
||||||
|
* returns <code>true</code>.
|
||||||
|
*
|
||||||
|
* @param newBeanContext the new parent.
|
||||||
|
* @return whether to allow the parent to be changed to the new
|
||||||
|
* value.
|
||||||
|
*/
|
||||||
|
public boolean validatePendingSetBeanContext(BeanContext newBeanContext) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by <code>setBeanContext()</code> to release resources of a what will soon no longer be the parent.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <EM>This method is meant to be overriden.</EM>
|
||||||
|
* <code>BeanContextChildSupport</code>'s implementation does
|
||||||
|
* nothing.
|
||||||
|
*/
|
||||||
|
protected void releaseBeanContextResources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by <code>setBeanContext()</code> to grab resources when the parent has been set.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* <EM>This method is meant to be overriden.</EM>
|
||||||
|
* <code>BeanContextChildSupport</code>'s implementation does
|
||||||
|
* nothing.
|
||||||
|
*/
|
||||||
|
protected void initializeBeanContextResources() {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
/* java.beans.beancontext.BeanContextContainerProxy
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.awt.Container;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface for <code>BeanContext</code>s which wish to associate an
|
||||||
|
* AWT container with them. The proxy is provided because the
|
||||||
|
* <code>addPropertyChangeListener()</code> and <code>add()</code> methods
|
||||||
|
* would conflict with <code>Component</code> and <code>Container</code>
|
||||||
|
* if you tried to extend.
|
||||||
|
*
|
||||||
|
* @specnote It is unclear whether anything besides <code>BeanContext</code>s
|
||||||
|
* are allowed to implement this interface.
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextContainerProxy {
|
||||||
|
/**
|
||||||
|
* Get the <code>Container</code> associated with this <code>BeanContext</code>.
|
||||||
|
* @return the <code>Container</code> associated with this
|
||||||
|
* <code>BeanContext</code>.
|
||||||
|
*/
|
||||||
|
public Container getContainer();
|
||||||
|
}
|
91
libjava/java/beans/beancontext/BeanContextEvent.java
Normal file
91
libjava/java/beans/beancontext/BeanContextEvent.java
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
/* java.beans.beancontext.BeanContextEvent
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.util.EventObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic superclass for events fired by <code>BeanContext</code>s.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public abstract class BeanContextEvent extends EventObject {
|
||||||
|
/**
|
||||||
|
* The <code>BeanContext</code> that most recently passed this
|
||||||
|
* event on.
|
||||||
|
*/
|
||||||
|
protected BeanContext propagatedFrom;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new event, from the specified <code>BeanContext</code>.
|
||||||
|
* <code>propagatedFrom</code> will be initialized to
|
||||||
|
* <code>null</code>.
|
||||||
|
*
|
||||||
|
* @param source the source of the event.
|
||||||
|
*/
|
||||||
|
protected BeanContextEvent(BeanContext source) {
|
||||||
|
super(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the <code>BeanContext</code> that originated this event.
|
||||||
|
* @return the originator of this event.
|
||||||
|
*/
|
||||||
|
public BeanContext getBeanContext() {
|
||||||
|
return (BeanContext)getSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the most recent propagator of this event.
|
||||||
|
* If this value is <code>null</code>, you have received the event
|
||||||
|
* straight from the source.
|
||||||
|
*
|
||||||
|
* @return the most recent propagator of this event.
|
||||||
|
*/
|
||||||
|
public BeanContext getPropagatedFrom() {
|
||||||
|
return propagatedFrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell whether this event has been propagated.
|
||||||
|
* @return <code>true</code> iff <code>getPropagatedFrom() != null</code>.
|
||||||
|
*/
|
||||||
|
public boolean isPropagated() {
|
||||||
|
return propagatedFrom != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the most recent propagator of this event.
|
||||||
|
* @param propagator the most recent propagator of this event.
|
||||||
|
*/
|
||||||
|
public void setPropagatedFrom(BeanContext propagator) {
|
||||||
|
propagatedFrom = propagator;
|
||||||
|
}
|
||||||
|
}
|
102
libjava/java/beans/beancontext/BeanContextMembershipEvent.java
Normal file
102
libjava/java/beans/beancontext/BeanContextMembershipEvent.java
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
/* java.beans.beancontext.BeanContextMembershipEvent
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event fired when children are added to or removed from a <code>BeanContext</code>.
|
||||||
|
* Whether they were added or removed depends entirely on which method
|
||||||
|
* of the listener interface was called.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
* @see java.beans.beancontext.BeanContextMembershipListener
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BeanContextMembershipEvent extends BeanContextEvent {
|
||||||
|
/**
|
||||||
|
* The children that were added or removed.
|
||||||
|
*/
|
||||||
|
protected Collection children;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new membership event.
|
||||||
|
* @param context the event source.
|
||||||
|
* @param children the children added to or removed from the source.
|
||||||
|
*/
|
||||||
|
public BeanContextMembershipEvent(BeanContext context, Collection children) {
|
||||||
|
super(context);
|
||||||
|
this.children = children;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new membership event.
|
||||||
|
* @param context the event source.
|
||||||
|
* @param children the children added to or removed from the source.
|
||||||
|
*/
|
||||||
|
public BeanContextMembershipEvent(BeanContext context, Object[] children) {
|
||||||
|
super(context);
|
||||||
|
this.children = Arrays.asList(children);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of children removed or added.
|
||||||
|
* @return the number of children removed or added.
|
||||||
|
*/
|
||||||
|
public int size() {
|
||||||
|
return children.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An iterator that will step through all the children.
|
||||||
|
* @return an iterator over all the children.
|
||||||
|
*/
|
||||||
|
public Iterator iterator() {
|
||||||
|
return children.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An array of the children.
|
||||||
|
* @return an array of the children.
|
||||||
|
*/
|
||||||
|
public Object[] toArray() {
|
||||||
|
return children.toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell whether the <code>Object</code> is one of the children added or removed.
|
||||||
|
* @param child the child to check.
|
||||||
|
* @return whether the <code>Object</code> is added or removed.
|
||||||
|
*/
|
||||||
|
public boolean contains(Object child) {
|
||||||
|
return children.contains(child);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
/* java.beans.beancontext.BeanContextMembershipListener
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.util.EventListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the interface to which <code>BeanContextMembershipEvent</code>s are sent.
|
||||||
|
* This happens when children are added to or removed from a
|
||||||
|
* <code>BeanContext</code>.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextMembershipListener extends EventListener {
|
||||||
|
/**
|
||||||
|
* When beans are added to a <code>BeanContext</code>,
|
||||||
|
* this method is called to fire the event.
|
||||||
|
*
|
||||||
|
* @param event the event, including which children were added.
|
||||||
|
* @see java.beans.beancontext.BeanContext#add(java.lang.Object)
|
||||||
|
*/
|
||||||
|
public void childrenAdded(BeanContextMembershipEvent event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When beans are removed from a <code>BeanContext</code>,
|
||||||
|
* this method is called to fire the event.
|
||||||
|
*
|
||||||
|
* @param event the event, including which children were removed.
|
||||||
|
* @see java.beans.beancontext.BeanContext#remove(java.lang.Object)
|
||||||
|
*/
|
||||||
|
public void childrenRemoved(BeanContextMembershipEvent event);
|
||||||
|
}
|
54
libjava/java/beans/beancontext/BeanContextProxy.java
Normal file
54
libjava/java/beans/beancontext/BeanContextProxy.java
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/* java.beans.beancontext.BeanContextProxy
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Beans that wish to have a <code>BeanContextChild</code> or <code>BeanContext</code> associated with them
|
||||||
|
* but do not wish to implement those interfaces directly, can implement this interface.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Don't shoot yourself in the foot: if you already implement
|
||||||
|
* <code>BeanContextChild</code>, directly or indirectly, the whole
|
||||||
|
* workings of this package will be unpredictable because it is
|
||||||
|
* indeterminate as to whether the <code>BeanContextChild</code> is used
|
||||||
|
* in preference to its proxy or vice versa.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextProxy {
|
||||||
|
/**
|
||||||
|
* Return the <code>BeanContextChild</code> associated with this
|
||||||
|
* <code>Object</code>.
|
||||||
|
*
|
||||||
|
* @return the <code>BeanContextChild</code> associated with this
|
||||||
|
* <code>Object</code>.
|
||||||
|
*/
|
||||||
|
public BeanContextChild getBeanContextProxy();
|
||||||
|
}
|
|
@ -0,0 +1,84 @@
|
||||||
|
/* java.beans.beancontext.BeanContextServiceAvailableEvent
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event fired when new services become available through a <code>BeanContextServices</code>.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
* @see java.beans.beancontext.BeanContextServicesListener
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BeanContextServiceAvailableEvent extends BeanContextEvent {
|
||||||
|
/**
|
||||||
|
* The <code>Class</code> representing the service which is now
|
||||||
|
* available.
|
||||||
|
*/
|
||||||
|
protected Class serviceClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new service available event.
|
||||||
|
* @param services the <code>BeanContextServices</code> through
|
||||||
|
* which the service is available. This is also the source
|
||||||
|
* of the event.
|
||||||
|
* @param serviceClass the service class that is now available.
|
||||||
|
*/
|
||||||
|
public BeanContextServiceAvailableEvent(BeanContextServices services, Class serviceClass) {
|
||||||
|
super(services);
|
||||||
|
this.serviceClass = serviceClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current service selectors of the service class.
|
||||||
|
* This is identical to <code>getSourceAsBeanContextServices().getCurrentServiceSelectors(getServiceClass())</code>
|
||||||
|
* @return the current service selectors of the service class.
|
||||||
|
*/
|
||||||
|
public Iterator getCurrentServiceSelectors() {
|
||||||
|
return getSourceAsBeanContextServices().getCurrentServiceSelectors(serviceClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the newly available service class.
|
||||||
|
* @return the service class.
|
||||||
|
*/
|
||||||
|
public Class getServiceClass() {
|
||||||
|
return serviceClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the <code>BeanContextServices</code> through which the new service is available.
|
||||||
|
* @return the <code>BeanContextServices</code> through which the
|
||||||
|
* new service is available.
|
||||||
|
*/
|
||||||
|
public BeanContextServices getSourceAsBeanContextServices() {
|
||||||
|
return (BeanContextServices)getSource();
|
||||||
|
}
|
||||||
|
}
|
129
libjava/java/beans/beancontext/BeanContextServiceProvider.java
Normal file
129
libjava/java/beans/beancontext/BeanContextServiceProvider.java
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
/* java.beans.beancontext.BeanContextServiceProvider
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An actual factory for services.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* It is the <code>BeanContextServiceProvider</code>'s responsibility to
|
||||||
|
* register itself with whatever <code>BeanContextServices</code> object
|
||||||
|
* it wishes to provide services through using the
|
||||||
|
* <code>addService()</code> method.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If for some reason it can no longer provide services for a particular
|
||||||
|
* class, this class must invoke
|
||||||
|
* <code>BeanContextServices.revokeService(serviceClass,this,true)</code>
|
||||||
|
* for all the places it has registered the service.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextServiceProvider {
|
||||||
|
/**
|
||||||
|
* Get a service.
|
||||||
|
* Called from <code>BeanContextServices.getService().
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If the requested service class is not available, or if this
|
||||||
|
* <code>BeanContextServiceProvider</code> chooses not honor the
|
||||||
|
* request for some reason, then this method will return
|
||||||
|
* <code>null</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* This method may throw unchecked exceptions, so watch out.
|
||||||
|
*
|
||||||
|
* @param services the <code>BeanContextServices</code> that wants
|
||||||
|
* to get the service. Only weak references to this will
|
||||||
|
* be retained, and it will never be changed, only queried
|
||||||
|
* in a read-only manner.
|
||||||
|
* @param requestor the actual requestor of the service. Only
|
||||||
|
* weak references to this will be retained, and it will
|
||||||
|
* never be changed, only queried in a read-only manner.
|
||||||
|
* @param serviceClass the <code>Class</code> of the service being
|
||||||
|
* requested.
|
||||||
|
* @param serviceSelector a parameter to customize the service
|
||||||
|
* returned with.
|
||||||
|
* @return an instance of <code>serviceClass</code> (such that
|
||||||
|
* <code>instanceof</code> serviceClass is true), or
|
||||||
|
* <code>null</code>.
|
||||||
|
* @see java.beans.beancontext.BeanContextServices#getService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Class,java.lang.Object,java.beans.beancontext.BeanContextServiceRevokedListener)
|
||||||
|
*/
|
||||||
|
public Object getService(BeanContextServices services, Object requestor, Class serviceClass, Object serviceSelector);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release the service.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Called by <code>BeanContextServices.releaseService()</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* Most <code>BeanContextServiceProvider</code>s won't have to do
|
||||||
|
* anything here.
|
||||||
|
*
|
||||||
|
* @param services the <code>BeanContextServices</code> that wants
|
||||||
|
* to release the service. Only weak references to this will
|
||||||
|
* be retained, and it will never be changed, only queried
|
||||||
|
* in a read-only manner.
|
||||||
|
* @param requestor the original requestor of the service.
|
||||||
|
* @param service the service to relinquish
|
||||||
|
* @see java.beans.beancontext.BeanContextServices#releaseService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Object)
|
||||||
|
*/
|
||||||
|
public void releaseService(BeanContextServices services, Object requestor, Object service);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of valid service selectors for the specified service class.
|
||||||
|
* This method is called from
|
||||||
|
* <code>BeanContextServices.getCurrentServiceSelectors()</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If the specified service class does not have a finite number of
|
||||||
|
* valid service selectors, it should return <code>null</code>.
|
||||||
|
* If it takes a general <code>Integer</code> parameter, for
|
||||||
|
* example, you may as well return <code>null</code> or the poor
|
||||||
|
* soul who called this method will be iterating all day.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If it has no valid service selectors, it should still return an empty
|
||||||
|
* <code>Iterator</code>.
|
||||||
|
*
|
||||||
|
* @param services the <code>BeanContextServices</code> that wants
|
||||||
|
* to get the service selectors. Only weak references to this will
|
||||||
|
* be retained, and it will never be changed, only queried
|
||||||
|
* in a read-only manner.
|
||||||
|
* @param serviceClass the service class to get selectors for.
|
||||||
|
* @return a list of valid service selectors for the service
|
||||||
|
* class, or <code>null</code>.
|
||||||
|
* @see java.beans.beancontext.BeanContextServices#getCurrentServiceSelectors(java.lang.Class)
|
||||||
|
*/
|
||||||
|
public Iterator getCurrentServiceSelectors(BeanContextServices services, Class serviceClass);
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* java.beans.beancontext.BeanContextServiceProviderBeanInfo
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.beans.BeanInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code>BeanContextServiceProvider</code>s implement this to provide information about all of the services they provide.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* This is apparently so that you can import a bunch of services into a
|
||||||
|
* RAD tool and it will know about all of them and export them to the
|
||||||
|
* user in a readable manner.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
public interface BeanContextServiceProviderBeanInfo extends BeanInfo {
|
||||||
|
/**
|
||||||
|
* Get <code>BeanInfo</code>s for all of the service classes of this <code>BeanInfoServiceProvider</code>.
|
||||||
|
* @return <code>BeanInfo</code>s for all provided service classes.
|
||||||
|
*/
|
||||||
|
public BeanInfo[] getServicesBeanInfo();
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
/* java.beans.beancontext.BeanContextServiceRevokedEvent
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event fired when services are revoked from a <code>BeanContextServices</code>.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
* @see java.beans.beancontext.BeanContextServiceRevokedListener
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BeanContextServiceRevokedEvent extends BeanContextEvent {
|
||||||
|
/**
|
||||||
|
* The <code>Class</code> representing the service which is now
|
||||||
|
* available.
|
||||||
|
*/
|
||||||
|
protected Class serviceClass;
|
||||||
|
private boolean revokeNow;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new service revoked event.
|
||||||
|
* @param services the <code>BeanContextServices</code> through
|
||||||
|
* which the service was available. This is also the source
|
||||||
|
* of the event.
|
||||||
|
* @param serviceClass the service class that is now revoked.
|
||||||
|
* @param revokeNow whether the revocation is immediate for all
|
||||||
|
* classes or just a suggestion.
|
||||||
|
*/
|
||||||
|
public BeanContextServiceRevokedEvent(BeanContextServices services, Class serviceClass, boolean revokeNow) {
|
||||||
|
super(services);
|
||||||
|
this.serviceClass = serviceClass;
|
||||||
|
this.revokeNow = revokeNow;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the revoked service class.
|
||||||
|
* @return the service class.
|
||||||
|
*/
|
||||||
|
public Class getServiceClass() {
|
||||||
|
return serviceClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell whether the revoked service class is the same as the specified class.
|
||||||
|
* Identical to <code>getServiceClass().equals(c)</code>.
|
||||||
|
* @param c the class to compare.
|
||||||
|
* @return whether the clases are equal.
|
||||||
|
*/
|
||||||
|
public boolean isServiceClass(Class c) {
|
||||||
|
return serviceClass.equals(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the <code>BeanContextServices</code> through which the service was available.
|
||||||
|
* @return the <code>BeanContextServices</code> through which the
|
||||||
|
* service was available.
|
||||||
|
*/
|
||||||
|
public BeanContextServices getSourceAsBeanContextServices() {
|
||||||
|
return (BeanContextServices)getSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell whether current instances of the revoked service are usable or not.
|
||||||
|
* This is determined by whether the service was revoked
|
||||||
|
* immediately.
|
||||||
|
*
|
||||||
|
* @return whether current instances of the revoked service are
|
||||||
|
* usable.
|
||||||
|
*/
|
||||||
|
public boolean isCurrentServiceInvalidNow() {
|
||||||
|
return revokeNow;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
/* java.beans.beancontext.BeanContextServiceRevokedListener
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.util.EventListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listens for service revoke events.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextServiceRevokedListener extends EventListener {
|
||||||
|
/**
|
||||||
|
* Called by <code>BeanContextServices.revokeService()</code> to indicate that a service has been revoked.
|
||||||
|
* If you have a reference to such a service, it should be
|
||||||
|
* discarded and may no longer function properly.
|
||||||
|
* <code>getService()</code> will no longer work on the specified
|
||||||
|
* service class after this event has been fired.
|
||||||
|
*
|
||||||
|
* @param event the service revoked event.
|
||||||
|
* @see java.beans.beancontext.BeanContextServices#revokeService(java.lang.Class,java.beans.beancontext.BeanContextServiceProvider,boolean)
|
||||||
|
*/
|
||||||
|
public void serviceRevoked(BeanContextServiceRevokedEvent event);
|
||||||
|
}
|
195
libjava/java/beans/beancontext/BeanContextServices.java
Normal file
195
libjava/java/beans/beancontext/BeanContextServices.java
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
/* java.beans.beancontext.BeanContextServices
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows a <code>BeanContext</code> to provide services to its children.
|
||||||
|
*
|
||||||
|
* @specnote it is unclear whether a <code>BeanContextServices</code>
|
||||||
|
* should delegate unhandled requests to parents. I assume so.
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextServices extends BeanContext, BeanContextServicesListener {
|
||||||
|
/**
|
||||||
|
* Register a service to make it available to others.
|
||||||
|
* This class may refuse to add the service based on whatever
|
||||||
|
* information it can gather, including whether the service
|
||||||
|
* provider is trusted.
|
||||||
|
*
|
||||||
|
* @param serviceClass the service class.
|
||||||
|
* @param provider the factory that will actually provide the service.
|
||||||
|
* @return whether the service was added or not.
|
||||||
|
*/
|
||||||
|
public boolean addService(Class serviceClass, BeanContextServiceProvider provider);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make it so that no one else can use this service.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If <code>revokeNow</code> is <code>false</code>, the only
|
||||||
|
* effect of this method is to make all subsequent calls to
|
||||||
|
* <code>getService()</code> on this service class fail.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If it is <code>true</code>, a message is also sent out to all
|
||||||
|
* listeners on the service and all references to it are released.
|
||||||
|
*
|
||||||
|
* @param serviceClass the service class to revoke.
|
||||||
|
* @param provider the service provider providing the service class.
|
||||||
|
* @param revokeNow whether to release all current references to
|
||||||
|
* the service.
|
||||||
|
*/
|
||||||
|
public void revokeService(Class serviceClass, BeanContextServiceProvider provider, boolean revokeNow);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release your copy of this service.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If all copies of the service's class have been relinquished by
|
||||||
|
* the requestor, the <code>BeanContextServiceRevokedListener</code>
|
||||||
|
* previously registered by <code>getService()</code> will be
|
||||||
|
* unregistered.
|
||||||
|
*
|
||||||
|
* @param requestorChild the original <code>BeanContextChild</code>
|
||||||
|
* requesting the service.
|
||||||
|
* @param requestor the original requestor of the service.
|
||||||
|
* @param service the service to relinquish
|
||||||
|
* @see #getService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Class,java.lang.Object,java.beans.beancontext.BeanContextServiceRevokedListener)
|
||||||
|
*/
|
||||||
|
public void releaseService(BeanContextChild requestorChild, Object requestor, Object service);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a service from this <code>BeanContextServices</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* The specified listener will be registered to receive a
|
||||||
|
* revocation notice for the specified serviceClass. One
|
||||||
|
* notification per service class per requestor object will be
|
||||||
|
* sent.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* The listener will be unregistered when all services that were
|
||||||
|
* obtained by that requestor for that service class are released.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If the requested service class is not available, or if this
|
||||||
|
* <code>BeanContextServices</code> object chooses not honor the
|
||||||
|
* request because the service class has been revoked or for some
|
||||||
|
* other reason, then this method will return <code>null</code>.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* This method may throw unchecked exceptions, so watch out.
|
||||||
|
*
|
||||||
|
* @specnote it is not specified what happens when two subsequent
|
||||||
|
* calls are made to <code>getService()</code> with the
|
||||||
|
* same requestor object and service class but different
|
||||||
|
* listeners. Which listener is to be notified?
|
||||||
|
*
|
||||||
|
* @param requestorChild the <code>BeanContextChild</code>
|
||||||
|
* associated with the requestor. Typically this will be
|
||||||
|
* the same as the requestor itself, but since any
|
||||||
|
* <code>Object</code>, even one outside the hierarchy, may
|
||||||
|
* make a request, this parameter is necessary. Only weak
|
||||||
|
* references to this will be retained, and it will never
|
||||||
|
* be changed, only queried in a read-only manner.
|
||||||
|
* @param requestor the actual requestor of the service. Only
|
||||||
|
* weak references to this will be retained, and it will
|
||||||
|
* never be changed, only queried in a read-only manner.
|
||||||
|
* @param serviceClass the <code>Class</code> of the service being
|
||||||
|
* requested.
|
||||||
|
* @param serviceSelector a parameter to customize the service
|
||||||
|
* returned with.
|
||||||
|
* @param listener a listener that will be notified if the service
|
||||||
|
* being requested is revoked.
|
||||||
|
* @return an instance of <code>serviceClass</code> (such that
|
||||||
|
* <code>instanceof</code> serviceClass is true), or
|
||||||
|
* <code>null</code>.
|
||||||
|
*/
|
||||||
|
public Object getService(BeanContextChild requestorChild, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener listener);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of all service classes supported.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* This method must synchronize on
|
||||||
|
* <code>BeanContext.globalHierarchyLock</code>.
|
||||||
|
*
|
||||||
|
* @return a list of all service classes supported.
|
||||||
|
* @see java.beans.beancontext.BeanContext#globalHierarchyLock
|
||||||
|
*/
|
||||||
|
public Iterator getCurrentServiceClasses();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of valid service selectors for the specified service class.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If the specified service class does not have a finite number of
|
||||||
|
* valid service selectors, it should return <code>null</code>.
|
||||||
|
* If it takes a general <code>Integer</code> parameter, for
|
||||||
|
* example, you may as well return <code>null</code> or the poor
|
||||||
|
* soul who called this method will be iterating all day.
|
||||||
|
* <P>
|
||||||
|
*
|
||||||
|
* If it has no valid service selectors, it should still return an empty
|
||||||
|
* <code>Iterator</code>.
|
||||||
|
*
|
||||||
|
* @param serviceClass the service class to get selectors for.
|
||||||
|
* @return a list of valid service selectors for the service
|
||||||
|
* class, or <code>null</code>.
|
||||||
|
*/
|
||||||
|
public Iterator getCurrentServiceSelectors(Class serviceClass);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell whether the specified service class is available.
|
||||||
|
* Iff getService() could return a non-null value for the
|
||||||
|
* specified service, this method will return <code>true</code>.
|
||||||
|
*
|
||||||
|
* @param serviceClass the service class to check on.
|
||||||
|
* @return whether the specified service class is availabe.
|
||||||
|
*/
|
||||||
|
public boolean hasService(Class serviceClass);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a listener on all adds and removes of services.
|
||||||
|
* @param listener the listener to add.
|
||||||
|
*/
|
||||||
|
public void addBeanContextServicesListener(BeanContextServicesListener listener);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a listener on all adds and removes of services.
|
||||||
|
* @specnote it is not certain whether this should remove this
|
||||||
|
* listener if it was specified in
|
||||||
|
* <code>getService()</code>.
|
||||||
|
* @param listener the listener to add.
|
||||||
|
*/
|
||||||
|
public void removeBeanContextServicesListener(BeanContextServicesListener listener);
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/* java.beans.beancontext.BeanContextServicesListener
|
||||||
|
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.beans.beancontext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listens for service add and revoke events.
|
||||||
|
*
|
||||||
|
* @author John Keiser
|
||||||
|
* @since JDK1.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface BeanContextServicesListener extends BeanContextServiceRevokedListener {
|
||||||
|
/**
|
||||||
|
* Called by <code>BeanContextServices</code> whenever a service is made available.
|
||||||
|
*
|
||||||
|
* @param event the service revoked event, with useful information
|
||||||
|
* about the new service.
|
||||||
|
*/
|
||||||
|
public void serviceAvailable(BeanContextServiceAvailableEvent event);
|
||||||
|
}
|
39
libjava/java/io/BlockDataException.java
Normal file
39
libjava/java/io/BlockDataException.java
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
/* BlockDataException.java -- Class used to store name and class of fields
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
//TODO: check 1.2 API to make sure this mathces
|
||||||
|
|
||||||
|
class BlockDataException extends IOException
|
||||||
|
{
|
||||||
|
public BlockDataException( int bytes )
|
||||||
|
{
|
||||||
|
super( bytes + " bytes are available in the next data block" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
98
libjava/java/io/Externalizable.java
Normal file
98
libjava/java/io/Externalizable.java
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
/* Externalizable.java -- Interface for saving and restoring object data
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface provides a way that classes can completely control how
|
||||||
|
* the data of their object instances are written and read to and from
|
||||||
|
* streams. It has two methods which are used to write the data to a stream
|
||||||
|
* and to read the data from a stream. The read method must read the data
|
||||||
|
* in exactly the way it was written by the write method.
|
||||||
|
* <p>
|
||||||
|
* Note that classes which implement this interface must take into account
|
||||||
|
* that all superclass data must also be written to the stream as well.
|
||||||
|
* The class implementing this interface must figure out how to make that
|
||||||
|
* happen.
|
||||||
|
* <p>
|
||||||
|
* This interface can be used to provide object persistence. When an
|
||||||
|
* object is to be stored externally, the <code>writeExternal</code> method is
|
||||||
|
* called to save state. When the object is restored, an instance is
|
||||||
|
* created using the default no-argument constructor and the
|
||||||
|
* <code>readExternal</code> method is used to restore the state.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public abstract interface Externalizable extends Serializable
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method restores an object's state by reading in the instance data
|
||||||
|
* for the object from the passed in stream. Note that this stream is not
|
||||||
|
* a subclass of <code>InputStream</code>, but rather is a class that implements
|
||||||
|
* the <code>ObjectInput</code> interface. That interface provides a mechanism for
|
||||||
|
* reading in Java data types from a stream.
|
||||||
|
* <p>
|
||||||
|
* Note that this method must be compatible with <code>writeExternal</code>.
|
||||||
|
* It must read back the exact same types that were written by that
|
||||||
|
* method in the exact order they were written.
|
||||||
|
* <p>
|
||||||
|
* If this method needs to read back an object instance, then the class
|
||||||
|
* for that object must be found and loaded. If that operation fails,
|
||||||
|
* then this method throws a <code>ClassNotFoundException</code>
|
||||||
|
*
|
||||||
|
* @param in An <code>ObjectInput</code> instance for reading in the object state
|
||||||
|
*
|
||||||
|
* @exception ClassNotFoundException If the class of an object being restored cannot be found
|
||||||
|
* @exception IOException If any other error occurs
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
readExternal(ObjectInput in) throws ClassNotFoundException, IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is responsible for writing the instance data of an object
|
||||||
|
* to the passed in stream. Note that this stream is not a subclass of
|
||||||
|
* <code>OutputStream</code>, but rather is a class that implements the
|
||||||
|
* <code>ObjectOutput</code> interface. That interface provides a number of methods
|
||||||
|
* for writing Java data values to a stream.
|
||||||
|
* <p>
|
||||||
|
* Not that the implementation of this method must be coordinated with
|
||||||
|
* the implementation of <code>readExternal</code>.
|
||||||
|
*
|
||||||
|
* @param out An <code>ObjectOutput</code> instance for writing the object state
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
writeExternal(ObjectOutput out) throws IOException;
|
||||||
|
|
||||||
|
} // interface Externalizable
|
||||||
|
|
110
libjava/java/io/InvalidClassException.java
Normal file
110
libjava/java/io/InvalidClassException.java
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
/* InvalidClassException.java -- An I/O operation was interrupted.
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This exception is thrown when there is some sort of problem with a
|
||||||
|
* class during a serialization operation. This could be that the
|
||||||
|
* versions don't match, that there are unknown datatypes in the class
|
||||||
|
* or that the class doesn't have a default no-arg constructor.
|
||||||
|
* <p>
|
||||||
|
* The field <code>classname</code> will contain the name of the
|
||||||
|
* class that caused the problem if known. The getMessage() method
|
||||||
|
* for this exception will always include the name of that class
|
||||||
|
* if known.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public class InvalidClassException extends ObjectStreamException
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instance Variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the class which encountered the error.
|
||||||
|
*/
|
||||||
|
public String classname;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructors
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new InvalidClassException with a descriptive error message String
|
||||||
|
*
|
||||||
|
* @param message The descriptive error message
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
InvalidClassException(String message)
|
||||||
|
{
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new InvalidClassException with a descriptive error message
|
||||||
|
* String, and the name of the class that caused the problem.
|
||||||
|
*
|
||||||
|
* @param classname The number of bytes tranferred before the interruption
|
||||||
|
* @param message The descriptive error message
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
InvalidClassException(String classname, String message)
|
||||||
|
{
|
||||||
|
super(message);
|
||||||
|
this.classname = classname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instance Methods
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the descriptive error message for this exception. It will
|
||||||
|
* include the class name that caused the problem if known. This method
|
||||||
|
* overrides Throwable.getMessage()
|
||||||
|
*
|
||||||
|
* @return A descriptive error message
|
||||||
|
*/
|
||||||
|
public String
|
||||||
|
getMessage()
|
||||||
|
{
|
||||||
|
return(super.getMessage() + ": " + classname);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // class InvalidClassException
|
||||||
|
|
57
libjava/java/io/InvalidObjectException.java
Normal file
57
libjava/java/io/InvalidObjectException.java
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
/* InvalidObjectException.java -- An I/O operation was interrupted.
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This exception is thrown when an object fails a validation test
|
||||||
|
* during serialization.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public class InvalidObjectException extends ObjectStreamException
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructors
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new InvalidObjectException with a descriptive error message String
|
||||||
|
*
|
||||||
|
* @param message The descriptive error message
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
InvalidObjectException(String message)
|
||||||
|
{
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // class InvalidObjectException
|
||||||
|
|
68
libjava/java/io/NotActiveException.java
Normal file
68
libjava/java/io/NotActiveException.java
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/* NotActiveException.java -- Unexpected end of file exception
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This exception is thrown when a problem occurs due to the fact that
|
||||||
|
* serialization is not active.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public class NotActiveException extends ObjectStreamException
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructors
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new NotActiveException without a descriptive error message
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
NotActiveException()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new NotActiveException with a descriptive error message String
|
||||||
|
*
|
||||||
|
* @param message The descriptive error message
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
NotActiveException(String message)
|
||||||
|
{
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // class NotActiveException
|
||||||
|
|
69
libjava/java/io/NotSerializableException.java
Normal file
69
libjava/java/io/NotSerializableException.java
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
/* NotSerializableException.java -- Unexpected end of file exception
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This exception is thrown when a class may not be serialized. The
|
||||||
|
* descriptive message will consist of the name of the class in question.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public class NotSerializableException extends ObjectStreamException
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructors
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new NotSerializableException without a descriptive error message
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
NotSerializableException()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new NotSerializableException with a descriptive error message String
|
||||||
|
* This should be the name of the class that cannot be serialized.
|
||||||
|
*
|
||||||
|
* @param message The descriptive error message
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
NotSerializableException(String message)
|
||||||
|
{
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // class NotSerializableException
|
||||||
|
|
147
libjava/java/io/ObjectInput.java
Normal file
147
libjava/java/io/ObjectInput.java
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
/* ObjectInput.java -- Read object data from a stream
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface extends the <code>DataInput</code> interface to provide a
|
||||||
|
* facility to read objects as well as primitive types from a stream. It
|
||||||
|
* also has methods that allow input to be done in a manner similar to
|
||||||
|
* <code>InputStream</code>
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public abstract interface ObjectInput extends DataInput
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the number of bytes that can be read without
|
||||||
|
* blocking.
|
||||||
|
*
|
||||||
|
* @return The number of bytes available before blocking
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract int
|
||||||
|
available() throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method reading a byte of data from a stream. It returns that byte
|
||||||
|
* as an int. This method blocks if no data is available to be read.
|
||||||
|
*
|
||||||
|
* @return The byte of data read
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract int
|
||||||
|
read() throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method reads raw bytes and stores them them a byte array buffer.
|
||||||
|
* Note that this method will block if no data is available. However,
|
||||||
|
* it will not necessarily block until it fills the entire buffer. That is,
|
||||||
|
* a "short count" is possible.
|
||||||
|
*
|
||||||
|
* @param buf The byte array to receive the data read
|
||||||
|
*
|
||||||
|
* @return The actual number fo bytes read or -1 if end of stream
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract int
|
||||||
|
read(byte[] buf) throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method reads raw bytes and stores them in a byte array buffer
|
||||||
|
* <code>buf</code> starting at position <code>offset</code> into the buffer. A
|
||||||
|
* maximum of <code>len</code> bytes will be read. Note that this method
|
||||||
|
* blocks if no data is available, but will not necessarily block until
|
||||||
|
* it can read <code>len</code> bytes of data. That is, a "short count" is
|
||||||
|
* possible.
|
||||||
|
*
|
||||||
|
* @param buf The byte array to receive the data read
|
||||||
|
* @param offset The offset into @code{buf} to start storing data
|
||||||
|
* @param len The maximum number of bytes to read
|
||||||
|
*
|
||||||
|
* @return The actual number fo bytes read or -1 if end of stream
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract int
|
||||||
|
read(byte[] buf, int offset, int len) throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads an object instance and returns it. If the class for the object
|
||||||
|
* being read cannot be found, then a ClassNotFoundException will
|
||||||
|
* be thrown.
|
||||||
|
*
|
||||||
|
* @return The object instance that was read
|
||||||
|
*
|
||||||
|
* @exception ClassNotFoundException If a class for the object cannot be found
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract Object
|
||||||
|
readObject() throws ClassNotFoundException, IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method causes the specified number of bytes to be read and
|
||||||
|
* discarded. It is possible that fewer than the requested number of bytes
|
||||||
|
* will actually be skipped.
|
||||||
|
*
|
||||||
|
* @param num_bytes The number of bytes to skip
|
||||||
|
*
|
||||||
|
* @return The actual number of bytes skipped
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract long
|
||||||
|
skip(long num_bytes) throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method closes the input source
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
close() throws IOException;
|
||||||
|
|
||||||
|
} // interface ObjectInput
|
||||||
|
|
1467
libjava/java/io/ObjectInputStream.java
Normal file
1467
libjava/java/io/ObjectInputStream.java
Normal file
File diff suppressed because it is too large
Load diff
50
libjava/java/io/ObjectInputValidation.java
Normal file
50
libjava/java/io/ObjectInputValidation.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* ObjectInputValidation.java -- Validate an object
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* What does this interface really do?
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public abstract interface ObjectInputValidation
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called to validate an object. If the object is invalid
|
||||||
|
* an exception is thrown.
|
||||||
|
*
|
||||||
|
* @exception InvalidObjectException If the object is invalid
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
validateObject() throws InvalidObjectException;
|
||||||
|
|
||||||
|
} // interface ObjectInputValidation
|
||||||
|
|
116
libjava/java/io/ObjectOutput.java
Normal file
116
libjava/java/io/ObjectOutput.java
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
/* ObjectOutput.java -- Interface for writing objects to a stream
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface extends <code>DataOutput</code> to provide the additional
|
||||||
|
* facility of writing object instances to a stream. It also adds some
|
||||||
|
* additional methods to make the interface more <code>OutputStream</code> like.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public abstract interface ObjectOutput extends DataOutput
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method writes the specified byte to the output stream.
|
||||||
|
*
|
||||||
|
* @param b The byte to write.
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs.
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
write(int b) throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method writes all the bytes in the specified byte array to the
|
||||||
|
* output stream.
|
||||||
|
*
|
||||||
|
* @param buf The array of bytes to write.
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs.
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
write(byte[] buf) throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method writes <code>len</code> bytes from the specified array
|
||||||
|
* starting at index <code>offset</code> into that array.
|
||||||
|
*
|
||||||
|
* @param buf The byte array to write from.
|
||||||
|
* @param offset The index into the byte array to start writing from.
|
||||||
|
* @param len The number of bytes to write.
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs.
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
write(byte[] buf, int offset, int len) throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method writes a object instance to a stream. The format of the
|
||||||
|
* data written is determined by the actual implementation of this method
|
||||||
|
*
|
||||||
|
* @param obj The object to write
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
writeObject(Object obj) throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method causes any buffered data to be flushed out to the underlying
|
||||||
|
* stream
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
flush() throws IOException;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method closes the underlying stream.
|
||||||
|
*
|
||||||
|
* @exception IOException If an error occurs
|
||||||
|
*/
|
||||||
|
public abstract void
|
||||||
|
close() throws IOException;
|
||||||
|
|
||||||
|
} // interface ObjectOutput
|
||||||
|
|
1335
libjava/java/io/ObjectOutputStream.java
Normal file
1335
libjava/java/io/ObjectOutputStream.java
Normal file
File diff suppressed because it is too large
Load diff
666
libjava/java/io/ObjectStreamClass.java
Normal file
666
libjava/java/io/ObjectStreamClass.java
Normal file
|
@ -0,0 +1,666 @@
|
||||||
|
/* ObjectStreamClass.java -- Class used to write class information
|
||||||
|
about serialized objects.
|
||||||
|
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Member;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.security.DigestOutputStream;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.Vector;
|
||||||
|
import gnu.java.io.NullOutputStream;
|
||||||
|
import gnu.java.lang.reflect.TypeSignature;
|
||||||
|
import gnu.gcj.io.SimpleSHSStream;
|
||||||
|
|
||||||
|
|
||||||
|
public class ObjectStreamClass implements Serializable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
Returns the <code>ObjectStreamClass</code> for <code>cl</code>.
|
||||||
|
If <code>cl</code> is null, or is not <code>Serializable</code>,
|
||||||
|
null is returned. <code>ObjectStreamClass</code>'s are memoized;
|
||||||
|
later calls to this method with the same class will return the
|
||||||
|
same <code>ObjectStreamClass</code> object and no recalculation
|
||||||
|
will be done.
|
||||||
|
|
||||||
|
@see java.io.Serializable
|
||||||
|
*/
|
||||||
|
public static ObjectStreamClass lookup (Class cl)
|
||||||
|
{
|
||||||
|
if (cl == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
ObjectStreamClass osc = (ObjectStreamClass)classLookupTable.get (cl);
|
||||||
|
|
||||||
|
if (osc != null)
|
||||||
|
return osc;
|
||||||
|
else if (! (Serializable.class).isAssignableFrom (cl))
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
osc = new ObjectStreamClass (cl);
|
||||||
|
classLookupTable.put (cl, osc);
|
||||||
|
return osc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the name of the class that this
|
||||||
|
<code>ObjectStreamClass</code> represents.
|
||||||
|
*/
|
||||||
|
public String getName ()
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the class that this <code>ObjectStreamClass</code>
|
||||||
|
represents. Null could be returned if this
|
||||||
|
<code>ObjectStreamClass</code> was read from an
|
||||||
|
<code>ObjectInputStream</code> and the class it represents cannot
|
||||||
|
be found or loaded.
|
||||||
|
|
||||||
|
@see java.io.ObjectInputStream
|
||||||
|
*/
|
||||||
|
public Class forClass ()
|
||||||
|
{
|
||||||
|
return clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the serial version stream-unique identifier for the class
|
||||||
|
represented by this <code>ObjectStreamClass</code>. This SUID is
|
||||||
|
either defined by the class as <code>static final long
|
||||||
|
serialVersionUID</code> or is calculated as specified in
|
||||||
|
Javasoft's "Object Serialization Specification" XXX: add reference
|
||||||
|
*/
|
||||||
|
public long getSerialVersionUID ()
|
||||||
|
{
|
||||||
|
return uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns the serializable (non-static and non-transient) Fields
|
||||||
|
// of the class represented by this ObjectStreamClass. The Fields
|
||||||
|
// are sorted by name.
|
||||||
|
// XXX doc
|
||||||
|
public ObjectStreamField[] getFields ()
|
||||||
|
{
|
||||||
|
ObjectStreamField[] copy = new ObjectStreamField[ fields.length ];
|
||||||
|
System.arraycopy (fields, 0, copy, 0, fields.length);
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// XXX doc
|
||||||
|
// Can't do binary search since fields is sorted by name and
|
||||||
|
// primitiveness.
|
||||||
|
public ObjectStreamField getField (String name)
|
||||||
|
{
|
||||||
|
for (int i=0; i < fields.length; i++)
|
||||||
|
if (fields[i].getName ().equals (name))
|
||||||
|
return fields[i];
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a textual representation of this
|
||||||
|
<code>ObjectStreamClass</code> object including the name of the
|
||||||
|
class it represents as well as that class's serial version
|
||||||
|
stream-unique identifier.
|
||||||
|
|
||||||
|
@see getSerialVersionUID ()
|
||||||
|
@see getName ()
|
||||||
|
*/
|
||||||
|
public String toString ()
|
||||||
|
{
|
||||||
|
return "java.io.ObjectStreamClass< " + name + ", " + uid + " >";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns true iff the class that this ObjectStreamClass represents
|
||||||
|
// has the following method:
|
||||||
|
//
|
||||||
|
// private void writeObject (ObjectOutputStream)
|
||||||
|
//
|
||||||
|
// This method is used by the class to override default
|
||||||
|
// serialization behaivior.
|
||||||
|
boolean hasWriteMethod ()
|
||||||
|
{
|
||||||
|
return (flags & ObjectStreamConstants.SC_WRITE_METHOD) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns true iff the class that this ObjectStreamClass represents
|
||||||
|
// implements Serializable but does *not* implement Externalizable.
|
||||||
|
boolean isSerializable ()
|
||||||
|
{
|
||||||
|
return (flags & ObjectStreamConstants.SC_SERIALIZABLE) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns true iff the class that this ObjectStreamClass represents
|
||||||
|
// implements Externalizable.
|
||||||
|
boolean isExternalizable ()
|
||||||
|
{
|
||||||
|
return (flags & ObjectStreamConstants.SC_EXTERNALIZABLE) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns the <code>ObjectStreamClass</code> that represents the
|
||||||
|
// class that is the superclass of the class this
|
||||||
|
// <code>ObjectStreamClass</cdoe> represents. If the superclass is
|
||||||
|
// not Serializable, null is returned.
|
||||||
|
ObjectStreamClass getSuper ()
|
||||||
|
{
|
||||||
|
return superClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// returns an array of ObjectStreamClasses that represent the super
|
||||||
|
// classes of CLAZZ and CLAZZ itself in order from most super to
|
||||||
|
// CLAZZ. ObjectStreamClass[0] is the highest superclass of CLAZZ
|
||||||
|
// that is serializable.
|
||||||
|
static ObjectStreamClass[] getObjectStreamClasses (Class clazz)
|
||||||
|
{
|
||||||
|
ObjectStreamClass osc = ObjectStreamClass.lookup (clazz);
|
||||||
|
|
||||||
|
ObjectStreamClass[] ret_val;
|
||||||
|
|
||||||
|
if (osc == null)
|
||||||
|
return new ObjectStreamClass[0];
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vector oscs = new Vector ();
|
||||||
|
|
||||||
|
while (osc != null)
|
||||||
|
{
|
||||||
|
oscs.addElement (osc);
|
||||||
|
osc = osc.getSuper ();
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = oscs.size ();
|
||||||
|
ObjectStreamClass[] sorted_oscs = new ObjectStreamClass[ count ];
|
||||||
|
|
||||||
|
for (int i = count - 1; i >= 0; i--)
|
||||||
|
sorted_oscs[ count - i - 1 ] = (ObjectStreamClass)oscs.elementAt (i);
|
||||||
|
|
||||||
|
return sorted_oscs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns an integer that consists of bit-flags that indicate
|
||||||
|
// properties of the class represented by this ObjectStreamClass.
|
||||||
|
// The bit-flags that could be present are those defined in
|
||||||
|
// ObjectStreamConstants that begin with `SC_'
|
||||||
|
int getFlags ()
|
||||||
|
{
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ObjectStreamClass (String name, long uid, byte flags,
|
||||||
|
ObjectStreamField[] fields)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.uid = uid;
|
||||||
|
this.flags = flags;
|
||||||
|
this.fields = fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void setClass (Class clazz)
|
||||||
|
{
|
||||||
|
this.clazz = clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void setSuperclass (ObjectStreamClass osc)
|
||||||
|
{
|
||||||
|
superClass = osc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void calculateOffsets ()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
ObjectStreamField field;
|
||||||
|
primFieldSize = 0;
|
||||||
|
int fcount = fields.length;
|
||||||
|
for (i = 0; i < fcount; ++ i)
|
||||||
|
{
|
||||||
|
field = fields[i];
|
||||||
|
|
||||||
|
if (! field.isPrimitive ())
|
||||||
|
break;
|
||||||
|
|
||||||
|
field.setOffset (primFieldSize);
|
||||||
|
switch (field.getTypeCode ())
|
||||||
|
{
|
||||||
|
case 'B':
|
||||||
|
case 'Z':
|
||||||
|
++ primFieldSize;
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
case 'S':
|
||||||
|
primFieldSize += 2;
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
case 'F':
|
||||||
|
primFieldSize += 4;
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
case 'J':
|
||||||
|
primFieldSize += 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (objectFieldCount = 0; i < fcount; ++ i)
|
||||||
|
fields[i].setOffset (objectFieldCount++);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private ObjectStreamClass (Class cl)
|
||||||
|
{
|
||||||
|
uid = 0;
|
||||||
|
flags = 0;
|
||||||
|
|
||||||
|
clazz = cl;
|
||||||
|
name = cl.getName ();
|
||||||
|
setFlags (cl);
|
||||||
|
setFields (cl);
|
||||||
|
setUID (cl);
|
||||||
|
superClass = lookup (cl.getSuperclass ());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Sets bits in flags according to features of CL.
|
||||||
|
private void setFlags (Class cl)
|
||||||
|
{
|
||||||
|
if ((java.io.Externalizable.class).isAssignableFrom (cl))
|
||||||
|
flags |= ObjectStreamConstants.SC_EXTERNALIZABLE;
|
||||||
|
else if ((java.io.Serializable.class).isAssignableFrom (cl))
|
||||||
|
// only set this bit if CL is NOT Externalizable
|
||||||
|
flags |= ObjectStreamConstants.SC_SERIALIZABLE;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Method writeMethod = cl.getDeclaredMethod ("writeObject",
|
||||||
|
writeMethodArgTypes);
|
||||||
|
int modifiers = writeMethod.getModifiers ();
|
||||||
|
|
||||||
|
if (writeMethod.getReturnType () == Void.TYPE
|
||||||
|
&& Modifier.isPrivate (modifiers)
|
||||||
|
&& !Modifier.isStatic (modifiers))
|
||||||
|
flags |= ObjectStreamConstants.SC_WRITE_METHOD;
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodException oh_well)
|
||||||
|
{}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Sets fields to be a sorted array of the serializable fields of
|
||||||
|
// clazz.
|
||||||
|
private void setFields (Class cl)
|
||||||
|
{
|
||||||
|
if (! isSerializable () || isExternalizable ())
|
||||||
|
{
|
||||||
|
fields = NO_FIELDS;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Field serialPersistantFields
|
||||||
|
= cl.getDeclaredField ("serialPersistantFields");
|
||||||
|
int modifiers = serialPersistantFields.getModifiers ();
|
||||||
|
|
||||||
|
if (Modifier.isStatic (modifiers)
|
||||||
|
&& Modifier.isFinal (modifiers)
|
||||||
|
&& Modifier.isPrivate (modifiers))
|
||||||
|
{
|
||||||
|
fields = getSerialPersistantFields (cl);
|
||||||
|
Arrays.sort (fields);
|
||||||
|
calculateOffsets ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (NoSuchFieldException ignore)
|
||||||
|
{}
|
||||||
|
|
||||||
|
int num_good_fields = 0;
|
||||||
|
Field[] all_fields = cl.getDeclaredFields ();
|
||||||
|
|
||||||
|
int modifiers;
|
||||||
|
// set non-serializable fields to null in all_fields
|
||||||
|
for (int i=0; i < all_fields.length; i++)
|
||||||
|
{
|
||||||
|
modifiers = all_fields[i].getModifiers ();
|
||||||
|
if (Modifier.isTransient (modifiers)
|
||||||
|
|| Modifier.isStatic (modifiers))
|
||||||
|
all_fields[i] = null;
|
||||||
|
else
|
||||||
|
num_good_fields++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make a copy of serializable (non-null) fields
|
||||||
|
fields = new ObjectStreamField[ num_good_fields ];
|
||||||
|
for (int from=0, to=0; from < all_fields.length; from++)
|
||||||
|
if (all_fields[from] != null)
|
||||||
|
{
|
||||||
|
Field f = all_fields[from];
|
||||||
|
fields[to] = new ObjectStreamField (f.getName (), f.getType ());
|
||||||
|
to++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Arrays.sort (fields);
|
||||||
|
calculateOffsets ();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets uid be serial version UID defined by class, or if that
|
||||||
|
// isn't present, calculates value of serial version UID.
|
||||||
|
private void setUID (Class cl)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Field suid = cl.getDeclaredField ("serialVersionUID");
|
||||||
|
int modifiers = suid.getModifiers ();
|
||||||
|
|
||||||
|
if (Modifier.isStatic (modifiers)
|
||||||
|
&& Modifier.isFinal (modifiers))
|
||||||
|
{
|
||||||
|
uid = getDefinedSUID (cl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (NoSuchFieldException ignore)
|
||||||
|
{}
|
||||||
|
|
||||||
|
// cl didn't define serialVersionUID, so we have to compute it
|
||||||
|
try
|
||||||
|
{
|
||||||
|
MessageDigest md = null;
|
||||||
|
DigestOutputStream digest_out = null;
|
||||||
|
DataOutputStream data_out = null;
|
||||||
|
SimpleSHSStream simple = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
md = MessageDigest.getInstance ("SHA");
|
||||||
|
digest_out = new DigestOutputStream (nullOutputStream, md);
|
||||||
|
data_out = new DataOutputStream (digest_out);
|
||||||
|
}
|
||||||
|
catch (NoSuchAlgorithmException e)
|
||||||
|
{
|
||||||
|
simple = new SimpleSHSStream (nullOutputStream);
|
||||||
|
data_out = new DataOutputStream (simple);
|
||||||
|
}
|
||||||
|
|
||||||
|
data_out.writeUTF (cl.getName ());
|
||||||
|
|
||||||
|
int modifiers = cl.getModifiers ();
|
||||||
|
// just look at interesting bits
|
||||||
|
modifiers = modifiers & (Modifier.ABSTRACT | Modifier.FINAL
|
||||||
|
| Modifier.INTERFACE | Modifier.PUBLIC);
|
||||||
|
data_out.writeInt (modifiers);
|
||||||
|
|
||||||
|
Class[] interfaces = cl.getInterfaces ();
|
||||||
|
Arrays.sort (interfaces, interfaceComparator);
|
||||||
|
for (int i=0; i < interfaces.length; i++)
|
||||||
|
data_out.writeUTF (interfaces[i].getName ());
|
||||||
|
|
||||||
|
|
||||||
|
Field field;
|
||||||
|
Field[] fields = cl.getDeclaredFields ();
|
||||||
|
Arrays.sort (fields, memberComparator);
|
||||||
|
for (int i=0; i < fields.length; i++)
|
||||||
|
{
|
||||||
|
field = fields[i];
|
||||||
|
modifiers = field.getModifiers ();
|
||||||
|
if (Modifier.isPrivate (modifiers)
|
||||||
|
&& (Modifier.isStatic (modifiers)
|
||||||
|
|| Modifier.isTransient (modifiers)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
data_out.writeUTF (field.getName ());
|
||||||
|
data_out.writeInt (modifiers);
|
||||||
|
data_out.writeUTF (TypeSignature.getEncodingOfClass (field.getType ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// write class initializer method if present
|
||||||
|
boolean has_init;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
has_init = hasClassInitializer (cl);
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodError e)
|
||||||
|
{
|
||||||
|
has_init = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_init)
|
||||||
|
{
|
||||||
|
data_out.writeUTF ("<clinit>");
|
||||||
|
data_out.writeInt (Modifier.STATIC);
|
||||||
|
data_out.writeUTF ("()V");
|
||||||
|
}
|
||||||
|
|
||||||
|
Constructor constructor;
|
||||||
|
Constructor[] constructors = cl.getDeclaredConstructors ();
|
||||||
|
Arrays.sort (constructors, memberComparator);
|
||||||
|
for (int i=0; i < constructors.length; i++)
|
||||||
|
{
|
||||||
|
constructor = constructors[i];
|
||||||
|
modifiers = constructor.getModifiers ();
|
||||||
|
if (Modifier.isPrivate (modifiers))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
data_out.writeUTF ("<init>");
|
||||||
|
data_out.writeInt (modifiers);
|
||||||
|
|
||||||
|
// the replacement of '/' with '.' was needed to make computed
|
||||||
|
// SUID's agree with those computed by JDK
|
||||||
|
data_out.writeUTF (
|
||||||
|
TypeSignature.getEncodingOfConstructor (constructor).replace ('/','.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
Method method;
|
||||||
|
Method[] methods = cl.getDeclaredMethods ();
|
||||||
|
Arrays.sort (methods, memberComparator);
|
||||||
|
for (int i=0; i < methods.length; i++)
|
||||||
|
{
|
||||||
|
method = methods[i];
|
||||||
|
modifiers = method.getModifiers ();
|
||||||
|
if (Modifier.isPrivate (modifiers))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
data_out.writeUTF (method.getName ());
|
||||||
|
data_out.writeInt (modifiers);
|
||||||
|
|
||||||
|
// the replacement of '/' with '.' was needed to make computed
|
||||||
|
// SUID's agree with those computed by JDK
|
||||||
|
data_out.writeUTF (
|
||||||
|
TypeSignature.getEncodingOfMethod (method).replace ('/', '.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
data_out.close ();
|
||||||
|
byte[] sha = md != null ? md.digest () : simple.digest ();
|
||||||
|
long result = 0;
|
||||||
|
int len = sha.length < 8 ? sha.length : 8;
|
||||||
|
for (int i=0; i < len; i++)
|
||||||
|
result += (long)(sha[i] & 0xFF) << (8 * i);
|
||||||
|
|
||||||
|
uid = result;
|
||||||
|
}
|
||||||
|
catch (NoSuchAlgorithmException e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException ("The SHA algorithm was not found to use in computing the Serial Version UID for class "
|
||||||
|
+ cl.getName ());
|
||||||
|
}
|
||||||
|
catch (IOException ioe)
|
||||||
|
{
|
||||||
|
throw new RuntimeException (ioe.getMessage ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns the value of CLAZZ's final static long field named
|
||||||
|
// `serialVersionUID'.
|
||||||
|
private long getDefinedSUID (Class clazz)
|
||||||
|
{
|
||||||
|
long l = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Use getDeclaredField rather than getField, since serialVersionUID
|
||||||
|
// may not be public AND we only want the serialVersionUID of this
|
||||||
|
// class, not a superclass or interface.
|
||||||
|
Field f = clazz.getDeclaredField ("serialVersionUID");
|
||||||
|
l = f.getLong (null);
|
||||||
|
}
|
||||||
|
catch (java.lang.NoSuchFieldException e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (java.lang.IllegalAccessException e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the value of CLAZZ's private static final field named
|
||||||
|
// `serialPersistantFields'.
|
||||||
|
private ObjectStreamField[] getSerialPersistantFields (Class clazz)
|
||||||
|
{
|
||||||
|
ObjectStreamField[] o = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Use getDeclaredField rather than getField for the same reason
|
||||||
|
// as above in getDefinedSUID.
|
||||||
|
Field f = clazz.getDeclaredField ("getSerialPersistantFields");
|
||||||
|
o = (ObjectStreamField[])f.get (null);
|
||||||
|
}
|
||||||
|
catch (java.lang.NoSuchFieldException e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
catch (java.lang.IllegalAccessException e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns true if CLAZZ has a static class initializer
|
||||||
|
// (a.k.a. <clinit>).
|
||||||
|
//
|
||||||
|
// A NoSuchMethodError is raised if CLAZZ has no such method.
|
||||||
|
private static boolean hasClassInitializer (Class clazz)
|
||||||
|
throws java.lang.NoSuchMethodError
|
||||||
|
{
|
||||||
|
Method m = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Class classArgs[] = {};
|
||||||
|
m = clazz.getMethod ("<clinit>", classArgs);
|
||||||
|
}
|
||||||
|
catch (java.lang.NoSuchMethodException e)
|
||||||
|
{
|
||||||
|
throw new java.lang.NoSuchMethodError ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return m != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final ObjectStreamField[] NO_FIELDS = {};
|
||||||
|
|
||||||
|
private static Hashtable classLookupTable = new Hashtable ();
|
||||||
|
private static final NullOutputStream nullOutputStream = new NullOutputStream ();
|
||||||
|
private static final Comparator interfaceComparator = new InterfaceComparator ();
|
||||||
|
private static final Comparator memberComparator = new MemberComparator ();
|
||||||
|
private static final
|
||||||
|
Class[] writeMethodArgTypes = { java.io.ObjectOutputStream.class };
|
||||||
|
|
||||||
|
private ObjectStreamClass superClass;
|
||||||
|
private Class clazz;
|
||||||
|
private String name;
|
||||||
|
private long uid;
|
||||||
|
private byte flags;
|
||||||
|
|
||||||
|
// this field is package protected so that ObjectInputStream and
|
||||||
|
// ObjectOutputStream can access it directly
|
||||||
|
ObjectStreamField[] fields;
|
||||||
|
|
||||||
|
// these are accessed by ObjectIn/OutputStream
|
||||||
|
int primFieldSize = -1; // -1 if not yet calculated
|
||||||
|
int objectFieldCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// interfaces are compared only by name
|
||||||
|
class InterfaceComparator implements Comparator
|
||||||
|
{
|
||||||
|
public int compare (Object o1, Object o2)
|
||||||
|
{
|
||||||
|
return ((Class)o1).getName ().compareTo (((Class)o2).getName ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Members (Methods and Constructors) are compared first by name,
|
||||||
|
// conflicts are resolved by comparing type signatures
|
||||||
|
class MemberComparator implements Comparator
|
||||||
|
{
|
||||||
|
public int compare (Object o1, Object o2)
|
||||||
|
{
|
||||||
|
Member m1 = (Member)o1;
|
||||||
|
Member m2 = (Member)o2;
|
||||||
|
|
||||||
|
int comp = m1.getName ().compareTo (m2.getName ());
|
||||||
|
|
||||||
|
if (comp == 0)
|
||||||
|
return TypeSignature.getEncodingOfMember (m1).
|
||||||
|
compareTo (TypeSignature.getEncodingOfMember (m2));
|
||||||
|
else
|
||||||
|
return comp;
|
||||||
|
}
|
||||||
|
}
|
74
libjava/java/io/ObjectStreamConstants.java
Normal file
74
libjava/java/io/ObjectStreamConstants.java
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
/* ObjectStreamConstants.java -- Interface containing constant values
|
||||||
|
used in reading and writing serialized objects
|
||||||
|
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
This interface contains constants that are used in object
|
||||||
|
serialization. This interface is used by ObjectOutputStream,
|
||||||
|
ObjectInputStream, ObjectStreamClass, and possibly other classes.
|
||||||
|
The values for these constants are specified in Javasoft's "Object
|
||||||
|
Serialization Specification" TODO: add reference
|
||||||
|
*/
|
||||||
|
public interface ObjectStreamConstants
|
||||||
|
{
|
||||||
|
public final static int PROTOCOL_VERSION_1 = 1;
|
||||||
|
public final static int PROTOCOL_VERSION_2 = 2;
|
||||||
|
|
||||||
|
final static short STREAM_MAGIC = (short)0xaced;
|
||||||
|
final static short STREAM_VERSION = 5;
|
||||||
|
|
||||||
|
final static byte TC_NULL = (byte)112;
|
||||||
|
final static byte TC_REFERENCE = (byte)113;
|
||||||
|
final static byte TC_CLASSDESC = (byte)114;
|
||||||
|
final static byte TC_OBJECT = (byte)115;
|
||||||
|
final static byte TC_STRING = (byte)116;
|
||||||
|
final static byte TC_ARRAY = (byte)117;
|
||||||
|
final static byte TC_CLASS = (byte)118;
|
||||||
|
final static byte TC_BLOCKDATA = (byte)119;
|
||||||
|
final static byte TC_ENDBLOCKDATA = (byte)120;
|
||||||
|
final static byte TC_RESET = (byte)121;
|
||||||
|
final static byte TC_BLOCKDATALONG = (byte)122;
|
||||||
|
final static byte TC_EXCEPTION = (byte)123;
|
||||||
|
|
||||||
|
final static byte TC_BASE = TC_NULL;
|
||||||
|
final static byte TC_MAX = TC_EXCEPTION;
|
||||||
|
|
||||||
|
final static int baseWireHandle = 0x7e0000;
|
||||||
|
|
||||||
|
final static byte SC_WRITE_METHOD = 0x01;
|
||||||
|
final static byte SC_SERIALIZABLE = 0x02;
|
||||||
|
final static byte SC_EXTERNALIZABLE = 0x04;
|
||||||
|
final static byte SC_BLOCK_DATA = 0x08;
|
||||||
|
|
||||||
|
final static SerializablePermission SUBSTITUTION_PERMISSION
|
||||||
|
= new SerializablePermission("enableSubstitution");
|
||||||
|
|
||||||
|
final static SerializablePermission SUBCLASS_IMPLEMENTATION_PERMISSION
|
||||||
|
= new SerializablePermission("enableSubclassImplementation");
|
||||||
|
}
|
99
libjava/java/io/ObjectStreamField.java
Normal file
99
libjava/java/io/ObjectStreamField.java
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
/* ObjectStreamField.java -- Class used to store name and class of fields
|
||||||
|
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
import gnu.java.lang.reflect.TypeSignature;
|
||||||
|
|
||||||
|
// XXX doc
|
||||||
|
public class ObjectStreamField implements java.lang.Comparable
|
||||||
|
{
|
||||||
|
public ObjectStreamField (String name, Class type)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName ()
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class getType ()
|
||||||
|
{
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public char getTypeCode ()
|
||||||
|
{
|
||||||
|
return TypeSignature.getEncodingOfClass (type).charAt (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTypeString ()
|
||||||
|
{
|
||||||
|
return TypeSignature.getEncodingOfClass (type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOffset ()
|
||||||
|
{
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setOffset (int off)
|
||||||
|
{
|
||||||
|
offset = off;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPrimitive ()
|
||||||
|
{
|
||||||
|
return type.isPrimitive ();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compareTo (Object o)
|
||||||
|
{
|
||||||
|
ObjectStreamField f = (ObjectStreamField)o;
|
||||||
|
boolean this_is_primitive = isPrimitive ();
|
||||||
|
boolean f_is_primitive = f.isPrimitive ();
|
||||||
|
|
||||||
|
if (this_is_primitive && !f_is_primitive)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (!this_is_primitive && f_is_primitive)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return getName ().compareTo (f.getName ());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString ()
|
||||||
|
{
|
||||||
|
return "ObjectStreamField< " + type + " " + name + " >";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private Class type;
|
||||||
|
private int offset = -1; // XXX make sure this is correct
|
||||||
|
}
|
54
libjava/java/io/Replaceable.java
Normal file
54
libjava/java/io/Replaceable.java
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/* Replaceable.java -- Replace an object with another object
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface is used to indicate that an object may want to have
|
||||||
|
* another object serialized instead of itself. It contains one method
|
||||||
|
* that is to be called when an object is to be serialized. That method
|
||||||
|
* is reponsible for returning the real object that should be serialized
|
||||||
|
* instead of object being queried.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public interface Replaceable extends Serializable
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the object that should be serialized instead of
|
||||||
|
* this object
|
||||||
|
*
|
||||||
|
* @return The real object that should be serialized
|
||||||
|
*/
|
||||||
|
public abstract Object
|
||||||
|
writeReplace();
|
||||||
|
|
||||||
|
} // interface Replaceable
|
||||||
|
|
52
libjava/java/io/Resolvable.java
Normal file
52
libjava/java/io/Resolvable.java
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/* Resolvable.java -- Returns an object to replace the one being de-serialized
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface is implemented when an object wishes to return another
|
||||||
|
* object to replace it during de-serialization. It has one method that
|
||||||
|
* returns the object that should be used to replace the original object.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public interface Resolvable extends Serializable
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the object that should be used to replace the
|
||||||
|
* original object during de-serialization.
|
||||||
|
*
|
||||||
|
* @return The replacement object
|
||||||
|
*/
|
||||||
|
public abstract Object
|
||||||
|
readResolve();
|
||||||
|
|
||||||
|
} // interface Resolvable
|
||||||
|
|
106
libjava/java/io/SerializablePermission.java
Normal file
106
libjava/java/io/SerializablePermission.java
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
/* SerializablePermission.java -- Basic permissions related to serialization.
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
import java.security.BasicPermission;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class models permissions related to serialization. As a subclass
|
||||||
|
* of <code>BasicPermission</code>, this class has permissions that have
|
||||||
|
* a name only. There is no associated action list.
|
||||||
|
* <p>
|
||||||
|
* There are currently two allowable permission names for this class:
|
||||||
|
* <ul>
|
||||||
|
* <li><code>enableSubclassImplementation</code> - Allows a subclass to
|
||||||
|
* override the default serialization behavior of objects.
|
||||||
|
* <li><code>enableSubstitution</code> - Allows substitution of one object
|
||||||
|
* for another during serialization or deserialization.
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @see java.security.BasicPermission
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public final class SerializablePermission extends BasicPermission
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class Variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static final String[] legal_names = { "enableSubclassImplementation",
|
||||||
|
"enableSubstitution" };
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructors
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method initializes a new instance of <code>SerializablePermission</code>
|
||||||
|
* that has the specified name.
|
||||||
|
*
|
||||||
|
* @param name The name of the permission.
|
||||||
|
*
|
||||||
|
* @exception IllegalArgumentException If the name is not valid for this class.
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
SerializablePermission(String name)
|
||||||
|
{
|
||||||
|
this(name, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method initializes a new instance of <code>SerializablePermission</code>
|
||||||
|
* that has the specified name and action list. Note that the action list
|
||||||
|
* is unused in this class.
|
||||||
|
*
|
||||||
|
* @param name The name of the permission.
|
||||||
|
* @param actions The action list (unused).
|
||||||
|
*
|
||||||
|
* @exception IllegalArgumentException If the name is not valid for this class.
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
SerializablePermission(String name, String actions)
|
||||||
|
{
|
||||||
|
super(name, actions);
|
||||||
|
|
||||||
|
for (int i = 0; i < legal_names.length; i++)
|
||||||
|
if (legal_names[i].equals(name))
|
||||||
|
return;
|
||||||
|
|
||||||
|
throw new IllegalArgumentException("Bad permission name: " + name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // class SerializablePermission
|
||||||
|
|
89
libjava/java/io/WriteAbortedException.java
Normal file
89
libjava/java/io/WriteAbortedException.java
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
/* WriteAbortedException.java -- An exception occured while writing a
|
||||||
|
serialization stream
|
||||||
|
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
GNU Classpath is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Classpath is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA.
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files to
|
||||||
|
produce an executable, this library does not by itself cause the
|
||||||
|
resulting executable to be covered by the GNU General Public License.
|
||||||
|
This exception does not however invalidate any other reasons why the
|
||||||
|
executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
|
|
||||||
|
package java.io;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This exception is thrown when one of the other ObjectStreamException
|
||||||
|
* subclasses was thrown during a serialization write.
|
||||||
|
*
|
||||||
|
* @version 0.0
|
||||||
|
*
|
||||||
|
* @author Aaron M. Renn (arenn@urbanophile.com)
|
||||||
|
*/
|
||||||
|
public class WriteAbortedException extends ObjectStreamException
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instance Variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The detailed exception that caused this exception to be thrown
|
||||||
|
*/
|
||||||
|
public Exception detail;
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructors
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new WriteAbortedException with an eof parameter indicating
|
||||||
|
* the detailed Exception that caused this exception to be thrown.
|
||||||
|
*
|
||||||
|
* @param detail The exception that caused this exception to be thrown
|
||||||
|
*/
|
||||||
|
public
|
||||||
|
WriteAbortedException(String msg, Exception detail)
|
||||||
|
{
|
||||||
|
this.message = msg;
|
||||||
|
this.detail = detail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instance Variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns a message indicating what went wrong, including
|
||||||
|
* the message text from the initial exception that caused this one to
|
||||||
|
* be thrown
|
||||||
|
*/
|
||||||
|
public String
|
||||||
|
getMessage()
|
||||||
|
{
|
||||||
|
return(message + ": " + detail.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // class WriteAbortedException
|
||||||
|
|
78
libjava/java/io/natObjectInputStream.cc
Normal file
78
libjava/java/io/natObjectInputStream.cc
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
// natObjectInputStream.cc - Native part of ObjectInputStream class.
|
||||||
|
|
||||||
|
/* Copyright (C) 1998, 1999 Free Software Foundation
|
||||||
|
|
||||||
|
This ObjectInputStream is part of libgcj.
|
||||||
|
|
||||||
|
This software is copyrighted work licensed under the terms of the
|
||||||
|
Libgcj License. Please consult the ObjectInputStream "LIBGCJ_LICENSE" for
|
||||||
|
details. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <gcj/cni.h>
|
||||||
|
#include <jvm.h>
|
||||||
|
|
||||||
|
#include <java/io/ObjectInputStream$GetField.h>
|
||||||
|
#include <java/io/ObjectInputStream.h>
|
||||||
|
#include <java/io/IOException.h>
|
||||||
|
#include <java/lang/Class.h>
|
||||||
|
#include <java/lang/reflect/Modifier.h>
|
||||||
|
#include <java/lang/reflect/Method.h>
|
||||||
|
|
||||||
|
jobject
|
||||||
|
java::io::ObjectInputStream::allocateObject (jclass klass)
|
||||||
|
{
|
||||||
|
jobject obj = NULL;
|
||||||
|
using namespace java::lang::reflect;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
JvAssert (klass && ! klass->isArray ());
|
||||||
|
if (klass->isInterface() || Modifier::isAbstract(klass->getModifiers()))
|
||||||
|
obj = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// FIXME: will this work for String?
|
||||||
|
obj = JvAllocObject (klass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (jthrowable t)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define ObjectClass _CL_Q34java4lang6Object
|
||||||
|
extern java::lang::Class ObjectClass;
|
||||||
|
#define ClassClass _CL_Q34java4lang5Class
|
||||||
|
extern java::lang::Class ClassClass;
|
||||||
|
|
||||||
|
void
|
||||||
|
java::io::ObjectInputStream::callConstructor (jclass klass, jobject obj)
|
||||||
|
{
|
||||||
|
jstring init_name = JvNewStringLatin1 ("<init>");
|
||||||
|
JArray<jclass> *arg_types
|
||||||
|
= (JArray<jclass> *) JvNewObjectArray (0, &ClassClass, NULL);
|
||||||
|
JArray<jobject> *args
|
||||||
|
= (JArray<jobject> *) JvNewObjectArray (0, &ObjectClass, NULL);
|
||||||
|
java::lang::reflect::Method *m = klass->getPrivateMethod (init_name, arg_types);
|
||||||
|
m->invoke (obj, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
java::lang::reflect::Field *
|
||||||
|
java::io::ObjectInputStream::getField (jclass klass, jstring name)
|
||||||
|
{
|
||||||
|
return klass->getPrivateField (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
java::lang::reflect::Method *
|
||||||
|
java::io::ObjectInputStream::getMethod (jclass klass, jstring name,
|
||||||
|
JArray<jclass> *arg_types)
|
||||||
|
{
|
||||||
|
return klass->getPrivateMethod (name, arg_types);
|
||||||
|
}
|
||||||
|
|
33
libjava/java/io/natObjectOutputStream.cc
Normal file
33
libjava/java/io/natObjectOutputStream.cc
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// natObjectOutputStream.cc - Native part of ObjectOutputStream class.
|
||||||
|
|
||||||
|
/* Copyright (C) 1998, 1999 Free Software Foundation
|
||||||
|
|
||||||
|
This ObjectOutputStream is part of libgcj.
|
||||||
|
|
||||||
|
This software is copyrighted work licensed under the terms of the
|
||||||
|
Libgcj License. Please consult the ObjectOutputStream "LIBGCJ_LICENSE" for
|
||||||
|
details. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <gcj/cni.h>
|
||||||
|
#include <jvm.h>
|
||||||
|
#include <java/io/ObjectOutputStream$PutField.h>
|
||||||
|
#include <java/io/ObjectOutputStream.h>
|
||||||
|
#include <java/io/IOException.h>
|
||||||
|
#include <java/lang/Class.h>
|
||||||
|
|
||||||
|
|
||||||
|
java::lang::reflect::Field *
|
||||||
|
java::io::ObjectOutputStream::getField (jclass klass, jstring name)
|
||||||
|
{
|
||||||
|
return klass->getPrivateField (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
java::lang::reflect::Method *
|
||||||
|
java::io::ObjectOutputStream::getMethod (jclass klass, jstring name,
|
||||||
|
JArray<jclass> *arg_types)
|
||||||
|
{
|
||||||
|
return klass->getPrivateMethod (name, arg_types);
|
||||||
|
}
|
||||||
|
|
|
@ -130,6 +130,9 @@ private:
|
||||||
java::lang::reflect::Field *getField (jstring, jint);
|
java::lang::reflect::Field *getField (jstring, jint);
|
||||||
jint _getMethods (JArray<java::lang::reflect::Method *> *result,
|
jint _getMethods (JArray<java::lang::reflect::Method *> *result,
|
||||||
jint offset);
|
jint offset);
|
||||||
|
java::lang::reflect::Field *getPrivateField (jstring);
|
||||||
|
java::lang::reflect::Method *getPrivateMethod (jstring, JArray<jclass> *);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
JArray<java::lang::reflect::Field *> *getFields (void);
|
JArray<java::lang::reflect::Field *> *getFields (void);
|
||||||
|
|
||||||
|
@ -234,6 +237,10 @@ private:
|
||||||
// Friends classes and functions to implement the ClassLoader
|
// Friends classes and functions to implement the ClassLoader
|
||||||
friend class java::lang::ClassLoader;
|
friend class java::lang::ClassLoader;
|
||||||
|
|
||||||
|
friend class java::io::ObjectOutputStream;
|
||||||
|
friend class java::io::ObjectInputStream;
|
||||||
|
friend class java::io::ObjectStreamClass;
|
||||||
|
|
||||||
friend void _Jv_WaitForState (jclass, int);
|
friend void _Jv_WaitForState (jclass, int);
|
||||||
friend void _Jv_RegisterClasses (jclass *classes);
|
friend void _Jv_RegisterClasses (jclass *classes);
|
||||||
friend void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
|
friend void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue