Thanks to visit codestin.com
Credit goes to GitHub.com

Skip to content

Refinement type checker for Java with liquid types and typestates - catch bugs at compile time

Notifications You must be signed in to change notification settings

liquid-java/liquidjava

 
 

Repository files navigation

LiquidJava - Extending Java with Liquid Types

LiquidJava Banner

Welcome to LiquidJava!

LiquidJava is an additional typechecker for Java that supports liquid types and typestate.

Simple example:

@Refinement("a > 0")
int a = 3; // okay
a = -8; // type error!

This project has the LiquidJava verifier, the api and some examples for testing. You can find out more about LiquidJava in the following resources:

Setup the project

  1. Clone the repository;
  2. Open Eclipse and do Ìmport...\ Existing Maven Project selecting the current folder and waiting for the build process to finish (bottom right update bar)
  3. Select the current folder, right click it and select Run as...\Maven install...
  4. If inside the liquidjava-verifier build path there is not a target/generated-sources/antr4: Select liquidjava-verifier, on right-click, go to Build Path\Link Source... and browse for liquidjava-verifier\target\generated-sources\antlr4 and select Finish

Run verification

In a specific project

Run the file liquidjava-verifier\api\CommandLineLaucher with the path to the target project for verification. If there are no arguments given, the application verifies the project on the path liquidjava-example\src\main\java.

JUnit tests

Inside the folder liquidjava-verifier\api\tests are three classes that test several examples available at liquidjava-example\src\test\java. To run the JUnit tests in one of the files, select it, right-click it and Run as...\JUnit tests. To run the all test suit, select the package tests (liquidjava-verifier\api\tests), right-click it, and do Run as...\JUnit tests. Make sure to run these tests after making changes in the verification code.

Project structure

  • docs: documents used for the design of the language. The folder includes a readme to a full artifact used in the design process, here are some initial documents used to prepare the design of the refinements language at its evaluation
  • liquidjava-api: inlcudes the annotations that can be introduced in the Java programs to add the refinements
  • liquidjava-examples: includes a main folder with the current example that the verifier is testing; and inlcudes the classes for the tests
  • liquidjava-verifier: has the project for verification of the classes
    • api: classes that test the verifier. Includes the CommandLineLauncher that runs the verification on a given class or on the main folder of liquidjava-examples if no argument is given. This package includes the JUnit tests to verify if the examples in liquidjava-example/tests are correctly verified.
    • ast: represents the abstract syntax tree of the refinement's language.
    • errors: package for reporting the errors.
    • processor: package that handles the type checking.
    • rj_language: handles the processing of the strings with refinements.
    • smt: package that handles the translation to the smt solver and the processing of the results the smt solver produces.
    • utils: includes useful methods for all the previous packages.

Releases

No releases published

Packages

No packages published

Contributors 7

Languages