[rules-users] ShadowProxy & PersistentSet
Mark Proctor
mproctor at codehaus.org
Wed Apr 23 08:18:39 EDT 2008
Can you open a JIRA for this? If you provide a unit test with it, we'll
see if we can include this in 4.0.7. 5.0 will now have shadow proxies
any more, as default.
Mark
vdelbart wrote:
> I think the method cloneObject 'ShadowProxyUtils' could be improve like
> follow :
>
> public static Object cloneObject(Object original) {
> Object clone = null;
> if ( original instanceof Cloneable ) {
> try {
> Method cloneMethod = original.getClass().getMethod( "clone",
> new
> Class[0] );
> clone = cloneMethod.invoke( original,
> new Object[0] );
> } catch ( Exception e ) {
> /* Failed to clone. Don't worry about it, and just return
> * the original object. */
> clone = null;
> }
> }
>
> if ( clone == null ) {
> try {
> if ( original instanceof Map &&
> original != Collections.EMPTY_MAP &&
> !UNMODIFIABLE_MAP.isAssignableFrom( original.getClass()
> ) ) {
>
> /* empty and unmodifiable maps can't (and don't need to)
> be shadowed */
> clone = original.getClass().newInstance();
> ((Map) clone).putAll( (Map) original );
>
> } else if ( original instanceof Collection &&
> original != Collections.EMPTY_LIST &&
> original != Collections.EMPTY_SET &&
> !UNMODIFIABLE_COLLECTION.isAssignableFrom(
> original.getClass() ) ) {
>
> /* empty and unmodifiable collections can't (and don't
> need to) be shadowed */
> clone = original.getClass().newInstance();
> ((Collection) clone).addAll( (Collection) original );
>
> } else if ( original.getClass().isArray() ) {
> clone = cloneArray( original );
> }
>
> } catch ( Exception e ) {
> /* Failed to clone. Don't worry about it, and just return
> * the original object. */
> clone = null;
> }
> }
>
> if ( clone == null ) {
> clone = original;
> }
>
> return clone;
> }
>
>
> In this way my PersistentSet will be not clone and I will be able to
> continue to use shadow fact
>
> What do you think about ?
>
> V.
>
>
More information about the rules-users
mailing list