package org.nutz.aop.matcher;
import static java.lang.reflect.Modifier.TRANSIENT;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.regex.Pattern;
import org.nutz.aop.MethodMatcher;
import org.nutz.lang.Maths;
public class RegexMethodMatcher implements MethodMatcher {
private Pattern active;
private Pattern ignore;
private int mods;
public RegexMethodMatcher(String active) {
this(active, null);
}
public RegexMethodMatcher(String active, String ignore) {
this(active, ignore, Modifier.PUBLIC | Modifier.PROTECTED);
}
public RegexMethodMatcher(String active, String ignore, int mods) {
if (active != null)
this.active = Pattern.compile(active);
if (ignore != null)
this.ignore = Pattern.compile(ignore);
this.mods = mods;
}
public boolean match(Method method) {
int mod = method.getModifiers();
String name = method.getName();
if (null != ignore)
if (ignore.matcher(name).find())
return false;
if (null != active)
if (!active.matcher(name).find())
return false;
if (mods <= 0)
return true;
if (mod == 0)
mod |= TRANSIENT;
return Maths.isMask(mod, mods);
}
}