KompileOptions implements Serializable { public String mainModule(FileUtil files) { if (mainModule == null) { return FilenameUtils.getBaseName(outerParsing.mainDefinitionFile(files).getName()).toUpperCase(); } return mainModule; }  String mainModule(FileUtil files); String syntaxModule(FileUtil files); boolean strict(); boolean isKore(); @ParametersDelegate
    transient GlobalOptions global; @ParametersDelegate
    public OuterParsingOptions outerParsing; @Parameter(names="--backend", description="Choose a backend. <backend> is one of [llvm|haskell|kore|java|ocaml]. Each creates the kompiled K definition.")
    public String backend; @Parameter(names="--coverage", description="Generate coverage data when executing semantics.")
    public boolean coverage; @Parameter(names="--profile-rule-parsing", description="Generate time in seconds to parse each rule in the semantics. Found in -kompiled directory under timing.log.")
    public boolean profileRules; @Parameter(names="--hook-namespaces", listConverter=StringListConverter.class, description="<string> is a whitespace-separated list of namespaces to include in the hooks defined in the definition")
    public List<String> hookNamespaces; @Parameter(names="-O1", description="Optimize in ways that improve performance and code size, but interfere with debugging and increase compilation time slightly.")
    public boolean optimize1; @Parameter(names="-O2", description="Optimize further in ways that improve performance and code size, but interfere with debugging more and increase compilation time somewhat.")
    public boolean optimize2; @Parameter(names="-O3", description="Optimize aggressively in ways that significantly improve performance, but interfere with debugging significantly and also increase compilation time and code size substantially.")
    public boolean optimize3; @Parameter(names="-E", description="Perform outer parsing and then stop and pretty print the definition to standard output. Useful for converting a K definition into a completely self-contained file when reporting a bug.")
    public boolean preprocess; @Parameter(names="--bison-lists", description="Make List and NeList left associative. This is useful for creating Bison parsers that use bounded stack space.")
    public boolean bisonLists; @ParametersDelegate
    public Experimental experimental; }
@Test public void testDefaultModuleName() { parse("foo.k"); assertEquals("FOO", options.mainModule(files)); }