@@ -11,14 +11,15 @@ import 'package:build/build.dart';
1111import 'package:build/experiments.dart' as experiments_zone;
1212// ignore: implementation_imports
1313import 'package:build/src/internal.dart' ;
14- import 'package:convert/convert .dart' ;
14+ import 'package:built_collection/built_collection .dart' ;
1515import 'package:crypto/crypto.dart' ;
1616import 'package:glob/glob.dart' ;
1717import 'package:package_config/package_config.dart' ;
1818import 'package:watcher/watcher.dart' ;
1919
20+ import '../../build_runner_core.dart' ;
21+ import '../generate/build_phases.dart' ;
2022import '../generate/phase.dart' ;
21- import '../package_graph/package_graph.dart' ;
2223import '../util/constants.dart' ;
2324import 'exceptions.dart' ;
2425import 'node.dart' ;
@@ -41,9 +42,9 @@ class AssetGraph implements GeneratedAssetHider {
4142
4243 /// The Dart language experiments that were enabled when this graph was
4344 /// originally created from the [build] constructor.
44- final List <String > enabledExperiments;
45+ final BuiltList <String > enabledExperiments;
4546
46- final Map <String , LanguageVersion ?> packageLanguageVersions;
47+ final BuiltMap <String , LanguageVersion ?> packageLanguageVersions;
4748
4849 AssetGraph ._(
4950 this .buildPhasesDigest,
@@ -57,21 +58,17 @@ class AssetGraph implements GeneratedAssetHider {
5758 _AssetGraphDeserializer (serializedGraph).deserialize ();
5859
5960 static Future <AssetGraph > build (
60- List < BuildPhase > buildPhases,
61+ BuildPhases buildPhases,
6162 Set <AssetId > sources,
6263 Set <AssetId > internalSources,
6364 PackageGraph packageGraph,
6465 AssetReader digestReader,
6566 ) async {
66- var packageLanguageVersions = {
67- for (var pkg in packageGraph.allPackages.values)
68- pkg.name: pkg.languageVersion,
69- };
7067 var graph = AssetGraph ._(
71- computeBuildPhasesDigest ( buildPhases) ,
68+ buildPhases.digest ,
7269 Platform .version,
73- packageLanguageVersions ,
74- experiments_zone.enabledExperiments,
70+ packageGraph.languageVersions ,
71+ experiments_zone.enabledExperiments. build () ,
7572 );
7673 var placeholders = graph._addPlaceHolderNodes (packageGraph);
7774 graph._addSources (sources);
@@ -191,7 +188,7 @@ class AssetGraph implements GeneratedAssetHider {
191188 }
192189
193190 /// Adds [AssetNode.builderOptions] for all [buildPhases] to this graph.
194- void _addBuilderOptionsNodes (List < BuildPhase > buildPhases) {
191+ void _addBuilderOptionsNodes (BuildPhases buildPhases) {
195192 for (var phaseNum = 0 ; phaseNum < buildPhases.length; phaseNum++ ) {
196193 var phase = buildPhases[phaseNum];
197194 if (phase is InBuildPhase ) {
@@ -335,7 +332,7 @@ class AssetGraph implements GeneratedAssetHider {
335332 ///
336333 /// Returns the list of [AssetId] s that were invalidated.
337334 Future <Set <AssetId >> updateAndInvalidate (
338- List < BuildPhase > buildPhases,
335+ BuildPhases buildPhases,
339336 Map <AssetId , ChangeType > updates,
340337 String rootPackage,
341338 Future Function (AssetId id) delete,
@@ -531,7 +528,7 @@ class AssetGraph implements GeneratedAssetHider {
531528 /// If [placeholders] is supplied they will be added to [newSources] to create
532529 /// the full input set.
533530 Set <AssetId > _addOutputsForSources (
534- List < BuildPhase > buildPhases,
531+ BuildPhases buildPhases,
535532 Set <AssetId > newSources,
536533 String rootPackage, {
537534 Set <AssetId >? placeholders,
@@ -570,7 +567,7 @@ class AssetGraph implements GeneratedAssetHider {
570567 InBuildPhase phase,
571568 int phaseNum,
572569 Set <AssetId > allInputs,
573- List < BuildPhase > buildPhases,
570+ BuildPhases buildPhases,
574571 String rootPackage,
575572 ) {
576573 var phaseOutputs = < AssetId > {};
@@ -640,7 +637,7 @@ class AssetGraph implements GeneratedAssetHider {
640637 Iterable <AssetId > outputs,
641638 int phaseNumber,
642639 AssetNode builderOptionsNode,
643- List < BuildPhase > buildPhases,
640+ BuildPhases buildPhases,
644641 String rootPackage, {
645642 required AssetId primaryInput,
646643 required bool isHidden,
@@ -733,17 +730,35 @@ class AssetGraph implements GeneratedAssetHider {
733730 }
734731 return id;
735732 }
736- }
737733
738- /// Computes a [Digest] for [buildPhases] which can be used to compare one set
739- /// of [BuildPhase] s against another.
740- Digest computeBuildPhasesDigest (Iterable <BuildPhase > buildPhases) {
741- var digestSink = AccumulatorSink <Digest >();
742- md5.startChunkedConversion (digestSink)
743- ..add (buildPhases.map ((phase) => phase.identity).toList ())
744- ..close ();
745- assert (digestSink.events.length == 1 );
746- return digestSink.events.first;
734+ /// Deletes outputs that were written to the source tree.
735+ ///
736+ /// Returns the assets that were deleted.
737+ Future <Iterable <AssetId >> deleteOutputs (
738+ PackageGraph packageGraph,
739+ RunnerAssetWriter writer,
740+ ) async {
741+ var deletedSources = < AssetId > [];
742+ // Delete all the non-hidden outputs.
743+ for (final id in outputs) {
744+ var node = get (id)! ;
745+ final nodeConfiguration = node.generatedNodeConfiguration! ;
746+ final nodeState = node.generatedNodeState! ;
747+ if (nodeState.wasOutput && ! nodeConfiguration.isHidden) {
748+ var idToDelete = id;
749+ // If the package no longer exists, then the user must have
750+ // renamed the root package.
751+ //
752+ // In that case we change `idToDelete` to be in the root package.
753+ if (packageGraph[id.package] == null ) {
754+ idToDelete = AssetId (packageGraph.root.name, id.path);
755+ }
756+ deletedSources.add (idToDelete);
757+ await writer.delete (idToDelete);
758+ }
759+ }
760+ return deletedSources;
761+ }
747762}
748763
749764Digest computeBuilderOptionsDigest (BuilderOptions options) =>
0 commit comments