package org.bindgen.processor.config; import joist.util.Join; import org.bindgen.processor.util.ClassName; /** * A {@link ClassName} scope that can filter packages based on a string expression. * * The expression specifies all beginning parts of allowed packages * in a comma-separated string, eg {@code com.myapp.customers.domain, * com.myapp.users.domain} which will allow any ClassName that is in * or under the specified packages. * * @author igor.vaynberg */ // TODO unit test public class PackageExpressionScope implements Scope<ClassName> { private final String[] expressions; public PackageExpressionScope(String packageMask) { this.expressions = packageMask.split(","); for (int i = 0; i < this.expressions.length; i++) { this.expressions[i] = this.expressions[i].trim(); if (!this.expressions[i].endsWith(".")) { this.expressions[i] = this.expressions[i] + "."; } } } /** {@inheritDoc} */ @Override public boolean includes(ClassName name) { final String packageName = name.getPackageName() + "."; for (String expression : this.expressions) { if (packageName.startsWith(expression)) { return true; } } return false; } /** {@inheritDoc} */ @Override public String toString() { return new StringBuilder("[") .append(this.getClass().getSimpleName()) .append(" expression=") .append(Join.join(this.expressions, ",")) .append("]") .toString(); } }