Reverse Engineering Tool MSOE Logo

A simplified and accessible alternative to Enterprise Architect for generating UML diagrams from student code.

This project provides an intuitive tool designed to support both instructional review and student learning at MSOE. It streamlines the workflow for faculty and students by making UML diagram generation from Java and C++ code straightforward and efficient.

Copyright 2026, Milwaukee School of Engineering


Table of Contents


Key Technologies

Basic Flow

This project reads the raw text of inputted code files. The raw text is passed through ANTLR, which uses specific grammar files to create a parse tree representing the code. We have our own code which visits the parse tree, reading information about classes and their contents from the code. Once we’ve collected this information, we convert that information into a PlantUML file, and run that through PlantUML’s tools to create UML diagrams which we can save, or pass to one of our tools to display to users.


Releases

This project has automated releases. A release is triggered on a successful commit to the main branch. You may find the latest releases here.

Each automated release provides downloads to the following artifacts:

NOTE: If you are using a non-Windows system, ensure that Graphviz is installed because it is a required dependency for all release artifacts.


Getting Started

Prerequisites

Verify that Java 21 is installed on your system and that the JAVA_HOME environment variable points to it, or that its directory is included in your system PATH

Building the Project

Each module can be built independently. The Core module produces the CLI JAR, the Desktop App module produces the desktop JAR, and the IntelliJ Plugin module produces the plugin ZIP.

Core Module Build Instructions

Run the following command to build the Core module:

./gradlew modules:core:build

This will build a Fat JAR, located in modules/core/build/libs/.

Run the JAR using:

java -jar modules/core/build/libs/reveng-cli.jar

Desktop App Module Build Instructions

Run the following command to build the Desktop App module:

./gradlew modules:desktop-app:build

This will build a Fat JAR, located in modules/desktop-app/build/libs/.

Run the JAR using:

java -jar modules/desktop-app/build/libs/reveng-desktop.jar

Plugin Module Build Instructions

Run the following command to build the Plugin module:

./gradlew modules:intellij-plugin:buildPlugin

This will create a zip distributable, located in modules/intellij-plugin/build/distributions/.

Install the plugin in IntelliJ: 1. Navigate to SettingsPlugins (next to Installed) → Install Plugin from Disk 2. Select the generated zip.

Running the Sandbox Plugin Instructions

You can run the plugin in a sandbox IntelliJ IDE using any of these methods:

Method 1: From Gradle Tool Window 1. Navigate to View → Tool Windows → Gradle 2. Expand: reveng → Tasks → intellij platform → runIde 3. Double-click runIde

Method 2: From Terminal

./gradlew runIde

For comprehensive plugin documentation, see docs/RUNNING_THE_PLUGIN.md.


Supported Languages

Language File Extensions Supported Constructs Notes
Java .java Classes, abstract classes, interfaces, enums, records Full support
C++ .cpp Classes, structs, enums, unions

CLI Usage

The CLI tool accepts a source file or directory as input and generates UML diagrams in one or more output formats.

Command Syntax

java -jar reveng-cli.jar <input> [output1] [output2...] [--print] [--grading <rules.md>]

Parameters

Parameter Required Description
<input> Path to the Java (.java) or C++ (.cpp) source file, or a directory containing source files
[output1] [output2...] One or more output files (.puml, .png, or .svg). Full path can be included e.g. C:\output\MyDiagram.puml
[--print] Print parsed class details to the console
[--grading <rules.md>] Run grading mode against a Markdown rules file
--about Print project contributors and exit

For grading mode documentation and rule syntax, see docs/GRADING_MODE.md.

Notes: - Output folders are created automatically if they don’t exist - Without the --print flag, only file creation confirmations are displayed


Desktop App

The desktop app provides a graphical interface for generating and viewing UML diagrams.

Launching

java -jar modules/desktop-app/build/libs/reveng-desktop.jar

Or use the installer from the Releases section.

Opening a Project

Viewing and Saving

Grading Mode

Load a rules file via Grading → Load Rules File to validate the diagram against a set of rules. Violations are highlighted red in the diagram and listed in the warnings panel to the right. See docs/GRADING_MODE.md for rule syntax.


Test Instructions

This project uses TestNG as its primary test framework and Cucumber for BDD (behavior-driven) tests. BDD scenarios are written in plain English in .feature files under src/test/resources/bddtests/ and backed by step definitions in src/test/java/bddtests/.

Running Tests

To run all tests for a specific module:

# Core Module (parsers + CLI scenarios)
./gradlew modules:core:test
# Desktop App Module
./gradlew modules:desktop-app:test
# IntelliJ Plugin Module
./gradlew modules:intellij-plugin:test
# All Modules
./gradlew test

Test Resources

All sample files used for testing are located in src/test/resources/ in each module.


Example CLI tool usage

Generate a PlantUML file

java -jar reveng-cli.jar TestClass.java TestDiagram.puml

Generate a PNG diagram

java -jar reveng-cli.jar TestClass.java TestDiagram.png

Generate an SVG diagram

java -jar reveng-cli.jar TestClass.java TestDiagram.svg

Generate multiple outputs

java -jar reveng-cli.jar TestClass.java TestDiagram.puml TestDiagram.png

Parse a directory

java -jar reveng-cli.jar src/ TestDiagram.puml

Parse a C++ file

java -jar reveng-cli.jar TestClass.cpp TestDiagram.puml

Run with grading rules

java -jar reveng-cli.jar TestClass.java TestDiagram.puml --grading RULES.md

Project Team

Product Owner

Jonathon Flynn, Ph.D.
Professor at MSOE
flynn@msoe.edu

Spring 2026 Development Team

Name Role Email
Jude Gill Product Owner Proxy gillj@msoe.edu
Bryce Jochman Note Taker jochmanb@msoe.edu
Stephen Miller Scrum Master millers@msoe.edu
Kaiden Pollesch DevOps polleschk@msoe.edu

Fall 2025 Development Team

Name Role Email
Jude Gill DevOps gillj@msoe.edu
Emanuel Gonzalez Product Owner Proxy gonzalezem@msoe.edu
Stephen Miller Scrum Master millers@msoe.edu
Kaiden Pollesch Note Taker polleschk@msoe.edu

Known Issues


License

This project is licensed under the GNU General Public License v3.0 (GPL-3.0). See the LICENSE file for more information.

Copyright 2026, Milwaukee School of Engineering

Authors: Jude Gill, Stephen Miller, Kaiden Pollesch, Emanuel Gonzalez
Last Updated: 2026-05-07