/Qilin

Qilin: A New Framework for Supporting Fine-Grained Context-Sensitivity in Java Pointer Analysis

Primary LanguageJavaGNU Lesser General Public License v2.1LGPL-2.1

Gradle Docker Gitpod Ready-to-Code

⚠️ Documentation for Qilin is under development.

Qilin: A fully imperative Java Pointer Analysis Framework.

The repository hosts Qilin, a new Java pointer analysis framework for supporting fine-grained context-sensitivity.

Qilin is introduced in our ECOOP'22 paper. You can cite our paper as follows:

@InProceedings{he2022qilin,
  author = {He, Dongjie and Lu, Jingbo and Xue, Jingling},
  title =	{Qilin: A New Framework for Supporting Fine-Grained Context-Sensitivity in Java Pointer Analysis},
  booktitle =	{36th European Conference on Object-Oriented Programming (ECOOP 2022)},
  year =	{2022},
  publisher =	{Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
  address =	{Dagstuhl, Germany},
}

A Quick Start

Prerequisites

  • Java 16+ (Qilin uses the pattern matching for instanceof provided since Java 16).
  • Python 3.5+ (the api subprocess.run used in artifact/qilin.py is added in Python 3.5).

Download

This repository contains a submodule that contains a set of real-world ready-to-use benchmarks for Qilin. If you want to run Qilin on these benchmarks, please use the following command to fetch the Qilin source code:

$ git clone --recurse-submodules https://github.com/QilinPTA/Qilin.git

If you have cloned Qilin in a normal way, you still can use the command below to download these benchmarks:

$ git submodule update --init

Building Qilin with Gradle

We use Gradle as the build automation tool. To build Qilin, use

$ ./run.sh

This script contains commands to generate Qilin-VERSION-SNAPSHOT.jar, which will be automatically moved into artifact/.

For users who want to build Qilin in IDE, please refer to this page.

Using Qilin

You can use Qilin either through its command-line interface (e.g., driver.Main) or as a library. For researchers who are working on Java pointer analysis, we have provided a whole set of scripts, benchmarks (e.g., DaCapo2006) and jdk libraries under artifact/.

To test Qilin, you can directly do:

$ cd artifact
$ python3 run.py antlr ci -print

The above command will analyse antlr with a context-insensitive pointer analysis with some metrics being displayed on the screen.
We plan to optimise the run.py script to make its help info more user-friendly.

Documentation

About Qilin Setup Guide User Guide Developer Guide
Introducing Qilin -- what it does and how we design it A step by step setup guide to build Qilin Command-line options of Qilin, and running Qilin with an example Detailed technical documentation and how to use Qilin as a lib for your tool or write your own analyses in Qilin

Contributing to Qilin

Contributions are always welcome. Qilin is an open-source project that we publish in the hope that it will be useful to the research community as a whole. If you have a new feature or a bug fix that you would like to see in the official code repository, please open a merge request here on Github and leave a short description of what you have done.

License

Qilin is licenced under the GPL v2.1 license, see the LICENSE file.