Skip to content

Commit 3577e4c

Browse files
authored
Fix crash on incremental build after missing package resolve. (#4089)
1 parent aef6133 commit 3577e4c

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

_test/pkgs/provides_builder/lib/builders.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,15 @@ class _SomeBuilder implements Builder {
2525
Future build(BuildStep buildStep) async {
2626
if (!await buildStep.canRead(buildStep.inputId)) return;
2727

28-
await buildStep.writeAsBytes(
28+
final content = await buildStep.readAsString(buildStep.inputId);
29+
30+
if (content.contains('// resolve_me')) {
31+
await buildStep.resolver.libraryFor(buildStep.inputId);
32+
}
33+
34+
await buildStep.writeAsString(
2935
buildStep.inputId.changeExtension('.something.dart'),
30-
buildStep.readAsBytes(buildStep.inputId),
36+
content,
3137
);
3238
}
3339
}

_test/test/build_integration_test.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,5 +144,23 @@ void main() {
144144
]),
145145
);
146146
});
147+
148+
test('incremental build after resolve missing import', () async {
149+
final dartSource = File(p.join('lib', 'app.dart'));
150+
dartSource.writeAsStringSync(
151+
// Trigger resolving source in pkgs/provides_builder/lib/builders.dart.
152+
'// resolve_me\n'
153+
// Resolve an import that does not exist.
154+
"import 'package:missing/missing.dart';\n"
155+
'${dartSource.readAsStringSync()}',
156+
);
157+
await runBuild();
158+
159+
// Rebuild and check the previously-missing import does not cause a crash.
160+
dartSource.writeAsStringSync('//\n${dartSource.readAsStringSync()}');
161+
162+
final result = await runBuild();
163+
expect(result.stdout, isNot(contains('PackageNotFoundException')));
164+
});
147165
});
148166
}

build_runner_core/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## 9.2.0-wip
22

33
- Removed unused dev_deps: `test_process`.
4+
- Bug fix: fix incremental build after build with import of missing package.
45

56
## 9.2.0-dev.1
67

build_runner_core/lib/src/generate/single_step_reader_writer.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,8 @@ class SingleStepReaderWriter extends AssetReader
454454
// Add to the graph for input tracking.
455455
_runningBuild.assetGraph.add(AssetNode.missingSource(id));
456456
return PhasedValue.fixed('');
457+
} else if (node.type == NodeType.missingSource) {
458+
return PhasedValue.fixed('');
457459
}
458460

459461
if (node.type == NodeType.generated) {

0 commit comments

Comments
 (0)