package bluej.views;
import threadchecker.OnThread;
import threadchecker.Tag;
import java.lang.reflect.Modifier;
import java.util.function.Predicate;
| A View Filter specifying whether, for a given method,
| it should be included in an operation. The two configurable
| parts are static methods or instance methods, and public-only
| vs package-private&protected&public.
|
@OnThread(Tag.FXPlatform)
public final class ViewFilter implements Predicate<MemberView>{
public static enum StaticOrInstance { STATIC, INSTANCE;
}
private final StaticOrInstance staticOrInstance;
private final String callingPackage;
| Create a View filter.
| @param staticOrInstance Do you want only-static, or only-instance?
| @param callingPackage Show only items callable from another class in the given package.
| If null, only show public items.
|
public ViewFilter(StaticOrInstance staticOrInstance, String callingPackage)
{
this.staticOrInstance = staticOrInstance;
this.callingPackage = callingPackage;
}
@Override
@OnThread(value = Tag.FXPlatform, ignoreParent = true)
public boolean test(MemberView member)
{
boolean wantStatic = staticOrInstance == StaticOrInstance.STATIC;
boolean isStatic = member.isStatic();
if (wantStatic != isStatic)
return false;
if ((member.getModifiers() & Modifier.PUBLIC) != 0)
return true;
boolean samePackage = member.getDeclaringView().getPackageName().equals(callingPackage);
if (!samePackage)
return false;
return (member.getModifiers() & Modifier.PRIVATE) == 0;
}
}
. ViewFilter
. test
58 neLoCode
+ 8 LoComm