From cfff5ff63b2963d2be011cc034722cd1bdfcd93a Mon Sep 17 00:00:00 2001 From: giacomozanatta Date: Tue, 14 Oct 2025 14:17:50 +0200 Subject: [PATCH 1/2] Add --noHtml parameter to cli interface Add --noHtml parameter to cli interface --- jlisa/src/main/java/it/unive/jlisa/Main.java | 43 ++++++++++++-------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/jlisa/src/main/java/it/unive/jlisa/Main.java b/jlisa/src/main/java/it/unive/jlisa/Main.java index 40b0e7f2b..5f0d3b8d3 100644 --- a/jlisa/src/main/java/it/unive/jlisa/Main.java +++ b/jlisa/src/main/java/it/unive/jlisa/Main.java @@ -37,13 +37,6 @@ public static void main( throws IOException, ParseException, ParsingException { - // String source = "public class Hello { public static void main() { - // System.out.println(\"Hello World :)\"); } }"; - - // ASTParser parser = ASTParser.newParser(AST.getJLSLatest()); // NOTE: - // JLS8 is deprecated. getJLSLatest will return JDK23 - // parser.setSource(source.toCharArray()); - // parser.setKind(ASTParser.K_COMPILATION_UNIT); // Define options Options options = new Options(); @@ -97,6 +90,13 @@ public static void main( .required(false) .build(); + Option noHtmlOutput = Option.builder() + .longOpt("no-html") + .desc("Disable HTML output (enabled by default)") + .required(false) + .build(); + options.addOption(noHtmlOutput); + options.addOption(helpOption); options.addOption(sourceOption); options.addOption(outdirOption); @@ -105,13 +105,15 @@ public static void main( options.addOption(numericalDomainOption); options.addOption(mode); options.addOption(version); - + options.addOption(noHtmlOutput); // Create parser and formatter CommandLineParser parser = new DefaultParser(); HelpFormatter formatter = new HelpFormatter(); String[] sources = new String[0]; String outdir = ""; String checkerName = "", numericalDomain = "", executionMode = "Debug"; + boolean htmlOutput = true; + try { CommandLine cmd = parser.parse(options, args); @@ -146,6 +148,10 @@ public static void main( LogManager.setLogLevel(level); } + if (cmd.hasOption("no-html")) { + htmlOutput = false; + } + checkerName = cmd.getOptionValue("c", "Assert"); numericalDomain = cmd.getOptionValue("n"); @@ -173,10 +179,10 @@ public static void main( switch (executionMode) { case "Debug": - runDebug(sources, outdir, checkerName, numericalDomain); + runDebug(sources, outdir, checkerName, numericalDomain, htmlOutput); break; case "Statistics": - runStatistics(sources, outdir, checkerName, numericalDomain); + runStatistics(sources, outdir, checkerName, numericalDomain, htmlOutput); break; default: LOG.error("Unknown execution mode: " + executionMode); @@ -188,19 +194,21 @@ private static void runDebug( String[] sources, String outdir, String checkerName, - String numericalDomain) + String numericalDomain, + boolean htmlOutput) throws IOException, ParseException, ParsingException { JavaFrontend frontend = runFrontend(sources); - runAnalysis(outdir, checkerName, numericalDomain, frontend); + runAnalysis(outdir, checkerName, numericalDomain, frontend, htmlOutput); } private static void runStatistics( String[] sources, String outdir, String checkerName, - String numericalDomain) { + String numericalDomain, + boolean htmlOutput) { JavaFrontend frontend = null; try { frontend = runFrontend(sources); @@ -211,7 +219,7 @@ private static void runStatistics( System.exit(1); } try { - runAnalysis(outdir, checkerName, numericalDomain, frontend); + runAnalysis(outdir, checkerName, numericalDomain, frontend, htmlOutput); } catch (Throwable e) { CSVExceptionWriter.writeCSV(outdir + "analysis.csv", e.getCause() != null ? e.getCause() : e); LOG.error("Some errors occurred during the analysis. Check " + outdir + "analysis.csv file."); @@ -233,14 +241,17 @@ private static void runAnalysis( String outdir, String checkerName, String numericalDomain, - JavaFrontend frontend) + JavaFrontend frontend, + boolean htmlOutput) throws ParseException { Program p = frontend.getProgram(); LiSAConfiguration conf = new LiSAConfiguration(); conf.workdir = outdir; conf.serializeResults = false; conf.jsonOutput = true; - conf.analysisGraphs = LiSAConfiguration.GraphType.HTML_WITH_SUBNODES; + if (htmlOutput) { + conf.analysisGraphs = LiSAConfiguration.GraphType.HTML_WITH_SUBNODES; + } conf.interproceduralAnalysis = new ContextBasedAnalysis<>(FullStackToken.getSingleton()); conf.callGraph = new JavaRTACallGraph(); conf.openCallPolicy = ReturnTopPolicy.INSTANCE; From 4348139fc5637d696115945cb39b863f6e0d3258 Mon Sep 17 00:00:00 2001 From: Giacomo Zanatta Date: Tue, 14 Oct 2025 14:28:48 +0200 Subject: [PATCH 2/2] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5761f3f94..05428efd7 100644 --- a/README.md +++ b/README.md @@ -34,9 +34,12 @@ Build with Gradle: ## Usage To analyze Java source files: +```bash +./gradlew distZip +``` ```bash -java -jar target/jlisa.jar -s -o [-l ] +./build/distributions/jlisa-0.1/bin/jlisa -s path/to/File.java -o out/ -n ConstantPropagation ``` ## Command Line Options @@ -48,6 +51,7 @@ java -jar target/jlisa.jar -s -o [-l