@Override public Set<T> convert(String val) { List<String> values = converter.convert(val); Set<T> set = EnumSet.noneOf(enumConverter().enumClass()); for (String value : values) { T t = enumConverter().convert(value); set.add(t); } return set; }
@Provides DefinitionLoadingOptions defLoadingOptions(KEqOptions options) { return new DefinitionLoadingOptions(options.def1); } }
public String mainModule(FileUtil files) { if (mainModule == null) { return FilenameUtils.getBaseName(outerParsing.mainDefinitionFile(files).getName()).toUpperCase(); } return mainModule; }
@Override public T convert(String arg) { try { return Enum.valueOf(enumClass(), arg.toUpperCase().replaceAll("-", "_")); } catch (IllegalArgumentException e) { EnumSet<T> values = EnumSet.allOf(enumClass()); Set<String> validValues = new HashSet<>(); for (T value : values) { validValues.add(friendlyName(value)); } throw new ParameterException("Invalid value for " + getOptionName() + " parameter. Allowed values:" + validValues); } }
@Override public Boolean convert(String arg0) { if (arg0.equals("on")) { return true; } else if (arg0.equals("off")) { return false; } else { throw new ParameterException("\"" + getOptionName() + "\": must be either \"on\" or \"off\"."); } } }
@Provides @RequestScoped JCommander jcommander(@Options String[] args, Tool tool, @Options Set<Object> options, @Options Set<Class<?>> experimentalOptions, KExceptionManager kem, Stopwatch sw) { try { JCommander jc = new JCommander(options.toArray(new Object[options.size()]), args); jc.setProgramName(tool.name().toLowerCase()); jc.setParameterDescriptionComparator(new SortedParameterDescriptions(experimentalOptions.toArray(new Class<?>[experimentalOptions.size()]))); sw.printIntermediate("Parse command line options"); return jc; } catch (ParameterException e) { throw KEMException.criticalError(e.getMessage(), e); } }
@Override public void accept(CompiledDefinition def) { String kore = getKompiledString(def); File defFile = kompileOptions.outerParsing.mainDefinitionFile(files); String name = defFile.getName(); String basename = FilenameUtils.removeExtension(name); files.saveToDefinitionDirectory(basename + ".kore", kore); }
@Provides DefinitionLoadingOptions defLoadingOptions(KEqOptions options) { return new DefinitionLoadingOptions(options.def2); } }
@Provides @DefinitionDir File definitionDir(@WorkingDir File workingDir, OuterParsingOptions options) { if (options.directory == null) { // bootstrap the part of FileUtil we need return options.mainDefinitionFile(new FileUtil(null, null, workingDir, null, null, null)).getParentFile(); } File f = new File(options.directory); if (f.isAbsolute()) return f; return new File(workingDir, options.directory); }
@Test public void testReadDefinition() throws IOException { DefinitionLoadingOptions options = new DefinitionLoadingOptions(); new JCommander(options, "--directory", "src/test/resources"); DefinitionLoadingModule module = new DefinitionLoadingModule(); File defDir = module.directory(options, new File("."), null, System.getenv()); assertEquals(new File("src/test/resources").getCanonicalFile(), defDir.getCanonicalFile()); File kompiledDir = module.definition(defDir, null); assertEquals(new File("src/test/resources/test-kompiled").getCanonicalFile(), kompiledDir.getCanonicalFile()); assertTrue(kompiledDir.exists()); assertTrue(kompiledDir.isDirectory()); } }
private void parse(String... args) { new JCommander(options, args); options.outerParsing.mainDefinitionFile(files); options.mainModule(files); options.syntaxModule(files); }
@Provides @KompiledDir File kompiledDir(@DefinitionDir File defDir, OuterParsingOptions options, @WorkingDir File workingDir, @TempDir File tempDir) { // bootstrap the part of FileUtil we need return new File(defDir, FilenameUtils.removeExtension(options.mainDefinitionFile(new FileUtil(null, null, workingDir, null, null, null)).getName()) + "-kompiled"); } }
@Override protected int run() { List<org.kframework.kil.Module> modules = new ArrayList<>(); Source source = Source.apply(options.mainDefinitionFile(files).getAbsolutePath()); File currentDirectory = options.mainDefinitionFile(files).getParentFile(); List<File> lookupDirectories = ListUtils.union(options.includes.stream() .map(files::resolveWorkingDirectory).collect(Collectors.toList()), modules.addAll(parser.slurp(FileUtil.load(options.mainDefinitionFile(files)), source, currentDirectory,
@Override public int run() { if (!options.outerParsing.mainDefinitionFile(files).exists()) { throw KEMException.criticalError("Definition file doesn't exist: " + options.outerParsing.mainDefinitionFile(files).getAbsolutePath()); } Kompile kompile = new Kompile(options, files, kem, sw); Backend backend = koreBackend.get(); CompiledDefinition def = kompile.run(options.outerParsing.mainDefinitionFile(files), options.mainModule(files), options.syntaxModule(files), backend.steps(), backend.excludedModuleTags()); sw.printIntermediate("Kompile to kore"); loader.saveOrDie(files.resolveKompiled("compiled.bin"), def); sw.printIntermediate("Save to disk"); backend.accept(def); sw.printIntermediate("Backend"); loader.saveOrDie(files.resolveKompiled("timestamp"), ""); sw.printTotal("Total"); return 0; } }