Skip to content

Fix redundant access-level modifiers. #1663

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 1 commit into from
Aug 28, 2018

Conversation

dingobye
Copy link
Contributor

This patch aims at making corelibs-foundation adapted to this PR, which warns for redundant access-level modifiers.

@phausler Hi Philippe, would you help take a look at this, please?

@spevans
Copy link
Contributor

spevans commented Aug 16, 2018

@swift-ci please test

@dingobye
Copy link
Contributor Author

Thank you for triggering the test, Simon! It would be greatly appreciated if you could also help review.

@parkera
Copy link
Contributor

parkera commented Aug 21, 2018

How can we verify that we haven't accidentally changed the public visibility of some of these setters?

@dingobye
Copy link
Contributor Author

@parkera Hi Tony, sorry I might not quite get what you meant. Can you point out some particular setters for example? Because I cannot see any existing property setter with public visibility in the context of this PR.

Let us examine the relevant code. All extensions having their public modifier removed by this patch are listed below:

In summary, all computed properties are get-only, and all static stored properties are constant. As a result, there isn't any property with a setter...

When I was trying to remove the public modifier for an extension, I checked every member to make sure it has an explicit access-level modifier there. If there isn't, I added public to keep the code semantically equivalent.

@parkera
Copy link
Contributor

parkera commented Aug 22, 2018

I guess I was looking for some kind of comparison of Swift's generated headers, as a check to make sure we aren't accidentally dropping public from something that had it before - or the opposite. Code inspection is good, but double checking is better.

@dingobye
Copy link
Contributor Author

Hi Tony, do you mean .swiftmodule files by Swift's generated headers? It is not straightforward to perform such comparison. The .swiftmodule files generated by the following code, for example, are not identical:

extension SomeClass {
    public func foo() {}
}

and

public extension SomeClass {
    func foo() {}
}

This is because their underlying serialised ASTs are different, though they result in the same access level effect for foo.

If we would have to perform some kind of automatic checking, an easy way I can come up with is to write some XCTest in TestFoundation module by accessing every public members in the extensions modified by this patch. If the code compiles, then their public visibility remains.

When trying the approach above, I was stoped by something else. To begin with, I used master branch and followed the instructions for macOS in GettingStarted.md, but with no luck 😞 Everything goes well until building TestFoundation target, for which I got errors at these lines: 'NSString' initializer is inaccessible due to 'internal' protection level...

Are you able to reproduce these errors?

@parkera
Copy link
Contributor

parkera commented Aug 23, 2018

I don't think we need a unit test to verify all access, I just want to gain some additional confidence in this change.

I'm not sure why the redundant access modifiers are a problem in the first place; it's often very useful as a library author to have a reminder of the public/private nature of what you're looking at. With them removed it lowers the confidence of a change being neutral to clients.

@parkera
Copy link
Contributor

parkera commented Aug 23, 2018

I guess if we trust that the compiler is right about the warning, then perhaps just a list of the warnings from the change in your associated PR plus a list of the warnings from this change would be enough for now.

@dingobye
Copy link
Contributor Author

Thanks for your suggestions, Tony! Actually, the modifications in this PR were inspired by the observation of warning lists.

Here I collect the warning data for the following four scenarios:

Associated PR Enabled Associated PR Disabled
This PR Enabled [11] [01]
This PR Disabled [10] [00]
  • [00] and [01] are identical, each containing 69 warnings. It denotes this PR itself neither introduces new nor eliminates existing warnings.
  • [00] and [10] are different. The latter has 103 more warnings, which are all for redundant modifiers.
  • [00] and [11] are identical. It means this PR resolves the 103 extra warnings introduced by the associated PR, bringing the warning list back to [00]'s.

Below is the comprehensive list of such 103 warnings:

swift-corelibs-foundation/Foundation/NSPathUtilities.swift:90:5: warning: 'internal' modifier is redundant for instance method declared in an internal extension
swift-corelibs-foundation/Foundation/Operation.swift:234:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/Unit.swift:100:13: warning: 'private(set)' modifier is redundant for a private property
swift-corelibs-foundation/Foundation/URLSession/libcurl/EasyHandle.swift:540:5: warning: 'fileprivate' modifier is redundant for instance method declared in a fileprivate extension
swift-corelibs-foundation/Foundation/NSLocale.swift:224:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:425:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:426:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:428:5: warning: 'public' modifier is redundant for initializer declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:432:5: warning: 'public' modifier is redundant for initializer declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:440:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:451:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:452:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:456:5: warning: 'public' modifier is redundant for initializer declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:460:5: warning: 'public' modifier is redundant for initializer declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:468:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:504:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:510:5: warning: 'public' modifier is redundant for initializer declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:524:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:530:5: warning: 'public' modifier is redundant for initializer declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:541:5: warning: 'public' modifier is redundant for initializer declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:694:5: warning: 'public' modifier is redundant for static method declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:864:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:869:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:875:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:876:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:877:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:878:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:879:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:880:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:881:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:882:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:883:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:884:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:885:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:886:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:887:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:888:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:889:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:890:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:891:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:892:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:893:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:894:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:895:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:896:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:897:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:898:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:899:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:900:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:901:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:902:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:903:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:904:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:905:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:906:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:907:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:908:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:909:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:910:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:911:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:912:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:913:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:914:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:915:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:916:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:917:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:918:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:919:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/NSError.swift:920:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/Codable.swift:21:5: warning: 'internal' modifier is redundant for static method declared in an internal extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:245:5: warning: 'public' modifier is redundant for instance method declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:510:5: warning: 'public' modifier is redundant for instance method declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:162:5: warning: 'public' modifier is redundant for static method declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:142:5: warning: 'internal' modifier is redundant for instance method declared in an internal extension
swift-corelibs-foundation/Foundation/JSONEncoder.swift:2158:5: warning: 'fileprivate' modifier is redundant for static method declared in a fileprivate extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:38:5: warning: 'internal' modifier is redundant for property declared in an internal extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:56:5: warning: 'internal' modifier is redundant for property declared in an internal extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:86:5: warning: 'internal' modifier is redundant for property declared in an internal extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:103:5: warning: 'internal' modifier is redundant for instance method declared in an internal extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:132:5: warning: 'internal' modifier is redundant for instance method declared in an internal extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:158:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:173:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:177:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:186:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:249:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:262:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:274:5: warning: 'public' modifier is redundant for instance method declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:283:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:304:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:313:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:350:5: warning: 'public' modifier is redundant for instance method declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:359:5: warning: 'public' modifier is redundant for instance method declared in a public extension
swift-corelibs-foundation/Foundation/NSPathUtilities.swift:506:5: warning: 'public' modifier is redundant for property declared in a public extension
swift-corelibs-foundation/Foundation/URLSession/BodySource.swift:150:5: warning: 'fileprivate' modifier is redundant for property declared in a fileprivate extension
swift-corelibs-foundation/Foundation/URLSession/BodySource.swift:155:5: warning: 'fileprivate' modifier is redundant for instance method declared in a fileprivate extension
swift-corelibs-foundation/Foundation/URLSession/BodySource.swift:186:5: warning: 'fileprivate' modifier is redundant for instance method declared in a fileprivate extension
swift-corelibs-foundation/Foundation/URLSession/BodySource.swift:200:5: warning: 'fileprivate' modifier is redundant for property declared in a fileprivate extension
swift-corelibs-foundation/Foundation/URLSession/URLSessionTask.swift:328:5: warning: 'internal' modifier is redundant for instance method declared in an internal extension
swift-corelibs-foundation/Foundation/URLSession/URLSessionTask.swift:395:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/URLSession/URLSessionTask.swift:399:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/URLSession/URLSessionTask.swift:403:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/HTTPCookieStorage.swift:333:5: warning: 'public' modifier is redundant for static property declared in a public extension
swift-corelibs-foundation/Foundation/URLCredentialStorage.swift:107:5: warning: 'public' modifier is redundant for static property declared in a public extension

@parkera
Copy link
Contributor

parkera commented Aug 27, 2018

Great, thanks for double checking. This looks good to me.

Can this be merged prior to your other change?

@parkera parkera self-requested a review August 27, 2018 16:14
@dingobye
Copy link
Contributor Author

Thank you, Tony! Yes, this one should be merged before landing the associated PR.

@parkera parkera merged commit 5b3dae9 into swiftlang:master Aug 28, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants