package ru.vyarus.guice.ext.core.util;
import com.google.inject.TypeLiteral;
import com.google.inject.matcher.AbstractMatcher;
/**
* Object class matcher.
* Useful to limit post processors appliance scope by specific package (and sub packages)
*
* @author Vyacheslav Rusakov
* @since 30.06.2014
* @param <T> matched object type
*/
public class ObjectPackageMatcher<T> extends AbstractMatcher<T> {
private final String pkg;
public ObjectPackageMatcher(final String pkg) {
this.pkg = pkg;
}
@Override
public boolean matches(final T o) {
final Class<?> type = o instanceof TypeLiteral ? ((TypeLiteral) o).getRawType() : o.getClass();
return Utils.isPackageValid(type) && type.getPackage().getName().startsWith(pkg);
}
}