-
Notifications
You must be signed in to change notification settings - Fork 264
fix(jsii): check that static and nonstatic members don't share a name #430
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
Merged
Merged
Changes from 1 commit
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| # Statics | ||
|
|
||
| ## Constraints | ||
|
|
||
| ### TypeScript | ||
|
|
||
| Static and non-static members live in completely different namespaces. Statics only exist on the class, | ||
| and cannot be accessed through the class. | ||
|
|
||
| Hence, it is perfectly fine to have a static and a non-static with the same name. | ||
|
|
||
| Superclass statics can be accessed through subclasses, and they can be overridden by subclasses. | ||
|
|
||
| ### Java | ||
|
|
||
| Statics and non-statics share a namespace. There cannot be a static and a | ||
| nonstatic with the same name on the same class. The same holds for inherited | ||
| members; a non-static in a superclass prevents a static of the same name in a | ||
| subclass, same for a static in a superclass and a nonstatic in a subclass. | ||
|
|
||
| Superclass statics can be accessed through subclasses, and even through | ||
| instances and subclass instances. | ||
|
|
||
| Statics can be overridden, though they do not participate in polymorphism. | ||
|
|
||
| ### C# | ||
|
|
||
| Does not allow static and nonstatic members with the same name on the same class. | ||
|
|
||
| **Will** allow static and nonstatic members of the same name on subclasses, | ||
| but will issue a compiler warning that the user probably intended to use the | ||
| `new` keyword to unambiguously introduce a new symbol. | ||
|
|
||
| **Will** allow overriding of statics on a subclass, but will issue a warning | ||
| about the `new` keyword again. | ||
|
|
||
| ## Rules | ||
|
|
||
| In order to accomodate Java, we disallow any inherited members to conflict on | ||
| staticness. |
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
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,17 @@ | ||
| ///!MATCH_ERROR: non-static member 'funFunction' of class 'Sub' conflicts with static member in ancestor 'SuperDuper' | ||
|
|
||
| export class SuperDuper { | ||
| public static funFunction() { | ||
| // Empty | ||
| } | ||
| } | ||
|
|
||
| export class Super extends SuperDuper { | ||
| // Empty | ||
| } | ||
|
|
||
| export class Sub extends Super { | ||
| public funFunction() { | ||
| // Oops | ||
| } | ||
| } | ||
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about the case where I try to declare both on the same class?