KeY-2.12.0 (2023-08-18)
Changes
Breaking changes
- The minimum required JDK version is set to 11.
- This release contains breaking changes for the reloading of older proofs:
- Integers in specifications are now considered as unbounded (i.e.
\bigint, math mode specifiers can be used to deviate from the default). - The list of rule sets used by the One-Step-Simplifier has changed.
- JML assertions are handled as a standalone construct and not as a block contract anymore.
- Integers in specifications are now considered as unbounded (i.e.
Highlights
-
Support for JML asserts/assumes as standalone construct (instead of transforming into blockcontracts), Support of \old() in JML asserts
-
Support for JML math mode specifiers (and changed default semantics to spec_bigint_math)
-
Migration to Github
Features
- Enable JavaDL data types in ghost and model fields
- Change SwitchToIf to create a if-else cascade
- More proof script commands: hide and unhide
- Logging via slf4j
- Suggested automation for seqPerm
- More descriptive names for result variables
- Implement some features of the jml assert wishlist
- ChoiceExpr: En-/Disabling taclets/goal templates using boolean expression
- New rules from the sorting case study
- Overflow checking
- Bring INVISMT to KeY; Refactors SolverTypes
- Redux additions
UI/UX Improvements
- Selection history (back + forward button)
- Generic undo button for user actions
- Expand oss nodes
- Allow user to select any installed LaF
- Un-clutter the context menus in the proof tree view
- Close more dialogs on escape press
- Replay progress display
- Improved taclet error reporting
- Immediately resize proof tree font
- Tooltip for the exloration status label
- Update log button, use Desktop.open instead of edit, fix an exception and log format on windows
- Report location on error in constant evaluation
- Report better error for missing model method
- Proof tree view: Multiple small changes for readability
- Disable exploration tree updates when disabled
- Focus first cell in the taclet instantiation dialog on open
- Clipboard: Replace nbsp from html document selection with normal spaces
- Improve naming in recently used files dropdown
🛠 Maintenance/Internal Changes
-
Logging
-
Code formatting with spotless
-
Code-Clean-Ups and Refactoring:
- Replace the hardcoded SolverType classes by .props files
- Position information overhaul
- Remove ServiceLoaderUtil
- Remove last Eclipse files
- Code cleanup
- Miscellaneous cleanups (unused classes removed etc.)
- Removal of the Eclipse Plugins
- Remove sonarqube from readme
- Cleanup: Remove extension of CreatingASTVisitor by MergeRuleUtils.CollectLocationVariablesVisitor
- Some code cleanup
- Refactor Java formatter used in the sequent view
- Overhaul of the Configuration
- Add possibility to check for unsupported properties keys to SettingsConverter and clean up the class
- Removal of the Proof Collection Parser
-
Dependencies
-
Performance
-
Tests
-
Misc
- Small tweaks to proof script engine
- Reducing the binary filesize by only including the necessary example files
- Improve smt solver checking on windows
- Translating DL contracts to JML
- Read
\profileand\settingsonce - Stop the message about java_profile.jfr
- Suppress logback message before configuration
- Support for jdiv and jmod in SMT translation via definitions
- Add gen folder to gitignore
- Add Task runWithProfiler to execute key.ui with the Java Flight Recoder
- Load some (old) proofs with wrong/missing instantiations of \assumes in taclet app
- Specialized version of RuleContext::getText in TextualJMLAssertStatement::getClauseText
- Multiplication for rule costs
🐛 Bug Fixes
-
Remove highlighting artifacts in SequentView with Unicode symbols enabled
-
Fix exception when parsing unknown source name in BuildingException
-
Solve missing plugin in shadowJar by adding
mergeServiceFiles() -
Allow declaration of function symbols in custom key file and to use them in JML via \dl
-
Resolve "Taclet leaves a broken tree after failing to apply"
-
Show message of the chained cause of the exception in IssueDialog
-
Ensure that the condition of a JML assert statement is always a formula
-
Fix widening casts and boxing of extension primitive types like bigint
-
Fix set statements (allow expressions on lhs, e.g. for array and field access)
-
Make AbbrevMap::getTerm fulfill its contract and prevent a NPE
-
A collection for some (straight forward) of the SonarQube reliability bugs
-
Resolve "Parsing exception: undeclared variable in an assignable declaration"
-
Repairing JML interpretation of equality on floats and doubles.
-
Further bug fixes: #1664, #1658, #1652, #1679, #1681, #1682, #1678, #1685, #1690, #1706, #1709, #1684, #1711, #1707, #1723, #1598, #3035
We like to thank our contributors for this release, namely:
Alicia Appelhagen, Richard Bubel, Lukas Grätz, Christian Hein, Arne Keller, Michael Kirsten, Florian Lanzinger, Wolfram Pfeifer, Mike Schwörer, Benjamin Takacs, Samuel Teuber, Mattias Ulbrich, Alexander Weigl, Julian Wiesler