diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart index af032c9285e..c0b199fec4e 100644 --- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart +++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart @@ -693,6 +693,7 @@ class FileState { return _fsState._logger.run('Create unlinked for $path', () { var unlinkedUnit = serializeAstUnlinked2( unit, + exists: exists, isDartCore: uriStr == 'dart:core', ); var definedNames = computeDefinedNames(unit); @@ -853,6 +854,7 @@ class FileState { static UnlinkedUnit serializeAstUnlinked2( CompilationUnit unit, { + required bool exists, required bool isDartCore, }) { UnlinkedLibraryDirective? libraryDirective; @@ -984,8 +986,12 @@ class FileState { } } + final apiSignature = ApiSignature(); + apiSignature.addBytes(computeUnlinkedApiSignature(unit)); + apiSignature.addBool(exists); + return UnlinkedUnit( - apiSignature: Uint8List.fromList(computeUnlinkedApiSignature(unit)), + apiSignature: apiSignature.toByteList(), augmentations: augmentations.toFixedList(), exports: exports.toFixedList(), imports: imports.toFixedList(), diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart index 571fccc848b..a3c87fd1825 100644 --- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart @@ -1082,6 +1082,27 @@ var A = B; }, throwsArgumentError); } + test_changeFile_notExisting_toEmpty() async { + final b = newFile('/test/lib/b.dart', ''' +// ignore:unused_import +import 'a.dart'; +'''); + + driver.addFile(b.path); + await waitForIdleWithoutExceptions(); + + // Has CompileTimeErrorCode.URI_DOES_NOT_EXIST + expect(allResults.withPath(b.path).errors, isNotEmpty); + allResults.clear(); + + final a = newFile('/test/lib/a.dart', ''); + driver.changeFile(a.path); + await waitForIdleWithoutExceptions(); + + // No errors anymore. + expect(allResults.withPath(b.path).errors, isEmpty); + } + test_changeFile_notUsed() async { var a = convertPath('/test/lib/a.dart'); var b = convertPath('/other/b.dart');