For for LateInitializationError in Cider topLevelDeclarations.

Change-Id: I1e52d251a8e63a05304da701d6157986d25d9f21
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/216400
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2021-10-12 19:57:45 +00:00 committed by commit-bot@chromium.org
parent 14428eda69
commit baecc6fccc
2 changed files with 38 additions and 9 deletions

View file

@ -277,14 +277,6 @@ class FileState {
var decoded = CiderUnlinkedUnit.fromBuffer(unlinkedBytes!);
unlinked2 = decoded.unlinkedUnit!;
var unitDeclarations = decoded.topLevelDeclarations!;
topLevelDeclarations = TopLevelDeclarations(
extensionNames: unitDeclarations.extensionNames.toList(),
functionNames: unitDeclarations.functionNames.toList(),
typeNames: unitDeclarations.typeNames.toList(),
variableNames: unitDeclarations.variableNames.toList(),
);
performance.run('prefetch', (_) {
_prefetchDirectReferences(unlinked2);
});
@ -295,9 +287,19 @@ class FileState {
}
// Read the unlinked bundle.
unlinked2 = CiderUnlinkedUnit.fromBuffer(unlinkedBytes!).unlinkedUnit!;
var decoded = CiderUnlinkedUnit.fromBuffer(unlinkedBytes!);
unlinked2 = decoded.unlinkedUnit!;
_apiSignature = Uint8List.fromList(unlinked2.apiSignature);
// Copy information about top-level declarations.
var unitDeclarations = decoded.topLevelDeclarations!;
topLevelDeclarations = TopLevelDeclarations(
extensionNames: unitDeclarations.extensionNames.toList(),
functionNames: unitDeclarations.functionNames.toList(),
typeNames: unitDeclarations.typeNames.toList(),
variableNames: unitDeclarations.variableNames.toList(),
);
// Build the graph.
for (var directive in unlinked2.imports) {
var file = _fileForRelativeUri(

View file

@ -4,6 +4,7 @@
import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:analyzer/src/dart/micro/cider_byte_store.dart';
import 'package:analyzer/src/dart/micro/library_graph.dart';
import 'package:analyzer/src/dart/micro/resolve_file.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/lint/registry.dart';
@ -743,6 +744,32 @@ var a = 4.2;
expect(fileResolver.testView!.resolvedLibraries, <Object>[]);
}
test_getFilesWithTopLevelDeclarations_cached() async {
await assertNoErrorsInCode(r'''
int a = 0;
var b = 1 + 2;
''');
void assertHasOneVariable() {
var files = fileResolver.getFilesWithTopLevelDeclarations('a');
expect(files, hasLength(1));
var file = files.single;
expect(file.file.path, result.path);
expect(file.kind, FileTopLevelDeclarationKind.variable);
}
// Ask to check that it works when parsed.
assertHasOneVariable();
// Create a new resolved, but reuse the cache.
createFileResolver();
await resolveTestFile();
// Ask again, when unlinked information is read from the cache.
assertHasOneVariable();
}
test_getLibraryByUri() {
newFile('/workspace/dart/my/lib/a.dart', content: r'''
class A {}