Projects structure
LiSA is split into several sub-projects, organized as in the following image, where straight arrows are compile dependencies, while dashed ones are test dependencies.

In each project, source files are located under src/main/java, while test source files are located under src/test/java.
The root project lisa defines some common logic for the whole ecosystem, as coding style checks and test grouping. Specifically:
- code style - spotless is used to enforce an eclipse-like coding style stored inside
spotless-formatting.xml, while checkstyle is used to check that the javadoc is present and fully provided on all non-private program members - build - information from
gitis injected into the manifest of all generated jar files, in order to fully reconstruct the state when a jar file was built - test - tests are automatically split into normal tests and cron tests depending on their package (tests under packages named
it.unive.lisa.cron.*will be part of the latter). Cron tests are excluded from normal builds, are they represent possibly long-running tests that should not be executed every time - coverage - JaCoCo is imported as plugin to allow manual generation of coverage reports
- build targets - the following custom tasks have been added to the build:
cron: executes tests under all packages likeit.unive.lisa.cron.*allTests: executes both normal and cron testscheckCodeStyle: runs both checkstyle and spotless to ensure coding style is respectedcompleteBuild: builds the project, runs normal and cron tests, and checks coding style
On each push to the master branch, a completeBuild is ran, wile pushes on other branch just perform a regular build. When a pull request is opened, and whenever new commits are pushed to that request, a completeBuild is ran and its successful result is a blocking criterion for the acceptance of the pull request.
lisa-sdk
lisa-sdk is the main artifact of LiSA, and it contains all the classes needed for developing frontends and analysis components, but contains no execution logic nor analysis implementations. The main packages of this project are:
- package
it.unive.lisa.analysiscontains all interfaces and base classes for the definition and implementation of abstract domains - package
it.unive.lisa.checkscontains the definition of syntactic and semantic checks - package
it.unive.lisa.interproceduralcontains all interfaces and base classes for the definition and implementation of interprocedural analyses and call graphs - package
it.unive.lisa.programcontains the program structure: from the program itself, to compilation units, cfgs, statements and expressions - package
it.unive.lisa.symboliccontains the definition of the symbolic expressions and their operators - package
it.unive.lisa.typecontains the type hierarcy
For more information on these concepts, read the documentation on LiSA’s foundations.
lisa-core
lisa-core contains the implementations of abstract domains, call graphs and interprocedural analyses following the interfaces provided in lisa-sdk, as well as the execution logic. Specifically, LiSA.java is the entry point for running an analysis, that receives instances of LiSAConfiguration.java for setting it up. LiSAFactory.java can instead be used to instantiate various analysis components using default values, with the capability of customizing such defaults.
lisa-core also contains tests that run complete analyses, registered as cron tests, that verify the behavior of the implementations provided by the project itself. These tests work by comparing all files (except logs) generated by the analysis with baseline results under the folder imp-testcases. The tests usually run inside test-outputs, that is treated as a temporary folder whose contents are not committed and can be deleted at any point.
lisa-imp
lisa-imp contains the IMP frontend that is used for demos and internal testing (mostly for cron tests in lisa-core). The project uses antlr for generating a lexer and a parser starting from a grammar defined in src/main/antlr. Outputs of the generation are stored under build/generated-src/antlr/main and are used as additional sources for the project. The IMP frontend mostly uses expressions and types from the base ones present in lisa-sdk. For a documentation about the language, see the dedicated page here.
Releases 0.1b1 and older
LiSA was composed by one monolithic project that can be found here. The IMP frontend was all contained in the test source folder.
