Repository navigation
Add support for type Annotations - #3996
Draft
PiIsRational wants to merge 3 commits into
Draft
PiIsRational wants to merge 3 commits into
PiIsRational wants to merge 3 commits into
Conversation
Previous Commits: 230f842 # add the ownership rules 6a195dd # added the new rules 415f9db # extend the javac extension f37d143 # change the way the universe rules are treated c337d49 # update to add the latest changes 82f0bcc # do some bugfixes in the recoder parsers 912cc8c # the last changes 94763f1 # update the match conditions 19f98e9 # add support for args and results in contracts 0d932a9 # some changes a82c2c2 # the new rule files 2f35dcf # add the proofs 85a0e6d # update the rules 902c17c # remove unneeded assertion 3f0dea8 # remove logs in the default lemma generator 29dabd9 # all the universe lemmas have a corresponding runnable proof ac9124d # remove factorypaths 88187a0 # add support for dom references 16e29d2 # update the heuristics 519a11c # update the heap simplification macro with universe rules 2cb864d # apply spotless eae3d25 # refactoring 86d605e # a first try with the new parser 23d12f4 # a minor change 67995b6 # tried to get types to wor 8bc0407 # add annotations to type references bbd5a1b # try to get Annotation Declarations to properly load 8a1112a # the Annotation Declarations now get loaded correctly 3c8bff8 # a first somewhat functional state 85fd964 # formatting a1f56a6 # a few changes: 90c2968 # some small changes 26ca483 # remove special case, as it is already coeverd by the base case 26cf894 # remove incorrect proof rules 74e547e # completed the addAnnotation variable condition 76c00be # create the RemoveAnnotation varcond 1cc43d5 # fix a testcase 7b1e680 # formatting 6104e0a # have clean variable conditions d3bf37c # reduced the various lemmas 228a069 # deactivated the universe rules 34da918 # remove universe rules 34a15df # remove automatic proofs c2a059f # run spotless 6cd0ba1 # add back proof files 32a9fa5 # the conract adder works! cf12853 # make the annotation interface member be a real member declaration 04eaa6b # move to ImmutableList 7efd1f4 # fix the lemma proofs 87ff5cd # remove unused axiom from the rules 6e737e4 # cleanup c5a911e # move the annotation-declaration test and some cleanup f9c48b7 # remove the limiting fd803b1 # remove universe specific constructs e48ebe6 # add the annotation mover 1fe8020 # fix the pipeline tests d563cb1 # add the small annotation test ade91f0 # cleanup b0e956d # minor last changes
1 of 2 tasks
This was referenced Oct 22, 2026
Member
|
Stupid remarks:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Intended Change
The Goal of this Pull Request is to be able to use Java Type Annotations in Taclets.
To make this work the Type Annotations were added to the KeY Ast at the
TypeReferencelevel.The annotations were added to the type references, since they correspond to the syntactical
version of the types. Since in most places
KeYJavaTypes were used, there was the needto replace them.
The default matching behaviour was not altered and is compatible with the current
master branch. This means that there is no semantic difference between
Object oand
@Rep Object o. Therefore, no taclets need to be altered and annotations are simplyignored per default.
To interact with annotations in taclets there are currently 3 variable conditions:
hasAnnotation(SchemaVariable variable, String annot):It checks that the type (
TypeReference) ofvariablehas an annotation whosefully qualified name matches
annot. It supportsProgramVariables,New(simple constuctor calls) and Fields.
addAnnotation(SchemaVariable store, SchemaVariable read, String annot):It creates a copy of
readand stores instoreexcept that the last annotationof the type of
storenow corresponds toannot. If the given stringannotdoesnot match an annotation, the variable condition fails.
It supports
ProgramVariables andNew(simple constructor calls).removeAnnotation(SchemaVariable store, SchemaVariable read, String annot):It creates a copy of
readwhere all annotations of the type ofreadwith the fully qualified name matching
annotare removed and stores it instore.This variable condition matches always and only supports
New(simple constructor calls).Currently only, Marker annotations so annotations with no arguments
(such as
@NonNullor@Rep) are supported.Example
In the context of a Nullness type system (where the
@NonNull) annotationis type checked we could have something like the following snippet:
To be able to use the guarantee expressed by the annotation we could write the following
Taclet:
A further (similar) example can be found here.
The main use of this change is PR #3724 and can be found here (mainly in
universeDefs.key).Plan
Add documentationType of pull request
Ensuring quality
Additional information and contact(s)
@WolframPfeifer is involved in this Pull Request
The contributions within this pull request are licensed under GPLv2 (only) for inclusion in KeY.