Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Define property methods as "getters" #6304

Merged
merged 36 commits into from
Nov 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
3c74502
New command-line option `-AassumePureGetters`
mernst Nov 11, 2023
6fefee4
Merge ../checker-framework-branch-master into getters-pure
mernst Nov 11, 2023
fd47257
Checkpoint
mernst Nov 11, 2023
9613364
Minor updates to purity analysis
mernst Nov 11, 2023
4032b01
Merge ../checker-framework-branch-master into purity-minor
mernst Nov 11, 2023
fb2fd8d
Temporary diagnostics
mernst Nov 11, 2023
9b73c01
Added method `isDeterministic()` to the `AnnotationProvider` interface
mernst Nov 11, 2023
48a21c1
Do not instantiate PurityUtils
mernst Nov 11, 2023
d0eda64
Merge ../checker-framework-fork-mernst-branch-isDeterministic into ge…
mernst Nov 11, 2023
5ccb4d9
Merge ../checker-framework-fork-mernst-branch-purity-minor into isDet…
mernst Nov 11, 2023
e58d92a
Add `assumeDeterministic` variable
mernst Nov 11, 2023
9e39c91
Add comment
mernst Nov 11, 2023
8b46918
Add comment
mernst Nov 11, 2023
66d3c7e
Merge ../checker-framework-fork-mernst-branch-purity-minor into isDet…
mernst Nov 11, 2023
5346cc9
Merge ../checker-framework-fork-mernst-branch-isDeterministic into ge…
mernst Nov 11, 2023
32096b2
Merge ../checker-framework-fork-mernst-branch-isDeterministic into ge…
mernst Nov 11, 2023
b695bca
parameter => argument
mernst Nov 11, 2023
3f94cb5
Text in Dataflow Manual
mernst Nov 11, 2023
90e2ed2
Adjust expected errors
mernst Nov 11, 2023
2776bdc
Rename variable
mernst Nov 11, 2023
ff36cf5
Merge ../checker-framework-fork-mernst-branch-purity-minor into isDet…
mernst Nov 11, 2023
3f3a25f
Merge ../checker-framework-fork-mernst-branch-isDeterministic into ge…
mernst Nov 11, 2023
7e0a50c
Tweaks
mernst Nov 12, 2023
4fdbbdb
Add fix in MethodCall; remove diagnostics
mernst Nov 12, 2023
be326fd
Merge ../checker-framework-branch-master into purity-minor
mernst Nov 12, 2023
521aff7
Merge ../checker-framework-fork-mernst-branch-purity-minor into isDet…
mernst Nov 12, 2023
77f7813
Merge ../checker-framework-fork-mernst-branch-isDeterministic into ge…
mernst Nov 12, 2023
a60aad1
Refactor
mernst Nov 13, 2023
64365f0
Define property methods as "getters"
mernst Nov 13, 2023
91399e4
Merge ../checker-framework-branch-master into purity-minor
mernst Nov 13, 2023
160e451
Merge ../checker-framework-fork-mernst-branch-purity-minor into isDet…
mernst Nov 13, 2023
7a6095f
Merge ../checker-framework-fork-mernst-branch-isDeterministic into ge…
mernst Nov 13, 2023
44b5f86
Merge ../checker-framework-fork-mernst-branch-getters-pure into gette…
mernst Nov 13, 2023
426b8e2
Merge ../checker-framework-branch-master into getters-pure
mernst Nov 13, 2023
6fff0a8
Merge ../checker-framework-fork-mernst-branch-getters-pure into gette…
mernst Nov 13, 2023
5f5cbf5
Merge branch 'master' into getters-and-trivial-properties-pure
smillst Nov 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion docs/manual/purity-checker.tex
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@
unsoundly assume that every getter method is side-effect-free and
deterministic. For the purposes of \<-AassumePureGetters>, a getter method
is defined as an instance method with no formal parameters, whose name
starts with ``get'' followed by an uppercase letter.
starts with ``get'', ``is'', ``not'', or ``has'' followed by an uppercase
letter.

This can make
flow-sensitive type refinement much more effective, since method calls will
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1101,7 +1101,8 @@ public static boolean isResourceVariable(@Nullable Element elt) {

/**
* Returns true if the given element is a getter method. A getter method is an instance method
* with no formal parameters, whose name starts with "get" followed by an upper-case letter.
* with no formal parameters, whose name starts with "get", "is", "not", or "has" followed by an
* upper-case letter.
*
* @param methodElt a method
* @return true if the given element is a getter method
Expand All @@ -1117,12 +1118,18 @@ public static boolean isGetter(@Nullable ExecutableElement methodElt) {
return false;
}

// I could check that the method has a non-void return type.
// I could check that the method has a non-void return type,
// and that methods with prefix "is", "has", and "not" return boolean.

// Constructors and initializers don't have a name starting with a character.
String name = methodElt.getSimpleName().toString();
// I expect this code is more efficient than use of a regular expression.
boolean nameOk = nameStartsWith(name, "get");
boolean nameOk =
nameStartsWith(name, "get")
|| nameStartsWith(name, "is")
|| nameStartsWith(name, "not")
|| nameStartsWith(name, "has");

if (!nameOk) {
return false;
}
Expand Down