Skip to content

Commit d3ff97d

Browse files
authored
inspects class to determine if its a class, actor, or distributed actor for symbol graph generation (#74155)
rdar://84751310
1 parent fb0f4dc commit d3ff97d

File tree

4 files changed

+56
-7
lines changed

4 files changed

+56
-7
lines changed

lib/SymbolGraphGen/DeclarationFragmentPrinter.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,17 @@ void DeclarationFragmentPrinter::printAbridgedType(const GenericTypeDecl *TD,
190190
case DeclKind::Protocol:
191191
printText(getTokenText(tok::kw_protocol));
192192
break;
193-
case DeclKind::Class:
194-
printText(getTokenText(tok::kw_class));
195-
break;
193+
case DeclKind::Class: {
194+
auto *refDecl = cast<ClassDecl>(TD);
195+
if (refDecl->isExplicitDistributedActor()) {
196+
printText("distributed actor");
197+
} else if (refDecl->isExplicitActor()) {
198+
printText("actor");
199+
} else {
200+
printText(getTokenText(tok::kw_class));
201+
}
202+
break;
203+
}
196204
case DeclKind::TypeAlias:
197205
printText(getTokenText(tok::kw_typealias));
198206
break;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift %s -module-name Actor -emit-module -emit-module-path %t/
3+
// RUN: %target-swift-symbolgraph-extract -module-name Actor -I %t -pretty-print -output-dir %t
4+
// RUN: %FileCheck %s --input-file %t/Actor.symbols.json
5+
6+
// CHECK: "identifier": "swift.class"
7+
// CHECK-NEXT: "displayName": "Class"
8+
// CHECK: pathComponents
9+
// CHECK-NEXT: "Q"
10+
// CHECK: "kind": "keyword"
11+
// CHECK-NEXT: "spelling": "actor"
12+
@available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *)
13+
public actor Q {}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift %s -module-name DistributedActor -emit-module -emit-module-path %t/
3+
// RUN: %target-swift-symbolgraph-extract %windows_vfs_overlay_opt -module-name DistributedActor -I %t -pretty-print -output-dir %t
4+
// RUN: %FileCheck %s --input-file %t/DistributedActor.symbols.json
5+
6+
// REQUIRES: concurrency
7+
// REQUIRES: distributed
8+
import Distributed
9+
10+
@available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
11+
public distributed actor DA {
12+
public typealias ActorSystem = LocalTestingDistributedActorSystem
13+
}
14+
15+
// CHECK: "identifier": "swift.class"
16+
// CHECK-NEXT: "displayName": "Class"
17+
// CHECK: pathComponents
18+
// CHECK-NEXT: "DA"
19+
// CHECK: "kind": "keyword"
20+
// CHECK-NEXT: "spelling": "distributed actor"
21+

test/lit.cfg

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,15 +378,22 @@ else:
378378
test_resource_dir = make_path(config.swift_lib_dir, 'swift')
379379
config.swift_system_overlay_opt = ""
380380
config.clang_system_overlay_opt = ""
381+
config.windows_vfs_overlay_opt = ""
381382
if kIsWindows:
382383
# ucrt.modulemap currently requires -fbuiltin-headers-in-system-modules. -strict-implicit-module-context
383384
# is necessary for -Xcc arguments to be passed through ModuleInterfaceLoader.
384385
config.swift_system_overlay_opt = "-vfsoverlay {} -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
385386
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
386387
)
388+
# this variant is for extract-symbolgraph which doesn't accept all the same arugments as swiftc
389+
# so the extra ceremony lets us pass in the relevant pieces needed for Windows SDK access.
390+
config.windows_vfs_overlay_opt = "-Xcc -vfsoverlay -Xcc {} -Xcc -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
391+
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
392+
)
387393
config.clang_system_overlay_opt = "-Xcc -ivfsoverlay -Xcc {} -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
388394
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
389395
)
396+
config.substitutions.append( ('%windows_vfs_overlay_opt', config.windows_vfs_overlay_opt) )
390397
stdlib_resource_dir_opt = config.resource_dir_opt
391398
sourcekitd_framework_dir = config.swift_lib_dir
392399
config.substitutions.append( ('%test-resource-dir', test_resource_dir) )
@@ -1341,7 +1348,7 @@ if run_vendor == 'apple':
13411348
"-Xlinker -rpath -Xlinker %r " +
13421349
"-Xlinker -rpath -Xlinker /usr/lib/swift " +
13431350
# This ensures LC_LOAD_DYLIB rewrite will succeed in %target-codesign (rdar://7885126):
1344-
"-Xlinker -headerpad_max_install_names " +
1351+
"-Xlinker -headerpad_max_install_names " +
13451352
"%s %s %s %s") %
13461353
(xcrun_prefix, config.swiftc, target_options,
13471354
extra_frameworks_dir,
@@ -1389,7 +1396,7 @@ if run_vendor == 'apple':
13891396
("%s %s %s -F %r -toolchain-stdlib-rpath %s " +
13901397
"-Xlinker -rpath -Xlinker /usr/lib/swift " +
13911398
# This ensures LC_LOAD_DYLIB rewrite will succeed in %target-codesign (rdar://7885126):
1392-
"-Xlinker -headerpad_max_install_names " +
1399+
"-Xlinker -headerpad_max_install_names " +
13931400
" %s %s %s") %
13941401
(xcrun_prefix, config.swiftc, target_options,
13951402
extra_frameworks_dir,
@@ -1538,7 +1545,7 @@ if run_vendor == 'apple':
15381545
config.target_swiftc_driver = (
15391546
("%s %s -toolchain-stdlib-rpath %s " +
15401547
# This ensures LC_LOAD_DYLIB rewrite will succeed in %target-codesign (rdar://7885126):
1541-
"-Xlinker -headerpad_max_install_names " +
1548+
"-Xlinker -headerpad_max_install_names " +
15421549
"-Xlinker -rpath -Xlinker /usr/lib/swift %s %s ")%
15431550
(xcrun_prefix, config.swiftc, target_options, config.swift_driver_test_options, swiftc_platform_remap_config))
15441551
config.target_stdlib_swiftc_driver = config.target_swiftc_driver
@@ -2226,7 +2233,7 @@ def configure_remote_run():
22262233
"--input-prefix '{0}' ".format(config.swift_src_root) +
22272234
"--output-prefix %t " +
22282235
"--remote-dir '{0}'%t ".format(remote_tmp_dir) +
2229-
"{0} ".format(' '.join(remote_run_extra_args)) +
2236+
"{0} ".format(' '.join(remote_run_extra_args)) +
22302237
"{0}".format(remote_run_host))
22312238
config.target_swift_reflection_test = os.path.join(
22322239
remote_tmp_dir, 'bin', swift_reflection_test_name)

0 commit comments

Comments
 (0)