package de.is24.deadcode4j.plugin;
import com.google.common.collect.Ordering;
import de.is24.deadcode4j.AnalysisStage;
import de.is24.deadcode4j.DeadCode;
import org.apache.maven.plugin.logging.Log;
import javax.annotation.Nonnull;
import java.util.Collection;
import java.util.EnumSet;
/**
* The <code>DeadCodeLogger</code> is responsible for logging the findings of a code analysis.
*
* @since 1.3
*/
class DeadCodeLogger {
private final Log log;
public DeadCodeLogger(Log log) {
this.log = log;
}
public void log(@Nonnull DeadCode deadCode) {
logExceptions(deadCode.getStagesWithExceptions());
logAnalyzedClasses(deadCode.getAnalyzedClasses());
logDeadClasses(deadCode.getDeadClasses());
}
private void logExceptions(EnumSet<AnalysisStage> stagesWithExceptions) {
for (AnalysisStage stageWithException : stagesWithExceptions) {
switch (stageWithException) {
case GENERAL_SETUP:
log.error("Failed to set up deadcode4j. Analysis was certainly inaccurate.");
break;
case MODULE_SETUP:
log.warn("Failed to set up at least one module. Analysis is likely to be inaccurate.");
break;
case FILE_ANALYSIS:
log.warn("At least one file could not be parsed; analysis may be inaccurate!");
break;
case DEADCODE_ANALYSIS:
log.warn("Failed to determine dead code. Analysis was certainly inaccurate.");
break;
default:
log.warn("An unexpected error occurred.");
break;
}
}
}
private void logAnalyzedClasses(@Nonnull Collection<String> analyzedClasses) {
log.info("Analyzed " + analyzedClasses.size() + " class(es).");
}
private void logDeadClasses(@Nonnull Collection<String> deadClasses) {
int numberOfDeadClasses = deadClasses.size();
if (numberOfDeadClasses == 0) {
log.info("No unused classes found. Rejoice!");
return;
}
log.warn("Found " + numberOfDeadClasses + " unused class(es):");
for (String unusedClass : Ordering.natural().sortedCopy(deadClasses)) {
log.warn(" " + unusedClass);
}
}
}