Skip to content

Commit 1240494

Browse files
committed
[Dependency Scanning] Add a field of source-imported dependencies
For the main source module, provide info on which dependencies are directly imported into the user program, explicitly ('import' statement) or implicitly (e.g. stdlib). Thist list does not include Swift overlay dependencies, cross-import dependencies, bridging header dependencies.
1 parent 454e5ea commit 1240494

File tree

6 files changed

+30
-0
lines changed

6 files changed

+30
-0
lines changed

include/swift-c/DependencyScan/DependencyScan.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,10 @@ SWIFTSCAN_PUBLIC swiftscan_string_set_t *
212212
swiftscan_swift_textual_detail_get_swift_overlay_dependencies(
213213
swiftscan_module_details_t details);
214214

215+
SWIFTSCAN_PUBLIC swiftscan_string_set_t *
216+
swiftscan_swift_textual_detail_get_swift_source_import_module_dependencies(
217+
swiftscan_module_details_t details);
218+
215219
SWIFTSCAN_PUBLIC swiftscan_string_ref_t
216220
swiftscan_swift_textual_detail_get_cas_fs_root_id(
217221
swiftscan_module_details_t details);

include/swift/DependencyScan/DependencyScanImpl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ typedef struct {
102102
/// Clang module dependencies
103103
swiftscan_string_set_t *swift_overlay_module_dependencies;
104104

105+
/// Directly-imported in source module dependencies
106+
swiftscan_string_set_t *source_import_module_dependencies;
107+
105108
/// Options to the compile command required to build this module interface
106109
swiftscan_string_set_t *command_line;
107110

lib/DependencyScan/DependencyScanningTool.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ static swiftscan_dependency_graph_t generateHollowDiagnosticOutput(
222222
c_string_utils::create_empty_set(),
223223
c_string_utils::create_empty_set(),
224224
c_string_utils::create_empty_set(),
225+
c_string_utils::create_empty_set(),
225226
c_string_utils::create_null(),
226227
false,
227228
false,

lib/DependencyScan/ScanDependencies.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,7 @@ generateFullDependencyGraph(const CompilerInstance &instance,
786786
swiftTextualDeps->textualModuleDetails.bridgingSourceFiles),
787787
create_set(clangHeaderDependencyNames),
788788
create_set(bridgedOverlayDependencyNames),
789+
/*sourceImportedDependencies*/ create_set({}),
789790
create_set(swiftTextualDeps->textualModuleDetails.buildCommandLine),
790791
/*bridgingHeaderBuildCommand*/ create_set({}),
791792
create_clone(swiftTextualDeps->contextHash.c_str()),
@@ -813,12 +814,25 @@ generateFullDependencyGraph(const CompilerInstance &instance,
813814
bridgeDependencyIDs(swiftSourceDeps->swiftOverlayDependencies,
814815
bridgedOverlayDependencyNames);
815816

817+
// Create a set of directly-source-imported dependencies
818+
std::vector<ModuleDependencyID> sourceImportDependencies;
819+
std::copy(swiftSourceDeps->importedSwiftModules.begin(),
820+
swiftSourceDeps->importedSwiftModules.end(),
821+
std::back_inserter(sourceImportDependencies));
822+
std::copy(swiftSourceDeps->importedClangModules.begin(),
823+
swiftSourceDeps->importedClangModules.end(),
824+
std::back_inserter(sourceImportDependencies));
825+
std::vector<std::string> bridgedSourceImportedDependencyNames;
826+
bridgeDependencyIDs(sourceImportDependencies,
827+
bridgedSourceImportedDependencyNames);
828+
816829
details->swift_textual_details = {
817830
moduleInterfacePath, create_empty_set(), bridgingHeaderPath,
818831
create_set(
819832
swiftSourceDeps->textualModuleDetails.bridgingSourceFiles),
820833
create_set(clangHeaderDependencyNames),
821834
create_set(bridgedOverlayDependencyNames),
835+
create_set(bridgedSourceImportedDependencyNames),
822836
create_set(swiftSourceDeps->textualModuleDetails.buildCommandLine),
823837
create_set(swiftSourceDeps->bridgingHeaderBuildCommandLine),
824838
/*contextHash*/

lib/Tooling/libSwiftScan/libSwiftScan.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ void swiftscan_dependency_info_details_dispose(
6161
details_impl->swift_textual_details.bridging_module_dependencies);
6262
swiftscan_string_set_dispose(
6363
details_impl->swift_textual_details.swift_overlay_module_dependencies);
64+
swiftscan_string_set_dispose(
65+
details_impl->swift_textual_details.source_import_module_dependencies);
6466
swiftscan_string_set_dispose(
6567
details_impl->swift_textual_details.command_line);
6668
swiftscan_string_dispose(details_impl->swift_textual_details.context_hash);
@@ -326,6 +328,11 @@ swiftscan_string_set_t *swiftscan_swift_textual_detail_get_swift_overlay_depende
326328
return details->swift_textual_details.swift_overlay_module_dependencies;
327329
}
328330

331+
swiftscan_string_set_t *swiftscan_swift_textual_detail_get_swift_source_import_module_dependencies(
332+
swiftscan_module_details_t details) {
333+
return details->swift_textual_details.source_import_module_dependencies;
334+
}
335+
329336
swiftscan_string_ref_t swiftscan_swift_textual_detail_get_cas_fs_root_id(
330337
swiftscan_module_details_t details) {
331338
return details->swift_textual_details.cas_fs_root_id;

lib/Tooling/libSwiftScan/libSwiftScan.exports

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ swiftscan_swift_textual_detail_get_bridging_pch_command_line
2222
swiftscan_swift_textual_detail_get_context_hash
2323
swiftscan_swift_textual_detail_get_is_framework
2424
swiftscan_swift_textual_detail_get_swift_overlay_dependencies
25+
swiftscan_swift_textual_detail_get_swift_source_import_module_dependencies
2526
swiftscan_swift_textual_detail_get_cas_fs_root_id
2627
swiftscan_swift_textual_detail_get_module_cache_key
2728
swiftscan_swift_textual_detail_get_user_module_version

0 commit comments

Comments
 (0)