Skip to content

Commit d8f08d0

Browse files
committed
Iterates over all library fragments to add asset ids.
1 parent 6cb44b8 commit d8f08d0

File tree

1 file changed

+37
-26
lines changed

1 file changed

+37
-26
lines changed

lib/src/builders/synthetic_builder.dart

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ abstract class SyntheticBuilder<S extends SyntheticInput> implements Builder {
3030
this.header = '',
3131
this.footer = '',
3232
Formatter? formatter,
33-
}) : formatter = formatter ??
34-
DartFormatter(languageVersion: DartFormatter.latestLanguageVersion)
35-
.format,
36-
syntheticInput = SyntheticInput.instance<S>();
33+
}) : formatter =
34+
formatter ??
35+
DartFormatter(
36+
languageVersion: DartFormatter.latestLanguageVersion,
37+
).format,
38+
syntheticInput = SyntheticInput.instance<S>();
3739

3840
/// Input files. Specify the complete path relative to the
3941
/// root directory.
@@ -70,7 +72,8 @@ abstract class SyntheticBuilder<S extends SyntheticInput> implements Builder {
7072
// Add header to buffer.
7173
// Expand header:
7274
final buffer = StringBuffer(
73-
'// GENERATED CODE. DO NOT MODIFY. $generatedBy \n\n $header');
75+
'// GENERATED CODE. DO NOT MODIFY. $generatedBy \n\n $header',
76+
);
7477
buffer.writeln();
7578

7679
source.trim();
@@ -98,14 +101,16 @@ abstract class SyntheticBuilder<S extends SyntheticInput> implements Builder {
98101
return result;
99102
}
100103

101-
/// Returns a ordered set of library asset ids ordered in reverse topological
104+
/// Returns an ordered set of library asset ids ordered in reverse topological
102105
/// dependency order.
103106
/// * If a file B includes a file A, then A will be appear
104107
/// before B.
105108
/// * Throws [ErrorOf] if a dependency cycle is detected.
106109
Future<Set<AssetId>> orderedLibraryAssetIds(BuildStep buildStep) async {
107-
final assetGraph =
108-
DirectedGraph<AssetId>({}, comparator: ((v1, v2) => -v1.compareTo(v2)));
110+
final assetGraph = DirectedGraph<AssetId>(
111+
{},
112+
comparator: ((v1, v2) => -v1.compareTo(v2)),
113+
);
109114

110115
// An assetId map of all input libraries with the uri as key.
111116
final assetMap = <Uri, AssetId>{};
@@ -120,26 +125,30 @@ abstract class SyntheticBuilder<S extends SyntheticInput> implements Builder {
120125
}
121126

122127
for (final assetId in assetGraph) {
123-
final importedAsseIds = <AssetId>{};
128+
final importedAssetIds = <AssetId>{};
124129

125130
// Read library.
126131
final library = await buildStep.resolver.libraryFor(assetId);
127-
// Get dependencies
128-
for (final import in library.importedLibraries) {
129-
final uri = Uri.parse(import.source.uri.toString());
130-
// Skip if uri scheme is not "package" or "asset".
131-
if (uri.scheme == 'package' ||
132-
uri.scheme == 'asset' ||
133-
uri.scheme == '') {
134-
// Normalise uri to handle relative and package import directives.
135-
final importedAssetId = AssetId.resolve(uri, from: assetId);
136-
// Add vertex matching import directive.
137-
if (assetMap[importedAssetId.uri] != null) {
138-
importedAsseIds.add(assetMap[importedAssetId.uri]!);
132+
133+
for (final fragment in library.fragments) {
134+
for (final import in fragment.importedLibraries) {
135+
//final uri = Uri.parse(import.source.uri.toString());
136+
// TODO:Iterate over all fragments.
137+
final uri = import.uri;
138+
// Skip if uri scheme is not "package" or "asset".
139+
if (uri.scheme == 'package' ||
140+
uri.scheme == 'asset' ||
141+
uri.scheme == '') {
142+
// Normalise uri to handle relative and package import directives.
143+
final importedAssetId = AssetId.resolve(uri, from: assetId);
144+
// Add vertex matching import directive.
145+
if (assetMap[importedAssetId.uri] != null) {
146+
importedAssetIds.add(assetMap[importedAssetId.uri]!);
147+
}
139148
}
140149
}
141150
}
142-
assetGraph.addEdges(assetId, importedAsseIds);
151+
assetGraph.addEdges(assetId, importedAssetIds);
143152
}
144153

145154
final topologicalOrdering = assetGraph.sortedTopologicalOrdering;
@@ -149,10 +158,12 @@ abstract class SyntheticBuilder<S extends SyntheticInput> implements Builder {
149158
final cycle = assetGraph.cycle;
150159

151160
throw ErrorOf<SyntheticBuilder>(
152-
message: 'Circular dependency detected.',
153-
expectedState: 'Input files must not include each other. '
154-
'Alternatively, set constructor parameter "sortAssets: false".',
155-
invalidState: 'File ${cycle.join(' imports ')}.');
161+
message: 'Circular dependency detected.',
162+
expectedState:
163+
'Input files must not include each other. '
164+
'Alternatively, set constructor parameter "sortAssets: false".',
165+
invalidState: 'File ${cycle.join(' imports ')}.',
166+
);
156167
}
157168

158169
// Return reversed topological ordering of asset ids.

0 commit comments

Comments
 (0)