package de.is24.deadcode4j; import javax.annotation.Nonnull; import java.util.Collection; import java.util.List; import java.util.Set; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Sets.newHashSet; /** * The <code>DeadCodeComputer</code> computes the {@link DeadCode} based on {@link AnalyzedCode}. * * @since 2.0.0 */ public class DeadCodeComputer { @Nonnull public DeadCode computeDeadCode(@Nonnull AnalyzedCode analyzedCode) { Collection<String> deadClasses = determineDeadClasses(analyzedCode); return new DeadCode(analyzedCode.getStagesWithExceptions(), analyzedCode.getAnalyzedClasses(), deadClasses); } @Nonnull private Collection<String> determineDeadClasses(@Nonnull AnalyzedCode analyzedCode) { Set<String> classesInUse = newHashSet(); for (Iterable<String> usedClasses : analyzedCode.getCodeDependencies().values()) { for (String clazz : usedClasses) { classesInUse.add(clazz); } } List<String> deadClasses = newArrayList(analyzedCode.getAnalyzedClasses()); deadClasses.removeAll(classesInUse); return deadClasses; } }