package joist.codegen.passes;
import java.io.File;
import joist.codegen.Codegen;
import joist.util.Read;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OutputPass implements Pass<Codegen> {
private static final Logger log = LoggerFactory.getLogger(OutputPass.class);
public void pass(Codegen codegen) {
// sanity check the config
for (String badSkipped : codegen.getConfig().getStaleSkippedCollections()) {
throw new IllegalStateException("BAD CONFIGURATION: Collection marked 'setCollectionSkipped' was not available " + badSkipped);
}
codegen.getOutputSourceDirectory().output();
codegen.getOutputCodegenDirectory().output();
if (codegen.getConfig().pruneCodegenDirectory) {
codegen.getOutputCodegenDirectory().pruneIfNotTouchedWithinUsedPackages();
}
if (codegen.getConfig().pruneSourceDirectory) {
for (File directory : codegen.getOutputSourceDirectory().getUsedDirectories()) {
for (File file : directory.listFiles()) {
if (file.isFile() && !codegen.getOutputSourceDirectory().getTouched().contains(file)) {
String contents = Read.fromFile(file);
String className = file.getName().replaceAll("\\.[a-zA-Z]+", "");
String codegenName = className + "Codegen";
if (contents.contains(className + " extends " + codegenName)) {
file.delete();
log.warn("Removing old file {}", file);
}
}
}
}
}
}
}