@@ -12,6 +12,7 @@ import 'package:build/experiments.dart' as experiments_zone;
12
12
// ignore: implementation_imports
13
13
import 'package:build/src/internal.dart' ;
14
14
import 'package:built_collection/built_collection.dart' ;
15
+ import 'package:built_value/serializer.dart' ;
15
16
import 'package:crypto/crypto.dart' ;
16
17
import 'package:glob/glob.dart' ;
17
18
import 'package:meta/meta.dart' ;
@@ -61,8 +62,34 @@ class AssetGraph implements GeneratedAssetHider {
61
62
final Map <String , Map <PostProcessBuildStepId , Set <AssetId >>>
62
63
_postProcessBuildStepOutputs = {};
63
64
65
+ /// Digests from the previous build's [BuildPhases] , or `null` if this is a
66
+ /// clean build.
67
+ BuiltList <Digest >? previousInBuildPhasesOptionsDigests;
68
+
69
+ /// Digests from the current build's [BuildPhases] .
70
+ BuiltList <Digest > inBuildPhasesOptionsDigests;
71
+
72
+ /// Digests from the previous build's [BuildPhases] , or `null` if this is a
73
+ /// clean build.
74
+ BuiltList <Digest >? previousPostBuildOptionsDigests;
75
+
76
+ /// Digests from the current build's [BuildPhases] .
77
+ BuiltList <Digest > postBuildActionsOptionsDigests;
78
+
64
79
AssetGraph ._(
80
+ BuildPhases buildPhases,
81
+ this .dartVersion,
82
+ this .packageLanguageVersions,
83
+ this .enabledExperiments,
84
+ ) : buildPhasesDigest = buildPhases.digest,
85
+ inBuildPhasesOptionsDigests = buildPhases.inBuildPhasesOptionsDigests,
86
+ postBuildActionsOptionsDigests =
87
+ buildPhases.postBuildActionsOptionsDigests;
88
+
89
+ AssetGraph ._fromSerialized (
65
90
this .buildPhasesDigest,
91
+ this .inBuildPhasesOptionsDigests,
92
+ this .postBuildActionsOptionsDigests,
66
93
this .dartVersion,
67
94
this .packageLanguageVersions,
68
95
this .enabledExperiments,
@@ -80,21 +107,19 @@ class AssetGraph implements GeneratedAssetHider {
80
107
AssetReader digestReader,
81
108
) async {
82
109
var graph = AssetGraph ._(
83
- buildPhases.digest ,
110
+ buildPhases,
84
111
Platform .version,
85
112
packageGraph.languageVersions,
86
113
experiments_zone.enabledExperiments.build (),
87
114
);
88
115
var placeholders = graph._addPlaceHolderNodes (packageGraph);
89
116
graph._addSources (sources);
90
- graph
91
- .._addBuilderOptionsNodes (buildPhases)
92
- .._addOutputsForSources (
93
- buildPhases,
94
- sources,
95
- packageGraph.root.name,
96
- placeholders: placeholders,
97
- );
117
+ graph._addOutputsForSources (
118
+ buildPhases,
119
+ sources,
120
+ packageGraph.root.name,
121
+ placeholders: placeholders,
122
+ );
98
123
// Pre-emptively compute digests for the nodes we know have outputs.
99
124
await graph._setLastKnownDigests (
100
125
sources.where ((id) => graph.get (id)! .primaryOutputs.isNotEmpty),
@@ -217,36 +242,6 @@ class AssetGraph implements GeneratedAssetHider {
217
242
}
218
243
}
219
244
220
- /// Adds [AssetNode.builderOptions] for all [buildPhases] to this graph.
221
- void _addBuilderOptionsNodes (BuildPhases buildPhases) {
222
- for (var phaseNum = 0 ; phaseNum < buildPhases.length; phaseNum++ ) {
223
- var phase = buildPhases[phaseNum];
224
- if (phase is InBuildPhase ) {
225
- add (
226
- AssetNode .builderOptions (
227
- builderOptionsIdForAction (phase, phaseNum),
228
- lastKnownDigest: computeBuilderOptionsDigest (phase.builderOptions),
229
- ),
230
- );
231
- } else if (phase is PostBuildPhase ) {
232
- var actionNum = 0 ;
233
- for (var builderAction in phase.builderActions) {
234
- add (
235
- AssetNode .builderOptions (
236
- builderOptionsIdForAction (builderAction, actionNum),
237
- lastKnownDigest: computeBuilderOptionsDigest (
238
- builderAction.builderOptions,
239
- ),
240
- ),
241
- );
242
- actionNum++ ;
243
- }
244
- } else {
245
- throw StateError ('Invalid action type $phase ' );
246
- }
247
- }
248
- }
249
-
250
245
/// Uses [digestReader] to compute the [Digest] for nodes with [ids] and set
251
246
/// the `lastKnownDigest` field.
252
247
Future <void > _setLastKnownDigests (
@@ -333,12 +328,6 @@ class AssetGraph implements GeneratedAssetHider {
333
328
for (final input in node.generatedNodeState! .inputs) {
334
329
result.putIfAbsent (input, () => {}).add (node.id);
335
330
}
336
- result
337
- .putIfAbsent (
338
- node.generatedNodeConfiguration! .builderOptionsId,
339
- () => {},
340
- )
341
- .add (node.id);
342
331
} else if (node.type == NodeType .glob) {
343
332
for (final input in node.globNodeState! .inputs) {
344
333
result.putIfAbsent (input, () => {}).add (node.id);
@@ -615,25 +604,22 @@ class AssetGraph implements GeneratedAssetHider {
615
604
}) {
616
605
var allInputs = Set <AssetId >.from (newSources);
617
606
if (placeholders != null ) allInputs.addAll (placeholders);
618
-
619
- for (var phaseNum = 0 ; phaseNum < buildPhases.length; phaseNum++ ) {
620
- var phase = buildPhases[phaseNum];
621
- if (phase is InBuildPhase ) {
622
- allInputs.addAll (
623
- _addInBuildPhaseOutputs (
624
- phase,
625
- phaseNum,
626
- allInputs,
627
- buildPhases,
628
- rootPackage,
629
- ),
630
- );
631
- } else if (phase is PostBuildPhase ) {
632
- _addPostBuildActionApplications (phase, allInputs);
633
- } else {
634
- throw StateError ('Unrecognized phase type $phase ' );
635
- }
607
+ for (
608
+ var phaseNum = 0 ;
609
+ phaseNum < buildPhases.inBuildPhases.length;
610
+ phaseNum++
611
+ ) {
612
+ allInputs.addAll (
613
+ _addInBuildPhaseOutputs (
614
+ buildPhases.inBuildPhases[phaseNum],
615
+ phaseNum,
616
+ allInputs,
617
+ buildPhases,
618
+ rootPackage,
619
+ ),
620
+ );
636
621
}
622
+ _addPostBuildActionApplications (buildPhases.postBuildPhase, allInputs);
637
623
return allInputs;
638
624
}
639
625
@@ -651,8 +637,6 @@ class AssetGraph implements GeneratedAssetHider {
651
637
String rootPackage,
652
638
) {
653
639
var phaseOutputs = < AssetId > {};
654
- var buildOptionsNodeId = builderOptionsIdForAction (phase, phaseNum);
655
- var builderOptionsNode = get (buildOptionsNodeId)! ;
656
640
var inputs =
657
641
allInputs.where ((input) => _actionMatches (phase, input)).toList ();
658
642
for (var input in inputs) {
@@ -667,7 +651,6 @@ class AssetGraph implements GeneratedAssetHider {
667
651
var deleted = _addGeneratedOutputs (
668
652
outputs,
669
653
phaseNum,
670
- builderOptionsNode,
671
654
buildPhases,
672
655
rootPackage,
673
656
primaryInput: input,
@@ -710,15 +693,11 @@ class AssetGraph implements GeneratedAssetHider {
710
693
Set <AssetId > _addGeneratedOutputs (
711
694
Iterable <AssetId > outputs,
712
695
int phaseNumber,
713
- AssetNode builderOptionsNode,
714
696
BuildPhases buildPhases,
715
697
String rootPackage, {
716
698
required AssetId primaryInput,
717
699
required bool isHidden,
718
700
}) {
719
- if (builderOptionsNode.type != NodeType .builderOptions) {
720
- throw ArgumentError ('Expected node of type NodeType.builderOptionsNode' );
721
- }
722
701
var removed = < AssetId > {};
723
702
Map <AssetId , Set <AssetId >>? computedOutputsBeforeRemoves;
724
703
for (var output in outputs) {
@@ -734,9 +713,10 @@ class AssetGraph implements GeneratedAssetHider {
734
713
throw DuplicateAssetNodeException (
735
714
rootPackage,
736
715
existing.id,
737
- (buildPhases[existingConfiguration.phaseNumber] as InBuildPhase )
716
+ buildPhases
717
+ .inBuildPhases[existingConfiguration.phaseNumber]
738
718
.builderLabel,
739
- ( buildPhases[phaseNumber] as InBuildPhase ) .builderLabel,
719
+ buildPhases.inBuildPhases [phaseNumber].builderLabel,
740
720
);
741
721
}
742
722
_removeRecursive (output, removedIds: removed);
@@ -749,7 +729,6 @@ class AssetGraph implements GeneratedAssetHider {
749
729
pendingBuildAction: PendingBuildAction .build,
750
730
wasOutput: false ,
751
731
isFailure: false ,
752
- builderOptionsId: builderOptionsNode.id,
753
732
isHidden: isHidden,
754
733
);
755
734
if (existing != null ) {
@@ -833,22 +812,6 @@ class AssetGraph implements GeneratedAssetHider {
833
812
}
834
813
}
835
814
836
- Digest computeBuilderOptionsDigest (BuilderOptions options) =>
837
- md5.convert (utf8.encode (json.encode (options.config)));
838
-
839
- AssetId builderOptionsIdForAction (BuildAction action, int actionNumber) {
840
- if (action is InBuildPhase ) {
841
- return AssetId (action.package, 'Phase$actionNumber .builderOptions' );
842
- } else if (action is PostBuildAction ) {
843
- return PostProcessBuildStepId .builderOptionsIdFor (
844
- package: action.package,
845
- actionNumber: actionNumber,
846
- );
847
- } else {
848
- throw StateError ('Unsupported action type $action ' );
849
- }
850
- }
851
-
852
815
Set <AssetId > placeholderIdsFor (PackageGraph packageGraph) => Set <AssetId >.from (
853
816
packageGraph.allPackages.keys.expand (
854
817
(package) => [
0 commit comments