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;
}
}