package japicmp.filter; import japicmp.exception.JApiCmpException; import javassist.CtClass; import javassist.CtField; import java.util.regex.Pattern; public class JavadocLikeFieldFilter implements FieldFilter { private final String filterString; private final Pattern patternClass; private final Pattern patternField; public JavadocLikeFieldFilter(String filterString) { this.filterString = filterString; String regEx = filterString.replace(".", "\\."); regEx = regEx.replace("*", ".*"); regEx = regEx.replace("$", "\\$"); String[] parts = regEx.split("#"); if (parts.length != 2) { throw new JApiCmpException(JApiCmpException.Reason.CliError, "Filter option '" + filterString + "' contains more than one '#'."); } this.patternClass = Pattern.compile(parts[0]); this.patternField = Pattern.compile(parts[1]); } @Override public boolean matches(CtField ctField) { CtClass declaringClass = ctField.getDeclaringClass(); String className = declaringClass.getName(); if (!this.patternClass.matcher(className).matches()) { return false; } String fieldName = ctField.getName(); return this.patternField.matcher(fieldName).matches(); } @Override public String toString() { return this.filterString; } }