Skip to content

dgroomes/open-rewrite-playground

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

open-rewrite-playground

๐Ÿ“š Learning and exploring OpenRewrite.

Large-scale automated source code refactoring

-- https://docs.openrewrite.org

Overview

OpenRewrite is an open source ecosystem for automated source code refactoring. It is backed by a commercial company Moderne. OpenRewrite supports Java, Kotlin and Groovy. While the main selling point of OpenRewrite is refactoring I'm personally interested in the core engine with regard to static code analysis.

In this project I want to explore the core components of OpenRewrite and I hope to be able to run them against some example Java code. Here is the design of my exploration:

  • example-program/
    • This directory contains an example Java program. This represents the "program-under-analysis" because it will be scanned by a static analysis runner that is powered by OpenRewrite libraries.
  • static-analysis/
    • This directory contains a Java program that uses OpenRewrite libraries to scan the example Java program.

This design is a bit different from how OpenRewrite is typically used. OpenRewrite is usually plugged directly into the "host" build system of the program-under-analysis. For example, a typical usage of OpenRewrite is to add the OpenRewrite Gradle plugin in the plugins block of the project's build.gradle file. OpenRewrite also has a way to splice into the Gradle machinery of the program-under-analysis without making any source code changes to the project. I personally don't want to execute a foreign project's Gradle build. That's a form of "eval" (a front door for malicious code).

Is a non-eval approach even possible with OpenRewrite? It looks like it was officially documented for some time but was removed in the docs.


NOTE:

This was developed on macOS and for my own personal use.


Instructions

Follow these instructions to build and run the OpenRewrite-powered static analysis.

  1. Pre-requisite: Java 21
  2. Build the static analysis runner:
    • ./gradlew :static-analysis:installDist
  3. Run the static analysis:
    • ./static-analysis/build/install/static-analysis/bin/static-analysis
    • It should print a rather verbose description of the "recipe run" and a proposed change to remove an unused import in the program-under-analysis. The change is shown as a text diff, like you would see in a Git commit. Neat!

Reference

About

๐Ÿ“š Learning and exploring OpenRewrite

Topics

Resources

Stars

Watchers

Forks

Languages