package de.is24.deadcode4j.analyzer.javassist; import de.is24.deadcode4j.AnalysisContext; import de.is24.guava.NonNullFunction; import javassist.ClassPool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Nonnull; import java.util.Set; import static com.google.common.collect.Sets.newHashSet; import static de.is24.deadcode4j.analyzer.javassist.ClassPoolAccessor.classPoolAccessorFor; /** * This function returns a set containing only those classes that exist within the class path of the specified context. * It is intended to be used in conjunction with * {@link de.is24.deadcode4j.AnalysisContext#getOrCreateCacheEntry(Object, de.is24.guava.NonNullFunction)}. * * @since 2.0.0 */ public class ClassPathFilter implements NonNullFunction<AnalysisContext, Set<String>> { @Nonnull private final Logger logger = LoggerFactory.getLogger(getClass()); @Nonnull private final Set<String> classes; /** * Creates a new <code>ClassPathFilter</code> for the given class names. * * @since 2.0.0 */ public ClassPathFilter(@Nonnull Set<String> classes) { this.classes = classes; } @Nonnull @Override public Set<String> apply(@Nonnull AnalysisContext input) { ClassPool classPool = classPoolAccessorFor(input).getClassPool(); Set<String> knownClasses = newHashSet(); for (String className : this.classes) { if (classPool.find(className) != null) { knownClasses.add(className); } } logger.debug("Found those classes in the class path: {}", knownClasses); return knownClasses; } }