Skip to content

Commit 34369c8

Browse files
committed
Sema: During MemberImportVisibility migration, only warn about missing imports.
1 parent 61f5274 commit 34369c8

File tree

3 files changed

+41
-8
lines changed

3 files changed

+41
-8
lines changed

lib/Sema/TypeCheckNameLookup.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -905,21 +905,31 @@ class MissingImportFixItCache {
905905
}
906906
};
907907

908-
static void
908+
static bool
909909
diagnoseMissingImportsForMember(const ValueDecl *decl,
910910
SmallVectorImpl<ModuleDecl *> &modulesToImport,
911911
SourceFile *sf, SourceLoc loc) {
912912
auto &ctx = sf->getASTContext();
913913
auto count = modulesToImport.size();
914914
ASSERT(count > 0);
915915

916+
bool isMigrating =
917+
ctx.LangOpts.getFeatureState(Feature::MemberImportVisibility)
918+
.isEnabledForMigration();
919+
916920
if (count > 1) {
917-
ctx.Diags.diagnose(loc, diag::member_from_missing_imports_2_or_more, decl,
918-
bool(count > 2), modulesToImport[0], modulesToImport[1]);
921+
ctx.Diags
922+
.diagnose(loc, diag::member_from_missing_imports_2_or_more, decl,
923+
bool(count > 2), modulesToImport[0], modulesToImport[1])
924+
.limitBehaviorIf(isMigrating, DiagnosticBehavior::Warning);
919925
} else {
920-
ctx.Diags.diagnose(loc, diag::member_from_missing_import, decl,
921-
modulesToImport.front());
926+
ctx.Diags
927+
.diagnose(loc, diag::member_from_missing_import, decl,
928+
modulesToImport.front())
929+
.limitBehaviorIf(isMigrating, DiagnosticBehavior::Warning);
922930
}
931+
932+
return !isMigrating;
923933
}
924934

925935
static void emitMissingImportFixIt(SourceLoc loc,
@@ -1023,8 +1033,7 @@ bool swift::maybeDiagnoseMissingImportForMember(const ValueDecl *decl,
10231033
if (modulesToImport.empty())
10241034
return false;
10251035

1026-
diagnoseMissingImportsForMember(decl, modulesToImport, sf, loc);
1027-
return true;
1036+
return diagnoseMissingImportsForMember(decl, modulesToImport, sf, loc);
10281037
}
10291038

10301039
sf->addDelayedMissingImportForMemberDiagnostic(decl, loc);

test/NameLookup/member_import_visibility.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 5 -package-name TestPackage -verify-additional-prefix ambiguity-
66
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 6 -package-name TestPackage -verify-additional-prefix ambiguity-
77
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 5 -package-name TestPackage -enable-upcoming-feature MemberImportVisibility -verify-additional-prefix member-visibility-
8-
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 5 -package-name TestPackage -enable-upcoming-feature MemberImportVisibility:migrate -verify-additional-prefix member-visibility-
98

109
// REQUIRES: swift_feature_MemberImportVisibility
1110

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend -emit-module -o %t %S/Inputs/MemberImportVisibility/members_A.swift
3+
// RUN: %target-swift-frontend -emit-module -I %t -o %t -package-name TestPackage %S/Inputs/MemberImportVisibility/members_B.swift
4+
// RUN: %target-swift-frontend -emit-module -I %t -o %t %S/Inputs/MemberImportVisibility/members_C.swift
5+
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -swift-version 5 -enable-upcoming-feature MemberImportVisibility:migrate
6+
7+
// REQUIRES: swift_feature_MemberImportVisibility
8+
9+
import members_C
10+
// expected-note 3 {{add import of module 'members_B'}}{{1-1=internal import members_B\n}}
11+
12+
13+
func testMigration(x: X, y: Y<Z>) {
14+
x.XinA()
15+
y.YinA()
16+
17+
x.XinB() // expected-warning {{instance method 'XinB()' is not available due to missing import of defining module 'members_B'}}
18+
y.YinB() // expected-warning{{instance method 'YinB()' is not available due to missing import of defining module 'members_B'}}
19+
20+
x.XinC()
21+
y.YinC()
22+
23+
_ = X(true)
24+
_ = X(1) // expected-warning {{initializer 'init(_:)' is not available due to missing import of defining module 'members_B'}}
25+
}

0 commit comments

Comments
 (0)