package pl.touk.sputnik.processor.codenarc;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.codenarc.CodeNarcRunner;
import org.codenarc.results.Results;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.review.Review;
import pl.touk.sputnik.review.ReviewProcessor;
import pl.touk.sputnik.review.ReviewResult;
import pl.touk.sputnik.review.filter.GroovyFilter;
import pl.touk.sputnik.review.transformer.FileNameTransformer;
import java.util.List;
@Slf4j
@AllArgsConstructor
public class CodeNarcProcessor implements ReviewProcessor {
private static final String PROCESSOR_NAME = "CodeNarc";
private final CodeNarcRunnerBuilder codeNarcRunnerBuilder = new CodeNarcRunnerBuilder();
private final ResultParser resultParser = new ResultParser();
private final Configuration configuration;
@Nullable
@Override
public ReviewResult process(@NotNull Review review) {
List<String> reviewFiles = review.getFiles(new GroovyFilter(), new FileNameTransformer());
if (noFilesToReview(reviewFiles)) {
return new ReviewResult();
}
CodeNarcRunner codeNarcRunner = codeNarcRunnerBuilder.prepareCodeNarcRunner(reviewFiles, configuration);
Results results = codeNarcRunner.execute();
return resultParser.parseResults(results);
}
private boolean noFilesToReview(List<String> reviewFiles) {
return reviewFiles.isEmpty();
}
@NotNull
@Override
public String getName() {
return PROCESSOR_NAME;
}
}