package org.checkerframework.framework.test; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.checkerframework.framework.util.PluginUtil; /** * Represents all of the information needed to execute the Javac compiler for a given set of test * files. */ public class ImmutableTestConfiguration implements TestConfiguration { /** * Options that should be passed to the compiler. This a {@code Map(optionName → * optionArgumentIfAny)}. E.g., * * <pre>{@code * Map( * "-AprintAllQualifiers" ⇒ null * "-classpath" ⇒ "myDir1:myDir2" * ) * }</pre> */ private final Map<String, String> options; /** * These files contain diagnostics that should be returned by Javac. If this list is empty, the * diagnostics are instead read from comments in the Java file itself */ private final List<File> diagnosticFiles; /** * The source files to compile. If the file is expected to emit errors on compilation, the file * should contain expected error diagnostics OR should have a companion file with the same * path/name but with the extension .out instead of .java if they */ private final List<File> testSourceFiles; /** A list of AnnotationProcessors (usually checkers) to pass to the compiler for this test */ private final List<String> processors; private final boolean shouldEmitDebugInfo; public ImmutableTestConfiguration( List<File> diagnosticFiles, List<File> testSourceFiles, List<String> processors, Map<String, String> options, boolean shouldEmitDebugInfo) { this.diagnosticFiles = Collections.unmodifiableList(diagnosticFiles); this.testSourceFiles = Collections.unmodifiableList(new ArrayList<>(testSourceFiles)); this.processors = Collections.unmodifiableList(new ArrayList<>(processors)); this.options = Collections.unmodifiableMap(new LinkedHashMap<>(options)); this.shouldEmitDebugInfo = shouldEmitDebugInfo; } @Override public List<File> getTestSourceFiles() { return testSourceFiles; } @Override public List<File> getDiagnosticFiles() { return diagnosticFiles; } @Override public List<String> getProcessors() { return processors; } @Override public Map<String, String> getOptions() { return options; } @Override public List<String> getFlatOptions() { return TestUtilities.optionMapToList(options); } @Override public boolean shouldEmitDebugInfo() { return shouldEmitDebugInfo; } @Override public String toString() { return "TestConfigurationBuilder:\n" + "testSourceFiles=" + (testSourceFiles == null ? "null" : PluginUtil.join(" ", testSourceFiles)) + "\n" + "processors=" + (processors == null ? "null" : PluginUtil.join(", ", processors)) + "\n" + "options=" + (options == null ? "null" : PluginUtil.join(", ", getFlatOptions())) + "\n" + "shouldEmitDebugInfo=" + shouldEmitDebugInfo; } }