This is an implementation of the Language Server Protocol for Jimple. A LSP Server implementation allows an IDE, which supports the LSP, to provide well known features of programming languages for a specific Language.
Either: download the JimpleLSP Server Release and extract it to any Location.
Or: Compile from source.
- run
git clone https://github.com/swissiety/JimpleLSP
to clone this Repository. - run
mvn package
to build a Jar. The generated Jar can be found in target/jimplelsp-0.0.1-SNAPSHOT-jar-with-dependencies.jar.
- Install or use an LSP Plugin in your IDE to enable Language Server Protocol Support. You can use IntelliJLSP
- Configure the LSP Plugin in your IDE to use the JimpleLSP Server Jar.
Install the JimpleLSP Extension from the Marketplace.
Or if you want to compile it yourself:
cd vscode/ && npm install
to install the dependencies.npm install -g vsce
to install the Visual Studio Code Extension commandline tool.vsce package
to package the plugin.code --install-extension JimpleLSP-0.0.5.vsix
to install the packaged plugin.- restart VSCode
You can import already extracted Jimple files into your workspace.
JimpleLSP can extract Jimple from a .jar or an .apk file do simplify your workflow. To enable JimpleLSP to extract Jimple your .apk or .jar file needs to be in your workspace on startup of your IDE, but the workspace must not contain a .jimple file. Additionally you need to configure the following config key in your IDE: ** JimpleLSP.jimpleextraction.androidplatforms** to tell Soot where it can find the Android runtimes usually located in ANDROID_HOME/platforms.
A Collection of android.jars is available in the android-platforms Repo.
The Language Server starts by default in STDIO mode. Use -s
to start the Language Server executable in socket mode on
Port 2403, to change the port use -p <portnumber>
.
This Server implementation was initially oriented towards LSP 3.15. The currently implemented features are focussed on improving code exploring in Jimple. For checked capabilities there are previews of the functionality in the linked Issue.
- ✅ didOpen
- ✅ didChange
- ✅ Full text sync
- ❌ Incremental text sync
- ✅ didSave
- ✅ Include text
- ❌ completion
- ✅ hover
- ❌ signatureHelp
- ✅ declaration
- ❌ [planned #18] link support
- ✅ definition
- ✅ link support
- ✅ typeDefinition
- ❌ [planned #18] link support
- ✅ implementation
- ❌ [planned #18] link support
- ✅ references
- ✅ documentHighlight
- ✅ for Locals
- ❌ types
- ✅ documentSymbol
- ❌ codeAction
- ❌ resolve
- ❌ codeLens
- ❌ documentLink
- ❌ formatting
- ❌ rangeFormatting
- ❌ onTypeFormatting
- ❌ rename
- ✅ publishDiagnostics
- ❌ [WIP #16] foldingRange
- ❌ selectionRange
- ✅ semanticTokens
- ❌ callHierarchy
- ❌ [planned #9] applyEdit
- ❌ didChangeConfiguration
- ❌ [planned #17] didChangeWatchedFiles
- ✅ symbol
- ❌ executeCommand
- ❌ workDoneProgress
- ❌ create
- ❌ cancel
- ✅ logMessage
- ✅ showMessage
- ✅ showMessage request
This piece of software was created as part of a bachelor thesis at University of Paderborn (UPB), Germany.