Skip to content

Conversation

@ix0rai
Copy link
Member

@ix0rai ix0rai commented Nov 12, 2025

Warning

do not squash-merge!

  • add autosave option in the GUI (Autosave mappings #276, Add auto save toggle to menu bar #285, Auto save improvements #300)
    • this will be off by default, as it can be destructive due to the lack of ways to restore old mappings
    • saving occurs each time a mapping is changed and will run in the background
  • improve API and GUI around statistics (add 'count fallback' option for stats and add stat icon settings #255)
    • add option for treating fallback-proposed entries as mapped for stat generation
    • improve performance for stat reloads via ordering work and cancelling unnecessary jobs (Sequential and cancelable stats reloads #301)
    • fix a rare CME when generating stats
    • configured generation parameters for stats now control the tree icons
      • the stats dialogue will default to the parameters for the icons, with changes made there being transient (except for the dialog-exclusive package filter)
    • add a GUI toggle for disabling/enabling icons
    • the tree will update in real time as settings are changed
  • parameters are now indexed via EntryIndex (search-mappings command #282)
    • fix wrong types occasionally being displayed in the editor panel
    • the editor panel will now show <unknown> for non-parameter entries in the LVT
  • add a search bar for the structure panel (add a search bar to the structure panel #266)
    • add a new keybind for opening the structure panel (ctrl + t)
      • ctrl + shift + t will open with the search selected
  • fix translations for mapping formats
  • clean up backend around menu bar (refactor menu bar into individual classes #261)
    • now consistently updates state and retranslates everywhere
  • rework commands and add a new search command
    • add a new search-mappings command (search-mappings command #282)
      • allows searching for mappings using regular expressions
      • includes extensive options for filtering by types, access, names, and more
      • allows sorting by name, package, and depth
    • command arguments can now be specified by name (parameter=value) instead of positionally (Named command args #280)
      • the two can be mixed as long as all positional arguments come before named args
      • any argument can be specified either by name or position
    • add generation parameters as arguments to PrintStatsCommand (Print stats gen params #297)
    • fix several bugs in existing commands
      • fix InvertMappingsCommand using OUTPUT_FOLDER instead of MAPPING_OUTPUT, meaning it didn't support alternate formats
      • fix InvertMappingsCommand's arguments skipping an index
      • fix ENIGMA_PROFILE argument not verifying it was a file
      • fix ComposeMappingsCommand not properly declaring its optional args
      • fix DecompileCommand using the OUTPUT_JAR arg instead of an output directory
      • fix broken test suite on windows
    • refactor code surrounding commands (Command refactor #277)
      • give each command a private constructor with one definitive instance
      • seal Command
      • eliminate ComposedArgument, make Argument a record instead of an enum
        • default arguments are now stored in CommonArguments
      • makes Main's map of commands immutable
  • improve proguard implementation for tests (Proguard cleanup #289)
  • fix classes being renamable via the context menu when CLASS is not configured as an editable type (Fix being able to rename classes when disabled #299)
  • improve editor tabs (Tab improvements #296)
    • fix unfocused tabs not showing the close button on hover
    • focuses the editor after a tab is clicked or closed
    • adds a tooltip to tab titles for viewing the fully qualified name
  • improve reliability of a few keybinds via removing possible conflicts (Improve keybinds #303)
    • default keybind for EDITOR_SHOW_CALLS was changed to ctrl + alt + c, as the old keybind of ctrl + c would both copy text and show calls
  • improve quick find bar in the editor (Quick find tool bar #304)
    • allow configuring the keybind to open quick find
    • add an option for allowing quick find to be persistent when the user clicks off
    • replace the backend, eliminating some weirdness and making it more responsive
    • fix the dialog sometimes becoming detached from the editor and appearing outside the main window
  • allow navigating to method calls inside lambdas and static initializers (github.com/Fix navigation to method calls within lambdas and static initializers #308)
    • add parsing of the source code to obtain tokens for these calls
  • improve indexing for libraries (github.com/Fix 91 #306)
    • expose a combined index for libraries and main jar entries
    • disallow renaming entries that are declared in libs
    • fix issues related to enigma not understanding that all classes inherit from Object, such as the ability to map a String method with no args as toString without the conflict detector noticing
    • not all of the JDK is indexed yet, as we encounted issues with ASM's analysis
  • fix some issues related to the navigator panel (Fix 256 #305)
    • fix the panel's count not updating properly when reloading mappings
    • fix entries sometimes becoming improperly ordered when their types changed
    • fix zero padding on label not always matching between index and total
  • add error handling for plugins (Plugin error handling (but this time it works) #330)
    • plugins are now required to implement a supportsEnigmaVersion method to define which versions it is compatible with
      • we recommend matching major and minor, allowing any patch, since breaking API changes can and will be made in minor versions
    • AbstractMethodErrors due to the unimplemented method will be caught and reported with an error message
  • change organisation of config files
    • added new file, editor.toml
    • moved enableClassTreeStatIcons to main#stats
      • your config will not automatically be migrated, make sure to update if you're using this option!
    • removed main#features
  • add tooltips showing javadoc and declarations for entries (Entry tooltips #307)
    • contains 3 elements:
      • navigable links to parent classes
        • clicking a class will open its tooltip, control-clicking a package will navigate to and expand it in the tree
      • formatted javadoc
      • snippet of code from the declaration
    • movable via dragging
    • can be disabled or made non-interactable via the config
  • update dependencies (update dependencies for 2.7 and move to jspecify annotations #334)
    • shadow: 8.1.1 -> 9.2.2 (move to gradleup version)
    • guava: 33.2.1 -> 33.5.0
    • gson: 2.10.1 -> 2.13.2
    • asm: 9.7.1 -> 9.9
    • tinylog: 2.6.2 -> 2.7.0 (they're just like us fr)
    • vineflower: 1.11.0 -> 1.11.2
    • junit: 5.10.3 -> 6.0.1
    • jimfs: 1.3.0 -> 1.3.1
    • gradle: 8.7 -> 9.2.0
    • syntaxpain: 0.1.5 -> 0.2.0
    • new: jspecify: 1.0.0
      • all nullability annotations have been moved away from javax to use jspecify
    • new: javaparser: 3.27.0
      • required for supporting navigation to lambdas and static init

TODO:

  • bump version
  • proper changelog in CHANGELOG.md
  • add jspecify to readme deps list
  • address feedback
  • add links

PiTheGuy and others added 30 commits August 17, 2025 21:06
* Autosave mappings

* Add config option

* Checkstyle + update javadoc

* Checkstyle

* disable by default

---------

Co-authored-by: ix0rai <ix0rai64@gmail.com>
* add option for counting fallback items

* refactor GenerationParameters to its own class

* add count fallback checkbox to stats dialog

* add options in menu for changing stat icon settings

* fix checkstyle

* fix issues

* rework config and add more options

* fix bugs
- included types not properly taken into account during on-change reloads
- fix pointless newlines in detailed tooltips
- fix incomplete stats being shown in dialog

* fix style

* clean up overly verbose StatsDialog code

* clean up StatsSection

Co-authored-by: Will <supersaiyansubtlety@gmail.com>

* fix generation parameters for stat icons and ensure consistency

* checkstyle

* remove redundant checks for synthetic and improve flow of synthetic check

* revert behaviour changes

* remove redundant check

---------

Co-authored-by: Will <supersaiyansubtlety@gmail.com>
* add a search bar to the structure panel

* implement keybinds for structure panel

* change keybind to t

* focus tree for navigation when opening structure with ctrl + t

* proper borders (thanks @supersaiyansubtlety!)
* fix cli tests on windows

* convert Argument to record, eliminate ComposedArgument

* seal Command

* make Command implementations singletons

* inline Main.COMMAND init

* simplify Command::checkArgumentCount

* make Main::getCommands return ImmutableMap
* add option for counting fallback items

* refactor GenerationParameters to its own class

* add count fallback checkbox to stats dialog

* add options in menu for changing stat icon settings

* fix checkstyle

* fix issues

* rework config and add more options

* refactor menu bar code

* break out stats menu

* checkstyle

* fully break view menu, add default constructor, properly update state in StatsMenu

* break out file menu; fix format translations

* checkstyle

* fix collab menu translations, pass jarOpen and ConnectionState to updateState

* apply suggestions

Co-authored-by: Will <supersaiyansubtlety@gmail.com>

* naming changes

* button group FAIL

* fix scale menu weirdness

* fix name

---------

Co-authored-by: Will <supersaiyansubtlety@gmail.com>
* call setupTheme in TestPackageRename; fixes NPE
* initial named args implementation

* move arg retrieval, validation, and mapping into Argument class

* ignore empty path strings

* add missing type param

* use MAPPING_OUTPUT instead of OUTPUT_FOLDER arg in InvertMappingsCommand

* add clarifying comment

* add DecompileCommand::run override accepting enum

* add ArgsParser

* add ArgsParserTest

* make ArgsParserTest DRYer

* add ArgMapTest with valid input tests

* reject unreconized named args

* improve missing required args exception

* add invalid args tests

* javadoc Command's type params

* add missing Command type params

* javadoc

* fix strings according to code review

Co-authored-by: ix0rai <ix0rai64@gmail.com>

* fix string format arg order

Co-authored-by: ix0rai <ix0rai64@gmail.com>

* minor test improvements

---------

Co-authored-by: ix0rai <ix0rai64@gmail.com>
* Add auto save toggle

* Checkstyle

* restore new code after merge

---------

Co-authored-by: ix0rai <ix0rai64@gmail.com>
* start setting up GrepMappingsCommand

* add MemberTypeIndex
add MethodEntry::streamParameters and cache params
implement GrepMappingsCommand

* support array types in MemberTypeIndex

* support filtering void, primitive, and array types
eliminate MemberTypeIndex

* fix GrepMappingsCommand::getName
implement grep results limit

* rethrow NumberFormatException for LIMIT arg

* extract new Argument type descriptions

* add GrepMappingsTest with first test implemented
improve some javadocs and descriptions

* test finding methods

* reorder grep-mappings args

* format grepped type names like code
make GrepMappingsTest DRYer and more specific
add field grep tests
add stubs for more test

* index params in EntryIndex
fix check for whether an entry is mapped
check LocalVariableEntry's to find params instead of iterating over method's params (fixes finding constructor params)
add param tests to GrepMappingsTest

* improve findsTypeFilteredParamNames and findsParamNames

* add findsEverythingAndLimitable to GrepMappingsTest

* add findsNothing to GrepMappingsTest

* add PredicateParser with a few initial tests

* add more PredicateParserTests

* checkstyle

* fix throwing wrong exception on excess close parentheses
add more PredicateParser tests

* setup access predicate arguments

* implement access filtering (untested)

* register grep command and indent its description

* improve limit arg explanation

* strengthen GrepMappingsTest assertions
add test mappings in preparation for access tests

* don't cache MethodEntry's params if method isn't indexed

* complete GrepMappingsTest

* javadoc PredicateParser

* javadoc ArgsParser

* rename grep-mappings -> search-mappings

* prep for result sorting
fix stack overflow for getting type name of inner class

* implement SearchMappingsCommand sort
move boolean arg defaulting out of Argument (FillClassMappingsCommand handles its own fill-all default)

* fix PARTS_ALPHABETIZER
add findsARrayType test
add sort tests

* improve formatting for unpackaged outer classes when sorting by name

* rename PACKAGE_DEPTH_SORTER -> PACKAGES_DEPTH_SORTER

* make result order tests stricter

* minor test cleanup

* add test for #161 (accidentally added with param indexing)

* move new test input class to z-prefixed package to avoid breaking SearchMappingsTest mappings

* remove now-redundant check from MappingsChecker

Co-authored-by: ix0rai <ix0rai64@gmail.com>

* run theme setup on swing thread (fixes crash)

* use wait method to eliminate possible inconsistencies

* centralize string null check in Argument::from

* filter empty strings in Argument::ofString

* try matching raw bytecode descriptors in addition code-style type names

* fix limit excess printing math

* make depth arg case-insensitive

---------

Co-authored-by: ix0rai <ix0rai64@gmail.com>
* use proguard.gradle.ProGuardTask instead of custom JavaExec task

* remove unecessary qualification

* use libraryjars instead of libraryJarFilters

* remove unused variable

* more minor cleanup

* clean up generateVersionFile

* copy improved task name method from QEP PR
* fix inheritance tree missing scrollbar and missing translations in editor popup menu

* checkstyle
* Update ClassSelectorPopupMenu.java

* Checkstyle
* fix #295

* focus editor on tab press and close

* add full class name tooltip to table titles

* checkstyle

* minor tweaks

* fix disabling background tab close button when cursor is over tab title
use translations in PrintStatsCommand logging
* report no type instead of wrong type for un-indexed method params

* show <unknown> for unknown param types

* use obf local entry to lookup descriptor instead of deobf (which is not in index)
* auto save improvements

* Checkstyle
* Update StatsMenu.java

* Use SwingUtilities.invokeLater

* use runAsync in invokeLater in StatsMenu

* checkstyle

* extract method

---------

Co-authored-by: supersaiyansubtlety <supersaiyansubtlety@gmail.com>
* change default KeyBinds.EDITOR_SHOW_CALLS to ctrl + alt + c because ctrl + c is copy on windows
use InputMap instead of KeyListener in EditorPanel and eliminate EditorPopupMenu::handleKeyEvent
simplify EditorPanel ctrl + click to navigate logic

* add all KeyBind combinations in InputUtil::putKeybindAction
fix inverted EditKeyBindDialog::isNewCombination

* putKeybindAction -> putKeyBindAction

* use InputMap instead of key listener in EnigmaQuickFindDialogue

* separate MULTILINE_DIALOG_SAVE from KeyBinds.DIALOG_SAVE
use InputMap instead of key listener in JavadocDialog

* use InputMap instead of key listener in ClassSelector

* use InputMap instead of key listener in ChangeDialog

* use InputMap instead of key listener in SearchDialog

* use InputMap instead of key listener in StructureDocker

* use InputMap instead of key listener in ConvertingTextField

* use InputMap instead of key listener in EditorTabbedPane

* javadoc and deprecate KeyBind::matches

* merge InputUtil into GuiUtil
* make stat icon updates sequencial; fixes 271

* allow many concurrerent asynchronous calls per call to Gui::reloadStats, but batch by call and wait for prior call batches before starting the next call batch

* allow Gui::reloadStats to cancel ClassSelectorClassNode::reloadStats' iconUpdateWorker

* use stream to create currentReloads

* AtomicBoolean params -> Supplier<Boolean>

* javadoc
return Future instead of RunnableFuture
add overload for a method to avoid breakage

* make ProjectStatsResult.stats a ConcurrentHashMap because of a rare ConcurrentModificationException

* use newSingleThreadExecutor instead of chaining CompletableFutures
* use local syntaxpain version
convert EnigmaQuickFindDialog to EnigmaQuickFindToolBar
add an EnigmaQuickFindToolBar as a child in EditorPanel
- EditorPanel keybinds are useable with quickfind open
- quickfind doesn't cover any part of EditorPanel's editor

* add KeyBinds.QUICK_FIND_DIALOG_CLOSE
retranslate EditorPanel's EnigmaQuickFindToolBar
implement EnigmaQuickFindToolBar translation (copied from old QuickFindDialog::translate)
add QuickFindDialog persistentCheckBox and closeButton

* make EnigmaQuickFindToolBar.persistentCheckBox selected state persistent

* keep EnigmaQuickFindToolBar.persistentCheckBox in sync with Config.persistentEditorQuickFind

* make EDITOR_QUICK_FIND keybind configurable

* checkstyle

* syntaxpain version 0.2.0

* appease the villainous grammar checker

Co-authored-by: ix0rai <ix0rai64@gmail.com>

---------

Co-authored-by: ix0rai <ix0rai64@gmail.com>
…#308)

* Fix for static initializers

* Bug fixes

* Migrate to JavaParser

* Add lambda support

* Switch to RAW language level so its language level agnostic

* Checkstyle

* Checkstyle

* Gracefully handle parsing errors

* Bug fixes

* Don't assume lambda method names will match JVM format

* Use LineIndexer

* Skip tokens that don't have a range

* Checkstyle

* Bug fix

* Handle more edge cases

* Minor code cleanup

* checkstyle

* Fix issue with method overloads

---------

Co-authored-by: supersaiyansubtlety <supersaiyansubtlety@gmail.com>
* fix NPE when closing the last tab

* forward ClosableTabTitlePane title label clicks

* checkstyle
* add POC tooltip to EditorPanel editor that shows full name of entry under cursor

* update tooltip content when mouse moves, but can't get JToolTip to resize+move

* replace EditorPanel's use of JToolTip and TooltipManager with JWindow and timers, respectively

* check if same token instead of same entry when updating tooltip

* replace complex Optional composition with consumer methods

* extract BaseEditorPanel without tooltip, navigator, or listeners

* display entries' entire outer source class in their tooltips

* always set tooltipEditor classhandle instead of setting source when it's the same class (editor bounds were 0x0 when setting source)
navigate to tooltip target entry declaration when showing tooltip

* add javaparser dep matching #308

* implement source trimming for classes using javaparser

* minor improvements

* minor cleanup

* make trimFactor a param instead of a field

* implement source trimming for methods

* match declarations only by range and extract findDeclaration

* inline variable

* implement field source trimming
stop excluding curly braces from method and class sources

* fix tooltip source trimming for static record fields
add "No source available" label when there's no classhandle

* update TODOs
centralize target name reporting

* extract TooltipEditorPanel

* trim param tooltip target source to parent method
refine error messages

* fail early when target declaration token is missing
add local source trimming

* fix tooltip source trimming for constructors

* minor refactor

* show record component parent instead of just component; matches param showing parent method

* when excluding implements from record component parent, find token instead of assuming offset

* close and destroy tooltip when source changes

* silently ignore missing declaration tokens (until #252 is fixed)

* restore quickFindToolbar to ui
stop closing tooltip's class handles as tabs may still need them; remove ClassHandleListener instead
rename TooltipEditorPanel -> DeclarationSnippetPanel
extract EditorTooltip
add test input for easier manual tooltip testing

* restore EditorPanel popupMenu functionality

* improve caret pos logic in BaseEditorPanel::setSource

* replace source with message if the declaration token could be found

* implement source snippet unindenting

* replace entry simple name label with formatted parent name label

* add 'From: ' prefix to parent label
left-align tooltip rows

* add javadocs to tooltip

* allow disabling tooltip

* make tooltip optionally interactable
implement dragging to move tooltip

* prevent hiding tooltip when cursor is over a token or the tooltip

* fix parent label for top-level classes and add missing dot separator for package
format labels
use GridBagLayout for param javadocs (currently takes up extra space)

* allow clicking entries withing tooltip to populate tooltip with that entry's information

* fix calculation for offsetting multiline snippet pos to un-trimmed pos
allow clicking parent entries in tooltips to populate tooltip
when ctrl+clicking entries in tooltips, open entry tab

* minor improvements, add TODOs

* resolve references when finding tooltip targets

* customize tooltip target highlighting

* update TODOs regarding records

* polish tooltip positioning
fix exception when consumeMousePosition... methods where passed a component that wasn't showing
fix several cases where the tooltip would hide when it shouldn't or hiden't when it should

* increase padding at outer edges of tooltip rows
add tooltip border

* use a JPanel with a GridBagLayout instead of a Box as the content pane for EditorTooltip; allows elements to expand to fill their space
double-pack in EditorTooltip's declarationSnippet source set listener to eliminate extra space, because swing </3

* reject some TODOs

* ctrl+click on parent package label to naviage to package

* fix tooltip separators
improve "No source available" message formatting

* respect tooltip ineractable config for parent package clicking
add z_ prefix to tooltip test input to avoid changing SearchMappingsTest

* use global focus listener to ensure tooltip is closed when neither it nor its editor has focus

* move consumeMousePosition... methods to GuiUtil

* rename EditorTooltip -> EntryTooltip
use GridBagConstraintsBuilder in EntryTooltip
respect scale config in EntryTooltip

* use GridBagConstraintsBuilder in initEditorPane

* make tooltip focusable; enables copying tooltip content

* fix hiding tooltip immediately after re-populating it
simplify tooltip focus and hiding logic

* remove tooltip to editor click forward as it didn't work consistently
remove unecessary insteractable tooltip click listener

* add EntryTooltip.repopulated field for workaround

* deobfuscate parent package

* focus class selector when navigating to parent package from tooltip

* scroll to class selector path when navigating from entry tooltip parent

* move Config.persistentEditorQuickFind to EditorConfig.persistentQuickFind

* rename config getter methods to match their ids and update Config javadoc

* fix another tooltip focus issue

* fix bug preventing RecordGetterFindingVisitor from finding inner records' getters
make RecordGetterFindingVisitor's getter map accessible
fix DeclarationSnippetPanel for record component getters

* rename RecordGetterFindingVisitor -> RecordIndexingVisitor
expand RecordGetterFindingVisitor to provide maps of record classes to their fields and methods
make EntryTooltip show record field javadocs for record classes
make EntryTooltip show record field javadocs for record getters if they don't have their own javadocs

* clear things in visitEnd instead of visit
clear fields and methods

* fix for java 17

* tighten RecordIndexingVisitor encapsulation

* make navigating to a record component getter with no explicit declaration navigate to its field instead

* add nullable annotation

* only set BaseEditorPanel.editor text once

* fix typo

* tweak moveMaintainingAnchor

* close entry tooltip on key press

* close tooltip on KEY_TYPED instead of KEY_PRESSED so ctrl+c can copy

* add javaparser to lib list in README

* cleanup createSnippet

* fix swapped un/bounded names

* make LineIndexer::getIndex return -1 for out-of-bounds positions, add LineIndexerTest

* rename EditorTooltipSection -> EntryTooltipSection

* limit EntryTooltip size

* put main tooltip content in a scroll pane

* focus snippet editor ui on source set
remove main content scroll pane border

* checkstyle

* replace AtomicInteger gridY's with primitive ints

* hard cap tooltip width at 600px (scaled)

* expand parent package path when navigating from tooltip

* explicitly check if source is bounded when setting 'Unable to locate declaration' message
show <init> for constructor simple names

* improve constructor name check

* use 'inherited from' label for tooltip labels for entries that resolved to a parent

* dispatch key events that close the entry tooltip to the previously focused component

* close entry tooltip with global mouse listener

* add gui for entry tooltip config

* deduplicate check box sync logic

* javadoc createSyncedCheckBox

* javadoc syncStateWithConfig override

* move tooltip management to EnitorPanel.TooltipManager
add/remove EntryTooltip's global listeners on open/close
reset TooltipManager on key presses

* minor refactor

* make 'tooltips' consistently plural in user-facing strings

* dispatch KEY_PRESSED events that close entry tooltips (with exception for ctrl+c)

* rework moveMaintainingAnchor when tooltip shrunk

* move FeaturesSection.enableClassTreeStatIcons to StatsSection
move FeaturesSection.autoSaveMappings to EditorConfig
eliminate FeaturesSection

* ensure RecordIndexingVisitor is cleared in visitEnd

* make several tooltip string translatable

* make a snippet string translatable
* OUT OF MEMORY when trying to run all tests
add JavaClassProvider which provied java.* classes
add CombinedJarIndex which indexes main jar and libraries
added missing translation for "progress.jar.indexing.libraries"

* make methods that trace back to non-jar methods non-renamable

* checkstyle

* filter out unreferenced classNames for LibrariesJarIndex and CombinedJarIndex

* add ReferenceIndex::getFieldsReferencedBy
keep lib classes whose fields or methods are referenced in the main jar

* exclude java/io/PrintStream from JavaClassProvider
check if method is indexed in EnigmaProject::isLibraryMethodOverride

* update asm (AnalyzerExceptions persist)

* use ClasspathClassProvider instead of JavaClassProvider to avoid AnalyzerExceptions; BREAK #274

* stop excluding Object from InheritanceIndex and update tests; fix #91

* update TODO

* try finding child node instead of assuming it's first

* add clarifying comment to UN_ANALYZABLE_CLASS_NAMES

Co-authored-by: ix0rai <ix0rai64@gmail.com>

* add jar index javadocs

---------

Co-authored-by: ix0rai <ix0rai64@gmail.com>
* EditorPanel: reset instead of re-add entries to NavigatorPanel
- fix #256
- also fixes an issue where an entry could be in a navigator panel multiple times under the same TokenType

* fix an issue that could cause NavigatorPanel entries to get out of order when their types were updated

* remove unused NavigatorPanel::updateTokenType

* properly pad status label with leading zeros

* simplify collection types
…KeyBinds, fixes #323 (#324)

make conflict removal more agressive
* add Version

* add EnigmaPlugin::supportsEnigmaVersion
add current version part constants to Enigma
extract individual part comparators in Version

* check EnigmaPlugin::supportsEnigmaVersion and throw if false

* improve error message

* add TestConsistentVersions

* tweak whitespace

* minor tweaks

* Integer::toString instead of Integer::parseInt

* improve javadoc

* remove redundant word from javadoc

* javadoc Version

* add missing 'the passed'

* add copyAndBumpEnigma task

* rename copyAndBumpEnigma -> syncBumpAndJarEngima
Sync instead of Copy to ensure old output is deleted
run jar task in bumped copy

* add DummyEnigmaPlugin test input

* got runDummyPluginAgainstBumpedEnigma working well enough to tell that the inlined constant approach doesn't work

* add EnigmaVersionMarked annotation

* make EnigmaVersionMarked annotation work

* remove EnigmaVersionMarked
remove default EnigmaPlugin::supportsEnigmaVersion implementation

* add PreHandlingDummyEnigmaPlugin

* update runDummyPluginAgainstBumpedEnigma task -> runRecommendedImplPluginAgainstBumpedEnigma

* improve bumped jar filtering

* add runPreHandlingPluginAgainstCurrentEnigma task

* catch AbstractMethodError when calling supportsEnigmaVersion

* check runPreHandlingPluginAgainstCurrentEnigma for expected output and rename -> testPreHandlingPluginAgainstCurrentEnigma

* check runRecommendedImplPluginAgainstBumpedEnigma for expected output and rename -> testRecommendedImplPluginAgainstBumpedEnigma

* make test depende on dummy plugin tests

* exclude enigma-cli build dir from bumped copy

* add AnyVersionEnigmaPlugin for test plugins

* add reminder to update Enigma's version int constants

* rename DummyEnigmaPlugin -> RecommendedImplEnigmaPlugin

* add Version methods instead of exposing Comparators

* remove unused import

* improve comments, rename task

* add error messages to TestConsistentVersions

* remove commented code

* replace getAsFile() with asFile

---------

Co-authored-by: ix0rai <ix0rai64@gmail.com>
* update gradle and dependencies

* fix deprecations

* replace @nullable and @nonnull with jspecify annotations
- add jspecify dependency
- find-and-replace
- full project optimise imports in intellij

* fix checkstyle issues

* fix broken tests

* fix checkstyle issues, issues from merge, and newly added files

* remove wildcard import in enigma-swing buildscript
---------
Co-authored-by: supersaiyansubtlety <supersaiyansubtlety@gmail.com>

* update files merged in

* checkstyle

* create empty directories for excluded sub-projects

* fix gradle deprecation warnings

---------

Co-authored-by: supersaiyansubtlety <supersaiyansubtlety@gmail.com>
@ix0rai ix0rai added enhancement New feature or request backend affects the enigma backend user interface affects the enigma ui cli affects the enigma command-line interface labels Nov 12, 2025
Co-authored-by: Will <supersaiyansubtlety@gmail.com>
@ix0rai ix0rai merged commit 1a0d6be into master Nov 16, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend affects the enigma backend cli affects the enigma command-line interface enhancement New feature or request user interface affects the enigma ui

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants