| // RUN: %empty-directory(%t) |
| // RUN: %utils/split_file.py -o %t %s |
| // RUN: %target-swift-frontend -swift-version 4 -typecheck %t/declarations.swift %t/other_file_extensions.swift -verify |
| |
| // BEGIN declarations.swift |
| struct PrivateMembers { |
| private var privateCounter: Int = 0 // expected-note 2 {{declared here}} |
| private func privateMethod() {} // expected-note 2 {{declared here}} |
| private struct PrivateInner { // expected-note 3 {{declared here}} |
| private struct Invisible {} // expected-note {{declared here}} |
| } |
| } |
| extension PrivateMembers { |
| private func usePrivate() { // expected-note 2 {{declared here}} |
| print(privateCounter) |
| privateMethod() |
| _ = PrivateInner() |
| _ = PrivateInner.Invisible() // expected-error {{'Invisible' is inaccessible due to 'private' protection level}} |
| } |
| } |
| func using(_ obj: PrivateMembers) { |
| print(obj.privateCounter) // expected-error {{'privateCounter' is inaccessible due to 'private' protection level}} |
| obj.privateMethod() // expected-error {{'privateMethod' is inaccessible due to 'private' protection level}} |
| obj.usePrivate() // expected-error {{'usePrivate' is inaccessible due to 'private' protection level}} |
| _ = PrivateMembers.PrivateInner() // expected-error {{'PrivateInner' is inaccessible due to 'private' protection level}} |
| _ = PrivateMembers.PrivateInner.Invisible() // expected-error {{'PrivateInner' is inaccessible due to 'private' protection level}} |
| } |
| |
| struct Outer { |
| private static func privateDeclaration() {} |
| struct Middle { |
| private static func privateDeclaration() {} |
| struct Inner { |
| private static func privateDeclaration() {} |
| } |
| } |
| } |
| |
| extension Outer.Middle.Inner { |
| func useParentDeclarationPrivate() { |
| Outer.privateDeclaration() |
| Outer.Middle.privateDeclaration() |
| Outer.Middle.Inner.privateDeclaration() |
| } |
| } |
| |
| // BEGIN other_file_extensions.swift |
| extension PrivateMembers { |
| private func useDeclarationPrivate() { |
| print(privateCounter) // expected-error {{'privateCounter' is inaccessible due to 'private' protection level}} |
| privateMethod() // expected-error {{'privateMethod' is inaccessible due to 'private' protection level}} |
| usePrivate() // expected-error {{'usePrivate' is inaccessible due to 'private' protection level}} |
| _ = PrivateInner() // expected-error {{'PrivateInner' is inaccessible due to 'private' protection level}} |
| } |
| } |
| |
| extension PrivateMembers { |
| private func useExtensionPrivate() { |
| useDeclarationPrivate() |
| } |
| } |
| |
| extension Outer { |
| private struct MiddleExtension { |
| private static func privateDeclaration() {} // expected-note {{declared here}} |
| } |
| private static func outerExtension() {} |
| } |
| |
| extension Outer.Middle.Inner { |
| func useParentExtensionPrivate() { |
| Outer.outerExtension() |
| _ = Outer.MiddleExtension() |
| Outer.MiddleExtension.privateDeclaration() // expected-error {{'privateDeclaration' is inaccessible due to 'private' protection level}} |
| } |
| } |