Blame |
Last modification |
View Log
| RSS feed
package com.owlike.genson.reflect;
import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
/**
* This class is used as filter for properties discovery. It uses java modifiers to check if a
* property (can be a method, field, constructor or any class that implements Member interface) is
* visible.
* <p/>
* The filter acts by excluding the properties with specified modifiers. Here are some examples :
* <p/>
* <pre>
* // will filter nothing :
* new VisibilityFilter();
*
* // exclude only private and transient:
* new VisibilityFilter(Modifier.TRANSIENT, Modifier.PRIVATE);
*
* // exclude only public!! and allow all the rest
* new VisibilityFilter(Modifier.public);
* </pre>
* <p/>
* So the idea is to pass to the constructor all the Modifier.XXX modifiers that you want to be
* filtered.
*
* @author eugen
* @see BeanMutatorAccessorResolver.StandardMutaAccessorResolver
*/
public final class VisibilityFilter
{
private final static int JAVA_MODIFIERS =
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
PUBLIC |
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
PROTECTED
|
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
PRIVATE |
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
ABSTRACT |
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
STATIC |
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
FINAL
|
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
1.5.0/docs/api/org/omg/CORBA/TRANSIENT.html">TRANSIENT |
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
VOLATILE |
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
SYNCHRONIZED |
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
NATIVE
|
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
STRICT |
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
INTERFACE;
public final static VisibilityFilter ABSTRACT =
new VisibilityFilter
(1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
ABSTRACT);
public final static VisibilityFilter PRIVATE =
new VisibilityFilter
(1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
1.5.0/docs/api/org/omg/CORBA/TRANSIENT.html">TRANSIENT,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
NATIVE,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
STATIC);
public final static VisibilityFilter ALL =
new VisibilityFilter
();
public final static VisibilityFilter NONE =
new VisibilityFilter
(JAVA_MODIFIERS
);
public final static VisibilityFilter PROTECTED =
new VisibilityFilter
(1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
1.5.0/docs/api/org/omg/CORBA/TRANSIENT.html">TRANSIENT,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
NATIVE,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
STATIC,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
PRIVATE);
public final static VisibilityFilter PACKAGE_PUBLIC =
new VisibilityFilter
(1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
1.5.0/docs/api/org/omg/CORBA/TRANSIENT.html">TRANSIENT,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
NATIVE,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
STATIC,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
PRIVATE,
1.5.0/docs/api/java/lang/reflect/Modifier.html">Modifier.
PROTECTED);
private int filter
;
/**
* Creates a new VisibilityFilter with specified modifiers. You must use existing values from
* Modifier class otherwise an exception will be thrown.
*
* @param modifier all the modifiers you want to exclude.
*/
public VisibilityFilter
(int...
modifier) {
filter =
0;
for (int m : modifier
) {
if ((m
& JAVA_MODIFIERS
) == 0
)
throw new 1.5.0/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException(
"One of the modifiers is not a standard java modifier.");
filter = filter | m
;
}
}
/**
* Checks whether this member is visible or not according to this filter.
*
* @param member
* @return true if this member is visible according to this filter.
*/
public final boolean isVisible
(1.5.0/docs/api/java/lang/reflect/Member.html">Member member
) {
return isVisible
(member.
getModifiers());
}
public final boolean isVisible
(int modifiers
) {
return (modifiers
& filter
) ==
0;
}
}