
io.github.oliviercailloux.grade.MavenCodeGrader Maven / Gradle / Ivy
The newest version!
package io.github.oliviercailloux.grade;
import static com.google.common.base.Verify.verify;
import static io.github.oliviercailloux.grade.DeadlineGrader.LOGGER;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import io.github.oliviercailloux.grade.MavenCodeHelper.BasicCompiler;
import io.github.oliviercailloux.grade.MavenCodeHelper.WarningsBehavior;
import io.github.oliviercailloux.jaris.collections.CollectionUtils;
import io.github.oliviercailloux.jaris.exceptions.CheckedStream;
import io.github.oliviercailloux.jaris.io.PathUtils;
import io.github.oliviercailloux.javagrade.JavaGradeUtils;
import io.github.oliviercailloux.javagrade.bytecode.Compiler;
import io.github.oliviercailloux.javagrade.bytecode.Compiler.CompilationResult;
import io.github.oliviercailloux.javagrade.bytecode.Compiler.CompilationResultExt;
import io.github.oliviercailloux.javagrade.bytecode.MyCompiler;
import io.github.oliviercailloux.utils.Utils;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Set;
import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class MavenCodeGrader implements PathGrader {
public static MavenCodeGrader penal(CodeGrader g,
Function wrapper, WarningsBehavior w) {
return new MavenCodeGrader<>(g, wrapper, w, new BasicCompiler());
}
public static MavenCodeGrader basic(CodeGrader g,
Function wrapper) {
return new MavenCodeGrader<>(g, wrapper, WarningsBehavior.PENALIZE_WARNINGS_AND_SUPPRESS,
new BasicCompiler());
}
public static MavenCodeGrader complex(CodeGrader g,
Function wrapper, boolean considerSuppressed, MyCompiler compiler) {
return new MavenCodeGrader<>(g, wrapper,
considerSuppressed ? WarningsBehavior.PENALIZE_WARNINGS_AND_SUPPRESS
: WarningsBehavior.PENALIZE_WARNINGS_AND_NOT_SUPPRESSED,
compiler);
}
private final MavenCodeHelper helper;
private final Function wrapper;
private ImmutableMap gradedProjects;
private final CodeGrader grader;
private MavenCodeGrader(CodeGrader g, Function wrapper,
WarningsBehavior w, MyCompiler basicCompiler) {
gradedProjects = null;
this.wrapper = wrapper;
this.grader = g;
this.helper = new MavenCodeHelper<>(w, basicCompiler);
}
@Override
public MarksTree grade(Path workDir) throws X {
try {
final ImmutableSet possibleDirs = MavenCodeHelper.possibleDirs(workDir);
gradedProjects = CollectionUtils.toMap(possibleDirs, this::gradePomProjectWrapping);
verify(!gradedProjects.isEmpty());
final ImmutableMap gradedProjectsByCrit = CollectionUtils
.transformKeys(gradedProjects, p -> Criterion.given("Using project dir " + p.toString()));
return MarksTree.composite(gradedProjectsByCrit);
} catch (IOException e) {
throw wrapper.apply(e);
}
}
private MarksTree gradePomProjectWrapping(Path pomDirectory) throws X {
try {
final CompilationResultExt result = helper.compile(pomDirectory);
final MarksTree projectGrade = grade(result);
return projectGrade;
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
private MarksTree grade(CompilationResultExt result) throws X {
return helper.grade(result, grader);
}
@Override
public GradeAggregator getAggregator() {
return helper.getAggregator(grader);
}
public ImmutableMap getGradedProjects() {
return gradedProjects;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy