-
Notifications
You must be signed in to change notification settings - Fork 437
Suppresses RLC non-final field overwrite warning for safe constructor field initialization #7050
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
Open
iamsanjaymalakar
wants to merge
114
commits into
typetools:master
Choose a base branch
from
iamsanjaymalakar:7049-dev
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 12 commits
Commits
Show all changes
114 commits
Select commit
Hold shift + click to select a range
158e737
Suppresses RLC non-final field overwrite warning for safe constructor…
iamsanjaymalakar 325e983
Add `@FindDistinct` annotation
mernst 4cb90d7
Resolves PR review comments.
iamsanjaymalakar 9d4d403
Merge branch 'master' into 7049-dev
iamsanjaymalakar c524542
Addresses PR comments.
iamsanjaymalakar a9a1e84
Merge ../checker-framework-branch-master into 7049-dev
mernst dbd6447
Merge branch 'master' into 7049-dev
iamsanjaymalakar 29071ca
Merge branch '7049-dev' of github.com:iamsanjaymalakar/checker-framew…
mernst 14aebc4
Merge ../checker-framework-branch-master into 7049-dev
mernst 87b838c
Punctuation
mernst 8ad095b
Improve comments
mernst fa2aef4
Tweak coment and code
mernst 96c47f8
Better comments.
iamsanjaymalakar 9a70147
Merge ../checker-framework-branch-master into 7049-dev
mernst 4010022
Add test showing error message at wrong location
mernst 4765ecf
Comments and variable name
mernst 143f3f4
Enhance test
mernst b11cd19
Merge ../checker-framework-branch-master into 7049-dev
mernst dda12eb
Merge branch 'master' into 7049-dev
iamsanjaymalakar d78354e
Merge branch 'master' into 7049-dev
iamsanjaymalakar 81c8cab
Resolves PR comments. Mike's new test is passing now.
iamsanjaymalakar f3b9022
Merge ../checker-framework-branch-master into 7049-dev
mernst 0d53a06
Merge ../checker-framework-branch-master into 7049-dev
mernst 07617a7
Improve documentation and naming
mernst c188d0f
Naming
mernst 7f4360a
Add tests
mernst 7eb84c4
Addresses Mike's review comments. Adds test.
iamsanjaymalakar 827e573
Merge branch 'master' into 7049-dev
iamsanjaymalakar 80d52c2
Replaces == with equals.
iamsanjaymalakar a5d1f60
Method call in instance initializer block.
iamsanjaymalakar 786d477
Update checker/tests/resourceleak-firstinitconstructor/InstanceInitia…
mernst 5d9d51a
Merge ../checker-framework-branch-master into 7049-dev
mernst 46687a1
Expand tests
mernst 679cbdf
Merge branch '7049-dev' of github.com:iamsanjaymalakar/checker-framew…
mernst 000a833
Fix spelling
mernst 2d9e299
More tests
mernst d55afd1
Side effecting constructor calls that may rewrite field. Updates tests.
iamsanjaymalakar 93210dd
Reverts == with .equals due to interning:not.interned error.
iamsanjaymalakar 04d72ba
Merge branch 'master' into 7049-dev
iamsanjaymalakar 2d1691a
Merge branch 'master' into 7049-dev
msridhar 43490e6
Nullness checker errors from azure build pipeline.
iamsanjaymalakar 2429215
Nullness checker errors from azure build pipeline.
iamsanjaymalakar 33f4adf
Nullness checker errors from azure build pipeline.
iamsanjaymalakar caa85b1
Merge ../checker-framework-branch-master into 7049-dev
mernst a7eb9a8
Documentation edits
mernst df08e91
Complete the method renaming
mernst a891075
Removes a redundant null check.
iamsanjaymalakar f74552f
Merge branch 'master' into 7049-dev
iamsanjaymalakar 17468f6
Merge ../checker-framework-branch-master into 7049-dev
mernst 9bd6d38
Merge ../checker-framework-branch-master into 7049-dev
mernst aa0e9e9
Makes the scanner more conservative.
iamsanjaymalakar 4d93d90
Suppresses interning checker warning.
iamsanjaymalakar b6a6daf
Fixes typo.
iamsanjaymalakar 48ea240
Merge branch 'master' into 7049-dev
iamsanjaymalakar 219c5b5
Merge ../checker-framework-branch-master into 7049-dev
mernst 7b7f3f9
Adds object allocation side effect check for inline initializer block.
iamsanjaymalakar 1d0fdae
Coderabbit suggestions.
iamsanjaymalakar 11ebf6c
Merge ../checker-framework-branch-master into 7049-dev
mernst 705019a
Tweaks
mernst 80f0d1f
Merge branch '7049-dev' of github.com:iamsanjaymalakar/checker-framew…
mernst 6aa49ee
Simplify wording
mernst efc7b7c
Remove warning suppressions
mernst af3ca85
Brevity
mernst 80e4041
Merge ../checker-framework-branch-master into 7049-dev
mernst ece1b44
Merge branch 'master' into 7049-dev
iamsanjaymalakar 6c806fb
Merge branch 'master' into 7049-dev
iamsanjaymalakar b9af79d
Merge ../checker-framework-branch-master into 7049-dev
mernst 6a3e7d0
Merge ../checker-framework-branch-master into 7049-dev
mernst 52f6d69
Merge ../checker-framework-branch-master into 7049-dev
mernst 869bb89
Merge ../checker-framework-branch-master into 7049-dev
mernst 57985ba
Put error key in brackets
mernst 481e926
Merge ../checker-framework-fork-mernst-branch-more-square-brackets in…
mernst 4babfbd
Put error key in brackets
mernst 7668ccc
Undo a change
mernst cb5f029
Another pair of brackets
mernst 7305395
Merge ../checker-framework-fork-mernst-branch-more-square-brackets in…
mernst 224f485
Merge ../checker-framework-branch-master into more-square-brackets
mernst 775a2db
Add space around heading
mernst f26dca7
Merge ../checker-framework-branch-master into more-square-brackets
mernst 8e127b5
Merge ../checker-framework-fork-mernst-branch-more-square-brackets in…
mernst 29b6694
Merge ../checker-framework-branch-master into 7049-dev
mernst e3f1c5d
Merge ../checker-framework-branch-master into 7049-dev
mernst b278f86
Addresses Mike's PR review comments.
iamsanjaymalakar d6b1e99
Merge branch 'master' into 7049-dev
iamsanjaymalakar 9b70eec
Merge branch 'master' into 7049-dev
iamsanjaymalakar 4d88f93
Merge branch 'master' into 7049-dev
iamsanjaymalakar 3e5fcd2
Merge ../checker-framework-branch-master into 7049-dev
mernst f9b8a87
Merge ../checker-framework-branch-master into 7049-dev
mernst db0b98b
Add comment
mernst 4fccac1
Use named `instanceof`
mernst 96dee63
Eliminate need for warning suppression
mernst f5420f7
Tweaks
mernst 1bc4989
Merge branch '7049-dev' of github.com:iamsanjaymalakar/checker-framew…
mernst 27703ee
Addresses PR comments.
iamsanjaymalakar f55e800
Merge branch 'master' into 7049-dev
iamsanjaymalakar a4b23a5
Merge branch '7049-dev' of github.com:iamsanjaymalakar/checker-framew…
mernst e9fcc45
Merge ../checker-framework-branch-master into 7049-dev
mernst 1f04475
Merge ../checker-framework-branch-master into 7049-dev
mernst 544c7f8
Code review changes
mernst 05247d8
Update contract: return node must have an expression
mernst 013cc24
Merge branch '7049-dev' of github.com:iamsanjaymalakar/checker-framew…
mernst 9764391
Merge branch 'master' into 7049-dev
iamsanjaymalakar b5cd39c
Add import statement
mernst 38ef995
Addresses PR comments.
iamsanjaymalakar 038ae36
improve documentation.
iamsanjaymalakar 6bdd2e9
Merge branch 'master' into 7049-dev
iamsanjaymalakar 8f1a689
Adds @FindDistinct.
iamsanjaymalakar 3476b4d
Adds @InternedDistinct.
iamsanjaymalakar 6a62d27
Code review changes
mernst 54448fd
Merge ../checker-framework-branch-master into 7049-dev
mernst e2b0f40
Merge ../checker-framework-fork-iamsanjaymalakar-branch-7049-dev into…
mernst 131101b
Merge pull request #1 from iamsanjaymalakar/7049-dev-2
iamsanjaymalakar 0868839
Merge branch 'master' into 7049-dev
mernst 6b01f8b
Handles nested assignments.
iamsanjaymalakar File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
32 changes: 32 additions & 0 deletions
32
...st/java/org/checkerframework/checker/test/junit/ResourceLeakFirstInitConstructorTest.java
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| package org.checkerframework.checker.test.junit; | ||
|
|
||
| import java.io.File; | ||
| import java.util.List; | ||
| import org.checkerframework.checker.resourceleak.ResourceLeakChecker; | ||
| import org.checkerframework.framework.test.CheckerFrameworkPerDirectoryTest; | ||
| import org.junit.runners.Parameterized.Parameters; | ||
|
|
||
| /** | ||
| * Tests for validating safe suppression of resource leak warnings when a private field is | ||
| * initialized for the first time inside a constructor. | ||
| * | ||
| * <p>These tests check that the checker allows first-time constructor-based assignments (when safe) | ||
| * and continues to report reassignments or leaks in all other cases (e.g., after method calls, | ||
| * initializer blocks, etc.). | ||
| */ | ||
| public class ResourceLeakFirstInitConstructorTest extends CheckerFrameworkPerDirectoryTest { | ||
| public ResourceLeakFirstInitConstructorTest(List<File> testFiles) { | ||
| super( | ||
| testFiles, | ||
| ResourceLeakChecker.class, | ||
| "resourceleak-firstinitconstructor", | ||
| "-AwarnUnneededSuppressions", | ||
| "-encoding", | ||
| "UTF-8"); | ||
| } | ||
|
|
||
| @Parameters | ||
| public static String[] getTestDirs() { | ||
| return new String[] {"resourceleak-firstinitconstructor"}; | ||
| } | ||
| } |
38 changes: 38 additions & 0 deletions
38
checker/tests/resourceleak-firstinitconstructor/ConstructorChainingLeak.java
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| // Test: Field is initialized in one constructor and reassigned in another via this() chaining. | ||
| // Expected: Warning in constructor and open() due to reassignments. | ||
|
|
||
| import java.io.FileInputStream; | ||
| import org.checkerframework.checker.calledmethods.qual.*; | ||
| import org.checkerframework.checker.mustcall.qual.*; | ||
|
|
||
| @InheritableMustCall({"close"}) | ||
| class ConstructorChainingLeak { | ||
| private @Owning FileInputStream s; | ||
|
|
||
| public ConstructorChainingLeak() throws Exception { | ||
| this(42); | ||
|
iamsanjaymalakar marked this conversation as resolved.
|
||
| // :: error: (required.method.not.called) | ||
| s = new FileInputStream("test.txt"); | ||
| } | ||
|
|
||
| private ConstructorChainingLeak(int x) throws Exception { | ||
| s = new FileInputStream("test.txt"); | ||
| } | ||
|
|
||
| // :: error: (missing.creates.mustcall.for) | ||
| public void open() { | ||
| try { | ||
| // :: error: (required.method.not.called) | ||
| s = new FileInputStream("test.txt"); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
|
|
||
| @EnsuresCalledMethods(value = "this.s", methods = "close") | ||
| public void close() { | ||
| try { | ||
| s.close(); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
| } | ||
35 changes: 35 additions & 0 deletions
35
checker/tests/resourceleak-firstinitconstructor/ExplicitNullInitializer.java
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| // Test: Field is explicitly initialized to null and assigned in constructor. | ||
| // Expected: No warning in constructor, warning in open(). | ||
|
|
||
| import java.io.FileInputStream; | ||
| import org.checkerframework.checker.calledmethods.qual.*; | ||
| import org.checkerframework.checker.mustcall.qual.*; | ||
|
|
||
| @InheritableMustCall({"close"}) | ||
| class ExplicitNullInitializer { | ||
| private @Owning FileInputStream s = null; | ||
|
|
||
| public ExplicitNullInitializer() { | ||
| try { | ||
| s = new FileInputStream("test.txt"); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
|
|
||
| // :: error: (missing.creates.mustcall.for) | ||
| public void open() { | ||
| try { | ||
| // :: error: (required.method.not.called) | ||
| s = new FileInputStream("test.txt"); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
|
|
||
| @EnsuresCalledMethods(value = "this.s", methods = "close") | ||
| public void close() { | ||
| try { | ||
| s.close(); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
| } |
35 changes: 35 additions & 0 deletions
35
checker/tests/resourceleak-firstinitconstructor/FirstAssignmentInConstructor.java
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| // Test: Field has no initializer and is first assigned in constructor. | ||
| // Expected: No warning in constructor, warning in open(). | ||
|
|
||
| import java.io.FileInputStream; | ||
| import org.checkerframework.checker.calledmethods.qual.*; | ||
| import org.checkerframework.checker.mustcall.qual.*; | ||
|
|
||
| @InheritableMustCall({"close"}) | ||
| class FirstAssignmentInConstructor { | ||
| private @Owning FileInputStream s; | ||
|
|
||
| public FirstAssignmentInConstructor() { | ||
| try { | ||
| s = new FileInputStream("test.txt"); // no warning | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
|
|
||
| // :: error: (missing.creates.mustcall.for) | ||
| public void open() { | ||
| try { | ||
| // :: error: (required.method.not.called) | ||
| s = new FileInputStream("test.txt"); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
|
|
||
| @EnsuresCalledMethods(value = "this.s", methods = "close") | ||
| public void close() { | ||
| try { | ||
| s.close(); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
| } |
33 changes: 33 additions & 0 deletions
33
checker/tests/resourceleak-firstinitconstructor/InlineInitializerLeak.java
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| // Test: Field has a non-null inline initializer and is reassigned in constructor and open(). | ||
| // Expected: Warning in constructor and in open(). | ||
|
|
||
| import java.io.FileInputStream; | ||
| import org.checkerframework.checker.calledmethods.qual.*; | ||
| import org.checkerframework.checker.mustcall.qual.*; | ||
|
|
||
| @InheritableMustCall({"close"}) | ||
| class InlineInitializerLeak { | ||
| private @Owning FileInputStream s = new FileInputStream("test.txt"); | ||
|
|
||
| public InlineInitializerLeak() throws Exception { | ||
| // :: error: (required.method.not.called) | ||
| s = new FileInputStream("test.txt"); | ||
| } | ||
|
|
||
| // :: error: (missing.creates.mustcall.for) | ||
| public void open() { | ||
| try { | ||
| // :: error: (required.method.not.called) | ||
| s = new FileInputStream("test.txt"); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
|
|
||
| @EnsuresCalledMethods(value = "this.s", methods = "close") | ||
| public void close() { | ||
| try { | ||
| s.close(); | ||
| } catch (Exception e) { | ||
| } | ||
| } | ||
| } |
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.