[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