diff --git a/docs/AccessControl.rst b/docs/AccessControl.rst index 92afdd4207835..9b46878f483dc 100644 --- a/docs/AccessControl.rst +++ b/docs/AccessControl.rst @@ -7,16 +7,18 @@ The general guiding principle of Swift access control: **No entity can be defined in terms of another entity that has a lower access level.** -There are three levels of access: "private", "internal", and "public". -Private entities can only be accessed from within the source file where they -are defined. Internal entities can be accessed anywhere within the module they -are defined. Public entities can be accessed from anywhere within the module -and from any other context that imports the current module. +There are four levels of access: "private", "fileprivate", "internal", and +"public". Private entities can only be accessed from within the current +declaration where they are defined. FilePrivate entities can only be accessed +from within the source file where they are defined. Internal entities can be +accessed anywhere within the module they are defined. Public entities can be +accessed from anywhere within the module and from any other context that imports +the current module. The names ``public`` and ``private`` have precedent in many languages; -``internal`` comes from C#. In the future, ``public`` may be used for both API -and SPI, at which point we may design additional annotations to distinguish the -two. +``internal`` comes from C# and ``fileprivate`` from the Swift community. In the +future, ``public`` may be used for both API and SPI, at which point we may +design additional annotations to distinguish the two. By default, most entities in a source file have ``internal`` access. This optimizes for the most common case—a single-target application diff --git a/docs/OptimizationTips.rst b/docs/OptimizationTips.rst index ede57514e230d..bde48f4bf147e 100644 --- a/docs/OptimizationTips.rst +++ b/docs/OptimizationTips.rst @@ -134,17 +134,17 @@ in the following ``C.array1`` and ``D.array1`` will be accessed directly d.array2[i] = ... // Will access D.array2 through dynamic dispatch. } -Advice: Use 'private' when declaration does not need to be accessed outside of file ------------------------------------------------------------------------------------ - -Applying the ``private`` keyword to a declaration restricts the visibility of -the declaration to the file in which it is declared. This allows the compiler to -be able to ascertain all other potentially overriding declarations. Thus the -absence of any such declarations enables the compiler to infer the ``final`` -keyword automatically and remove indirect calls for methods and field accesses -accordingly. For instance in the following, ``e.doSomething()`` and -``f.myPrivateVar``, will be able to be accessed directly assuming ``E``, ``F`` -do not have any overriding declarations in the same file: +Advice: Use 'private' and 'fileprivate' when declaration does not need to be accessed outside of file +----------------------------------------------------------------------------------------------------- + +Applying the ``private`` or ``fileprivate`` keywords to a declaration restricts +the visibility of the declaration to the file in which it is declared. This +allows the compiler to be able to ascertain all other potentially overriding +declarations. Thus the absence of any such declarations enables the compiler to +infer the ``final`` keyword automatically and remove indirect calls for methods +and field accesses accordingly. For instance in the following, +``e.doSomething()`` and ``f.myPrivateVar``, will be able to be accessed directly +assuming ``E``, ``F`` do not have any overriding declarations in the same file: :: diff --git a/include/swift/AST/Attr.def b/include/swift/AST/Attr.def index da0843a75aea2..4e04dfef85dbd 100644 --- a/include/swift/AST/Attr.def +++ b/include/swift/AST/Attr.def @@ -192,6 +192,7 @@ DECL_ATTR(private, Accessibility, OnClass | OnProtocol | OnVar | OnSubscript | OnConstructor | DeclModifier | NotSerialized, /* Not serialized */ 46) +DECL_ATTR_ALIAS(fileprivate, Accessibility) DECL_ATTR_ALIAS(internal, Accessibility) DECL_ATTR_ALIAS(public, Accessibility) diff --git a/include/swift/AST/AttrKind.h b/include/swift/AST/AttrKind.h index 0f43e83ebc151..dae8f7ff71c96 100644 --- a/include/swift/AST/AttrKind.h +++ b/include/swift/AST/AttrKind.h @@ -48,8 +48,10 @@ enum class UnaryOperatorKind : uint8_t { /// Access control levels. // These are used in diagnostics, so please do not reorder existing values. enum class Accessibility : uint8_t { - /// Private access is limited to the current file. + /// Private access is limited to the current declaration. Private = 0, + /// FilePrivate access is limited to the current file. + FilePrivate, /// Internal access is limited to the current module. Internal, /// Public access is not limited. diff --git a/include/swift/AST/Decl.h b/include/swift/AST/Decl.h index b63eb2da26776..19a6a9bf1b9c6 100644 --- a/include/swift/AST/Decl.h +++ b/include/swift/AST/Decl.h @@ -544,7 +544,7 @@ class alignas(1 << DeclAlignInBits) Decl { /// This is encoded as (1 << maxAccess) | (1 << defaultAccess), which /// works because the maximum is always greater than or equal to the /// default. 0 represents an uncomputed value. - unsigned DefaultAndMaxAccessLevel : 3; + unsigned DefaultAndMaxAccessLevel : 4; /// Whether there is an active conformance loader for this /// extension. @@ -1701,6 +1701,9 @@ class ExtensionDecl final : public Decl, public DeclContext, if (ExtensionDeclBits.DefaultAndMaxAccessLevel & (1 << static_cast(Accessibility::Private))) return Accessibility::Private; + if (ExtensionDeclBits.DefaultAndMaxAccessLevel & + (1 << static_cast(Accessibility::FilePrivate))) + return Accessibility::FilePrivate; if (ExtensionDeclBits.DefaultAndMaxAccessLevel & (1 << static_cast(Accessibility::Internal))) return Accessibility::Internal; @@ -1715,6 +1718,9 @@ class ExtensionDecl final : public Decl, public DeclContext, if (ExtensionDeclBits.DefaultAndMaxAccessLevel & (1 << static_cast(Accessibility::Internal))) return Accessibility::Internal; + if (ExtensionDeclBits.DefaultAndMaxAccessLevel & + (1 << static_cast(Accessibility::FilePrivate))) + return Accessibility::FilePrivate; return Accessibility::Private; } @@ -2084,7 +2090,7 @@ class IfConfigDecl : public Decl { class ValueDecl : public Decl { DeclName Name; SourceLoc NameLoc; - llvm::PointerIntPair> TypeAndAccess; + llvm::PointerIntPair> TypeAndAccess; protected: ValueDecl(DeclKind K, @@ -3823,8 +3829,8 @@ class AbstractStorageDecl : public ValueDecl { void configureObservingRecord(ObservingRecord *record, FuncDecl *willSet, FuncDecl *didSet); - llvm::PointerIntPair> GetSetInfo; - llvm::PointerIntPair> + llvm::PointerIntPair> GetSetInfo; + llvm::PointerIntPair> BehaviorInfo; ObservingRecord &getDidSetInfo() const { @@ -5926,6 +5932,8 @@ inline Accessibility ValueDecl::getEffectiveAccess() const { return Accessibility::Public; } return Accessibility::Internal; + case Accessibility::FilePrivate: + return Accessibility::FilePrivate; case Accessibility::Private: return Accessibility::Private; } diff --git a/include/swift/AST/DiagnosticsSema.def b/include/swift/AST/DiagnosticsSema.def index 8bf19edb62da1..d1c051fe39199 100644 --- a/include/swift/AST/DiagnosticsSema.def +++ b/include/swift/AST/DiagnosticsSema.def @@ -105,11 +105,11 @@ ERROR(could_not_use_member_on_existential,none, (Type, DeclName)) ERROR(candidate_inaccessible,none, - "%0 is inaccessible due to '%select{private|internal|PUBLIC}1' " + "%0 is inaccessible due to '%select{private|fileprivate|internal|PUBLIC}1' " "protection level", (DeclName, Accessibility)) ERROR(init_candidate_inaccessible,none, - "%0 initializer is inaccessible due to '%select{private|internal|PUBLIC}1' " + "%0 initializer is inaccessible due to '%select{private|fileprivate|internal|PUBLIC}1' " "protection level", (Type, Accessibility)) @@ -924,34 +924,34 @@ ERROR(attr_methods_only,none, ERROR(access_control_in_protocol,none, "%0 modifier cannot be used in protocols", (DeclAttribute)) ERROR(access_control_setter,none, - "'%select{private|internal|public}0(set)' modifier can only be applied " + "'%select{private|fileprivate|internal|public}0(set)' modifier can only be applied " "to variables and subscripts", (Accessibility)) ERROR(access_control_setter_read_only,none, - "'%select{private|internal|public}0(set)' modifier cannot be applied to " + "'%select{private|fileprivate|internal|public}0(set)' modifier cannot be applied to " "%select{constants|read-only variables|read-only properties" "|read-only subscripts}1", (Accessibility, unsigned)) ERROR(access_control_setter_more,none, - "%select{private|internal|PUBLIC}0 " + "%select{private|fileprivate|internal|PUBLIC}0 " "%select{variable|property|subscript}1 cannot have " - "%select{PRIVATE|an internal|a public}2 setter", + "%select{PRIVATE|a fileprivate|an internal|a public}2 setter", (Accessibility, unsigned, Accessibility)) WARNING(access_control_member_more,none, - "declaring %select{PRIVATE|an internal|a public}0 %1 for " - "%select{a private|an internal|PUBLIC}2 %3", + "declaring %select{PRIVATE|a fileprivate|an internal|a public}0 %1 for " + "%select{a private|a fileprivate|an internal|PUBLIC}2 %3", (Accessibility, DescriptiveDeclKind, Accessibility, DescriptiveDeclKind)) WARNING(access_control_ext_member_more,none, - "declaring %select{PRIVATE|an internal|a public}0 %1 in " - "%select{a private|an internal|PUBLIC}2 extension", + "declaring %select{PRIVATE|a fileprivate|an internal|a public}0 %1 in " + "%select{a private|a fileprivate|an internal|PUBLIC}2 extension", (Accessibility, DescriptiveDeclKind, Accessibility)) ERROR(access_control_ext_requirement_member_more,none, - "cannot declare %select{PRIVATE|an internal|a public}0 %1 in " - "an extension with %select{private|internal|PUBLIC}2 requirements", + "cannot declare %select{PRIVATE|a fileprivate|an internal|a public}0 %1 in " + "an extension with %select{private|fileprivate|internal|PUBLIC}2 requirements", (Accessibility, DescriptiveDeclKind, Accessibility)) ERROR(access_control_extension_more,none, - "extension of %select{private|internal|PUBLIC}0 %1 cannot be " - "declared %select{PRIVATE|internal|public}2", + "extension of %select{private|fileprivate|internal|PUBLIC}0 %1 cannot be " + "declared %select{PRIVATE|fileprivate|internal|public}2", (Accessibility, DescriptiveDeclKind, Accessibility)) ERROR(invalid_decl_attribute_simple,none, @@ -1039,15 +1039,15 @@ ERROR(static_requires_initializer,none, "expression or getter/setter specifier", (StaticSpellingKind)) ERROR(pattern_type_access,none, "%select{%select{variable|constant}0|property}1 " - "%select{must be declared %select{private|internal|PUBLIC}4" - "|cannot be declared %select{PRIVATE|internal|public}3}2 because its " - "type uses %select{a private|an internal|PUBLIC}4 type", + "%select{must be declared %select{private|fileprivate|internal|PUBLIC}4" + "|cannot be declared %select{PRIVATE|fileprivate|internal|public}3}2 because its " + "type uses %select{a private|a fileprivate|an internal|PUBLIC}4 type", (bool, bool, bool, Accessibility, Accessibility)) ERROR(pattern_type_access_inferred,none, "%select{%select{variable|constant}0|property}1 " - "%select{must be declared %select{private|internal|PUBLIC}4" - "|cannot be declared %select{PRIVATE|internal|public}3}2 because its " - "type %5 uses %select{a private|an internal|PUBLIC}4 type", + "%select{must be declared %select{private|fileprivate|internal|PUBLIC}4" + "|cannot be declared %select{PRIVATE|fileprivate|internal|public}3}2 because its " + "type %5 uses %select{a private|a fileprivate|an internal|PUBLIC}4 type", (bool, bool, bool, Accessibility, Accessibility, Type)) ERROR(pattern_binds_no_variables,none, "%select{property|global variable}0 declaration does not bind any " @@ -1070,26 +1070,26 @@ ERROR(unsupported_type_nested_in_generic_function,none, ERROR(circular_type_alias,none, "type alias %0 circularly references itself", (Identifier)) ERROR(type_alias_underlying_type_access,none, - "type alias %select{must be declared %select{private|internal|PUBLIC}2" - "|cannot be declared %select{PRIVATE|internal|public}1}0 because its " - "underlying type uses %select{a private|an internal|PUBLIC}2 type", + "type alias %select{must be declared %select{private|fileprivate|internal|PUBLIC}2" + "|cannot be declared %select{PRIVATE|fileprivate|internal|public}1}0 because its " + "underlying type uses %select{a private|a fileprivate|an internal|PUBLIC}2 type", (bool, Accessibility, Accessibility)) // Subscripts ERROR(subscript_type_access,none, - "subscript %select{must be declared %select{private|internal|PUBLIC}2" - "|cannot be declared %select{PRIVATE|internal|public}1}0 because its " + "subscript %select{must be declared %select{private|fileprivate|internal|PUBLIC}2" + "|cannot be declared %select{PRIVATE|fileprivate|internal|public}1}0 because its " "%select{index|element type}3 uses " - "%select{a private|an internal|PUBLIC}2 type", + "%select{a private|a fileprivate|an internal|PUBLIC}2 type", (bool, Accessibility, Accessibility, bool)) // Functions ERROR(function_type_access,none, "%select{function|method|initializer}3 " - "%select{must be declared %select{private|internal|PUBLIC}2" - "|cannot be declared %select{PRIVATE|internal|public}1}0 because its " + "%select{must be declared %select{private|fileprivate|internal|PUBLIC}2" + "|cannot be declared %select{PRIVATE|fileprivate|internal|public}1}0 because its " "%select{parameter|result}4 uses " - "%select{a private|an internal|PUBLIC}2 type", + "%select{a private|a fileprivate|an internal|PUBLIC}2 type", (bool, Accessibility, Accessibility, unsigned, bool)) WARNING(non_trailing_closure_before_default_args,none, "closure parameter prior to parameters with default arguments will " @@ -1191,8 +1191,8 @@ ERROR(witness_requires_dynamic_self,none, ERROR(witness_not_accessible_proto,none, "%select{initializer %1|method %1|%select{|setter for }2property %1" "|subscript%select{| setter}2}0 must be declared " - "%select{PRIVATE|internal|public}3 because it matches a requirement " - "in %select{PRIVATE|internal|public}3 protocol %4", + "%select{PRIVATE|fileprivate|internal|public}3 because it matches a requirement " + "in %select{PRIVATE|fileprivate|internal|public}3 protocol %4", (RequirementKind, DeclName, bool, Accessibility, DeclName)) ERROR(witness_not_accessible_type,none, "%select{initializer %1|method %1|%select{|setter for }2property %1" @@ -1200,8 +1200,8 @@ ERROR(witness_not_accessible_type,none, "type because it matches a requirement in protocol %4", (RequirementKind, DeclName, bool, Accessibility, DeclName)) ERROR(type_witness_not_accessible_proto,none, - "%0 %1 must be declared %select{PRIVATE|internal|public}2 because it " - "matches a requirement in %select{PRIVATE|internal|public}2 protocol %3", + "%0 %1 must be declared %select{PRIVATE|fileprivate|internal|public}2 because it " + "matches a requirement in %select{PRIVATE|fileprivate|internal|public}2 protocol %3", (DescriptiveDeclKind, DeclName, Accessibility, DeclName)) ERROR(type_witness_not_accessible_type,none, "%0 %1 must be as accessible as its enclosing type because it " @@ -1209,10 +1209,10 @@ ERROR(type_witness_not_accessible_type,none, (DescriptiveDeclKind, DeclName, Accessibility, DeclName)) ERROR(protocol_refine_access,none, - "%select{protocol must be declared %select{private|internal|PUBLIC}2 " + "%select{protocol must be declared %select{private|fileprivate|internal|PUBLIC}2 " "because it refines" - "|%select{PRIVATE|internal|public}1 protocol cannot refine}0 " - "%select{a private|an internal|PUBLIC}2 protocol", + "|%select{PRIVATE|fileprivate|internal|public}1 protocol cannot refine}0 " + "%select{a private|a fileprivate|an internal|PUBLIC}2 protocol", (bool, Accessibility, Accessibility)) ERROR(protocol_property_must_be_computed_var,none, "immutable property requirement must be declared as 'var' with a " @@ -1240,8 +1240,8 @@ NOTE(default_associated_type_req_fail,none, "does not conform to %3", (Type, DeclName, Type, Type)) ERROR(associated_type_access,none, - "associated type in %select{PRIVATE|an internal|a public}0 protocol " - "uses %select{a private|an internal|PUBLIC}1 type in its " + "associated type in %select{PRIVATE|a fileprivate|an internal|a public}0 protocol " + "uses %select{a private|a fileprivate|an internal|PUBLIC}1 type in its " "%select{default definition|requirement}2 ", (Accessibility, Accessibility, unsigned)) @@ -1345,7 +1345,7 @@ NOTE(optional_req_near_match_move,none, NOTE(optional_req_near_match_nonobjc,none, "add '@nonobjc' to silence this %select{warning|error}0", (bool)) NOTE(optional_req_near_match_accessibility,none, - "make %0 %select{ERROR|private|private or internal}1 to silence this " + "make %0 %select{ERROR|ERROR|fileprivate|fileprivate or internal}1 to silence this " "warning", (DeclName, Accessibility)) // Protocols and existentials @@ -1397,10 +1397,10 @@ ERROR(requires_generic_param_same_type_does_not_conform,none, (Type, Identifier)) ERROR(generic_param_access,none, - "%0 %select{must be declared %select{private|internal|PUBLIC}3" - "|cannot be declared %select{PRIVATE|internal|public}2}1 because its " + "%0 %select{must be declared %select{private|fileprivate|internal|PUBLIC}3" + "|cannot be declared %select{PRIVATE|fileprivate|internal|public}2}1 because its " "generic %select{parameter|requirement}4 uses " - "%select{a private|an internal|PUBLIC}3 type", + "%select{a private|a fileprivate|an internal|PUBLIC}3 type", (DescriptiveDeclKind, bool, Accessibility, Accessibility, bool)) ERROR(override_multiple_decls_base,none, @@ -1576,8 +1576,8 @@ ERROR(inheritance_from_objc_runtime_visible_class,none, // Enums ERROR(enum_case_access,none, - "enum case in %select{PRIVATE|an internal|a public}0 enum uses " - "%select{a private|an internal|PUBLIC}1 type", + "enum case in %select{PRIVATE|a fileprivate|an internal|a public}0 enum uses " + "%select{a private|a fileprivate|an internal|PUBLIC}1 type", (Accessibility, Accessibility)) ERROR(enum_stored_property,none, "enums may not contain stored properties", ()) @@ -1596,9 +1596,9 @@ ERROR(enum_raw_type_not_equatable,none, "RawRepresentable 'init' cannot be synthesized because raw type %0 is not " "Equatable", (Type)) ERROR(enum_raw_type_access,none, - "enum %select{must be declared %select{private|internal|PUBLIC}2" - "|cannot be declared %select{PRIVATE|internal|public}1}0 because its " - "raw type uses %select{a private|an internal|PUBLIC}2 type", + "enum %select{must be declared %select{private|fileprivate|internal|PUBLIC}2" + "|cannot be declared %select{PRIVATE|fileprivate|internal|public}1}0 because its " + "raw type uses %select{a private|a fileprivate|an internal|PUBLIC}2 type", (bool, Accessibility, Accessibility)) NOTE(enum_here,none, @@ -2490,9 +2490,9 @@ ERROR(self_in_nominal,none, "'Self' is only available in a protocol or as the result of a " "method in a class; did you mean %0?", (Identifier)) ERROR(class_super_access,none, - "class %select{must be declared %select{private|internal|PUBLIC}2" - "|cannot be declared %select{PRIVATE|internal|public}1}0 because its " - "superclass is %select{private|internal|PUBLIC}2", + "class %select{must be declared %select{private|fileprivate|internal|PUBLIC}2" + "|cannot be declared %select{PRIVATE|fileprivate|internal|public}1}0 because its " + "superclass is %select{private|fileprivate|internal|PUBLIC}2", (bool, Accessibility, Accessibility)) ERROR(dot_protocol_on_non_existential,none, "cannot use 'Protocol' with non-protocol type %0", (Type)) diff --git a/include/swift/AST/PrintOptions.h b/include/swift/AST/PrintOptions.h index 1c0ea4c14ea0c..a7ddc96e4eabc 100644 --- a/include/swift/AST/PrintOptions.h +++ b/include/swift/AST/PrintOptions.h @@ -249,7 +249,7 @@ struct PrintOptions { bool PrintInternalAccessibilityKeyword = true; /// Print all decls that have at least this level of access. - Accessibility AccessibilityFilter = Accessibility::Private; + Accessibility AccessibilityFilter = Accessibility::FilePrivate; /// Print IfConfigDecls and IfConfigStmts. bool PrintIfConfig = true; diff --git a/include/swift/IDE/CodeCompletion.h b/include/swift/IDE/CodeCompletion.h index 90bc63bf97c75..e90a4c7e2f3a7 100644 --- a/include/swift/IDE/CodeCompletion.h +++ b/include/swift/IDE/CodeCompletion.h @@ -63,7 +63,7 @@ class CodeCompletionStringChunk { public: enum class ChunkKind { - /// "internal", "private" or "public". + /// "internal", "private", "fileprivate", or "public". AccessControlKeyword, /// such as @"availability". diff --git a/include/swift/Parse/Tokens.def b/include/swift/Parse/Tokens.def index 80c438cac6c5e..34893b4ca3d4f 100644 --- a/include/swift/Parse/Tokens.def +++ b/include/swift/Parse/Tokens.def @@ -91,6 +91,7 @@ DECL_KEYWORD(associatedtype) DECL_KEYWORD(var) DECL_KEYWORD(internal) +DECL_KEYWORD(fileprivate) DECL_KEYWORD(private) DECL_KEYWORD(public) DECL_KEYWORD(static) diff --git a/include/swift/Serialization/ModuleFormat.h b/include/swift/Serialization/ModuleFormat.h index 8c30d852e788b..336df388ca8c8 100644 --- a/include/swift/Serialization/ModuleFormat.h +++ b/include/swift/Serialization/ModuleFormat.h @@ -53,7 +53,7 @@ const uint16_t VERSION_MAJOR = 0; /// in source control, you should also update the comment to briefly /// describe what change you made. The content of this comment isn't important; /// it just ensures a conflict if two people change the module format. -const uint16_t VERSION_MINOR = 251; // Last change: SILFunctionType::isPseudogeneric +const uint16_t VERSION_MINOR = 252; // Last change: serialization::AccessibilityKind ([File]Private) using DeclID = PointerEmbeddedInt; using DeclIDField = BCFixed<31>; @@ -287,6 +287,7 @@ using LibraryKindField = BCFixed<1>; // VERSION_MAJOR. enum class AccessibilityKind : uint8_t { Private = 0, + FilePrivate, Internal, Public, }; diff --git a/lib/AST/ASTDumper.cpp b/lib/AST/ASTDumper.cpp index ebeacbf2ae991..26b115904944f 100644 --- a/lib/AST/ASTDumper.cpp +++ b/lib/AST/ASTDumper.cpp @@ -570,6 +570,9 @@ namespace { case Accessibility::Private: OS << "private"; break; + case Accessibility::FilePrivate: + OS << "fileprivate"; + break; case Accessibility::Internal: OS << "internal"; break; diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp index 333d0b6ac058e..6aaec1a5869f5 100644 --- a/lib/AST/ASTPrinter.cpp +++ b/lib/AST/ASTPrinter.cpp @@ -1125,6 +1125,9 @@ class PrintAST : public ASTVisitor { case Accessibility::Private: Printer << tok::kw_private; break; + case Accessibility::FilePrivate: + Printer << tok::kw_fileprivate; + break; case Accessibility::Internal: if (!Options.PrintInternalAccessibilityKeyword) return; @@ -1606,7 +1609,7 @@ bool swift::shouldPrint(const Decl *D, PrintOptions &Options) { // Skip declarations that are not accessible. if (auto *VD = dyn_cast(D)) { - if (Options.AccessibilityFilter > Accessibility::Private && + if (Options.AccessibilityFilter > Accessibility::FilePrivate && VD->hasAccessibility() && VD->getFormalAccess() < Options.AccessibilityFilter) return false; diff --git a/lib/AST/Attr.cpp b/lib/AST/Attr.cpp index 18ded09fe7ca3..29af52605f0c0 100644 --- a/lib/AST/Attr.cpp +++ b/lib/AST/Attr.cpp @@ -543,6 +543,8 @@ StringRef DeclAttribute::getAttrName() const { switch (cast(this)->getAccess()) { case Accessibility::Private: return "private"; + case Accessibility::FilePrivate: + return "fileprivate"; case Accessibility::Internal: return "internal"; case Accessibility::Public: diff --git a/lib/AST/DeclContext.cpp b/lib/AST/DeclContext.cpp index 1bd200b6bb776..f52c8e54545df 100644 --- a/lib/AST/DeclContext.cpp +++ b/lib/AST/DeclContext.cpp @@ -530,14 +530,14 @@ DeclContext::isCascadingContextForLookup(bool functionsAreNonCascading) const { return false; auto *AFD = cast(this); if (AFD->hasAccessibility()) - return AFD->getFormalAccess() > Accessibility::Private; + return AFD->getFormalAccess() > Accessibility::FilePrivate; break; } case DeclContextKind::SubscriptDecl: { auto *SD = cast(this); if (SD->hasAccessibility()) - return SD->getFormalAccess() > Accessibility::Private; + return SD->getFormalAccess() > Accessibility::FilePrivate; break; } @@ -548,17 +548,17 @@ DeclContext::isCascadingContextForLookup(bool functionsAreNonCascading) const { case DeclContextKind::GenericTypeDecl: { auto *nominal = cast(this); if (nominal->hasAccessibility()) - return nominal->getFormalAccess() > Accessibility::Private; + return nominal->getFormalAccess() > Accessibility::FilePrivate; break; } case DeclContextKind::ExtensionDecl: { auto *extension = cast(this); if (extension->hasDefaultAccessibility()) - return extension->getDefaultAccessibility() > Accessibility::Private; + return extension->getDefaultAccessibility() > Accessibility::FilePrivate; // FIXME: duplicated from computeDefaultAccessibility in TypeCheckDecl.cpp. if (auto *AA = extension->getAttrs().getAttribute()) - return AA->getAccess() > Accessibility::Private; + return AA->getAccess() > Accessibility::FilePrivate; if (Type extendedTy = extension->getExtendedType()) { // Need to check if extendedTy is ErrorType diff --git a/lib/AST/Mangle.cpp b/lib/AST/Mangle.cpp index 16f729ae9a7f3..b0b476188b747 100644 --- a/lib/AST/Mangle.cpp +++ b/lib/AST/Mangle.cpp @@ -387,7 +387,7 @@ void Mangler::mangleDeclName(const ValueDecl *decl) { // Fall through to mangle the . } else if (decl->hasAccessibility() && - decl->getFormalAccess() == Accessibility::Private) { + decl->getFormalAccess() <= Accessibility::FilePrivate) { // Mangle non-local private declarations with a textual discriminator // based on their enclosing file. // decl-name ::= 'P' identifier identifier @@ -405,7 +405,7 @@ void Mangler::mangleDeclName(const ValueDecl *decl) { auto nominal = dyn_cast(DC); if (!nominal) nominal = cast(DC)->getExtendedType()->getAnyNominal(); - return nominal->getFormalAccess() == Accessibility::Private; + return nominal->getFormalAccess() <= Accessibility::FilePrivate; }; if (!isWithinPrivateNominal(decl)) { diff --git a/lib/AST/Module.cpp b/lib/AST/Module.cpp index 3cbc92b747ff5..96e24192797f4 100644 --- a/lib/AST/Module.cpp +++ b/lib/AST/Module.cpp @@ -488,7 +488,8 @@ void Module::lookupMember(SmallVectorImpl &results, }); alreadyInPrivateContext = - (nominal->getFormalAccess() == Accessibility::Private); + (nominal->getFormalAccess() == Accessibility::FilePrivate + || nominal->getFormalAccess() == Accessibility::Private); break; } @@ -504,14 +505,14 @@ void Module::lookupMember(SmallVectorImpl &results, } else if (privateDiscriminator.empty()) { auto newEnd = std::remove_if(results.begin()+oldSize, results.end(), [](const ValueDecl *VD) -> bool { - return VD->getFormalAccess() <= Accessibility::Private; + return VD->getFormalAccess() <= Accessibility::FilePrivate; }); results.erase(newEnd, results.end()); } else { auto newEnd = std::remove_if(results.begin()+oldSize, results.end(), [=](const ValueDecl *VD) -> bool { - if (VD->getFormalAccess() > Accessibility::Private) + if (VD->getFormalAccess() > Accessibility::FilePrivate) return true; auto enclosingFile = cast(VD->getDeclContext()->getModuleScopeContext()); diff --git a/lib/AST/NameLookup.cpp b/lib/AST/NameLookup.cpp index 09366534d9437..2b8dcc561534a 100644 --- a/lib/AST/NameLookup.cpp +++ b/lib/AST/NameLookup.cpp @@ -322,7 +322,7 @@ bool swift::removeShadowedDecls(SmallVectorImpl &decls, static bool matchesDiscriminator(Identifier discriminator, const ValueDecl *value) { - if (value->getFormalAccess() != Accessibility::Private) + if (value->getFormalAccess() > Accessibility::FilePrivate) return false; auto containingFile = @@ -1015,6 +1015,8 @@ static bool checkAccessibility(const DeclContext *useDC, switch (access) { case Accessibility::Private: +// return useDC == sourceDC || useDC->isChildContextOf(sourceDC); + case Accessibility::FilePrivate: return useDC->getModuleScopeContext() == sourceDC->getModuleScopeContext(); case Accessibility::Internal: { const Module *sourceModule = sourceDC->getParentModule(); diff --git a/lib/ClangImporter/ImportDecl.cpp b/lib/ClangImporter/ImportDecl.cpp index 7d44bbd885bb5..1f6fbba14a6fa 100644 --- a/lib/ClangImporter/ImportDecl.cpp +++ b/lib/ClangImporter/ImportDecl.cpp @@ -1754,7 +1754,7 @@ namespace { ArrayRef protocols, MakeStructRawValuedOptions options = getDefaultMakeStructRawValuedOptions(), - Accessibility setterAccessibility = Accessibility::Private) { + Accessibility setterAccessibility = Accessibility::FilePrivate) { auto &cxt = Impl.SwiftContext; addProtocolsToStruct(structDecl, synthesizedProtocolAttrs, protocols); @@ -1816,7 +1816,7 @@ namespace { PatternBindingDecl *storedPatternBinding; std::tie(storedVar, storedPatternBinding) = createVarWithPattern( cxt, structDecl, storedVarName, storedUnderlyingType, /*isLet=*/false, - /*isImplicit=*/true, Accessibility::Private); + /*isImplicit=*/true, Accessibility::FilePrivate); // // Create a computed value variable @@ -1826,7 +1826,7 @@ namespace { structDecl); computedVar->setImplicit(); computedVar->setAccessibility(Accessibility::Public); - computedVar->setSetterAccessibility(Accessibility::Private); + computedVar->setSetterAccessibility(Accessibility::FilePrivate); // Create the getter for the computed value variable. auto computedVarGetter = makeNewtypeBridgedRawValueGetter( @@ -2311,7 +2311,7 @@ namespace { underlyingType, enumDecl); rawValue->setImplicit(); rawValue->setAccessibility(Accessibility::Public); - rawValue->setSetterAccessibility(Accessibility::Private); + rawValue->setSetterAccessibility(Accessibility::FilePrivate); // Create a pattern binding to describe the variable. Pattern *varPattern = createTypedNamedPattern(rawValue); diff --git a/lib/FrontendTool/FrontendTool.cpp b/lib/FrontendTool/FrontendTool.cpp index b23698781d0ba..04b5b7c52abb9 100644 --- a/lib/FrontendTool/FrontendTool.cpp +++ b/lib/FrontendTool/FrontendTool.cpp @@ -158,7 +158,7 @@ static bool declIsPrivate(const Decl *member) { } } - return VD->getFormalAccess() == Accessibility::Private; + return VD->getFormalAccess() <= Accessibility::FilePrivate; } static bool extendedTypeIsPrivate(TypeLoc inheritedType) { @@ -227,7 +227,7 @@ static bool emitReferenceDependencies(DiagnosticEngine &diags, if (!NTD) break; if (NTD->hasAccessibility() && - NTD->getFormalAccess() == Accessibility::Private) { + NTD->getFormalAccess() <= Accessibility::FilePrivate) { break; } @@ -261,7 +261,7 @@ static bool emitReferenceDependencies(DiagnosticEngine &diags, if (!NTD->hasName()) break; if (NTD->hasAccessibility() && - NTD->getFormalAccess() == Accessibility::Private) { + NTD->getFormalAccess() <= Accessibility::FilePrivate) { break; } out << "- \"" << escape(NTD->getName()) << "\"\n"; @@ -277,7 +277,7 @@ static bool emitReferenceDependencies(DiagnosticEngine &diags, if (!VD->hasName()) break; if (VD->hasAccessibility() && - VD->getFormalAccess() == Accessibility::Private) { + VD->getFormalAccess() <= Accessibility::FilePrivate) { break; } out << "- \"" << escape(VD->getName()) << "\"\n"; @@ -326,7 +326,7 @@ static bool emitReferenceDependencies(DiagnosticEngine &diags, for (auto *member : ED->getMembers()) { auto *VD = dyn_cast(member); if (!VD || !VD->hasName() || - VD->getFormalAccess() == Accessibility::Private) { + VD->getFormalAccess() <= Accessibility::FilePrivate) { continue; } out << "- [\"" << mangledName << "\", \"" @@ -391,7 +391,7 @@ static bool emitReferenceDependencies(DiagnosticEngine &diags, for (auto &entry : sortedMembers) { assert(entry.first.first != nullptr); if (entry.first.first->hasAccessibility() && - entry.first.first->getFormalAccess() == Accessibility::Private) + entry.first.first->getFormalAccess() <= Accessibility::FilePrivate) continue; out << "- "; @@ -414,7 +414,7 @@ static bool emitReferenceDependencies(DiagnosticEngine &diags, } if (i->first.first->hasAccessibility() && - i->first.first->getFormalAccess() == Accessibility::Private) + i->first.first->getFormalAccess() <= Accessibility::FilePrivate) continue; out << "- "; diff --git a/lib/IDE/CodeCompletion.cpp b/lib/IDE/CodeCompletion.cpp index 5bf49b7e3d28d..2cc78d6cf90d4 100644 --- a/lib/IDE/CodeCompletion.cpp +++ b/lib/IDE/CodeCompletion.cpp @@ -3942,7 +3942,7 @@ class CompletionOverrideLookup : public swift::VisibleDeclConsumer { ->getFormalAccess(); bool missingDeclIntroducer = !hasVarIntroducer && !hasFuncIntroducer; - bool missingAccess = !isKeywordSpecified("private") && + bool missingAccess = !isKeywordSpecified("fileprivate") && !isKeywordSpecified("public") && !isKeywordSpecified("internal"); bool missingOverride = Reason == DeclVisibilityKind::MemberOfSuper && diff --git a/lib/IDE/CodeCompletionResultBuilder.h b/lib/IDE/CodeCompletionResultBuilder.h index e77d98eaebe80..55ebb8e5df3b1 100644 --- a/lib/IDE/CodeCompletionResultBuilder.h +++ b/lib/IDE/CodeCompletionResultBuilder.h @@ -115,6 +115,11 @@ class CodeCompletionResultBuilder { CodeCompletionString::Chunk::ChunkKind::AccessControlKeyword, "private "); break; + case Accessibility::FilePrivate: + addChunkWithTextNoCopy( + CodeCompletionString::Chunk::ChunkKind::AccessControlKeyword, + "fileprivate "); + break; case Accessibility::Internal: // 'internal' is the default, don't add it. break; diff --git a/lib/IDE/CommentConversion.cpp b/lib/IDE/CommentConversion.cpp index 15dc6b4641ab2..63eb067a73d84 100644 --- a/lib/IDE/CommentConversion.cpp +++ b/lib/IDE/CommentConversion.cpp @@ -340,7 +340,7 @@ void CommentToXMLConverter::visitDocComment(const DocComment *DC) { { PrintOptions PO = PrintOptions::printInterface(); PO.PrintAccessibility = false; - PO.AccessibilityFilter = Accessibility::Private; + PO.AccessibilityFilter = Accessibility::FilePrivate; PO.PrintDocumentationComments = false; PO.TypeDefinitions = false; PO.VarInitializers = false; diff --git a/lib/IDE/ModuleInterfacePrinting.cpp b/lib/IDE/ModuleInterfacePrinting.cpp index ba4054985fe13..5d0a8079372d9 100644 --- a/lib/IDE/ModuleInterfacePrinting.cpp +++ b/lib/IDE/ModuleInterfacePrinting.cpp @@ -303,7 +303,7 @@ void swift::ide::printSubmoduleInterface( // Skip declarations that are not accessible. if (auto *VD = dyn_cast(D)) { - if (Options.AccessibilityFilter > Accessibility::Private && + if (Options.AccessibilityFilter > Accessibility::FilePrivate && VD->hasAccessibility() && VD->getFormalAccess() < Options.AccessibilityFilter) continue; diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 976f30e5c0b20..b45953a1109b6 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -173,10 +173,10 @@ namespace { /// An RAII type to exclude tokens contributing to private decls from the /// interface hash of the source file. On destruct, it checks if the set of - /// attributes includes the "private" attribute; if so, it resets the MD5 - /// hash of the source file to what it was when the IgnorePrivateDeclTokens - /// instance was created, thus excluding from the interface hash all tokens - /// parsed in the meantime. + /// attributes includes the "private" or "fileprivate" attribute; if so, it + /// resets the MD5 hash of the source file to what it was when the + /// IgnorePrivateDeclTokens instance was created, thus excluding from the + /// interface hash all tokens parsed in the meantime. struct IgnorePrivateDeclTokens { Parser &TheParser; DeclAttributes &Attributes; @@ -198,7 +198,7 @@ namespace { return; if (auto *attr = Attributes.getAttribute()) { - if (attr->getAccess() == Accessibility::Private) { + if (attr->getAccess() <= Accessibility::FilePrivate) { TheParser.SF.setInterfaceHashState(*SavedHashState); } } @@ -536,6 +536,7 @@ bool Parser::parseNewDeclAttribute(DeclAttributes &Attributes, SourceLoc AtLoc, auto access = llvm::StringSwitch(AttrName) .Case("private", Accessibility::Private) + .Case("fileprivate", Accessibility::FilePrivate) .Case("public", Accessibility::Public) .Case("internal", Accessibility::Internal); @@ -1725,8 +1726,9 @@ static bool isKeywordPossibleDeclStart(const Token &Tok) { case tok::kw_internal: case tok::kw_let: case tok::kw_operator: - case tok::kw_private: case tok::kw_protocol: + case tok::kw_private: + case tok::kw_fileprivate: case tok::kw_public: case tok::kw_static: case tok::kw_struct: @@ -1975,6 +1977,7 @@ ParserStatus Parser::parseDecl(ParseDeclOptions Flags, } case tok::kw_private: + case tok::kw_fileprivate: case tok::kw_internal: case tok::kw_public: // We still model these specifiers as attributes. diff --git a/lib/SIL/DynamicCasts.cpp b/lib/SIL/DynamicCasts.cpp index 21132fd189ce0..7d063b8a4006b 100644 --- a/lib/SIL/DynamicCasts.cpp +++ b/lib/SIL/DynamicCasts.cpp @@ -128,12 +128,12 @@ classifyDynamicCastToProtocol(CanType source, } } - // If the source type is private or target protocol is private, - // then conformances cannot be changed at run-time, because only this - // file could have implemented them, but no conformances were found. + // If the source type is private, fileprivate, or target protocol is private + // or fileprivate, then conformances cannot be changed at run-time, because + // only this file could have implemented them, but no conformances were found. // Therefore it is safe to make a negative decision at compile-time. - if (SourceNominalTy->getEffectiveAccess() == Accessibility::Private || - TargetProtocol->getEffectiveAccess() == Accessibility::Private) { + if (SourceNominalTy->getEffectiveAccess() <= Accessibility::FilePrivate || + TargetProtocol->getEffectiveAccess() <= Accessibility::FilePrivate) { // This cast is always false. Replace it with a branch to the // failure block. return DynamicCastFeasibility::WillFail; diff --git a/lib/SIL/SIL.cpp b/lib/SIL/SIL.cpp index fe108f02d4fa7..9aa4498060f68 100644 --- a/lib/SIL/SIL.cpp +++ b/lib/SIL/SIL.cpp @@ -70,6 +70,7 @@ FormalLinkage swift::getDeclLinkage(const ValueDecl *D) { return FormalLinkage::PublicUnique; return FormalLinkage::HiddenUnique; case Accessibility::Private: + case Accessibility::FilePrivate: // Why "hidden" instead of "private"? Because the debugger may need to // access these symbols. return FormalLinkage::HiddenUnique; @@ -144,7 +145,7 @@ swift::getLinkageForProtocolConformance(const NormalProtocolConformance *C, // FIXME: This should be using std::min(protocol's access, type's access). switch (C->getProtocol()->getEffectiveAccess()) { - case Accessibility::Private: + case Accessibility::FilePrivate: return (definition ? SILLinkage::Private : SILLinkage::PrivateExternal); case Accessibility::Internal: diff --git a/lib/SIL/SILDeclRef.cpp b/lib/SIL/SILDeclRef.cpp index 4da3cc5c515b2..1c65850a3ef66 100644 --- a/lib/SIL/SILDeclRef.cpp +++ b/lib/SIL/SILDeclRef.cpp @@ -335,7 +335,7 @@ SILLinkage SILDeclRef::getLinkage(ForDefinition_t forDefinition) const { // Otherwise, we have external linkage. switch (d->getEffectiveAccess()) { - case Accessibility::Private: + case Accessibility::FilePrivate: return (forDefinition ? SILLinkage::Private : SILLinkage::PrivateExternal); case Accessibility::Internal: diff --git a/lib/SIL/SILModule.cpp b/lib/SIL/SILModule.cpp index a6d225426ba19..533de5117d6d0 100644 --- a/lib/SIL/SILModule.cpp +++ b/lib/SIL/SILModule.cpp @@ -269,6 +269,7 @@ static SILFunction::ClassVisibility_t getClassVisibility(SILDeclRef constant) { switch (classType->getEffectiveAccess()) { case Accessibility::Private: + case Accessibility::FilePrivate: return SILFunction::NotRelevant; case Accessibility::Internal: return SILFunction::InternalClass; diff --git a/lib/SILOptimizer/IPO/DeadFunctionElimination.cpp b/lib/SILOptimizer/IPO/DeadFunctionElimination.cpp index 8bcba7bb94229..08fed9d932145 100644 --- a/lib/SILOptimizer/IPO/DeadFunctionElimination.cpp +++ b/lib/SILOptimizer/IPO/DeadFunctionElimination.cpp @@ -202,6 +202,7 @@ class FunctionLivenessComputation { SILLinkage linkage; switch (accessibility) { case Accessibility::Private: + case Accessibility::FilePrivate: linkage = SILLinkage::Private; break; case Accessibility::Internal: diff --git a/lib/SILOptimizer/IPO/GlobalOpt.cpp b/lib/SILOptimizer/IPO/GlobalOpt.cpp index 0b47515294daa..532926c5f1312 100644 --- a/lib/SILOptimizer/IPO/GlobalOpt.cpp +++ b/lib/SILOptimizer/IPO/GlobalOpt.cpp @@ -741,7 +741,7 @@ static bool canBeChangedExternally(SILGlobalVariable *SILG) { // if possible. if (auto *Decl = SILG->getDecl()) { auto Access = Decl->getFormalAccess(); - if (Access == Accessibility::Private) + if (Access <= Accessibility::FilePrivate) return false; if (Access == Accessibility::Internal && SILG->getModule().isWholeModule()) diff --git a/lib/SILOptimizer/IPO/GlobalPropertyOpt.cpp b/lib/SILOptimizer/IPO/GlobalPropertyOpt.cpp index 86201e09a4e5a..a73db8c40a8d5 100644 --- a/lib/SILOptimizer/IPO/GlobalPropertyOpt.cpp +++ b/lib/SILOptimizer/IPO/GlobalPropertyOpt.cpp @@ -134,6 +134,7 @@ class GlobalPropertyOpt { SILLinkage linkage; switch (accessibility) { case Accessibility::Private: + case Accessibility::FilePrivate: linkage = SILLinkage::Private; break; case Accessibility::Internal: diff --git a/lib/SILOptimizer/IPO/LetPropertiesOpts.cpp b/lib/SILOptimizer/IPO/LetPropertiesOpts.cpp index bd65ca0a5c598..717f31bdeef54 100644 --- a/lib/SILOptimizer/IPO/LetPropertiesOpts.cpp +++ b/lib/SILOptimizer/IPO/LetPropertiesOpts.cpp @@ -161,9 +161,9 @@ void LetPropertiesOpt::optimizeLetPropertyAccess(VarDecl *Property, // Check if a given let property can be removed, because it // is not accessible elsewhere. This can happen if this property - // is private or if it is internal and WMO mode is used. - if (TypeAccess == Accessibility::Private || - PropertyAccess == Accessibility::Private + // is private or fileprivate or if it is internal and WMO mode is used. + if (TypeAccess <= Accessibility::FilePrivate || + PropertyAccess <= Accessibility::FilePrivate || ((TypeAccess == Accessibility::Internal || PropertyAccess == Accessibility::Internal) && Module->isWholeModule())) { @@ -280,6 +280,7 @@ static bool isAssignableExternally(VarDecl *Property, SILModule *Module) { SILLinkage linkage; switch (accessibility) { case Accessibility::Private: + case Accessibility::FilePrivate: linkage = SILLinkage::Private; DEBUG(llvm::dbgs() << "Property " << *Property << " has private access\n"); break; @@ -312,12 +313,12 @@ static bool isAssignableExternally(VarDecl *Property, SILModule *Module) { if (isa(Ty)) return false; - // Check if there are any private properties or any internal properties and - // it is a whole module compilation. In this case, no external initializer - // may exist. + // Check if there are any private or fileprivate properties or any internal + // properties and it is a whole module compilation. In this case, no + // external initializer may exist. for (auto SP : Ty->getStoredProperties()) { auto storedPropertyAccessibility = SP->getEffectiveAccess(); - if (storedPropertyAccessibility == Accessibility::Private || + if (storedPropertyAccessibility <= Accessibility::FilePrivate || (storedPropertyAccessibility == Accessibility::Internal && Module->isWholeModule())) { DEBUG(llvm::dbgs() << "Property " << *Property diff --git a/lib/SILOptimizer/Transforms/SpeculativeDevirtualizer.cpp b/lib/SILOptimizer/Transforms/SpeculativeDevirtualizer.cpp index 64a83b59f942d..cebdbfa632eba 100644 --- a/lib/SILOptimizer/Transforms/SpeculativeDevirtualizer.cpp +++ b/lib/SILOptimizer/Transforms/SpeculativeDevirtualizer.cpp @@ -252,6 +252,7 @@ static bool isDefaultCaseKnown(ClassHierarchyAnalysis *CHA, return false; break; case Accessibility::Private: + case Accessibility::FilePrivate: break; } diff --git a/lib/SILOptimizer/Utils/Devirtualize.cpp b/lib/SILOptimizer/Utils/Devirtualize.cpp index 40b2bff653a52..d04d0a18a16d1 100644 --- a/lib/SILOptimizer/Utils/Devirtualize.cpp +++ b/lib/SILOptimizer/Utils/Devirtualize.cpp @@ -185,6 +185,7 @@ static bool isKnownFinalClass(ClassDecl *CD, SILModule &M, return false; break; case Accessibility::Private: + case Accessibility::FilePrivate: break; } @@ -204,6 +205,7 @@ static bool isKnownFinalClass(ClassDecl *CD, SILModule &M, return false; break; case Accessibility::Private: + case Accessibility::FilePrivate: break; } diff --git a/lib/SILOptimizer/Utils/Local.cpp b/lib/SILOptimizer/Utils/Local.cpp index 59c69e15042c5..05abf6034c16f 100644 --- a/lib/SILOptimizer/Utils/Local.cpp +++ b/lib/SILOptimizer/Utils/Local.cpp @@ -2582,6 +2582,7 @@ bool swift::calleesAreStaticallyKnowable(SILModule &M, SILDeclRef Decl) { case Accessibility::Internal: return M.isWholeModule(); case Accessibility::Private: + case Accessibility::FilePrivate: return true; } } diff --git a/lib/Sema/CodeSynthesis.cpp b/lib/Sema/CodeSynthesis.cpp index c9dc82078e1fe..0524c05049d1c 100644 --- a/lib/Sema/CodeSynthesis.cpp +++ b/lib/Sema/CodeSynthesis.cpp @@ -1177,8 +1177,8 @@ void TypeChecker::completePropertyBehaviorStorage(VarDecl *VD, if (VD->getDeclContext()->getAsClassOrClassExtensionContext()) makeFinal(Context, Storage); Storage->setImplicit(); - Storage->setAccessibility(Accessibility::Private); - Storage->setSetterAccessibility(Accessibility::Private); + Storage->setAccessibility(Accessibility::FilePrivate); + Storage->setSetterAccessibility(Accessibility::FilePrivate); addMemberToContextIfNeeded(Storage, DC); @@ -1407,7 +1407,7 @@ void TypeChecker::completePropertyBehaviorParameter(VarDecl *VD, if (DC->getAsClassOrClassExtensionContext()) makeFinal(Context, Parameter); Parameter->setImplicit(); - Parameter->setAccessibility(Accessibility::Private); + Parameter->setAccessibility(Accessibility::FilePrivate); Parameter->setIsBeingTypeChecked(); Parameter->setBodyResultType(SubstBodyResultTy); @@ -1641,8 +1641,8 @@ void TypeChecker::completeLazyVarImplementation(VarDecl *VD) { if (VD->getDeclContext()->getAsClassOrClassExtensionContext()) makeFinal(Context, Storage); Storage->setImplicit(); - Storage->setAccessibility(Accessibility::Private); - Storage->setSetterAccessibility(Accessibility::Private); + Storage->setAccessibility(Accessibility::FilePrivate); + Storage->setSetterAccessibility(Accessibility::FilePrivate); typeCheckDecl(Get, true); typeCheckDecl(Get, false); diff --git a/lib/Sema/ITCDecl.cpp b/lib/Sema/ITCDecl.cpp index 1371b77b31bc0..f43e6bd9a347a 100644 --- a/lib/Sema/ITCDecl.cpp +++ b/lib/Sema/ITCDecl.cpp @@ -314,7 +314,7 @@ void IterativeTypeChecker::processResolveTypeDecl( TypeResolutionOptions options; options |= TR_GlobalTypeAlias; - if (typeAliasDecl->getFormalAccess() == Accessibility::Private) + if (typeAliasDecl->getFormalAccess() <= Accessibility::FilePrivate) options |= TR_KnownNonCascadingDependency; // Note: recursion into old type checker is okay when passing in an diff --git a/lib/Sema/MiscDiagnostics.cpp b/lib/Sema/MiscDiagnostics.cpp index b3e08567c2d52..a2dcb663dc101 100644 --- a/lib/Sema/MiscDiagnostics.cpp +++ b/lib/Sema/MiscDiagnostics.cpp @@ -3150,7 +3150,8 @@ void swift::fixItAccessibility(InFlightDiagnostic &diag, ValueDecl *VD, Accessibility desiredAccess, bool isForSetter) { StringRef fixItString; switch (desiredAccess) { - case Accessibility::Private: fixItString = "private "; break; + case Accessibility::Private: fixItString = "private "; break; + case Accessibility::FilePrivate: fixItString = "fileprivate "; break; case Accessibility::Internal: fixItString = "internal "; break; case Accessibility::Public: fixItString = "public "; break; } diff --git a/lib/Sema/TypeCheckDecl.cpp b/lib/Sema/TypeCheckDecl.cpp index a1a3637b9e5c2..eaa591e5189b6 100644 --- a/lib/Sema/TypeCheckDecl.cpp +++ b/lib/Sema/TypeCheckDecl.cpp @@ -1005,7 +1005,7 @@ static void checkRedeclaration(TypeChecker &tc, ValueDecl *current) { ReferencedNameTracker *tracker = currentFile->getReferencedNameTracker(); bool isCascading = true; if (current->hasAccessibility()) - isCascading = (current->getFormalAccess() > Accessibility::Private); + isCascading = (current->getFormalAccess() > Accessibility::FilePrivate); // Find other potential definitions. SmallVector otherDefinitionsVec; @@ -1318,7 +1318,7 @@ class TypeAccessibilityChecker : private TypeWalker { explicit TypeAccessibilityChecker(TypeAccessibilityCacheMap &cache) : Cache(cache) { // Always have something on the stack. - AccessStack.push_back(Accessibility::Private); + AccessStack.push_back(Accessibility::FilePrivate); } bool shouldVisitOriginalSubstitutedType() override { return true; } @@ -1455,7 +1455,7 @@ void TypeChecker::computeAccessibility(ValueDecl *D) { case DeclContextKind::TopLevelCodeDecl: case DeclContextKind::AbstractFunctionDecl: case DeclContextKind::SubscriptDecl: - D->setAccessibility(Accessibility::Private); + D->setAccessibility(Accessibility::FilePrivate); break; case DeclContextKind::Module: case DeclContextKind::FileUnit: @@ -1535,7 +1535,7 @@ static void checkTypeAccessibility( llvm::function_ref diagnose) { // Don't spend time checking private access; this is always valid. // This includes local declarations. - if (contextAccess == Accessibility::Private || !TL.getType()) + if (contextAccess <= Accessibility::FilePrivate || !TL.getType()) return; Accessibility typeAccess = @@ -2064,7 +2064,7 @@ static Optional shouldMarkAsObjC(TypeChecker &TC, // Implicitly generated declarations are not @objc, except for constructors. else if (!allowImplicit && VD->isImplicit()) return None; - else if (VD->getFormalAccess() == Accessibility::Private) + else if (VD->getFormalAccess() <= Accessibility::FilePrivate) return None; // If this declaration is part of a class with implicitly @objc members, @@ -3484,7 +3484,7 @@ class DeclChecker : public DeclVisitor { TypeResolutionOptions options; if (!TAD->getDeclContext()->isTypeContext()) options |= TR_GlobalTypeAlias; - if (TAD->getFormalAccess() == Accessibility::Private) + if (TAD->getFormalAccess() <= Accessibility::FilePrivate) options |= TR_KnownNonCascadingDependency; if (TAD->getDeclContext()->isModuleScopeContext()) { @@ -3848,7 +3848,7 @@ class DeclChecker : public DeclVisitor { if (auto *SF = CD->getParentSourceFile()) { if (auto *tracker = SF->getReferencedNameTracker()) { - bool isPrivate = CD->getFormalAccess() == Accessibility::Private; + bool isPrivate = CD->getFormalAccess() <= Accessibility::FilePrivate; tracker->addUsedMember({Super, Identifier()}, !isPrivate); } } @@ -3915,7 +3915,7 @@ class DeclChecker : public DeclVisitor { if (auto *SF = PD->getParentSourceFile()) { if (auto *tracker = SF->getReferencedNameTracker()) { - bool isNonPrivate = (PD->getFormalAccess() != Accessibility::Private); + bool isNonPrivate = (PD->getFormalAccess() > Accessibility::FilePrivate); for (auto *parentProto : PD->getInheritedProtocols(nullptr)) tracker->addUsedMember({parentProto, Identifier()}, isNonPrivate); } @@ -5161,7 +5161,7 @@ class DeclChecker : public DeclVisitor { std::min(classDecl->getFormalAccess(), matchDecl->getFormalAccess()); bool shouldDiagnose = false; bool shouldDiagnoseSetter = false; - if (requiredAccess > Accessibility::Private && + if (requiredAccess > Accessibility::FilePrivate && !isa(decl)) { shouldDiagnose = (decl->getFormalAccess() < requiredAccess); @@ -6927,7 +6927,7 @@ void TypeChecker::validateAccessibility(ValueDecl *D) { case DeclKind::Destructor: case DeclKind::EnumElement: { if (D->isInvalid()) { - D->setAccessibility(Accessibility::Private); + D->setAccessibility(Accessibility::FilePrivate); } else { auto container = cast(D->getDeclContext()); validateAccessibility(container); diff --git a/lib/Sema/TypeCheckProtocol.cpp b/lib/Sema/TypeCheckProtocol.cpp index d0a793d968ebd..5e50663ee600f 100644 --- a/lib/Sema/TypeCheckProtocol.cpp +++ b/lib/Sema/TypeCheckProtocol.cpp @@ -1227,7 +1227,7 @@ checkWitnessAccessibility(Accessibility *requiredAccess, // FIXME: Handle "private(set)" requirements. *requiredAccess = std::min(Proto->getFormalAccess(), *requiredAccess); - if (*requiredAccess > Accessibility::Private) { + if (*requiredAccess > Accessibility::FilePrivate) { if (witness->getFormalAccess() < *requiredAccess) return true; @@ -4435,13 +4435,13 @@ static void diagnosePotentialWitness(TypeChecker &tc, witness->getFullName(), static_cast(*move)); } - // If adding 'private' or 'internal' can help, suggest that. - if (accessibility != Accessibility::Private && + // If adding 'fileprivate' or 'internal' can help, suggest that. + if (accessibility != Accessibility::FilePrivate && !witness->getAttrs().hasAttribute()) { tc.diagnose(witness, diag::optional_req_near_match_accessibility, witness->getFullName(), accessibility) - .fixItInsert(witness->getAttributeInsertionLoc(true), "private "); + .fixItInsert(witness->getAttributeInsertionLoc(true), "fileprivate "); } // If adding @nonobjc can help, suggest that. @@ -4528,7 +4528,7 @@ void TypeChecker::checkConformancesInContext(DeclContext *dc, if (tracker) tracker->addUsedMember({conformance->getProtocol(), Identifier()}, - defaultAccessibility != Accessibility::Private); + defaultAccessibility > Accessibility::FilePrivate); } // Diagnose any conflicts attributed to this declaration context. diff --git a/lib/Serialization/Deserialization.cpp b/lib/Serialization/Deserialization.cpp index 3e18d900c0785..bacfde9cfad7f 100644 --- a/lib/Serialization/Deserialization.cpp +++ b/lib/Serialization/Deserialization.cpp @@ -1653,6 +1653,7 @@ getActualAccessibility(uint8_t raw) { case serialization::AccessibilityKind::NAME: \ return Accessibility::NAME; CASE(Private) + CASE(FilePrivate) CASE(Internal) CASE(Public) #undef CASE diff --git a/lib/Serialization/Serialization.cpp b/lib/Serialization/Serialization.cpp index f55a4318b649c..66b5ff0bb65e3 100644 --- a/lib/Serialization/Serialization.cpp +++ b/lib/Serialization/Serialization.cpp @@ -1545,6 +1545,7 @@ static uint8_t getRawStableAccessibility(Accessibility access) { case Accessibility::NAME: \ return static_cast(serialization::AccessibilityKind::NAME); CASE(Private) + CASE(FilePrivate) CASE(Internal) CASE(Public) #undef CASE @@ -2020,7 +2021,7 @@ void Serializer::writeDecl(const Decl *D) { if (auto *value = dyn_cast(D)) { if (value->hasAccessibility() && - value->getFormalAccess() == Accessibility::Private && + value->getFormalAccess() <= Accessibility::FilePrivate && !value->getDeclContext()->isLocalContext()) { // FIXME: We shouldn't need to encode this for /all/ private decls. // In theory we can follow the same rules as mangling and only include diff --git a/stdlib/public/core/HashedCollections.swift.gyb b/stdlib/public/core/HashedCollections.swift.gyb index f6b0fc1830b5b..a681e928a43aa 100644 --- a/stdlib/public/core/HashedCollections.swift.gyb +++ b/stdlib/public/core/HashedCollections.swift.gyb @@ -1209,7 +1209,7 @@ public func == (lhs: Set, rhs: Set) -> Boo } extension Set : CustomStringConvertible, CustomDebugStringConvertible { - private func makeDescription(isDebug: Bool) -> String { + fileprivate func makeDescription(isDebug: Bool) -> String { var result = isDebug ? "Set([" : "[" var first = true for member in self { diff --git a/stdlib/public/core/IntegerParsing.swift.gyb b/stdlib/public/core/IntegerParsing.swift.gyb index 534bc11cd87f5..448c5b65b84c4 100644 --- a/stdlib/public/core/IntegerParsing.swift.gyb +++ b/stdlib/public/core/IntegerParsing.swift.gyb @@ -107,7 +107,7 @@ internal func _parseAsciiAsIntMax( } /// Strip an optional single leading ASCII plus/minus sign from `utf16`. -private func _parseOptionalAsciiSign( +fileprivate func _parseOptionalAsciiSign( _ utf16: String.UTF16View ) -> (digitsUTF16: String.UTF16View, isMinus: Bool) { switch utf16.first { diff --git a/test/1_stdlib/Runtime.swift b/test/1_stdlib/Runtime.swift index 2d8a144a13e5b..4098f5b8cb72b 100644 --- a/test/1_stdlib/Runtime.swift +++ b/test/1_stdlib/Runtime.swift @@ -279,7 +279,7 @@ extension Int { var description: String { return "abc" } } - private class PrivateExtensionClassConformsToP2 : P2 { + fileprivate class PrivateExtensionClassConformsToP2 : P2 { var description: String { return "def" } } } diff --git a/test/DebugInfo/PrivateDiscriminator.swift b/test/DebugInfo/PrivateDiscriminator.swift index 803d3a4375d7a..74c43d7321aa4 100644 --- a/test/DebugInfo/PrivateDiscriminator.swift +++ b/test/DebugInfo/PrivateDiscriminator.swift @@ -8,14 +8,14 @@ func markUsed(_ t: T) {} -private class A { +fileprivate class A { init(val : Int64) { member = val } private let member : Int64 // CHECK: !DISubprogram(name: "getMember" // CHECK-SAME: linkageName: "{{[^"]*}}[[DISCRIMINATOR]] // CHECK-SAME: line: [[@LINE+2]] // CHECK-SAME: isLocal: true, isDefinition: true - private func getMember() -> Int64 { return member } + fileprivate func getMember() -> Int64 { return member } func getVal() -> Int64 { return getMember() } } diff --git a/test/DebugInfo/typealias.swift b/test/DebugInfo/typealias.swift index 812c6ed1763a6..7ab2b6f99e5ec 100644 --- a/test/DebugInfo/typealias.swift +++ b/test/DebugInfo/typealias.swift @@ -8,8 +8,8 @@ class DWARF { typealias DIEOffset = UInt32 // CHECK-DAG: ![[VOID:.*]] = !DICompositeType({{.*}}identifier: "_TtT_" // CHECK-DAG: ![[PRIVATETYPE:.*]] = !DIDerivedType(tag: DW_TAG_typedef, name: "_TtaC9typealias5DWARFP{{.+}}11PrivateType",{{.*}} line: [[@LINE+1]], baseType: ![[VOID]]) - private typealias PrivateType = () - private static func usePrivateType() -> PrivateType { return () } + fileprivate typealias PrivateType = () + fileprivate static func usePrivateType() -> PrivateType { return () } } func main () { diff --git a/test/IRGen/Inputs/multithread_module/main.swift b/test/IRGen/Inputs/multithread_module/main.swift index a7ed75ce5a22d..f5773870487fe 100644 --- a/test/IRGen/Inputs/multithread_module/main.swift +++ b/test/IRGen/Inputs/multithread_module/main.swift @@ -10,7 +10,7 @@ class Derived : Base { } } -private struct MyStruct : MyProto { +fileprivate struct MyStruct : MyProto { var x: Int diff --git a/test/IRGen/coverage.swift b/test/IRGen/coverage.swift index 9bcd6bddb2ef0..c6dc135fe2c91 100644 --- a/test/IRGen/coverage.swift +++ b/test/IRGen/coverage.swift @@ -9,7 +9,7 @@ internal func f1() {} // SIL-DAG: sil private @_TF8coverageP33_[[F2HASH:[_a-zA-Z0-9]+]] // SIL-DAG: string_literal utf8 "{{.*}}coverage.swift:_TF8coverageP33_[[F2HASH]]" // IR-DAG: @"__profn_{{.*}}coverage.swift:_TF8coverageP33_[[F2HASH:[_a-zA-Z0-9]+]]" {{.*}} c"{{.*}}coverage.swift:_TF8coverageP33_[[F2HASH]]" -private func f2() {} +fileprivate func f2() {} // SIL-DAG: sil @_TF8coverage2f3FT_T_ // SIL-DAG: string_literal utf8 "_TF8coverage2f3FT_T_" diff --git a/test/IRGen/method_linkage.swift b/test/IRGen/method_linkage.swift index edb6d4f1dbe60..39054dd7c2660 100644 --- a/test/IRGen/method_linkage.swift +++ b/test/IRGen/method_linkage.swift @@ -7,37 +7,37 @@ class Base { // CHECK: define hidden void @_TFC14method_linkage4Base{{.*}}3foofT_T_ @inline(never) - private func foo() { + fileprivate func foo() { } // CHECK: define internal void @_TFC14method_linkage4Base{{.*}}3barfT_T_ @inline(never) - private final func bar() { + fileprivate final func bar() { } // CHECK: define hidden void @_TFC14method_linkage4Base{{.*}}5otherfT_T_ @inline(never) - private func other() { + fileprivate func other() { } } class Derived : Base { // CHECK: define hidden void @_TFC14method_linkage7Derived{{.*}}3foofT_T_ @inline(never) - private final override func foo() { + fileprivate final override func foo() { } } extension Base { // CHECK: define internal void @_TFC14method_linkage4Base{{.*}}7extfuncfT_T_ @inline(never) - private func extfunc() { + fileprivate func extfunc() { } } public class PublicClass { // CHECK: define{{( protected)?}} void @_TFC14method_linkage11PublicClass{{.*}}4pfoofT_T_ @inline(never) - private func pfoo() { + fileprivate func pfoo() { } // CHECK: define{{( protected)?}} void @_TFC14method_linkage11PublicClass4pbarfT_T_ diff --git a/test/IRGen/report_dead_method_call.swift b/test/IRGen/report_dead_method_call.swift index 1f65efe6c622c..41d6d2ec5bfd5 100644 --- a/test/IRGen/report_dead_method_call.swift +++ b/test/IRGen/report_dead_method_call.swift @@ -11,7 +11,7 @@ // RUN: %target-run %t/report_dead_method_call // REQUIRES: executable_test -private protocol PrivateProto { +fileprivate protocol PrivateProto { func abc() } @@ -22,7 +22,7 @@ struct PrivateStructC : PrivateProto { struct Container { - private var p: PrivateProto = PrivateStructC() + fileprivate var p: PrivateProto = PrivateStructC() } @inline(never) @@ -30,19 +30,19 @@ func callProto() { testProto(Container()) } -private class Base { +fileprivate class Base { func def() { } } -private class Derived : Base { +fileprivate class Derived : Base { override func def() { } } struct ClassContainer { - private var p: Base = Derived() + fileprivate var p: Base = Derived() } @inline(never) @@ -51,7 +51,7 @@ func callClass() { } public class PublicBase { - private func ghi() { + fileprivate func ghi() { } } diff --git a/test/IRGen/zombies.swift b/test/IRGen/zombies.swift index aaaf778b1a555..d4d7da8356840 100644 --- a/test/IRGen/zombies.swift +++ b/test/IRGen/zombies.swift @@ -4,7 +4,7 @@ // Ideally, these wouldn't be in the v-table at all; but as long as they // are, we need to emit symbols for them. class C { - private var i: Int + fileprivate var i: Int init(i: Int) { self.i = i } } diff --git a/test/Inputs/ObjCBridging/Appliances.swift b/test/Inputs/ObjCBridging/Appliances.swift index e45d6092af2f6..89ca952d19707 100644 --- a/test/Inputs/ObjCBridging/Appliances.swift +++ b/test/Inputs/ObjCBridging/Appliances.swift @@ -35,7 +35,7 @@ extension Refrigerator : _ObjectiveCBridgeable { } public struct ManufacturerInfo { - private var impl: APPManufacturerInfo + fileprivate var impl: APPManufacturerInfo public var value: DataType { return impl.value } diff --git a/test/Interpreter/Inputs/testability_helper.swift b/test/Interpreter/Inputs/testability_helper.swift index a0d3c0ffeab4c..b9df14d54fd60 100644 --- a/test/Interpreter/Inputs/testability_helper.swift +++ b/test/Interpreter/Inputs/testability_helper.swift @@ -9,7 +9,7 @@ internal class Base : CustomStringConvertible { var description: String { return "instance \(id)" } - private func privateFn() -> String { + fileprivate func privateFn() -> String { return "private \(id)" } func callPrivate() -> String { @@ -17,7 +17,7 @@ internal class Base : CustomStringConvertible { } } -private class PrivateSub : Base { +fileprivate class PrivateSub : Base { override func privateFn() -> String { return "really private" } diff --git a/test/Interpreter/classes.swift b/test/Interpreter/classes.swift index 4b22e8be4b983..f96d00b51b8a5 100644 --- a/test/Interpreter/classes.swift +++ b/test/Interpreter/classes.swift @@ -173,7 +173,7 @@ print((b as Bank).deposit(Account(owner: "A"))) // rdar://25412647 -private class Parent { +fileprivate class Parent { required init() {} func doSomething() { @@ -185,7 +185,7 @@ private class Parent { } } -private class Child: Parent { +fileprivate class Child: Parent { override func overriddenMethod() { print("Heaven!") } diff --git a/test/NameBinding/Inputs/accessibility_other.swift b/test/NameBinding/Inputs/accessibility_other.swift index 75a5bbaa86262..cd40fd151f471 100644 --- a/test/NameBinding/Inputs/accessibility_other.swift +++ b/test/NameBinding/Inputs/accessibility_other.swift @@ -2,21 +2,21 @@ import has_accessibility public let a = 0 // expected-note * {{did you mean 'a'?}} internal let b = 0 // expected-note * {{did you mean 'b'?}} -private let c = 0 +fileprivate let c = 0 extension Foo { public static func a() {} internal static func b() {} - private static func c() {} // expected-note {{'c' declared here}} + fileprivate static func c() {} // expected-note {{'c' declared here}} } struct PrivateInit { - private init() {} // expected-note {{'init' declared here}} + fileprivate init() {} // expected-note {{'init' declared here}} } extension Foo { - private func method() {} - private typealias TheType = Float + fileprivate func method() {} + fileprivate typealias TheType = Float } extension OriginallyEmpty { @@ -24,6 +24,6 @@ extension OriginallyEmpty { typealias TheType = Float } -private func privateInBothFiles() {} +fileprivate func privateInBothFiles() {} func privateInPrimaryFile() {} // expected-note {{previously declared here}} -private func privateInOtherFile() {} // expected-error {{invalid redeclaration}} +fileprivate func privateInOtherFile() {} // expected-error {{invalid redeclaration}} diff --git a/test/NameBinding/Inputs/has_accessibility.swift b/test/NameBinding/Inputs/has_accessibility.swift index 9b0268c471d5f..2cd9ebb0adaa3 100644 --- a/test/NameBinding/Inputs/has_accessibility.swift +++ b/test/NameBinding/Inputs/has_accessibility.swift @@ -1,6 +1,6 @@ public let x: Int = 0 internal let y: Int = 0 -private let z: Int = 0 +fileprivate let z: Int = 0 #if DEFINE_VAR_FOR_SCOPED_IMPORT internal let zz: Int = 0 @@ -11,7 +11,7 @@ public struct Foo { public static func x() {} internal static func y() {} - private static func z() {} + fileprivate static func z() {} } public class Base { diff --git a/test/NameBinding/accessibility.swift b/test/NameBinding/accessibility.swift index c263070d5e0c5..897283b4fde3d 100644 --- a/test/NameBinding/accessibility.swift +++ b/test/NameBinding/accessibility.swift @@ -44,18 +44,18 @@ markUsed(c) // expected-error {{use of unresolved identifier 'c'}} Foo.x() Foo.y() // expected-error {{'y' is inaccessible due to 'internal' protection level}} -Foo.z() // expected-error {{'z' is inaccessible due to 'private' protection level}} +Foo.z() // expected-error {{'z' is inaccessible due to 'fileprivate' protection level}} // TESTABLE-NOT: :[[@LINE-3]]:{{[^:]+}}: // TESTABLE-NOT: :[[@LINE-3]]:{{[^:]+}}: -// TESTABLE: :[[@LINE-3]]:{{[^:]+}}: error: 'z' is inaccessible due to 'private' protection level +// TESTABLE: :[[@LINE-3]]:{{[^:]+}}: error: 'z' is inaccessible due to 'fileprivate' protection level Foo.a() Foo.b() -Foo.c() // expected-error {{'c' is inaccessible due to 'private' protection level}} +Foo.c() // expected-error {{'c' is inaccessible due to 'fileprivate' protection level}} _ = Foo() // expected-error {{'Foo' initializer is inaccessible due to 'internal' protection level}} // TESTABLE-NOT: :[[@LINE-1]]:{{[^:]+}}: -_ = PrivateInit() // expected-error {{'PrivateInit' initializer is inaccessible due to 'private' protection level}} -// TESTABLE: :[[@LINE-1]]:{{[^:]+}}: error: 'PrivateInit' initializer is inaccessible due to 'private' protection level +_ = PrivateInit() // expected-error {{'PrivateInit' initializer is inaccessible due to 'fileprivate' protection level}} +// TESTABLE: :[[@LINE-1]]:{{[^:]+}}: error: 'PrivateInit' initializer is inaccessible due to 'fileprivate' protection level var s = StructWithPrivateSetter() s.x = 42 // expected-error {{cannot assign to property: 'x' setter is inaccessible}} @@ -124,13 +124,13 @@ func privateInOtherFile() {} // expected-note {{previously declared here}} #if !ACCESS_DISABLED // rdar://problem/21408035 -private class PrivateBox { // expected-note 2 {{type declared here}} +fileprivate class PrivateBox { // expected-note 2 {{type declared here}} typealias ValueType = T typealias AlwaysFloat = Float } -let boxUnboxInt: PrivateBox.ValueType = 0 // expected-error {{constant must be declared private because its type uses a private type}} -let boxFloat: PrivateBox.AlwaysFloat = 0 // expected-error {{constant must be declared private because its type uses a private type}} +let boxUnboxInt: PrivateBox.ValueType = 0 // expected-error {{constant must be declared fileprivate because its type uses a fileprivate type}} +let boxFloat: PrivateBox.AlwaysFloat = 0 // expected-error {{constant must be declared fileprivate because its type uses a fileprivate type}} #endif diff --git a/test/NameBinding/reference-dependencies.swift b/test/NameBinding/reference-dependencies.swift index b5a41a28b66d7..f201d9cfdd8c9 100644 --- a/test/NameBinding/reference-dependencies.swift +++ b/test/NameBinding/reference-dependencies.swift @@ -61,7 +61,7 @@ struct IntWrapper: Comparable { // CHECK-DAG: - "TypeReferencedOnlyByPrivateSubscript" // FIXME: This should be marked "!private". - private subscript(_: TypeReferencedOnlyByPrivateSubscript) -> Void { return () } + fileprivate subscript(_: TypeReferencedOnlyByPrivateSubscript) -> Void { return () } } // CHECK-DAG: "IntWrapper" @@ -112,7 +112,7 @@ protocol ExtraFloatLiteralConvertible : OtherFileAliasForFloatLiteralConvertible { } // CHECK-DAG: !private "UnicodeScalarLiteralConvertible" -private protocol ExtraCharLiteralConvertible : UnicodeScalarLiteralConvertible { +fileprivate protocol ExtraCharLiteralConvertible : UnicodeScalarLiteralConvertible { } prefix operator ~~~ {} @@ -120,14 +120,14 @@ protocol ThreeTilde { prefix func ~~~(lhs: Self) } -private struct ThreeTildeTypeImpl : ThreeTilde { +fileprivate struct ThreeTildeTypeImpl : ThreeTilde { } func overloadedOnProto(_: T) {} func overloadedOnProto(_: T) {} // CHECK-DAG: - "~~~" -private prefix func ~~~(_: ThreeTildeTypeImpl) {} +fileprivate prefix func ~~~(_: ThreeTildeTypeImpl) {} var topLevelComputedProperty: Bool { return true @@ -235,7 +235,7 @@ struct Outer { } // CHECK-DAG: !private "privateFunc" -private func privateFunc() {} +fileprivate func privateFunc() {} // CHECK-DAG: - "topLevel1" var use1 = topLevel1() @@ -256,7 +256,7 @@ _ = 42 * 30 // CHECK-DAG: - "topLevel6" _ = topLevel6() // CHECK-DAG: - "topLevel7" -private var use7 = topLevel7() +fileprivate var use7 = topLevel7() // CHECK-DAG: - "topLevel8" var use8: Int = topLevel8() // CHECK-DAG: - "topLevel9" @@ -292,7 +292,7 @@ struct StructForDeclaringProperties { func private1(_ a: Int = privateTopLevel1()) {} // CHECK-DAG: !private "privateTopLevel2" // CHECK-DAG: !private "PrivateProto1" -private struct Private2 : PrivateProto1 { +fileprivate struct Private2 : PrivateProto1 { var private2 = privateTopLevel2() } // CHECK-DAG: !private "privateTopLevel3" @@ -301,7 +301,7 @@ func outerPrivate3() { } // CHECK-DAG: !private "PrivateTopLevelTy1" -private extension Use4 { +fileprivate extension Use4 { var privateTy1: PrivateTopLevelTy1? { return nil } } // CHECK-DAG: !private "PrivateTopLevelTy2" @@ -315,38 +315,38 @@ func outerPrivateTy3() { inner(nil) } // CHECK-DAG: !private "PrivateTopLevelStruct3" -private typealias PrivateTy4 = PrivateTopLevelStruct3.ValueType +fileprivate typealias PrivateTy4 = PrivateTopLevelStruct3.ValueType // CHECK-DAG: !private "PrivateTopLevelStruct4" -private func privateTy5(_ x: PrivateTopLevelStruct4.ValueType) -> PrivateTopLevelStruct4.ValueType { +fileprivate func privateTy5(_ x: PrivateTopLevelStruct4.ValueType) -> PrivateTopLevelStruct4.ValueType { return x } // Deliberately empty. -private struct PrivateTy6 {} +fileprivate struct PrivateTy6 {} // CHECK-DAG: !private "PrivateProto3" extension PrivateTy6 : PrivateProto3 {} // CHECK-DAG: - "ProtoReferencedOnlyInGeneric" func genericTest(_: T) {} // CHECK-DAG: !private "ProtoReferencedOnlyInPrivateGeneric" -private func privateGenericTest(_: T) {} +fileprivate func privateGenericTest(_: T) {} struct PrivateStoredProperty { // CHECK-DAG: - "TypeReferencedOnlyByPrivateVar" - private var value: TypeReferencedOnlyByPrivateVar + fileprivate var value: TypeReferencedOnlyByPrivateVar } class PrivateStoredPropertyRef { // CHECK-DAG: - "TypeReferencedOnlyByPrivateClassVar" - private var value: TypeReferencedOnlyByPrivateClassVar? + fileprivate var value: TypeReferencedOnlyByPrivateClassVar? } struct Sentinel1 {} -private protocol ExtensionProto {} +fileprivate protocol ExtensionProto {} extension OtherFileTypeToBeExtended : ExtensionProto { - private func foo() {} + fileprivate func foo() {} } -private extension OtherFileTypeToBeExtended { +fileprivate extension OtherFileTypeToBeExtended { var bar: Bool { return false } } diff --git a/test/SIL/Inputs/whole_module_optimization_helper.swift b/test/SIL/Inputs/whole_module_optimization_helper.swift index 2ef208ff03523..2e39cd2707b08 100644 --- a/test/SIL/Inputs/whole_module_optimization_helper.swift +++ b/test/SIL/Inputs/whole_module_optimization_helper.swift @@ -2,6 +2,6 @@ func compute(_ fn: () -> Int32) -> Int32 { return fn() + privateFn() } -private func privateFn() -> Int32 { +fileprivate func privateFn() -> Int32 { return 40 } diff --git a/test/SIL/whole_module_optimization.swift b/test/SIL/whole_module_optimization.swift index 15f1951171127..bd2550371a6cd 100644 --- a/test/SIL/whole_module_optimization.swift +++ b/test/SIL/whole_module_optimization.swift @@ -9,7 +9,7 @@ // RUN: FileCheck %s < %t.testing.sil // RUN: FileCheck %s -check-prefix=NEGATIVE-TESTABLE < %t.testing.sil -private func privateFn() -> Int32 { +fileprivate func privateFn() -> Int32 { return 2 } diff --git a/test/SILGen/Inputs/mangling_private_helper.swift b/test/SILGen/Inputs/mangling_private_helper.swift index a50fdfc46ba58..f4773f17bdd41 100644 --- a/test/SILGen/Inputs/mangling_private_helper.swift +++ b/test/SILGen/Inputs/mangling_private_helper.swift @@ -1,9 +1,9 @@ public class Base { - private func privateMethod() {} + fileprivate func privateMethod() {} } // Demonstrate the need for a vtable entry for privateMethod(). // This isn't strictly necessary. -private class Subclass : Base { - override private func privateMethod() {} +fileprivate class Subclass : Base { + override fileprivate func privateMethod() {} } diff --git a/test/SILGen/accessibility_warnings.swift b/test/SILGen/accessibility_warnings.swift index 1aed324cbc674..d6f417ed9e5ee 100644 --- a/test/SILGen/accessibility_warnings.swift +++ b/test/SILGen/accessibility_warnings.swift @@ -20,8 +20,8 @@ internal struct InternalStruct { public var publicVarGetSet: Int { get { return 0 } set {} } // expected-warning {{declaring a public var for an internal struct}} {{3-9=internal}} } -private struct PrivateStruct { - public var publicVar = 0 // expected-warning {{declaring a public var for a private struct}} {{3-9=private}} +fileprivate struct PrivateStruct { + public var publicVar = 0 // expected-warning {{declaring a public var for a fileprivate struct}} {{3-9=fileprivate}} } @@ -38,9 +38,9 @@ extension InternalStruct { } extension PrivateStruct { - public init(x: Int) { self.init() } // expected-warning {{declaring a public initializer for a private struct}} {{3-9=private}} + public init(x: Int) { self.init() } // expected-warning {{declaring a public initializer for a fileprivate struct}} {{3-9=fileprivate}} - public var publicVarExtension: Int { get { return 0 } set {} } // expected-warning {{declaring a public var for a private struct}} {{3-9=private}} + public var publicVarExtension: Int { get { return 0 } set {} } // expected-warning {{declaring a public var for a fileprivate struct}} {{3-9=fileprivate}} } public extension PublicStruct { diff --git a/test/SILGen/cdecl.swift b/test/SILGen/cdecl.swift index 869a9ef14deb1..c03de62687cab 100644 --- a/test/SILGen/cdecl.swift +++ b/test/SILGen/cdecl.swift @@ -33,7 +33,7 @@ public func broccoli(_ x: Int) -> Int { // CHECK: function_ref @_TF5cdeclP[[PRIVATE:.*]]4kale // CHECK: sil private @_TF5cdeclP[[PRIVATE:.*]]4kale @_cdecl("collard_greens") -private func kale(_ x: Int) -> Int { +fileprivate func kale(_ x: Int) -> Int { return x } diff --git a/test/SILGen/deinit_in_vtable.swift b/test/SILGen/deinit_in_vtable.swift index 80ee7657373f1..9255bfe7691da 100644 --- a/test/SILGen/deinit_in_vtable.swift +++ b/test/SILGen/deinit_in_vtable.swift @@ -3,14 +3,14 @@ // The second run tests is it can be compiled without crashes. // RUN: %target-swift-frontend -Xllvm -sil-full-demangle -O -S %s -private class A { +fileprivate class A { func foo() -> Int { return 0 } } // CHECK-LABEL: deinit_in_vtable.(A in {{.*}}).__deallocating_deinit // CHECK: sil private @[[A:.*]] : -private class B : A { +fileprivate class B : A { override func foo() -> Int { return 1 } } @@ -18,7 +18,7 @@ private class B : A { // CHECK: sil private @[[B:.*]] : @inline(never) -private func testfunc(_ a: A) -> Int { +fileprivate func testfunc(_ a: A) -> Int { return a.foo() } diff --git a/test/SILGen/mangling_private.swift b/test/SILGen/mangling_private.swift index 09f1114fcd123..c7f14764153f9 100644 --- a/test/SILGen/mangling_private.swift +++ b/test/SILGen/mangling_private.swift @@ -14,44 +14,44 @@ import mangling_private_helper // CHECK-LABEL: sil private @_TF16mangling_privateP33_A3CCBB841DB59E79A4AD4EE45865506811privateFuncFT_Si // OTHER-NAME-LABEL: sil private @_TF16mangling_privateP33_CF726049E48876D30EA29D63CF139F1D11privateFuncFT_Si -private func privateFunc() -> Int { +fileprivate func privateFunc() -> Int { return 0 } public struct PublicStruct { // CHECK-LABEL: sil private @_TZFV16mangling_private12PublicStructP33_A3CCBB841DB59E79A4AD4EE45865506813privateMethodfT_T_ - private static func privateMethod() {} + fileprivate static func privateMethod() {} } public struct InternalStruct { // CHECK-LABEL: sil private @_TZFV16mangling_private14InternalStructP33_A3CCBB841DB59E79A4AD4EE45865506813privateMethodfT_T_ - private static func privateMethod() {} + fileprivate static func privateMethod() {} } -private struct PrivateStruct { +fileprivate struct PrivateStruct { // CHECK-LABEL: sil private @_TZFV16mangling_privateP33_A3CCBB841DB59E79A4AD4EE45865506813PrivateStruct13privateMethodfT_T_ - private static func privateMethod() {} + fileprivate static func privateMethod() {} struct Inner { // CHECK-LABEL: sil private @_TZFVV16mangling_privateP33_A3CCBB841DB59E79A4AD4EE45865506813PrivateStruct5Inner13privateMethodfT_T_ - private static func privateMethod() {} + fileprivate static func privateMethod() {} } } func localTypes() { struct LocalStruct { // CHECK-LABEL: sil shared @_TZFVF16mangling_private10localTypesFT_T_L_11LocalStruct13privateMethodfT_T_ - private static func privateMethod() {} + fileprivate static func privateMethod() {} } } extension PublicStruct { // CHECK-LABEL: sil private @_TFV16mangling_private12PublicStructP33_A3CCBB841DB59E79A4AD4EE45865506816extPrivateMethodfT_T_ - private func extPrivateMethod() {} + fileprivate func extPrivateMethod() {} } extension PrivateStruct { // CHECK-LABEL: sil private @_TFV16mangling_privateP33_A3CCBB841DB59E79A4AD4EE45865506813PrivateStruct16extPrivateMethodfT_T_ - private func extPrivateMethod() {} + fileprivate func extPrivateMethod() {} } @@ -61,6 +61,6 @@ class Sub : Base { // CHECK-DAG: #Base.privateMethod!1: _TFC23mangling_private_helper4BaseP33_0E108371B0D5773E608A345AC52C767413privateMethodfT_T_ // CHECK-DAG: #Sub.subMethod!1: _TFC16mangling_private3SubP33_A3CCBB841DB59E79A4AD4EE4586550689subMethodfT_T_ - private func subMethod() {} + fileprivate func subMethod() {} } // CHECK: {{^[}]$}} diff --git a/test/SILGen/objc_extensions.swift b/test/SILGen/objc_extensions.swift index d743879681732..f121a0f6c22f5 100644 --- a/test/SILGen/objc_extensions.swift +++ b/test/SILGen/objc_extensions.swift @@ -60,7 +60,7 @@ extension SubSub { // SR-1025 extension Base { - private static var x = 1 + fileprivate static var x = 1 } // CHECK-LABEL: sil hidden @_TF15objc_extensions19testStaticVarAccessFT_T_ diff --git a/test/SILGen/protocol_resilience.swift b/test/SILGen/protocol_resilience.swift index 0470ee0cf935e..f59436ef6cfcc 100644 --- a/test/SILGen/protocol_resilience.swift +++ b/test/SILGen/protocol_resilience.swift @@ -53,7 +53,7 @@ extension ResilientMethods { public static func staticDefaultWitness(_ x: Int) -> Self {} // CHECK-LABEL: sil private @_TFE19protocol_resiliencePS_16ResilientMethodsP{{.*}}25defaultWitnessIsNotPublicfT_T_ - private func defaultWitnessIsNotPublic() {} + fileprivate func defaultWitnessIsNotPublic() {} } diff --git a/test/SILOptimizer/Inputs/devirt_access_other_module.swift b/test/SILOptimizer/Inputs/devirt_access_other_module.swift index dc72453b5b5d9..81b3b19f6caf1 100644 --- a/test/SILOptimizer/Inputs/devirt_access_other_module.swift +++ b/test/SILOptimizer/Inputs/devirt_access_other_module.swift @@ -1,5 +1,5 @@ public class ExternalClass { - private func foo() {} + fileprivate func foo() {} } public func getExternalClass() -> ExternalClass { @@ -13,6 +13,6 @@ public func getExternalClass() -> ExternalClass { obj.foo() } -private class PrivateSubclass : ExternalClass { - override private func foo() {} +fileprivate class PrivateSubclass : ExternalClass { + override fileprivate func foo() {} } diff --git a/test/SILOptimizer/basic-callee-printer.sil b/test/SILOptimizer/basic-callee-printer.sil index 42b618b9ff8aa..8aed4d2cd637e 100644 --- a/test/SILOptimizer/basic-callee-printer.sil +++ b/test/SILOptimizer/basic-callee-printer.sil @@ -119,11 +119,11 @@ bb0: } -private class private_base { +fileprivate class private_base { func foo() } -private class private_derived : private_base { +fileprivate class private_derived : private_base { override func foo() } diff --git a/test/SILOptimizer/cast_folding.swift b/test/SILOptimizer/cast_folding.swift index ef8b96b4d1459..c18c072b3a67e 100644 --- a/test/SILOptimizer/cast_folding.swift +++ b/test/SILOptimizer/cast_folding.swift @@ -16,11 +16,11 @@ class X {} class B:P {} -private struct S:P {} +fileprivate struct S:P {} struct T:Q {} -private struct U {} +fileprivate struct U {} public protocol CP1: class {} diff --git a/test/SILOptimizer/dead_func_init_method.sil b/test/SILOptimizer/dead_func_init_method.sil index 06e5829594a6f..4c9251a50b369 100644 --- a/test/SILOptimizer/dead_func_init_method.sil +++ b/test/SILOptimizer/dead_func_init_method.sil @@ -8,11 +8,11 @@ import Builtin import Swift import SwiftShims -private class Base { - private init() +fileprivate class Base { + fileprivate init() } -private class Derived : Base { +fileprivate class Derived : Base { } sil private @BaseInit : $@convention(method) (@owned Base) -> @owned Base { diff --git a/test/SILOptimizer/dead_inlined_func.swift b/test/SILOptimizer/dead_inlined_func.swift index 36d9fbcd37bd5..f756d7db12f54 100644 --- a/test/SILOptimizer/dead_inlined_func.swift +++ b/test/SILOptimizer/dead_inlined_func.swift @@ -10,7 +10,7 @@ // But: we want debug info for it. // CHECK-IR: !DISubprogram(name: "to_be_inlined" -private func to_be_inlined(_ x: Int) -> Int { +fileprivate func to_be_inlined(_ x: Int) -> Int { return x + 1 } diff --git a/test/SILOptimizer/dead_method.swift b/test/SILOptimizer/dead_method.swift index d169498cc5c03..eb237f2ec666b 100644 --- a/test/SILOptimizer/dead_method.swift +++ b/test/SILOptimizer/dead_method.swift @@ -1,6 +1,6 @@ // RUN: %target-swift-frontend -O -primary-file %s %S/Inputs/public_class.swift -parse-as-library -emit-sil | FileCheck %s -private class Derived : Base { +fileprivate class Derived : Base { override func visible() { } func is_dead() { diff --git a/test/SILOptimizer/devirt_access.sil b/test/SILOptimizer/devirt_access.sil index 2c9c8b0382e21..0b9fe72168c37 100644 --- a/test/SILOptimizer/devirt_access.sil +++ b/test/SILOptimizer/devirt_access.sil @@ -8,7 +8,7 @@ import SwiftShims class K { func ping() -> Int - private func pong() -> Int + fileprivate func pong() -> Int @objc deinit init() } @@ -40,7 +40,7 @@ sil_vtable K { class X { - private func ping() -> Int + fileprivate func ping() -> Int @objc deinit init() } @@ -53,7 +53,7 @@ class Y : X class A { - private func ping() -> Int + fileprivate func ping() -> Int @objc deinit init() } diff --git a/test/SILOptimizer/devirt_access.swift b/test/SILOptimizer/devirt_access.swift index 28a26fbbe0332..d623e6b520fa0 100644 --- a/test/SILOptimizer/devirt_access.swift +++ b/test/SILOptimizer/devirt_access.swift @@ -40,7 +40,7 @@ func testInternalPrivate() { class LocalInternalClass { - private func foo() {} + fileprivate func foo() {} func bar() {} } @@ -71,12 +71,12 @@ func testLocalPrivate() { } -private class PrivateClass { - private func foo() {} - private func bar() {} +fileprivate class PrivateClass { + fileprivate func foo() {} + fileprivate func bar() {} } -private class LocalPrivateSubclass : PrivateClass { +fileprivate class LocalPrivateSubclass : PrivateClass { override func foo() {} } diff --git a/test/SILOptimizer/devirt_access_other_module.swift b/test/SILOptimizer/devirt_access_other_module.swift index e1da65b725ad9..458a116079304 100644 --- a/test/SILOptimizer/devirt_access_other_module.swift +++ b/test/SILOptimizer/devirt_access_other_module.swift @@ -8,7 +8,7 @@ // rdar://21408247 public class ExternalClass { - private func foo() {} + fileprivate func foo() {} } public func getExternalClass() -> ExternalClass { @@ -31,10 +31,10 @@ public func getExternalClass() -> ExternalClass { obj.foo() } -private class PrivateSubclass : ExternalClass { - override private func foo() {} +fileprivate class PrivateSubclass : ExternalClass { + override fileprivate func foo() {} } internal class InternalSubclass : ExternalClass { - override private func foo() {} + override fileprivate func foo() {} } diff --git a/test/SILOptimizer/devirt_base_class.swift b/test/SILOptimizer/devirt_base_class.swift index 7ac4db033d34d..e387150044734 100644 --- a/test/SILOptimizer/devirt_base_class.swift +++ b/test/SILOptimizer/devirt_base_class.swift @@ -5,18 +5,18 @@ public class Base1 { @inline(never) func f() -> Int { return 0 } } public class Base2: Base1 { } -private class A: Base2 { } +fileprivate class A: Base2 { } -private class B : A { +fileprivate class B : A { @inline(never) override func f() -> Int { return 1 } } -private class C : A { +fileprivate class C : A { @inline(never) override func f() -> Int { return 2 } } @inline(never) -private func foo(_ a: A) -> Int { +fileprivate func foo(_ a: A) -> Int { // Check that a.f() call can be devirtualized, even @@ -41,7 +41,7 @@ private func foo(_ a: A) -> Int { print("foo(C()) = \(foo(C()))") -private class F1 { +fileprivate class F1 { init() { } @@ -53,7 +53,7 @@ private class F1 { } } -private class F2 : F1 { +fileprivate class F2 : F1 { init (v : Int) { super.init() addConstraint() diff --git a/test/SILOptimizer/devirt_concrete_subclass_of_generic_class.swift b/test/SILOptimizer/devirt_concrete_subclass_of_generic_class.swift index 1ea65c8ada4b6..30e04a07bbd82 100644 --- a/test/SILOptimizer/devirt_concrete_subclass_of_generic_class.swift +++ b/test/SILOptimizer/devirt_concrete_subclass_of_generic_class.swift @@ -60,7 +60,7 @@ print(test5(Derived())) // Check that we handle indirect devirtualization through an intermediate // method. rdar://problem/24993618 -private class IndirectMethodCall { +fileprivate class IndirectMethodCall { func bug() { overrideMe() } @@ -69,46 +69,46 @@ private class IndirectMethodCall { func overrideMe() { } } -private class IndirectChildConcrete: IndirectMethodCall { +fileprivate class IndirectChildConcrete: IndirectMethodCall { @inline(never) override func overrideMe() { } } -private class IndirectChildTuple: IndirectMethodCall<(U, U)> { +fileprivate class IndirectChildTuple: IndirectMethodCall<(U, U)> { @inline(never) override func overrideMe() { } } -private class IndirectChildTupleConcrete: IndirectChildTuple { +fileprivate class IndirectChildTupleConcrete: IndirectChildTuple { @inline(never) override func overrideMe() { } } -private class IndirectChildMeta: IndirectMethodCall { +fileprivate class IndirectChildMeta: IndirectMethodCall { @inline(never) override func overrideMe() { } } -private class IndirectChildMetaConcrete: IndirectChildMeta { +fileprivate class IndirectChildMetaConcrete: IndirectChildMeta { @inline(never) override func overrideMe() { } } -private class IndirectChildBoundGeneric: IndirectMethodCall> { +fileprivate class IndirectChildBoundGeneric: IndirectMethodCall> { @inline(never) override func overrideMe() { } } -private class IndirectChildBoundGenericConcrete: +fileprivate class IndirectChildBoundGenericConcrete: IndirectChildBoundGeneric { @inline(never) override func overrideMe() { } } -private class IndirectChildFunction: IndirectMethodCall<(U) -> U> { +fileprivate class IndirectChildFunction: IndirectMethodCall<(U) -> U> { @inline(never) override func overrideMe() { } } -private class IndirectChildFunctionConcrete: IndirectChildFunction { +fileprivate class IndirectChildFunctionConcrete: IndirectChildFunction { @inline(never) override func overrideMe() { } } diff --git a/test/SILOptimizer/devirt_default_case.swift b/test/SILOptimizer/devirt_default_case.swift index ce6bcfc309274..19980828c4819 100644 --- a/test/SILOptimizer/devirt_default_case.swift +++ b/test/SILOptimizer/devirt_default_case.swift @@ -25,14 +25,14 @@ public class Derived1 : Base1 { } // private class -private class Base2 { +fileprivate class Base2 { @inline(never) func inner() { action(3)} func middle() { inner() } func outer() { middle() } } // private class -private class Derived2 : Base2 { +fileprivate class Derived2 : Base2 { override func inner() { action(4) } @inline(never) final override func middle() { inner() } } diff --git a/test/SILOptimizer/devirt_unbound_generic.swift b/test/SILOptimizer/devirt_unbound_generic.swift index d4d4ae0b1a71e..55cf2c739c09c 100644 --- a/test/SILOptimizer/devirt_unbound_generic.swift +++ b/test/SILOptimizer/devirt_unbound_generic.swift @@ -79,7 +79,7 @@ public protocol ProtocolWithAssocType { associatedtype Element } -private class CP { +fileprivate class CP { var value: Base.Element init(_ v: Base.Element) { value = v @@ -90,16 +90,16 @@ private class CP { } } -private class Base1: ProtocolWithAssocType { +fileprivate class Base1: ProtocolWithAssocType { typealias Element = Int32 } -private class Base2: ProtocolWithAssocType { +fileprivate class Base2: ProtocolWithAssocType { typealias Element = Int32 } -private class CP2: CP> { +fileprivate class CP2: CP> { init() { super.init(1) } @@ -109,7 +109,7 @@ private class CP2: CP> { } } -private class CP3: CP> { +fileprivate class CP3: CP> { init() { super.init(1) } @@ -181,7 +181,7 @@ public func testDevirt(_ c: CC) -> T? { // CHECK-NOT: class_method // CHECK: } @inline(never) -private func test6(_ c: CP) -> T.Element { +fileprivate func test6(_ c: CP) -> T.Element { return c.value } @@ -195,7 +195,7 @@ public func doTest6() { // CHECK-NOT: class_method // CHECK: } @inline(never) -private func test7(_ c: CP) -> Int32 { +fileprivate func test7(_ c: CP) -> Int32 { return c.getCount() } diff --git a/test/SILOptimizer/function_order.sil b/test/SILOptimizer/function_order.sil index 18cd7dfdb4ac2..25994ddc7ce8a 100644 --- a/test/SILOptimizer/function_order.sil +++ b/test/SILOptimizer/function_order.sil @@ -112,19 +112,19 @@ bb0: return %0 : $() } -private class private_base { +fileprivate class private_base { func foo() } -private class private_derived : private_base { +fileprivate class private_derived : private_base { override func foo() } -@inline(never) private func call_private(b: private_base) +@inline(never) fileprivate func call_private(b: private_base) class internal_base { func foo() - private func bar() + fileprivate func bar() } class internal_derived : internal_base { @@ -137,7 +137,7 @@ class internal_derived : internal_base { public class public_base { func foo() public func bar() - private func baz() + fileprivate func baz() } public class public_derived : public_base { @@ -305,17 +305,17 @@ sil_vtable public_derived { #public_base.baz!1: public_derived_baz } -private protocol private_proto_1 { +fileprivate protocol private_proto_1 { func theMethod() } -private class private_proto_private_class : private_proto_1 { +fileprivate class private_proto_private_class : private_proto_1 { func theMethod() } -private func call_through_private_proto_1(x: T) +fileprivate func call_through_private_proto_1(x: T) -private protocol private_proto_2 { +fileprivate protocol private_proto_2 { func theMethod() } @@ -323,9 +323,9 @@ class private_proto_internal_class : private_proto_2 { func theMethod() } -private func call_through_private_proto_2(x: T) +fileprivate func call_through_private_proto_2(x: T) -private protocol private_proto_3 { +fileprivate protocol private_proto_3 { func theMethod() } @@ -333,17 +333,17 @@ public class private_proto_public_class : private_proto_3 { public func theMethod() } -private func call_through_private_proto_3(x: T) +fileprivate func call_through_private_proto_3(x: T) -private protocol private_proto_4 { +fileprivate protocol private_proto_4 { func theMethod() } public class private_proto_public_class_private_method : private_proto_4 { - private func theMethod() + fileprivate func theMethod() } -private func call_through_private_proto_4(x: T) +fileprivate func call_through_private_proto_4(x: T) sil private @private_proto_private_class_theMethod : $@convention(method) (@guaranteed private_proto_private_class) -> () { bb0(%0 : $private_proto_private_class): diff --git a/test/SILOptimizer/let_properties_opts.swift b/test/SILOptimizer/let_properties_opts.swift index 8181196aab7f9..f91473ff502f8 100644 --- a/test/SILOptimizer/let_properties_opts.swift +++ b/test/SILOptimizer/let_properties_opts.swift @@ -58,7 +58,7 @@ public class Foo { public let Prop0: Int32 = 1 let Prop1: Int32 = 1 + 4/2 + 8 - private let Prop2: Int32 = 3*7 + fileprivate let Prop2: Int32 = 3*7 internal let Prop3: Int32 = 4*8 public init(i:Int32) {} public init(i:Int64) {} @@ -66,7 +66,7 @@ public class Foo { public class Foo1 { let Prop1: Int32 - private let Prop2: Int32 = 3*7 + fileprivate let Prop2: Int32 = 3*7 internal let Prop3: Int32 = 4*8 public init(i:Int32) { Prop1 = 11 @@ -80,7 +80,7 @@ public class Foo1 { public struct Boo { public let Prop0: Int32 = 1 let Prop1: Int32 = 1 + 4/2 + 8 - private let Prop2: Int32 = 3*7 + fileprivate let Prop2: Int32 = 3*7 internal let Prop3: Int32 = 4*8 public init(i:Int32) {} public init(i:Int64) {} @@ -104,7 +104,7 @@ struct Boo3 { //public let Prop0: Int32 let Prop1: Int32 - private let Prop2: Int32 + fileprivate let Prop2: Int32 internal let Prop3: Int32 @inline(__always) @@ -154,7 +154,7 @@ public struct StructWithPublicAndInternalLetProperties { public struct StructWithPublicAndInternalAndPrivateLetProperties { public let Prop0: Int32 internal let Prop1: Int32 - private let Prop2: Int32 + fileprivate let Prop2: Int32 init(_ v: Int32, _ u: Int32) { Prop0 = 10 diff --git a/test/SILOptimizer/let_properties_opts_runtime.swift b/test/SILOptimizer/let_properties_opts_runtime.swift index bd3e8358a8ddb..74f6f3c759c69 100644 --- a/test/SILOptimizer/let_properties_opts_runtime.swift +++ b/test/SILOptimizer/let_properties_opts_runtime.swift @@ -56,7 +56,7 @@ struct Boo3 { //public let Prop0: Int32 let Prop1: Int32 - private let Prop2: Int32 + fileprivate let Prop2: Int32 internal let Prop3: Int32 @inline(__always) diff --git a/test/Sema/accessibility.swift b/test/Sema/accessibility.swift index 31ff3a5ab6656..b7079b84d3014 100644 --- a/test/Sema/accessibility.swift +++ b/test/Sema/accessibility.swift @@ -10,7 +10,7 @@ internal protocol InternalProto { } // expected-note@+1 * {{type declared here}} -private protocol PrivateProto { +fileprivate protocol PrivateProto { func privateReq() } @@ -32,12 +32,12 @@ internal struct InternalStruct: PublicProto, InternalProto, PrivateProto { } // expected-note@+1 * {{type declared here}} -private struct PrivateStruct: PublicProto, InternalProto, PrivateProto { +fileprivate struct PrivateStruct: PublicProto, InternalProto, PrivateProto { private func publicReq() {} private func internalReq() {} private func privateReq() {} - public var publicVar = 0 // expected-warning {{declaring a public var for a private struct}} {{3-9=private}} + public var publicVar = 0 // expected-warning {{declaring a public var for a fileprivate struct}} {{3-9=fileprivate}} } extension PublicStruct { @@ -49,7 +49,7 @@ extension InternalStruct { } extension PrivateStruct { - public init(x: Int) { self.init() } // expected-warning {{declaring a public initializer for a private struct}} {{3-9=private}} + public init(x: Int) { self.init() } // expected-warning {{declaring a public initializer for a fileprivate struct}} {{3-9=fileprivate}} } public extension PublicStruct { @@ -76,11 +76,11 @@ private extension InternalStruct { public func extMemberPrivate() {} // expected-warning {{declaring a public instance method in a private extension}} {{3-9=private}} private func extImplPrivate() {} } -public extension PrivateStruct { // expected-error {{extension of private struct cannot be declared public}} {{1-8=}} - public func extMemberPublic() {} // expected-warning {{declaring a public instance method for a private struct}} {{3-9=private}} +public extension PrivateStruct { // expected-error {{extension of fileprivate struct cannot be declared public}} {{1-8=}} + public func extMemberPublic() {} // expected-warning {{declaring a public instance method for a fileprivate struct}} {{3-9=fileprivate}} private func extImplPublic() {} } -internal extension PrivateStruct { // expected-error {{extension of private struct cannot be declared internal}} {{1-10=}} +internal extension PrivateStruct { // expected-error {{extension of fileprivate struct cannot be declared internal}} {{1-10=}} public func extMemberInternal() {} // expected-warning {{declaring a public instance method in an internal extension}} {{3-9=internal}} private func extImplInternal() {} } @@ -152,22 +152,22 @@ internal class InternalSubPrivateSet: Base { public typealias PublicTA1 = PublicStruct public typealias PublicTA2 = InternalStruct // expected-error {{type alias cannot be declared public because its underlying type uses an internal type}} -public typealias PublicTA3 = PrivateStruct // expected-error {{type alias cannot be declared public because its underlying type uses a private type}} +public typealias PublicTA3 = PrivateStruct // expected-error {{type alias cannot be declared public because its underlying type uses a fileprivate type}} // expected-note@+1 {{type declared here}} internal typealias InternalTA1 = PublicStruct internal typealias InternalTA2 = InternalStruct -internal typealias InternalTA3 = PrivateStruct // expected-error {{type alias cannot be declared internal because its underlying type uses a private type}} +internal typealias InternalTA3 = PrivateStruct // expected-error {{type alias cannot be declared internal because its underlying type uses a fileprivate type}} public typealias PublicFromInternal = InternalTA1 // expected-error {{type alias cannot be declared public because its underlying type uses an internal type}} -typealias FunctionType1 = (PrivateStruct) -> PublicStruct // expected-error {{type alias must be declared private because its underlying type uses a private type}} -typealias FunctionType2 = (PublicStruct) -> PrivateStruct // expected-error {{type alias must be declared private because its underlying type uses a private type}} -typealias FunctionType3 = (PrivateStruct) -> PrivateStruct // expected-error {{type alias must be declared private because its underlying type uses a private type}} +typealias FunctionType1 = (PrivateStruct) -> PublicStruct // expected-error {{type alias must be declared fileprivate because its underlying type uses a fileprivate type}} +typealias FunctionType2 = (PublicStruct) -> PrivateStruct // expected-error {{type alias must be declared fileprivate because its underlying type uses a fileprivate type}} +typealias FunctionType3 = (PrivateStruct) -> PrivateStruct // expected-error {{type alias must be declared fileprivate because its underlying type uses a fileprivate type}} -typealias ArrayType = [PrivateStruct] // expected-error {{type alias must be declared private because its underlying type uses a private type}} -typealias DictType = [String : PrivateStruct] // expected-error {{type alias must be declared private because its underlying type uses a private type}} -typealias GenericArgs = Optional // expected-error {{type alias must be declared private because its underlying type uses a private type}} +typealias ArrayType = [PrivateStruct] // expected-error {{type alias must be declared fileprivate because its underlying type uses a fileprivate type}} +typealias DictType = [String : PrivateStruct] // expected-error {{type alias must be declared fileprivate because its underlying type uses a fileprivate type}} +typealias GenericArgs = Optional // expected-error {{type alias must be declared fileprivate because its underlying type uses a fileprivate type}} public protocol HasAssocType { @@ -181,53 +181,53 @@ public struct AssocTypeImpl: HasAssocType { public let _: AssocTypeImpl.Inferred? -public let x: PrivateStruct = PrivateStruct() // expected-error {{constant cannot be declared public because its type uses a private type}} -public var a: PrivateStruct?, b: PrivateStruct? // expected-error 2 {{variable cannot be declared public because its type uses a private type}} -public var (c, d): (PrivateStruct?, PrivateStruct?) // expected-error {{variable cannot be declared public because its type uses a private type}} +public let x: PrivateStruct = PrivateStruct() // expected-error {{constant cannot be declared public because its type uses a fileprivate type}} +public var a: PrivateStruct?, b: PrivateStruct? // expected-error 2 {{variable cannot be declared public because its type uses a fileprivate type}} +public var (c, d): (PrivateStruct?, PrivateStruct?) // expected-error {{variable cannot be declared public because its type uses a fileprivate type}} -var internalVar: PrivateStruct? // expected-error {{variable must be declared private because its type uses a private type}} +var internalVar: PrivateStruct? // expected-error {{variable must be declared fileprivate because its type uses a fileprivate type}} -let internalConstant = PrivateStruct() // expected-error {{constant must be declared private because its type 'PrivateStruct' uses a private type}} +let internalConstant = PrivateStruct() // expected-error {{constant must be declared fileprivate because its type 'PrivateStruct' uses a fileprivate type}} public let publicConstant = [InternalStruct]() // expected-error {{constant cannot be declared public because its type '[InternalStruct]' uses an internal type}} public struct Properties { - public let x: PrivateStruct = PrivateStruct() // expected-error {{property cannot be declared public because its type uses a private type}} - public var a: PrivateStruct?, b: PrivateStruct? // expected-error 2 {{property cannot be declared public because its type uses a private type}} - public var (c, d): (PrivateStruct?, PrivateStruct?) // expected-error {{property cannot be declared public because its type uses a private type}} + public let x: PrivateStruct = PrivateStruct() // expected-error {{property cannot be declared public because its type uses a fileprivate type}} + public var a: PrivateStruct?, b: PrivateStruct? // expected-error 2 {{property cannot be declared public because its type uses a fileprivate type}} + public var (c, d): (PrivateStruct?, PrivateStruct?) // expected-error {{property cannot be declared public because its type uses a fileprivate type}} - let y = PrivateStruct() // expected-error {{property must be declared private because its type 'PrivateStruct' uses a private type}} + let y = PrivateStruct() // expected-error {{property must be declared fileprivate because its type 'PrivateStruct' uses a fileprivate type}} } public struct Subscripts { - subscript (a: PrivateStruct) -> Int { return 0 } // expected-error {{subscript must be declared private because its index uses a private type}} - subscript (a: Int) -> PrivateStruct { return PrivateStruct() } // expected-error {{subscript must be declared private because its element type uses a private type}} + subscript (a: PrivateStruct) -> Int { return 0 } // expected-error {{subscript must be declared fileprivate because its index uses a fileprivate type}} + subscript (a: Int) -> PrivateStruct { return PrivateStruct() } // expected-error {{subscript must be declared fileprivate because its element type uses a fileprivate type}} - public subscript (a: PrivateStruct, b: Int) -> Int { return 0 } // expected-error {{subscript cannot be declared public because its index uses a private type}} - public subscript (a: Int, b: PrivateStruct) -> Int { return 0 } // expected-error {{subscript cannot be declared public because its index uses a private type}} - public subscript (a: InternalStruct, b: PrivateStruct) -> InternalStruct { return InternalStruct() } // expected-error {{subscript cannot be declared public because its index uses a private type}} - public subscript (a: PrivateStruct, b: InternalStruct) -> PrivateStruct { return PrivateStruct() } // expected-error {{subscript cannot be declared public because its index uses a private type}} + public subscript (a: PrivateStruct, b: Int) -> Int { return 0 } // expected-error {{subscript cannot be declared public because its index uses a fileprivate type}} + public subscript (a: Int, b: PrivateStruct) -> Int { return 0 } // expected-error {{subscript cannot be declared public because its index uses a fileprivate type}} + public subscript (a: InternalStruct, b: PrivateStruct) -> InternalStruct { return InternalStruct() } // expected-error {{subscript cannot be declared public because its index uses a fileprivate type}} + public subscript (a: PrivateStruct, b: InternalStruct) -> PrivateStruct { return PrivateStruct() } // expected-error {{subscript cannot be declared public because its index uses a fileprivate type}} public subscript (a: Int, b: Int) -> InternalStruct { return InternalStruct() } // expected-error {{subscript cannot be declared public because its element type uses an internal type}} } public struct Methods { - func foo(a: PrivateStruct) -> Int { return 0 } // expected-error {{method must be declared private because its parameter uses a private type}} - func bar(a: Int) -> PrivateStruct { return PrivateStruct() } // expected-error {{method must be declared private because its result uses a private type}} + func foo(a: PrivateStruct) -> Int { return 0 } // expected-error {{method must be declared fileprivate because its parameter uses a fileprivate type}} + func bar(a: Int) -> PrivateStruct { return PrivateStruct() } // expected-error {{method must be declared fileprivate because its result uses a fileprivate type}} - public func a(a: PrivateStruct, b: Int) -> Int { return 0 } // expected-error {{method cannot be declared public because its parameter uses a private type}} - public func b(a: Int, b: PrivateStruct) -> Int { return 0 } // expected-error {{method cannot be declared public because its parameter uses a private type}} - public func c(a: InternalStruct, b: PrivateStruct) -> InternalStruct { return InternalStruct() } // expected-error {{method cannot be declared public because its parameter uses a private type}} - public func d(a: PrivateStruct, b: InternalStruct) -> PrivateStruct { return PrivateStruct() } // expected-error {{method cannot be declared public because its parameter uses a private type}} + public func a(a: PrivateStruct, b: Int) -> Int { return 0 } // expected-error {{method cannot be declared public because its parameter uses a fileprivate type}} + public func b(a: Int, b: PrivateStruct) -> Int { return 0 } // expected-error {{method cannot be declared public because its parameter uses a fileprivate type}} + public func c(a: InternalStruct, b: PrivateStruct) -> InternalStruct { return InternalStruct() } // expected-error {{method cannot be declared public because its parameter uses a fileprivate type}} + public func d(a: PrivateStruct, b: InternalStruct) -> PrivateStruct { return PrivateStruct() } // expected-error {{method cannot be declared public because its parameter uses a fileprivate type}} public func e(a: Int, b: Int) -> InternalStruct { return InternalStruct() } // expected-error {{method cannot be declared public because its result uses an internal type}} } -func privateParam(a: PrivateStruct) {} // expected-error {{function must be declared private because its parameter uses a private type}} +func privateParam(a: PrivateStruct) {} // expected-error {{function must be declared fileprivate because its parameter uses a fileprivate type}} public struct Initializers { - init(a: PrivateStruct) {} // expected-error {{initializer must be declared private because its parameter uses a private type}} + init(a: PrivateStruct) {} // expected-error {{initializer must be declared fileprivate because its parameter uses a fileprivate type}} - public init(a: PrivateStruct, b: Int) {} // expected-error {{initializer cannot be declared public because its parameter uses a private type}} - public init(a: Int, b: PrivateStruct) {} // expected-error {{initializer cannot be declared public because its parameter uses a private type}} - public init(a: InternalStruct, b: PrivateStruct) {} // expected-error {{initializer cannot be declared public because its parameter uses a private type}} - public init(a: PrivateStruct, b: InternalStruct) { } // expected-error {{initializer cannot be declared public because its parameter uses a private type}} + public init(a: PrivateStruct, b: Int) {} // expected-error {{initializer cannot be declared public because its parameter uses a fileprivate type}} + public init(a: Int, b: PrivateStruct) {} // expected-error {{initializer cannot be declared public because its parameter uses a fileprivate type}} + public init(a: InternalStruct, b: PrivateStruct) {} // expected-error {{initializer cannot be declared public because its parameter uses a fileprivate type}} + public init(a: PrivateStruct, b: InternalStruct) { } // expected-error {{initializer cannot be declared public because its parameter uses a fileprivate type}} } @@ -235,93 +235,93 @@ public class PublicClass {} // expected-note@+1 * {{type declared here}} internal class InternalClass {} // expected-note@+1 * {{type declared here}} -private class PrivateClass {} +fileprivate class PrivateClass {} public protocol AssocTypes { associatedtype Foo associatedtype Internal: InternalClass // expected-error {{associated type in a public protocol uses an internal type in its requirement}} associatedtype InternalConformer: InternalProto // expected-error {{associated type in a public protocol uses an internal type in its requirement}} - associatedtype PrivateConformer: PrivateProto // expected-error {{associated type in a public protocol uses a private type in its requirement}} - associatedtype PI: PrivateProto, InternalProto // expected-error {{associated type in a public protocol uses a private type in its requirement}} - associatedtype IP: InternalProto, PrivateProto // expected-error {{associated type in a public protocol uses a private type in its requirement}} + associatedtype PrivateConformer: PrivateProto // expected-error {{associated type in a public protocol uses a fileprivate type in its requirement}} + associatedtype PI: PrivateProto, InternalProto // expected-error {{associated type in a public protocol uses a fileprivate type in its requirement}} + associatedtype IP: InternalProto, PrivateProto // expected-error {{associated type in a public protocol uses a fileprivate type in its requirement}} - associatedtype PrivateDefault = PrivateStruct // expected-error {{associated type in a public protocol uses a private type in its default definition}} + associatedtype PrivateDefault = PrivateStruct // expected-error {{associated type in a public protocol uses a fileprivate type in its default definition}} associatedtype PublicDefault = PublicStruct - associatedtype PrivateDefaultConformer: PublicProto = PrivateStruct // expected-error {{associated type in a public protocol uses a private type in its default definition}} - associatedtype PublicDefaultConformer: PrivateProto = PublicStruct // expected-error {{associated type in a public protocol uses a private type in its requirement}} - associatedtype PrivatePrivateDefaultConformer: PrivateProto = PrivateStruct // expected-error {{associated type in a public protocol uses a private type in its requirement}} + associatedtype PrivateDefaultConformer: PublicProto = PrivateStruct // expected-error {{associated type in a public protocol uses a fileprivate type in its default definition}} + associatedtype PublicDefaultConformer: PrivateProto = PublicStruct // expected-error {{associated type in a public protocol uses a fileprivate type in its requirement}} + associatedtype PrivatePrivateDefaultConformer: PrivateProto = PrivateStruct // expected-error {{associated type in a public protocol uses a fileprivate type in its requirement}} associatedtype PublicPublicDefaultConformer: PublicProto = PublicStruct } public protocol RequirementTypes { - var x: PrivateStruct { get } // expected-error {{property cannot be declared public because its type uses a private type}} + var x: PrivateStruct { get } // expected-error {{property cannot be declared public because its type uses a fileprivate type}} subscript(x: Int) -> InternalStruct { get set } // expected-error {{subscript cannot be declared public because its element type uses an internal type}} - func foo() -> PrivateStruct // expected-error {{method cannot be declared public because its result uses a private type}} - init(x: PrivateStruct) // expected-error {{initializer cannot be declared public because its parameter uses a private type}} + func foo() -> PrivateStruct // expected-error {{method cannot be declared public because its result uses a fileprivate type}} + init(x: PrivateStruct) // expected-error {{initializer cannot be declared public because its parameter uses a fileprivate type}} } -protocol DefaultRefinesPrivate : PrivateProto {} // expected-error {{protocol must be declared private because it refines a private protocol}} -public protocol PublicRefinesPrivate : PrivateProto {} // expected-error {{public protocol cannot refine a private protocol}} +protocol DefaultRefinesPrivate : PrivateProto {} // expected-error {{protocol must be declared fileprivate because it refines a fileprivate protocol}} +public protocol PublicRefinesPrivate : PrivateProto {} // expected-error {{public protocol cannot refine a fileprivate protocol}} public protocol PublicRefinesInternal : InternalProto {} // expected-error {{public protocol cannot refine an internal protocol}} -public protocol PublicRefinesPI : PrivateProto, InternalProto {} // expected-error {{public protocol cannot refine a private protocol}} -public protocol PublicRefinesIP : InternalProto, PrivateProto {} // expected-error {{public protocol cannot refine a private protocol}} +public protocol PublicRefinesPI : PrivateProto, InternalProto {} // expected-error {{public protocol cannot refine a fileprivate protocol}} +public protocol PublicRefinesIP : InternalProto, PrivateProto {} // expected-error {{public protocol cannot refine a fileprivate protocol}} // expected-note@+1 * {{type declared here}} -private typealias PrivateInt = Int -enum DefaultRawPrivate : PrivateInt { // expected-error {{enum must be declared private because its raw type uses a private type}} +fileprivate typealias PrivateInt = Int +enum DefaultRawPrivate : PrivateInt { // expected-error {{enum must be declared fileprivate because its raw type uses a fileprivate type}} case A } -public enum PublicRawPrivate : PrivateInt { // expected-error {{enum cannot be declared public because its raw type uses a private type}} +public enum PublicRawPrivate : PrivateInt { // expected-error {{enum cannot be declared public because its raw type uses a fileprivate type}} case A } -public enum MultipleConformance : PrivateProto, PrivateInt { // expected-error {{enum cannot be declared public because its raw type uses a private type}} expected-error {{must appear first}} {{35-35=PrivateInt, }} {{47-59=}} +public enum MultipleConformance : PrivateProto, PrivateInt { // expected-error {{enum cannot be declared public because its raw type uses a fileprivate type}} expected-error {{must appear first}} {{35-35=PrivateInt, }} {{47-59=}} case A func privateReq() {} } public class PublicSubclassPublic : PublicClass {} public class PublicSubclassInternal : InternalClass {} // expected-error {{class cannot be declared public because its superclass is internal}} -public class PublicSubclassPrivate : PrivateClass {} // expected-error {{class cannot be declared public because its superclass is private}} +public class PublicSubclassPrivate : PrivateClass {} // expected-error {{class cannot be declared public because its superclass is fileprivate}} class DefaultSubclassPublic : PublicClass {} class DefaultSubclassInternal : InternalClass {} -class DefaultSubclassPrivate : PrivateClass {} // expected-error {{class must be declared private because its superclass is private}} +class DefaultSubclassPrivate : PrivateClass {} // expected-error {{class must be declared fileprivate because its superclass is fileprivate}} public enum PublicEnumPrivate { - case A(PrivateStruct) // expected-error {{enum case in a public enum uses a private type}} + case A(PrivateStruct) // expected-error {{enum case in a public enum uses a fileprivate type}} } enum DefaultEnumPrivate { - case A(PrivateStruct) // expected-error {{enum case in an internal enum uses a private type}} + case A(PrivateStruct) // expected-error {{enum case in an internal enum uses a fileprivate type}} } public enum PublicEnumPI { case A(InternalStruct) // expected-error {{enum case in a public enum uses an internal type}} - case B(PrivateStruct, InternalStruct) // expected-error {{enum case in a public enum uses a private type}} - case C(InternalStruct, PrivateStruct) // expected-error {{enum case in a public enum uses a private type}} + case B(PrivateStruct, InternalStruct) // expected-error {{enum case in a public enum uses a fileprivate type}} + case C(InternalStruct, PrivateStruct) // expected-error {{enum case in a public enum uses a fileprivate type}} } enum DefaultEnumPublic { case A(PublicStruct) // no-warning } struct DefaultGeneric {} -struct DefaultGenericPrivate {} // expected-error {{generic struct must be declared private because its generic parameter uses a private type}} -struct DefaultGenericPrivate2 {} // expected-error {{generic struct must be declared private because its generic parameter uses a private type}} +struct DefaultGenericPrivate {} // expected-error {{generic struct must be declared fileprivate because its generic parameter uses a fileprivate type}} +struct DefaultGenericPrivate2 {} // expected-error {{generic struct must be declared fileprivate because its generic parameter uses a fileprivate type}} struct DefaultGenericPrivateReq {} // expected-error {{same-type requirement makes generic parameter 'T' non-generic}} -// expected-error@-1 {{generic struct must be declared private because its generic requirement uses a private type}} -struct DefaultGenericPrivateReq2 {} // expected-error {{generic struct must be declared private because its generic requirement uses a private type}} +// expected-error@-1 {{generic struct must be declared fileprivate because its generic requirement uses a fileprivate type}} +struct DefaultGenericPrivateReq2 {} // expected-error {{generic struct must be declared fileprivate because its generic requirement uses a fileprivate type}} public struct PublicGenericInternal {} // expected-error {{generic struct cannot be declared public because its generic parameter uses an internal type}} -public struct PublicGenericPI {} // expected-error {{generic struct cannot be declared public because its generic parameter uses a private type}} -public struct PublicGenericIP {} // expected-error {{generic struct cannot be declared public because its generic parameter uses a private type}} -public struct PublicGenericPIReq {} // expected-error {{generic struct cannot be declared public because its generic parameter uses a private type}} -public struct PublicGenericIPReq {} // expected-error {{generic struct cannot be declared public because its generic requirement uses a private type}} +public struct PublicGenericPI {} // expected-error {{generic struct cannot be declared public because its generic parameter uses a fileprivate type}} +public struct PublicGenericIP {} // expected-error {{generic struct cannot be declared public because its generic parameter uses a fileprivate type}} +public struct PublicGenericPIReq {} // expected-error {{generic struct cannot be declared public because its generic parameter uses a fileprivate type}} +public struct PublicGenericIPReq {} // expected-error {{generic struct cannot be declared public because its generic requirement uses a fileprivate type}} public func genericFunc(_: T) {} // expected-error {{function cannot be declared public because its generic parameter uses an internal type}} {} public class GenericClass { // expected-error {{generic class cannot be declared public because its generic parameter uses an internal type}} - public init(_: T) {} // expected-error {{initializer cannot be declared public because its generic parameter uses a private type}} - public func genericMethod(_: T) {} // expected-error {{instance method cannot be declared public because its generic parameter uses a private type}} + public init(_: T) {} // expected-error {{initializer cannot be declared public because its generic parameter uses a fileprivate type}} + public func genericMethod(_: T) {} // expected-error {{instance method cannot be declared public because its generic parameter uses a fileprivate type}} } public enum GenericEnum { // expected-error {{generic enum cannot be declared public because its generic parameter uses an internal type}} case A diff --git a/test/SourceKit/CodeComplete/complete_override.swift.response b/test/SourceKit/CodeComplete/complete_override.swift.response index adb4334cc7685..c1499fe8c7cd8 100644 --- a/test/SourceKit/CodeComplete/complete_override.swift.response +++ b/test/SourceKit/CodeComplete/complete_override.swift.response @@ -74,6 +74,15 @@ key.associated_usrs: "s:FC17complete_override4Base1fFT5getMeSi1bSd_T_", key.modulename: "complete_override" }, + { + key.kind: source.lang.swift.keyword, + key.name: "fileprivate", + key.sourcetext: "fileprivate", + key.description: "fileprivate", + key.typename: "", + key.context: source.codecompletion.context.none, + key.num_bytes_to_erase: 0 + }, { key.kind: source.lang.swift.keyword, key.name: "final", diff --git a/test/SourceKit/DocumentStructure/structure.swift.invalid.response b/test/SourceKit/DocumentStructure/structure.swift.invalid.response index 7ff16daf3d7b1..1ed0459116ed8 100644 --- a/test/SourceKit/DocumentStructure/structure.swift.invalid.response +++ b/test/SourceKit/DocumentStructure/structure.swift.invalid.response @@ -37,7 +37,7 @@ key.substructure: [ { key.kind: source.lang.swift.decl.class, - key.accessibility: source.lang.swift.accessibility.private, + key.accessibility: source.lang.swift.accessibility.fileprivate, key.name: "MyCoolClass", key.offset: 47, key.length: 22, diff --git a/test/attr/accessibility.swift b/test/attr/accessibility.swift index 0f85057af84b1..db3ca2cf25845 100644 --- a/test/attr/accessibility.swift +++ b/test/attr/accessibility.swift @@ -221,3 +221,4 @@ extension ProtoWithReqs where Self : ReqProvider2 { public struct AdoptViaCombinedProtocol : ProtoWithReqs, ReqProvider2 { public typealias Assoc = Int } + diff --git a/test/attr/accessibility_print.swift b/test/attr/accessibility_print.swift index 1d7b3ad21c7b3..462558c172414 100644 --- a/test/attr/accessibility_print.swift +++ b/test/attr/accessibility_print.swift @@ -246,7 +246,7 @@ public protocol HA_PublicProtocol { internal protocol HB_InternalProtocol { associatedtype Assoc } -private protocol HC_PrivateProtocol { +fileprivate protocol HC_PrivateProtocol { associatedtype Assoc } public struct HA_PublicStruct {} diff --git a/test/attr/attr_objc.swift b/test/attr/attr_objc.swift index 69ec4bf851f6f..615f53180a4a2 100644 --- a/test/attr/attr_objc.swift +++ b/test/attr/attr_objc.swift @@ -1851,10 +1851,10 @@ typealias BadBlock = @convention(block) (NotObjCEnum) -> () // expected-error{{' @objc class AccessControl { // CHECK: @objc func foo func foo() {} - // CHECK: {{^}} private func bar - private func bar() {} - // CHECK: @objc private func baz - @objc private func baz() {} + // CHECK: {{^}} fileprivate func bar + fileprivate func bar() {} + // CHECK: @objc fileprivate func baz + @objc fileprivate func baz() {} } //===--- Ban @objc +load methods @@ -2033,11 +2033,11 @@ class ConformsToProtocolThrowsObjCName1 : ProtocolThrowsObjCName { } class ConformsToProtocolThrowsObjCName2 : ProtocolThrowsObjCName { - @objc func doThing(_ x: Int) throws -> String { return "" } - // expected-warning@-1{{instance method 'doThing' nearly matches optional requirement 'doThing' of protocol 'ProtocolThrowsObjCName'}} - // expected-note@-2{{move 'doThing' to an extension to silence this warning}} - // expected-note@-3{{make 'doThing' private to silence this warning}}{{9-9=private }} - // expected-note@-4{{candidate has non-matching type '(Int) throws -> String'}} + @objc func doThing(_ x: Int) throws -> String { return "" } +// expected-warning@-1{{instance method 'doThing' nearly matches optional requirement 'doThing' of protocol 'ProtocolThrowsObjCName'}} +// expected-note@-2 {{candidate has non-matching type '(Int) throws -> String'}} +// expected-note@-3 {{move 'doThing' to an extension to silence this warning}} +// expected-note@-4 {{make 'doThing' fileprivate to silence this warning}} } @objc class DictionaryTest { diff --git a/test/decl/protocol/conforms/near_miss_objc.swift b/test/decl/protocol/conforms/near_miss_objc.swift index f72c87f965538..74927ced70929 100644 --- a/test/decl/protocol/conforms/near_miss_objc.swift +++ b/test/decl/protocol/conforms/near_miss_objc.swift @@ -12,7 +12,7 @@ class C1a : P1 { // expected-warning@-1{{instance method 'doSomething(a:c:)' nearly matches optional requirement 'doSomething(a:b:)' of protocol 'P1'}} // expected-note@-2{{rename to 'doSomething(a:b:)' to satisfy this requirement}}{{34-34=b }}{{none}} // expected-note@-3{{move 'doSomething(a:c:)' to an extension to silence this warning}} - // expected-note@-4{{make 'doSomething(a:c:)' private to silence this warning}}{{9-9=private }} + // expected-note@-4{{make 'doSomething(a:c:)' fileprivate to silence this warning}}{{9-9=fileprivate }} } class C1b : P1 { @@ -30,11 +30,11 @@ extension C1c : P1 { // expected-warning@-1{{instance method 'doSomething(a:c:)' nearly matches optional requirement 'doSomething(a:b:)' of protocol 'P1'}} // expected-note@-2{{rename to 'doSomething(a:b:)' to satisfy this requirement}}{{28-28=b }}{{none}} // expected-note@-3{{move 'doSomething(a:c:)' to another extension to silence this warning}} - // expected-note@-4{{make 'doSomething(a:c:)' private to silence this warning}}{{3-3=private }} + // expected-note@-4{{make 'doSomething(a:c:)' fileprivate to silence this warning}}{{3-3=fileprivate }} } class C1d : P1 { - @objc private func doSomething(a: Int, c: Double) { } // don't warn + @objc fileprivate func doSomething(a: Int, c: Double) { } // don't warn } class C1e : P1 { @@ -62,7 +62,7 @@ class C3a : P3 { // expected-warning@-1{{instance method 'doSomething(priority:d:)' nearly matches optional requirement 'doSomethingWithPriority(_:d:)' of protocol 'P3'}} // expected-note@-2{{rename to 'doSomethingWithPriority(_:d:)' to satisfy this requirement}}{{20-20=_ }} // expected-note@-3{{move 'doSomething(priority:d:)' to an extension to silence this warning}} - // expected-note@-4{{make 'doSomething(priority:d:)' private to silence this warning}}{{3-3=private }} + // expected-note@-4{{make 'doSomething(priority:d:)' fileprivate to silence this warning}}{{3-3=fileprivate }} } @objc protocol P4 { @@ -74,7 +74,7 @@ class C4a : P4 { // expected-warning@-1{{instance method 'doSomethingWithPriority(_:d:)' nearly matches optional requirement 'doSomething(priority:d:)' of protocol 'P4'}} // expected-note@-2{{rename to 'doSomething(priority:d:)' to satisfy this requirement}}{{32-33=priority}} // expected-note@-3{{move 'doSomethingWithPriority(_:d:)' to an extension to silence this warning}} - // expected-note@-4{{make 'doSomethingWithPriority(_:d:)' private to silence this warning}}{{3-3=private }} + // expected-note@-4{{make 'doSomethingWithPriority(_:d:)' fileprivate to silence this warning}}{{3-3=fileprivate }} } @objc class SomeClass { } @@ -89,7 +89,7 @@ class C5a : P5 { // expected-warning@-1{{instance method 'method(_:for:dividing:)' nearly matches optional requirement 'methodWithInt(_:forSomeClass:dividingDouble:)' of protocol 'P5'}} // expected-note@-2{{rename to 'methodWithInt(_:forSomeClass:dividingDouble:)' to satisfy this requirement}}{{8-14=methodWithInt}}{{23-26=forSomeClass}}{{49-57=dividingDouble}}{{none}} // expected-note@-3{{move 'method(_:for:dividing:)' to an extension to silence this warning}} - // expected-note@-4{{make 'method(_:for:dividing:)' private to silence this warning}}{{3-3=private }} + // expected-note@-4{{make 'method(_:for:dividing:)' fileprivate to silence this warning}}{{3-3=fileprivate }} } @objc protocol P6 { @@ -102,7 +102,7 @@ class C6a : P6 { // expected-warning@-1{{instance method 'methodWithInt(_:forSomeClass:dividingDouble:)' nearly matches optional requirement 'method(_:for:dividing:)' of protocol 'P6'}} // expected-note@-2{{rename to 'method(_:for:dividing:)' to satisfy this requirement}}{{8-21=method}}{{30-30=for }}{{55-55=dividing }}{{none}} // expected-note@-3{{move 'methodWithInt(_:forSomeClass:dividingDouble:)' to an extension to silence this warning}} - // expected-note@-4{{make 'methodWithInt(_:forSomeClass:dividingDouble:)' private to silence this warning}}{{3-3=private }} + // expected-note@-4{{make 'methodWithInt(_:forSomeClass:dividingDouble:)' fileprivate to silence this warning}}{{3-3=fileprivate }} } // Use the first note to always describe why it didn't match. @@ -116,6 +116,6 @@ class C7a : P7 { // expected-warning@-1{{instance method 'method(foo:)' nearly matches optional requirement 'method(foo:)' of protocol 'P7'}} // expected-note@-2{{candidate has non-matching type '(foo: Double) -> ()'}} // expected-note@-3{{move 'method(foo:)' to an extension to silence this warning}} - // expected-note@-4{{make 'method(foo:)' private to silence this warning}} + // expected-note@-4{{make 'method(foo:)' fileprivate to silence this warning}} } diff --git a/test/expr/capture/top-level-guard.swift b/test/expr/capture/top-level-guard.swift index 352230344a9ed..e68bbc04930d9 100644 --- a/test/expr/capture/top-level-guard.swift +++ b/test/expr/capture/top-level-guard.swift @@ -39,7 +39,7 @@ let closureCapture: () -> Void = { [x] in } // CHECK-LABEL: (defer_stmt -// CHECK-NEXT: (func_decl implicit "$defer()" type='() -> ()' access=private captures=(x) +// CHECK-NEXT: (func_decl implicit "$defer()" type='() -> ()' access=fileprivate captures=(x) defer { _ = x } diff --git a/tools/SourceKit/lib/SwiftLang/SwiftEditor.cpp b/tools/SourceKit/lib/SwiftLang/SwiftEditor.cpp index 9f88051a5d149..17397369ed777 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftEditor.cpp +++ b/tools/SourceKit/lib/SwiftLang/SwiftEditor.cpp @@ -958,11 +958,14 @@ namespace { static UIdent getAccessibilityUID(Accessibility Access) { static UIdent AccessPublic("source.lang.swift.accessibility.public"); static UIdent AccessInternal("source.lang.swift.accessibility.internal"); + static UIdent AccessFilePrivate("source.lang.swift.accessibility.fileprivate"); static UIdent AccessPrivate("source.lang.swift.accessibility.private"); switch (Access) { case Accessibility::Private: return AccessPrivate; + case Accessibility::FilePrivate: + return AccessFilePrivate; case Accessibility::Internal: return AccessInternal; case Accessibility::Public: @@ -1001,7 +1004,7 @@ static Accessibility inferAccessibility(const ValueDecl *D) { case DeclContextKind::TopLevelCodeDecl: case DeclContextKind::AbstractFunctionDecl: case DeclContextKind::SubscriptDecl: - return Accessibility::Private; + return Accessibility::FilePrivate; case DeclContextKind::Module: case DeclContextKind::FileUnit: return Accessibility::Internal;