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>
|
||||
|
||||
* java/lang/Thread.java: Declare `data' as Object, not RawData.
|
||||
|
|
|
@ -41,6 +41,8 @@ if NATIVE
|
|||
bin_PROGRAMS = jv-convert gij
|
||||
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.
|
||||
nat_headers = $(ordinary_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
|
||||
|
||||
|
@ -298,6 +302,14 @@ gnu/gcj/runtime/VMClassLoader.h: gnu/gcj/runtime/VMClassLoader.class libgcj.zip
|
|||
-friend 'java::lang::ClassLoader;' \
|
||||
$(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.
|
||||
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
|
||||
|
||||
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/AWTException.java \
|
||||
java/awt/ActiveEvent.java \
|
||||
java/awt/Adjustable.java \
|
||||
java/awt/BorderLayout.java \
|
||||
java/awt/Color.java \
|
||||
java/awt/Component.java \
|
||||
java/awt/Container.java \
|
||||
java/awt/Dimension.java \
|
||||
java/awt/Event.java \
|
||||
java/awt/Font.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/LayoutManager2.java \
|
||||
java/awt/Menu.java \
|
||||
|
@ -516,56 +553,31 @@ java/awt/MenuBar.java \
|
|||
java/awt/MenuComponent.java \
|
||||
java/awt/MenuContainer.java \
|
||||
java/awt/MenuItem.java \
|
||||
java/awt/Paint.java \
|
||||
java/awt/PaintContext.java \
|
||||
java/awt/Point.java \
|
||||
java/awt/Rectangle.java \
|
||||
java/awt/AWTError.java \
|
||||
java/awt/Shape.java \
|
||||
java/awt/TextArea.java \
|
||||
java/awt/TextComponent.java \
|
||||
java/awt/Toolkit.java \
|
||||
java/awt/Transparency.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/Point2D.java \
|
||||
java/awt/peer/ComponentPeer.java \
|
||||
java/awt/peer/ContainerPeer.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
|
||||
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
|
||||
## header, please list it in special_java_source_files.
|
||||
ordinary_java_source_files = $(convert_source_files) \
|
||||
gnu/gcj/io/DefaultMimeTypes.java \
|
||||
gnu/gcj/io/MimeTypes.java \
|
||||
gnu/gcj/jni/NativeThread.java \
|
||||
gnu/gcj/runtime/VMClassLoader.java \
|
||||
gnu/gcj/runtime/FirstThread.java \
|
||||
gnu/gcj/protocol/http/Connection.java \
|
||||
gnu/gcj/protocol/http/Handler.java \
|
||||
gnu/gcj/protocol/file/Connection.java \
|
||||
gnu/gcj/protocol/file/Handler.java \
|
||||
gnu/gcj/protocol/jar/Connection.java \
|
||||
gnu/gcj/protocol/jar/Handler.java \
|
||||
gnu/gcj/text/BaseBreakIterator.java \
|
||||
gnu/gcj/text/CharacterBreakIterator.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/SentenceBreakIterator.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/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/BufferedOutputStream.java \
|
||||
java/io/BufferedReader.java \
|
||||
|
@ -618,7 +652,6 @@ java/io/DataOutput.java \
|
|||
java/io/DataOutputStream.java \
|
||||
java/io/EOFException.java \
|
||||
java/io/File.java \
|
||||
java/io/FileDescriptor.java \
|
||||
java/io/FileInputStream.java \
|
||||
java/io/FileNotFoundException.java \
|
||||
java/io/FileOutputStream.java \
|
||||
|
@ -635,11 +668,10 @@ java/io/InputStreamReader.java \
|
|||
java/io/InterruptedIOException.java \
|
||||
java/io/LineNumberInputStream.java \
|
||||
java/io/LineNumberReader.java \
|
||||
java/io/ObjectStreamException.java \
|
||||
java/io/OptionalDataException.java \
|
||||
java/io/OutputStream.java \
|
||||
java/io/OutputStreamWriter.java \
|
||||
java/io/PipedInputStream.java \
|
||||
java/io/Externalizable.java \
|
||||
java/io/FileDescriptor.java \
|
||||
java/io/PipedOutputStream.java \
|
||||
java/io/PipedReader.java \
|
||||
java/io/PipedWriter.java \
|
||||
|
@ -651,7 +683,6 @@ java/io/RandomAccessFile.java \
|
|||
java/io/Reader.java \
|
||||
java/io/SequenceInputStream.java \
|
||||
java/io/Serializable.java \
|
||||
java/io/StreamCorruptedException.java \
|
||||
java/io/StreamTokenizer.java \
|
||||
java/io/StringBufferInputStream.java \
|
||||
java/io/StringReader.java \
|
||||
|
@ -660,6 +691,35 @@ java/io/SyncFailedException.java \
|
|||
java/io/UTFDataFormatException.java \
|
||||
java/io/UnsupportedEncodingException.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/ArithmeticException.java \
|
||||
java/lang/ArrayIndexOutOfBoundsException.java \
|
||||
|
@ -688,10 +748,10 @@ java/lang/IllegalMonitorStateException.java \
|
|||
java/lang/IllegalStateException.java \
|
||||
java/lang/IllegalThreadStateException.java \
|
||||
java/lang/IncompatibleClassChangeError.java \
|
||||
java/lang/IndexOutOfBoundsException.java \
|
||||
java/lang/InstantiationError.java \
|
||||
java/lang/InstantiationException.java \
|
||||
java/lang/Integer.java \
|
||||
java/lang/IndexOutOfBoundsException.java \
|
||||
java/lang/InstantiationException.java \
|
||||
java/lang/InternalError.java \
|
||||
java/lang/InterruptedException.java \
|
||||
java/lang/LinkageError.java \
|
||||
|
@ -729,107 +789,42 @@ java/lang/UnsupportedOperationException.java \
|
|||
java/lang/VerifyError.java \
|
||||
java/lang/VirtualMachineError.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/ConnectException.java \
|
||||
java/net/ContentHandler.java \
|
||||
java/net/ContentHandlerFactory.java \
|
||||
java/net/DatagramPacket.java \
|
||||
java/net/DatagramSocket.java \
|
||||
java/net/DatagramSocketImpl.java \
|
||||
java/net/FileNameMap.java \
|
||||
java/net/HttpURLConnection.java \
|
||||
java/net/HttpURLConnection.java \
|
||||
java/net/InetAddress.java \
|
||||
java/net/JarURLConnection.java \
|
||||
java/net/MalformedURLException.java \
|
||||
java/net/MulticastSocket.java \
|
||||
java/net/NoRouteToHostException.java \
|
||||
java/net/PlainDatagramSocketImpl.java \
|
||||
java/net/PlainSocketImpl.java \
|
||||
java/net/ProtocolException.java \
|
||||
java/net/ServerSocket.java \
|
||||
java/net/URL.java \
|
||||
java/net/Socket.java \
|
||||
java/net/SocketException.java \
|
||||
java/net/SocketImpl.java \
|
||||
java/net/SocketImplFactory.java \
|
||||
java/net/SocketOptions.java \
|
||||
java/net/URL.java \
|
||||
java/net/URLClassLoader.java \
|
||||
java/net/URLConnection.java \
|
||||
java/net/URLDecoder.java \
|
||||
java/net/URLEncoder.java \
|
||||
java/net/URLStreamHandler.java \
|
||||
java/net/URLStreamHandlerFactory.java \
|
||||
java/net/UnknownHostException.java \
|
||||
java/net/UnknownServiceException.java \
|
||||
java/security/AlgorithmParameterGeneratorSpi.java \
|
||||
java/security/DigestException.java \
|
||||
java/security/GeneralSecurityException.java \
|
||||
java/security/InvalidAlgorithmParameterException.java \
|
||||
java/security/InvalidKeyException.java \
|
||||
java/security/InvalidParameterException.java \
|
||||
java/security/Key.java \
|
||||
java/security/KeyException.java \
|
||||
java/security/KeyPair.java \
|
||||
java/security/KeyPairGenerator.java \
|
||||
java/security/KeyPairGeneratorSpi.java \
|
||||
java/security/MessageDigest.java \
|
||||
java/security/NoSuchAlgorithmException.java \
|
||||
java/security/NoSuchProviderException.java \
|
||||
java/security/PrivateKey.java \
|
||||
java/security/Provider.java \
|
||||
java/security/PublicKey.java \
|
||||
java/security/SecureClassLoader.java \
|
||||
java/security/SecureRandom.java \
|
||||
java/security/Security.java \
|
||||
java/security/Signature.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/InvalidKeySpecException.java \
|
||||
java/security/spec/InvalidParameterSpecException.java \
|
||||
java/security/spec/KeySpec.java \
|
||||
java/security/spec/RSAPrivateCrtKeySpec.java \
|
||||
java/security/spec/RSAPrivateKeySpec.java \
|
||||
java/security/spec/RSAPublicKeySpec.java \
|
||||
java/sql/CallableStatement.java \
|
||||
java/sql/Connection.java \
|
||||
java/sql/DataTruncation.java \
|
||||
java/sql/DatabaseMetaData.java \
|
||||
java/sql/Date.java \
|
||||
java/sql/Driver.java \
|
||||
java/sql/DriverManager.java \
|
||||
java/sql/DriverPropertyInfo.java \
|
||||
java/sql/PreparedStatement.java \
|
||||
java/sql/ResultSet.java \
|
||||
java/sql/ResultSetMetaData.java \
|
||||
java/sql/SQLException.java \
|
||||
java/sql/SQLWarning.java \
|
||||
java/sql/Statement.java \
|
||||
java/sql/Time.java \
|
||||
java/sql/Timestamp.java \
|
||||
java/sql/Types.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/CollationElementIterator.java \
|
||||
java/text/CollationKey.java \
|
||||
java/text/Collator.java \
|
||||
java/text/DateFormat.java \
|
||||
java/text/DateFormatSymbols.java \
|
||||
java/text/DecimalFormat.java \
|
||||
|
@ -840,13 +835,34 @@ java/text/MessageFormat.java \
|
|||
java/text/NumberFormat.java \
|
||||
java/text/ParseException.java \
|
||||
java/text/ParsePosition.java \
|
||||
java/text/RuleBasedCollator.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/Collection.java \
|
||||
java/util/Comparator.java \
|
||||
java/util/ConcurrentModificationException.java \
|
||||
java/util/Date.java \
|
||||
java/util/Dictionary.java \
|
||||
|
@ -856,9 +872,6 @@ java/util/EventListener.java \
|
|||
java/util/EventObject.java \
|
||||
java/util/GregorianCalendar.java \
|
||||
java/util/Hashtable.java \
|
||||
java/util/Iterator.java \
|
||||
java/util/List.java \
|
||||
java/util/ListIterator.java \
|
||||
java/util/ListResourceBundle.java \
|
||||
java/util/Locale.java \
|
||||
java/util/MissingResourceException.java \
|
||||
|
@ -866,7 +879,6 @@ java/util/NoSuchElementException.java \
|
|||
java/util/Observable.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 \
|
||||
|
@ -875,27 +887,115 @@ 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/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/DigestException.java \
|
||||
java/security/GeneralSecurityException.java \
|
||||
java/security/InvalidAlgorithmParameterException.java \
|
||||
java/security/InvalidKeyException.java \
|
||||
java/security/InvalidParameterException.java \
|
||||
java/security/Key.java \
|
||||
java/security/KeyException.java \
|
||||
java/security/KeyPair.java \
|
||||
java/security/KeyPairGenerator.java \
|
||||
java/security/KeyPairGeneratorSpi.java \
|
||||
java/security/NoSuchProviderException.java \
|
||||
java/security/PrivateKey.java \
|
||||
java/security/Provider.java \
|
||||
java/security/PublicKey.java \
|
||||
java/security/SecureRandom.java \
|
||||
java/security/Security.java \
|
||||
java/security/Signature.java \
|
||||
java/security/SignatureException.java \
|
||||
java/security/spec/AlgorithmParameterSpec.java \
|
||||
java/security/spec/InvalidKeySpecException.java \
|
||||
java/security/spec/InvalidParameterSpecException.java \
|
||||
java/security/spec/KeySpec.java \
|
||||
java/security/spec/RSAPrivateCrtKeySpec.java \
|
||||
java/security/spec/RSAPrivateKeySpec.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/Connection.java \
|
||||
java/sql/DataTruncation.java \
|
||||
java/sql/DatabaseMetaData.java \
|
||||
java/sql/Date.java \
|
||||
java/sql/Driver.java \
|
||||
java/sql/DriverManager.java \
|
||||
java/sql/DriverPropertyInfo.java \
|
||||
java/sql/PreparedStatement.java \
|
||||
java/sql/ResultSet.java \
|
||||
java/sql/ResultSetMetaData.java \
|
||||
java/sql/SQLException.java \
|
||||
java/sql/SQLWarning.java \
|
||||
java/sql/Statement.java \
|
||||
java/sql/Time.java \
|
||||
java/sql/Timestamp.java \
|
||||
java/sql/Types.java \
|
||||
java/beans/beancontext/BeanContext.java \
|
||||
java/beans/beancontext/BeanContextChild.java \
|
||||
java/beans/beancontext/BeanContextChildComponentProxy.java \
|
||||
java/beans/beancontext/BeanContextChildSupport.java \
|
||||
java/beans/beancontext/BeanContextContainerProxy.java \
|
||||
java/beans/beancontext/BeanContextEvent.java \
|
||||
java/beans/beancontext/BeanContextMembershipEvent.java \
|
||||
java/beans/beancontext/BeanContextMembershipListener.java \
|
||||
java/beans/beancontext/BeanContextProxy.java \
|
||||
java/beans/beancontext/BeanContextServiceAvailableEvent.java \
|
||||
java/beans/beancontext/BeanContextServiceProvider.java \
|
||||
java/beans/beancontext/BeanContextServiceProviderBeanInfo.java \
|
||||
java/beans/beancontext/BeanContextServiceRevokedEvent.java \
|
||||
java/beans/beancontext/BeanContextServiceRevokedListener.java \
|
||||
java/beans/beancontext/BeanContextServices.java \
|
||||
java/beans/beancontext/BeanContextServicesListener.java \
|
||||
java/beans/BeanDescriptor.java \
|
||||
java/beans/BeanInfo.java \
|
||||
java/beans/Beans.java \
|
||||
java/beans/Customizer.java \
|
||||
java/beans/DesignMode.java \
|
||||
java/beans/EventSetDescriptor.java \
|
||||
java/beans/FeatureDescriptor.java \
|
||||
java/beans/IndexedPropertyDescriptor.java \
|
||||
java/beans/IntrospectionException.java \
|
||||
java/beans/Introspector.java \
|
||||
java/beans/MethodDescriptor.java \
|
||||
java/beans/ParameterDescriptor.java \
|
||||
java/beans/PropertyChangeEvent.java \
|
||||
java/beans/PropertyChangeListener.java \
|
||||
java/beans/PropertyChangeSupport.java \
|
||||
java/beans/PropertyDescriptor.java \
|
||||
java/beans/PropertyEditor.java \
|
||||
java/beans/PropertyEditorManager.java \
|
||||
java/beans/PropertyEditorSupport.java \
|
||||
java/beans/PropertyVetoException.java \
|
||||
java/beans/SimpleBeanInfo.java \
|
||||
java/beans/VetoableChangeListener.java \
|
||||
java/beans/VetoableChangeSupport.java \
|
||||
java/beans/Visibility.java
|
||||
|
||||
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/natOutput_EUCJIS.cc \
|
||||
gnu/gcj/convert/natOutput_SJIS.cc \
|
||||
gnu/gcj/io/natSimpleSHSStream.cc \
|
||||
gnu/gcj/io/shs.cc \
|
||||
gnu/gcj/jni/natNativeThread.cc \
|
||||
gnu/gcj/runtime/natFirstThread.cc \
|
||||
java/io/natFile.cc \
|
||||
java/io/natFileDescriptor.cc \
|
||||
java/io/natObjectInputStream.cc \
|
||||
java/io/natObjectOutputStream.cc \
|
||||
java/lang/natCharacter.cc \
|
||||
java/lang/natClass.cc \
|
||||
java/lang/natClassLoader.cc \
|
||||
|
@ -1035,12 +1139,3 @@ distclean-multi:
|
|||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
|
||||
maintainer-clean-multi:
|
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean
|
||||
|
||||
|
||||
## ################################################################
|
||||
|
||||
|
||||
## See above.
|
||||
cygnus_hack =
|
||||
|
||||
|
||||
|
|
|
@ -98,6 +98,7 @@ OBJDUMP = @OBJDUMP@
|
|||
PACKAGE = @PACKAGE@
|
||||
PERL = @PERL@
|
||||
RANLIB = @RANLIB@
|
||||
SYSDEP_SOURCES = @SYSDEP_SOURCES@
|
||||
SYSTEMSPEC = @SYSTEMSPEC@
|
||||
THREADDEPS = @THREADDEPS@
|
||||
THREADINCS = @THREADINCS@
|
||||
|
@ -138,6 +139,8 @@ data_DATA = libgcj.zip
|
|||
|
||||
@NATIVE_TRUE@bin_PROGRAMS = \
|
||||
@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_FALSE@GCJ = \
|
||||
|
@ -229,7 +232,9 @@ SUFFIXES = .class .java .h
|
|||
|
||||
nat_headers = $(ordinary_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
|
||||
|
@ -293,23 +298,48 @@ gnu/gcj/convert/UnicodeToBytes.java
|
|||
special_java_source_files = java/lang/Class.java java/lang/Object.java
|
||||
|
||||
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/AWTException.java \
|
||||
java/awt/ActiveEvent.java \
|
||||
java/awt/Adjustable.java \
|
||||
java/awt/BorderLayout.java \
|
||||
java/awt/Color.java \
|
||||
java/awt/Component.java \
|
||||
java/awt/Container.java \
|
||||
java/awt/Dimension.java \
|
||||
java/awt/Event.java \
|
||||
java/awt/Font.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/LayoutManager2.java \
|
||||
java/awt/Menu.java \
|
||||
|
@ -317,56 +347,31 @@ java/awt/MenuBar.java \
|
|||
java/awt/MenuComponent.java \
|
||||
java/awt/MenuContainer.java \
|
||||
java/awt/MenuItem.java \
|
||||
java/awt/Paint.java \
|
||||
java/awt/PaintContext.java \
|
||||
java/awt/Point.java \
|
||||
java/awt/Rectangle.java \
|
||||
java/awt/AWTError.java \
|
||||
java/awt/Shape.java \
|
||||
java/awt/TextArea.java \
|
||||
java/awt/TextComponent.java \
|
||||
java/awt/Toolkit.java \
|
||||
java/awt/Transparency.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/Point2D.java \
|
||||
java/awt/peer/ComponentPeer.java \
|
||||
java/awt/peer/ContainerPeer.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@$(awt_java_source_files)
|
||||
|
@ -375,11 +380,12 @@ java/awt/peer/WindowPeer.java
|
|||
built_java_source_files = java/lang/ConcreteProcess.java
|
||||
|
||||
ordinary_java_source_files = $(convert_source_files) \
|
||||
gnu/gcj/io/DefaultMimeTypes.java \
|
||||
gnu/gcj/io/MimeTypes.java \
|
||||
gnu/gcj/jni/NativeThread.java \
|
||||
gnu/gcj/runtime/VMClassLoader.java \
|
||||
gnu/gcj/runtime/FirstThread.java \
|
||||
gnu/gcj/protocol/http/Connection.java \
|
||||
gnu/gcj/protocol/http/Handler.java \
|
||||
gnu/gcj/protocol/file/Connection.java \
|
||||
gnu/gcj/protocol/file/Handler.java \
|
||||
gnu/gcj/protocol/jar/Connection.java \
|
||||
gnu/gcj/protocol/jar/Handler.java \
|
||||
gnu/gcj/text/BaseBreakIterator.java \
|
||||
gnu/gcj/text/CharacterBreakIterator.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/SentenceBreakIterator.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/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/BufferedOutputStream.java \
|
||||
java/io/BufferedReader.java \
|
||||
|
@ -411,7 +438,6 @@ java/io/DataOutput.java \
|
|||
java/io/DataOutputStream.java \
|
||||
java/io/EOFException.java \
|
||||
java/io/File.java \
|
||||
java/io/FileDescriptor.java \
|
||||
java/io/FileInputStream.java \
|
||||
java/io/FileNotFoundException.java \
|
||||
java/io/FileOutputStream.java \
|
||||
|
@ -428,11 +454,10 @@ java/io/InputStreamReader.java \
|
|||
java/io/InterruptedIOException.java \
|
||||
java/io/LineNumberInputStream.java \
|
||||
java/io/LineNumberReader.java \
|
||||
java/io/ObjectStreamException.java \
|
||||
java/io/OptionalDataException.java \
|
||||
java/io/OutputStream.java \
|
||||
java/io/OutputStreamWriter.java \
|
||||
java/io/PipedInputStream.java \
|
||||
java/io/Externalizable.java \
|
||||
java/io/FileDescriptor.java \
|
||||
java/io/PipedOutputStream.java \
|
||||
java/io/PipedReader.java \
|
||||
java/io/PipedWriter.java \
|
||||
|
@ -444,7 +469,6 @@ java/io/RandomAccessFile.java \
|
|||
java/io/Reader.java \
|
||||
java/io/SequenceInputStream.java \
|
||||
java/io/Serializable.java \
|
||||
java/io/StreamCorruptedException.java \
|
||||
java/io/StreamTokenizer.java \
|
||||
java/io/StringBufferInputStream.java \
|
||||
java/io/StringReader.java \
|
||||
|
@ -453,6 +477,35 @@ java/io/SyncFailedException.java \
|
|||
java/io/UTFDataFormatException.java \
|
||||
java/io/UnsupportedEncodingException.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/ArithmeticException.java \
|
||||
java/lang/ArrayIndexOutOfBoundsException.java \
|
||||
|
@ -481,10 +534,10 @@ java/lang/IllegalMonitorStateException.java \
|
|||
java/lang/IllegalStateException.java \
|
||||
java/lang/IllegalThreadStateException.java \
|
||||
java/lang/IncompatibleClassChangeError.java \
|
||||
java/lang/IndexOutOfBoundsException.java \
|
||||
java/lang/InstantiationError.java \
|
||||
java/lang/InstantiationException.java \
|
||||
java/lang/Integer.java \
|
||||
java/lang/IndexOutOfBoundsException.java \
|
||||
java/lang/InstantiationException.java \
|
||||
java/lang/InternalError.java \
|
||||
java/lang/InterruptedException.java \
|
||||
java/lang/LinkageError.java \
|
||||
|
@ -522,107 +575,42 @@ java/lang/UnsupportedOperationException.java \
|
|||
java/lang/VerifyError.java \
|
||||
java/lang/VirtualMachineError.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/ConnectException.java \
|
||||
java/net/ContentHandler.java \
|
||||
java/net/ContentHandlerFactory.java \
|
||||
java/net/DatagramPacket.java \
|
||||
java/net/DatagramSocket.java \
|
||||
java/net/DatagramSocketImpl.java \
|
||||
java/net/FileNameMap.java \
|
||||
java/net/HttpURLConnection.java \
|
||||
java/net/HttpURLConnection.java \
|
||||
java/net/InetAddress.java \
|
||||
java/net/JarURLConnection.java \
|
||||
java/net/MalformedURLException.java \
|
||||
java/net/MulticastSocket.java \
|
||||
java/net/NoRouteToHostException.java \
|
||||
java/net/PlainDatagramSocketImpl.java \
|
||||
java/net/PlainSocketImpl.java \
|
||||
java/net/ProtocolException.java \
|
||||
java/net/ServerSocket.java \
|
||||
java/net/URL.java \
|
||||
java/net/Socket.java \
|
||||
java/net/SocketException.java \
|
||||
java/net/SocketImpl.java \
|
||||
java/net/SocketImplFactory.java \
|
||||
java/net/SocketOptions.java \
|
||||
java/net/URL.java \
|
||||
java/net/URLClassLoader.java \
|
||||
java/net/URLConnection.java \
|
||||
java/net/URLDecoder.java \
|
||||
java/net/URLEncoder.java \
|
||||
java/net/URLStreamHandler.java \
|
||||
java/net/URLStreamHandlerFactory.java \
|
||||
java/net/UnknownHostException.java \
|
||||
java/net/UnknownServiceException.java \
|
||||
java/security/AlgorithmParameterGeneratorSpi.java \
|
||||
java/security/DigestException.java \
|
||||
java/security/GeneralSecurityException.java \
|
||||
java/security/InvalidAlgorithmParameterException.java \
|
||||
java/security/InvalidKeyException.java \
|
||||
java/security/InvalidParameterException.java \
|
||||
java/security/Key.java \
|
||||
java/security/KeyException.java \
|
||||
java/security/KeyPair.java \
|
||||
java/security/KeyPairGenerator.java \
|
||||
java/security/KeyPairGeneratorSpi.java \
|
||||
java/security/MessageDigest.java \
|
||||
java/security/NoSuchAlgorithmException.java \
|
||||
java/security/NoSuchProviderException.java \
|
||||
java/security/PrivateKey.java \
|
||||
java/security/Provider.java \
|
||||
java/security/PublicKey.java \
|
||||
java/security/SecureClassLoader.java \
|
||||
java/security/SecureRandom.java \
|
||||
java/security/Security.java \
|
||||
java/security/Signature.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/InvalidKeySpecException.java \
|
||||
java/security/spec/InvalidParameterSpecException.java \
|
||||
java/security/spec/KeySpec.java \
|
||||
java/security/spec/RSAPrivateCrtKeySpec.java \
|
||||
java/security/spec/RSAPrivateKeySpec.java \
|
||||
java/security/spec/RSAPublicKeySpec.java \
|
||||
java/sql/CallableStatement.java \
|
||||
java/sql/Connection.java \
|
||||
java/sql/DataTruncation.java \
|
||||
java/sql/DatabaseMetaData.java \
|
||||
java/sql/Date.java \
|
||||
java/sql/Driver.java \
|
||||
java/sql/DriverManager.java \
|
||||
java/sql/DriverPropertyInfo.java \
|
||||
java/sql/PreparedStatement.java \
|
||||
java/sql/ResultSet.java \
|
||||
java/sql/ResultSetMetaData.java \
|
||||
java/sql/SQLException.java \
|
||||
java/sql/SQLWarning.java \
|
||||
java/sql/Statement.java \
|
||||
java/sql/Time.java \
|
||||
java/sql/Timestamp.java \
|
||||
java/sql/Types.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/CollationElementIterator.java \
|
||||
java/text/CollationKey.java \
|
||||
java/text/Collator.java \
|
||||
java/text/DateFormat.java \
|
||||
java/text/DateFormatSymbols.java \
|
||||
java/text/DecimalFormat.java \
|
||||
|
@ -633,13 +621,34 @@ java/text/MessageFormat.java \
|
|||
java/text/NumberFormat.java \
|
||||
java/text/ParseException.java \
|
||||
java/text/ParsePosition.java \
|
||||
java/text/RuleBasedCollator.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/Collection.java \
|
||||
java/util/Comparator.java \
|
||||
java/util/ConcurrentModificationException.java \
|
||||
java/util/Date.java \
|
||||
java/util/Dictionary.java \
|
||||
|
@ -649,9 +658,6 @@ java/util/EventListener.java \
|
|||
java/util/EventObject.java \
|
||||
java/util/GregorianCalendar.java \
|
||||
java/util/Hashtable.java \
|
||||
java/util/Iterator.java \
|
||||
java/util/List.java \
|
||||
java/util/ListIterator.java \
|
||||
java/util/ListResourceBundle.java \
|
||||
java/util/Locale.java \
|
||||
java/util/MissingResourceException.java \
|
||||
|
@ -659,7 +665,6 @@ java/util/NoSuchElementException.java \
|
|||
java/util/Observable.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 \
|
||||
|
@ -668,27 +673,115 @@ 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/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/DigestException.java \
|
||||
java/security/GeneralSecurityException.java \
|
||||
java/security/InvalidAlgorithmParameterException.java \
|
||||
java/security/InvalidKeyException.java \
|
||||
java/security/InvalidParameterException.java \
|
||||
java/security/Key.java \
|
||||
java/security/KeyException.java \
|
||||
java/security/KeyPair.java \
|
||||
java/security/KeyPairGenerator.java \
|
||||
java/security/KeyPairGeneratorSpi.java \
|
||||
java/security/NoSuchProviderException.java \
|
||||
java/security/PrivateKey.java \
|
||||
java/security/Provider.java \
|
||||
java/security/PublicKey.java \
|
||||
java/security/SecureRandom.java \
|
||||
java/security/Security.java \
|
||||
java/security/Signature.java \
|
||||
java/security/SignatureException.java \
|
||||
java/security/spec/AlgorithmParameterSpec.java \
|
||||
java/security/spec/InvalidKeySpecException.java \
|
||||
java/security/spec/InvalidParameterSpecException.java \
|
||||
java/security/spec/KeySpec.java \
|
||||
java/security/spec/RSAPrivateCrtKeySpec.java \
|
||||
java/security/spec/RSAPrivateKeySpec.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/Connection.java \
|
||||
java/sql/DataTruncation.java \
|
||||
java/sql/DatabaseMetaData.java \
|
||||
java/sql/Date.java \
|
||||
java/sql/Driver.java \
|
||||
java/sql/DriverManager.java \
|
||||
java/sql/DriverPropertyInfo.java \
|
||||
java/sql/PreparedStatement.java \
|
||||
java/sql/ResultSet.java \
|
||||
java/sql/ResultSetMetaData.java \
|
||||
java/sql/SQLException.java \
|
||||
java/sql/SQLWarning.java \
|
||||
java/sql/Statement.java \
|
||||
java/sql/Time.java \
|
||||
java/sql/Timestamp.java \
|
||||
java/sql/Types.java \
|
||||
java/beans/beancontext/BeanContext.java \
|
||||
java/beans/beancontext/BeanContextChild.java \
|
||||
java/beans/beancontext/BeanContextChildComponentProxy.java \
|
||||
java/beans/beancontext/BeanContextChildSupport.java \
|
||||
java/beans/beancontext/BeanContextContainerProxy.java \
|
||||
java/beans/beancontext/BeanContextEvent.java \
|
||||
java/beans/beancontext/BeanContextMembershipEvent.java \
|
||||
java/beans/beancontext/BeanContextMembershipListener.java \
|
||||
java/beans/beancontext/BeanContextProxy.java \
|
||||
java/beans/beancontext/BeanContextServiceAvailableEvent.java \
|
||||
java/beans/beancontext/BeanContextServiceProvider.java \
|
||||
java/beans/beancontext/BeanContextServiceProviderBeanInfo.java \
|
||||
java/beans/beancontext/BeanContextServiceRevokedEvent.java \
|
||||
java/beans/beancontext/BeanContextServiceRevokedListener.java \
|
||||
java/beans/beancontext/BeanContextServices.java \
|
||||
java/beans/beancontext/BeanContextServicesListener.java \
|
||||
java/beans/BeanDescriptor.java \
|
||||
java/beans/BeanInfo.java \
|
||||
java/beans/Beans.java \
|
||||
java/beans/Customizer.java \
|
||||
java/beans/DesignMode.java \
|
||||
java/beans/EventSetDescriptor.java \
|
||||
java/beans/FeatureDescriptor.java \
|
||||
java/beans/IndexedPropertyDescriptor.java \
|
||||
java/beans/IntrospectionException.java \
|
||||
java/beans/Introspector.java \
|
||||
java/beans/MethodDescriptor.java \
|
||||
java/beans/ParameterDescriptor.java \
|
||||
java/beans/PropertyChangeEvent.java \
|
||||
java/beans/PropertyChangeListener.java \
|
||||
java/beans/PropertyChangeSupport.java \
|
||||
java/beans/PropertyDescriptor.java \
|
||||
java/beans/PropertyEditor.java \
|
||||
java/beans/PropertyEditorManager.java \
|
||||
java/beans/PropertyEditorSupport.java \
|
||||
java/beans/PropertyVetoException.java \
|
||||
java/beans/SimpleBeanInfo.java \
|
||||
java/beans/VetoableChangeListener.java \
|
||||
java/beans/VetoableChangeSupport.java \
|
||||
java/beans/Visibility.java
|
||||
|
||||
|
||||
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/natOutput_EUCJIS.cc \
|
||||
gnu/gcj/convert/natOutput_SJIS.cc \
|
||||
gnu/gcj/io/natSimpleSHSStream.cc \
|
||||
gnu/gcj/io/shs.cc \
|
||||
gnu/gcj/jni/natNativeThread.cc \
|
||||
gnu/gcj/runtime/natFirstThread.cc \
|
||||
java/io/natFile.cc \
|
||||
java/io/natFileDescriptor.cc \
|
||||
java/io/natObjectInputStream.cc \
|
||||
java/io/natObjectOutputStream.cc \
|
||||
java/lang/natCharacter.cc \
|
||||
java/lang/natClass.cc \
|
||||
java/lang/natClassLoader.cc \
|
||||
|
@ -800,8 +897,6 @@ MULTIDIRS =
|
|||
MULTISUBDIR =
|
||||
MULTIDO = true
|
||||
MULTICLEAN = true
|
||||
|
||||
cygnus_hack =
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
||||
CONFIG_HEADER = ./include/config.h
|
||||
|
@ -829,6 +924,8 @@ jv_convert_OBJECTS =
|
|||
gij_OBJECTS = gij.o
|
||||
gen_from_JIS_OBJECTS =
|
||||
gen_from_JIS_LDFLAGS =
|
||||
SCRIPTS = $(bin_SCRIPTS)
|
||||
|
||||
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)
|
||||
|
@ -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/UnicodeToBytes.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/protocol/file/Connection.P \
|
||||
.deps/gnu/gcj/io/SimpleSHSStream.P .deps/gnu/gcj/jni/NativeThread.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/http/Connection.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/SentenceBreakIterator.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/AWTException.P .deps/java/awt/ActiveEvent.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/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/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/BufferedWriter.P .deps/java/io/ByteArrayInputStream.P \
|
||||
.deps/java/io/ByteArrayOutputStream.P .deps/java/io/CharArrayReader.P \
|
||||
.deps/java/io/CharArrayWriter.P .deps/java/io/CharConversionException.P \
|
||||
.deps/java/io/DataInput.P .deps/java/io/DataInputStream.P \
|
||||
.deps/java/io/DataOutput.P .deps/java/io/DataOutputStream.P \
|
||||
.deps/java/io/EOFException.P .deps/java/io/File.P \
|
||||
.deps/java/io/FileDescriptor.P .deps/java/io/FileInputStream.P \
|
||||
.deps/java/io/FileNotFoundException.P .deps/java/io/FileOutputStream.P \
|
||||
.deps/java/io/FileReader.P .deps/java/io/FileWriter.P \
|
||||
.deps/java/io/FilenameFilter.P .deps/java/io/FilterInputStream.P \
|
||||
.deps/java/io/FilterOutputStream.P .deps/java/io/FilterReader.P \
|
||||
.deps/java/io/FilterWriter.P .deps/java/io/IOException.P \
|
||||
.deps/java/io/InputStream.P .deps/java/io/InputStreamReader.P \
|
||||
.deps/java/io/EOFException.P .deps/java/io/Externalizable.P \
|
||||
.deps/java/io/File.P .deps/java/io/FileDescriptor.P \
|
||||
.deps/java/io/FileInputStream.P .deps/java/io/FileNotFoundException.P \
|
||||
.deps/java/io/FileOutputStream.P .deps/java/io/FileReader.P \
|
||||
.deps/java/io/FileWriter.P .deps/java/io/FilenameFilter.P \
|
||||
.deps/java/io/FilterInputStream.P .deps/java/io/FilterOutputStream.P \
|
||||
.deps/java/io/FilterReader.P .deps/java/io/FilterWriter.P \
|
||||
.deps/java/io/IOException.P .deps/java/io/InputStream.P \
|
||||
.deps/java/io/InputStreamReader.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/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/OutputStreamWriter.P .deps/java/io/PipedInputStream.P \
|
||||
.deps/java/io/PipedOutputStream.P .deps/java/io/PipedReader.P \
|
||||
.deps/java/io/PipedWriter.P .deps/java/io/PrintStream.P \
|
||||
.deps/java/io/PrintWriter.P .deps/java/io/PushbackInputStream.P \
|
||||
.deps/java/io/PushbackReader.P .deps/java/io/RandomAccessFile.P \
|
||||
.deps/java/io/Reader.P .deps/java/io/SequenceInputStream.P \
|
||||
.deps/java/io/Serializable.P .deps/java/io/StreamCorruptedException.P \
|
||||
.deps/java/io/Reader.P .deps/java/io/Replaceable.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/StringReader.P .deps/java/io/StringWriter.P \
|
||||
.deps/java/io/SyncFailedException.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/ArithmeticException.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/UnknownServiceException.P \
|
||||
.deps/java/security/AlgorithmParameterGeneratorSpi.P \
|
||||
.deps/java/security/BasicPermission.P \
|
||||
.deps/java/security/DigestException.P \
|
||||
.deps/java/security/DigestOutputStream.P \
|
||||
.deps/java/security/GeneralSecurityException.P \
|
||||
.deps/java/security/Guard.P \
|
||||
.deps/java/security/InvalidAlgorithmParameterException.P \
|
||||
.deps/java/security/InvalidKeyException.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/NoSuchAlgorithmException.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/PublicKey.P .deps/java/security/SecureClassLoader.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/ParseException.P .deps/java/text/ParsePosition.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/Comparator.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)
|
||||
@rm -f gen-from-JIS$(EXEEXT)
|
||||
$(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:
|
||||
$(CXXCOMPILE) -c $<
|
||||
.cc.lo:
|
||||
|
@ -1593,7 +1782,7 @@ install-info-am:
|
|||
install-info: install-info-recursive
|
||||
install-exec-am: install-toolexeclibLIBRARIES \
|
||||
install-toolexeclibLTLIBRARIES install-binPROGRAMS \
|
||||
install-toolexeclibDATA
|
||||
install-binSCRIPTS install-toolexeclibDATA
|
||||
install-exec: install-exec-recursive
|
||||
|
||||
install-data-am: install-dataDATA install-data-local
|
||||
|
@ -1604,9 +1793,11 @@ install-am: all-am
|
|||
install: install-recursive
|
||||
uninstall-am: uninstall-toolexeclibLIBRARIES \
|
||||
uninstall-toolexeclibLTLIBRARIES uninstall-binPROGRAMS \
|
||||
uninstall-dataDATA uninstall-toolexeclibDATA
|
||||
uninstall-binSCRIPTS uninstall-dataDATA \
|
||||
uninstall-toolexeclibDATA
|
||||
uninstall: uninstall-recursive
|
||||
all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(PROGRAMS) $(DATA)
|
||||
all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) \
|
||||
$(DATA)
|
||||
all-redirect: all-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
|
||||
|
@ -1614,7 +1805,8 @@ installdirs: installdirs-recursive
|
|||
installdirs-am:
|
||||
$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir) \
|
||||
$(DESTDIR)$(toolexeclibdir) $(DESTDIR)$(bindir) \
|
||||
$(DESTDIR)$(datadir) $(DESTDIR)$(toolexeclibdir)
|
||||
$(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
|
||||
$(DESTDIR)$(toolexeclibdir)
|
||||
|
||||
|
||||
mostlyclean-generic:
|
||||
|
@ -1680,7 +1872,8 @@ uninstall-toolexeclibLTLIBRARIES install-toolexeclibLTLIBRARIES \
|
|||
mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
|
||||
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
|
||||
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-data-recursive uninstall-data-recursive install-exec-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;' \
|
||||
$(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:
|
||||
$(PRE_INSTALL)
|
||||
@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();
|
||||
}
|
||||
|
||||
|
36
libjava/configure
vendored
36
libjava/configure
vendored
|
@ -5118,24 +5118,33 @@ done
|
|||
test -n "$PERL" || PERL="false"
|
||||
|
||||
|
||||
if test "$enable_sjlj_exceptions" = yes; then
|
||||
SYSDEP_SOURCES=
|
||||
|
||||
case "${host}" in
|
||||
i?86-*-linux*)
|
||||
SIGNAL_HANDLER=include/i386-signal.h
|
||||
;;
|
||||
sparc-sun-solaris*)
|
||||
SIGNAL_HANDLER=include/sparc-signal.h
|
||||
;;
|
||||
ia64-*)
|
||||
SYSDEP_SOURCES=sysdep/ia64.c
|
||||
test -d sysdep || mkdir sysdep
|
||||
;;
|
||||
*)
|
||||
SIGNAL_HANDLER=include/default-signal.h
|
||||
;;
|
||||
esac
|
||||
|
||||
# If we're using sjlj exceptions, forget what we just learned.
|
||||
if test "$libgcj_sjlj" = yes; then
|
||||
SIGNAL_HANDLER=include/default-signal.h
|
||||
else
|
||||
case "${host}" in
|
||||
i?86-*-linux*)
|
||||
SIGNAL_HANDLER=include/i386-signal.h
|
||||
;;
|
||||
sparc-sun-solaris*)
|
||||
SIGNAL_HANDLER=include/sparc-signal.h
|
||||
;;
|
||||
*)
|
||||
SIGNAL_HANDLER=include/default-signal.h
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if test "${multilib}" = "yes"; then
|
||||
multilib_arg="--enable-multilib"
|
||||
else
|
||||
|
@ -5367,6 +5376,7 @@ s%@EH_COMMON_INCLUDE@%$EH_COMMON_INCLUDE%g
|
|||
s%@AM_RUNTESTFLAGS@%$AM_RUNTESTFLAGS%g
|
||||
s%@ALLOCA@%$ALLOCA%g
|
||||
s%@PERL@%$PERL%g
|
||||
s%@SYSDEP_SOURCES@%$SYSDEP_SOURCES%g
|
||||
s%@here@%$here%g
|
||||
|
||||
CEOF
|
||||
|
|
|
@ -66,6 +66,11 @@ case "${host}" in
|
|||
;;
|
||||
sparc-*)
|
||||
;;
|
||||
ia64-*)
|
||||
libgcj_flags="${libgcj_flags} -funwind-tables"
|
||||
libgcj_sjlj=yes
|
||||
libgcj_interpreter=yes
|
||||
;;
|
||||
*)
|
||||
libgcj_sjlj=yes
|
||||
;;
|
||||
|
|
|
@ -733,22 +733,31 @@ AC_FUNC_ALLOCA
|
|||
|
||||
AC_CHECK_PROGS(PERL, perl, false)
|
||||
|
||||
if test "$enable_sjlj_exceptions" = yes; then
|
||||
SYSDEP_SOURCES=
|
||||
|
||||
case "${host}" in
|
||||
i?86-*-linux*)
|
||||
SIGNAL_HANDLER=include/i386-signal.h
|
||||
;;
|
||||
sparc-sun-solaris*)
|
||||
SIGNAL_HANDLER=include/sparc-signal.h
|
||||
;;
|
||||
ia64-*)
|
||||
SYSDEP_SOURCES=sysdep/ia64.c
|
||||
test -d sysdep || mkdir sysdep
|
||||
;;
|
||||
*)
|
||||
SIGNAL_HANDLER=include/default-signal.h
|
||||
;;
|
||||
esac
|
||||
|
||||
# If we're using sjlj exceptions, forget what we just learned.
|
||||
if test "$libgcj_sjlj" = yes; then
|
||||
SIGNAL_HANDLER=include/default-signal.h
|
||||
else
|
||||
case "${host}" in
|
||||
i?86-*-linux*)
|
||||
SIGNAL_HANDLER=include/i386-signal.h
|
||||
;;
|
||||
sparc-sun-solaris*)
|
||||
SIGNAL_HANDLER=include/sparc-signal.h
|
||||
;;
|
||||
*)
|
||||
SIGNAL_HANDLER=include/default-signal.h
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
AC_SUBST(SYSDEP_SOURCES)
|
||||
|
||||
AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
|
||||
|
||||
if test "${multilib}" = "yes"; then
|
||||
|
|
|
@ -99,6 +99,7 @@ OBJDUMP = @OBJDUMP@
|
|||
PACKAGE = @PACKAGE@
|
||||
PERL = @PERL@
|
||||
RANLIB = @RANLIB@
|
||||
SYSDEP_SOURCES = @SYSDEP_SOURCES@
|
||||
SYSTEMSPEC = @SYSTEMSPEC@
|
||||
THREADDEPS = @THREADDEPS@
|
||||
THREADINCS = @THREADINCS@
|
||||
|
|
|
@ -69,8 +69,24 @@ extern "Java"
|
|||
class InputStream;
|
||||
class InputStreamReader;
|
||||
class InterruptedIOException;
|
||||
class InvalidClassException;
|
||||
class InvalidObjectException;
|
||||
class LineNumberInputStream;
|
||||
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 OutputStreamWriter;
|
||||
class PipedInputStream;
|
||||
|
@ -85,6 +101,9 @@ extern "Java"
|
|||
class Reader;
|
||||
class SequenceInputStream;
|
||||
class Serializable;
|
||||
class SerializablePermission;
|
||||
class SimpleDigestStream;
|
||||
class StreamCorruptedException;
|
||||
class StreamTokenizer;
|
||||
class StringBufferInputStream;
|
||||
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@
|
||||
PERL = @PERL@
|
||||
RANLIB = @RANLIB@
|
||||
SYSDEP_SOURCES = @SYSDEP_SOURCES@
|
||||
SYSTEMSPEC = @SYSTEMSPEC@
|
||||
THREADDEPS = @THREADDEPS@
|
||||
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)
|
||||
|
||||
TAR = gtar
|
||||
TAR = tar
|
||||
GZIP_ENV = --best
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
|
@ -224,7 +225,7 @@ distdir: $(DISTFILES)
|
|||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pr $$/$$file $(distdir)/$$file; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|
|
|
@ -344,8 +344,14 @@
|
|||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if gethostbyname_r is only declared if _REENTRANT is defined */
|
||||
#undef GETHOSTBYNAME_R_NEEDS_REENTRANT
|
||||
/* Required define if using POSIX threads */
|
||||
#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 */
|
||||
#undef HAVE_STRUCT_HOSTENT_DATA
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// 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.
|
||||
|
||||
|
@ -38,7 +38,7 @@ do \
|
|||
} \
|
||||
while (0)
|
||||
|
||||
#define MAKE_THROW_FRAME do {} while (0)
|
||||
#define MAKE_THROW_FRAME(_exception) do {} while (0)
|
||||
|
||||
#else /* SJLJ_EXCEPTIONS */
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ details. */
|
|||
#define SIGNAL_HANDLER(_name) \
|
||||
static void _name (int _dummy)
|
||||
|
||||
#define MAKE_THROW_FRAME \
|
||||
#define MAKE_THROW_FRAME(_exception) \
|
||||
do \
|
||||
{ \
|
||||
void **_p = (void **)&_dummy; \
|
||||
|
|
|
@ -48,11 +48,6 @@ static void throw_incompatible_class_change_error (jstring msg)
|
|||
static void throw_null_pointer_exception ()
|
||||
__attribute__ ((__noreturn__));
|
||||
#endif
|
||||
#ifndef HANDLE_FPE
|
||||
static void throw_arithmetic_exception ()
|
||||
__attribute__ ((__noreturn__));
|
||||
#endif
|
||||
|
||||
|
||||
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)
|
||||
#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
|
||||
// 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;
|
||||
|
||||
register _Jv_word *sp = inv->sp;
|
||||
register unsigned char *pc = inv->pc;
|
||||
_Jv_word *sp = inv->sp;
|
||||
unsigned char *pc = inv->pc;
|
||||
_Jv_word *locals = inv->local_base ();
|
||||
|
||||
_Jv_word *pool_data = defining_class->constants.data;
|
||||
|
@ -1390,8 +1379,7 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
|||
{
|
||||
jint value2 = POPI();
|
||||
jint value1 = POPI();
|
||||
ZEROCHECK (value2);
|
||||
jint res = value1 / value2;
|
||||
jint res = _Jv_divI (value1, value2);
|
||||
PUSHI (res);
|
||||
}
|
||||
NEXT_INSN;
|
||||
|
@ -1401,8 +1389,7 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
|||
{
|
||||
jlong value2 = POPL();
|
||||
jlong value1 = POPL();
|
||||
ZEROCHECK (value2);
|
||||
jlong res = value1 / value2;
|
||||
jlong res = _Jv_divJ (value1, value2);
|
||||
PUSHL (res);
|
||||
}
|
||||
NEXT_INSN;
|
||||
|
@ -1412,7 +1399,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
|||
{
|
||||
jfloat value2 = POPF();
|
||||
jfloat value1 = POPF();
|
||||
ZEROCHECK (value2);
|
||||
jfloat res = value1 / value2;
|
||||
PUSHF (res);
|
||||
}
|
||||
|
@ -1423,7 +1409,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
|||
{
|
||||
jdouble value2 = POPD();
|
||||
jdouble value1 = POPD();
|
||||
ZEROCHECK (value2);
|
||||
jdouble res = value1 / value2;
|
||||
PUSHD (res);
|
||||
}
|
||||
|
@ -1433,9 +1418,8 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
|||
SAVE_PC;
|
||||
{
|
||||
jint value2 = POPI();
|
||||
jint value1 = POPI();
|
||||
ZEROCHECK (value2);
|
||||
jint res = value1 % value2;
|
||||
jint value1 = POPI();
|
||||
jint res = _Jv_remI (value1, value2);
|
||||
PUSHI (res);
|
||||
}
|
||||
NEXT_INSN;
|
||||
|
@ -1445,8 +1429,7 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
|||
{
|
||||
jlong value2 = POPL();
|
||||
jlong value1 = POPL();
|
||||
ZEROCHECK (value2);
|
||||
jlong res = value1 % value2;
|
||||
jlong res = _Jv_remJ (value1, value2);
|
||||
PUSHL (res);
|
||||
}
|
||||
NEXT_INSN;
|
||||
|
@ -1456,7 +1439,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
|||
{
|
||||
jfloat value2 = POPF();
|
||||
jfloat value1 = POPF();
|
||||
ZEROCHECK (value2);
|
||||
jfloat res = __ieee754_fmod (value1, value2);
|
||||
PUSHF (res);
|
||||
}
|
||||
|
@ -1467,7 +1449,6 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
|
|||
{
|
||||
jdouble value2 = POPD();
|
||||
jdouble value1 = POPD();
|
||||
ZEROCHECK (value2);
|
||||
jdouble res = __ieee754_fmod (value1, value2);
|
||||
PUSHD (res);
|
||||
}
|
||||
|
@ -2447,18 +2428,4 @@ throw_null_pointer_exception ()
|
|||
}
|
||||
#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
|
||||
|
|
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);
|
||||
jint _getMethods (JArray<java::lang::reflect::Method *> *result,
|
||||
jint offset);
|
||||
java::lang::reflect::Field *getPrivateField (jstring);
|
||||
java::lang::reflect::Method *getPrivateMethod (jstring, JArray<jclass> *);
|
||||
|
||||
public:
|
||||
JArray<java::lang::reflect::Field *> *getFields (void);
|
||||
|
||||
|
@ -234,6 +237,10 @@ private:
|
|||
// Friends classes and functions to implement the 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_RegisterClasses (jclass *classes);
|
||||
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
Reference in a new issue