Version 2.13.0-120.0.dev
Merge commit 'ff14547a20291c68fab49845ab09d2b21e777640' into 'dev'
diff --git a/pkg/analyzer/lib/dart/analysis/session.dart b/pkg/analyzer/lib/dart/analysis/session.dart
index f193311..9fe33e3 100644
--- a/pkg/analyzer/lib/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/dart/analysis/session.dart
@@ -80,9 +80,7 @@
/// Return a future that will complete with information about the results of
/// resolving the file with the given absolute, normalized [path].
- ///
- /// TODO(migration): should not be nullable
- Future<ResolvedUnitResult?> getResolvedUnit(String path);
+ Future<ResolvedUnitResult> getResolvedUnit(String path);
/// Return a future that will complete with the source kind of the file with
/// the given absolute, normalized [path]. If the path does not represent a
@@ -94,10 +92,8 @@
/// Return a future that will complete with information about the results of
/// building the element model for the file with the given absolute,
- /// normalized[path].
- ///
- /// TODO(migration): should not be nullable
- Future<UnitElementResult?> getUnitElement(String path);
+ /// normalized [path].
+ Future<UnitElementResult> getUnitElement(String path);
/// Return a future that will complete with the signature for the file with
/// the given absolute, normalized [path], or `null` if the file cannot be
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index c5dadef..3ee04f3 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -549,8 +549,7 @@
}
/// Return a [Future] that completes with the [ErrorsResult] for the Dart
- /// file with the given [path]. If the file is not a Dart file or cannot
- /// be analyzed, the [Future] completes with `null`.
+ /// file with the given [path].
///
/// The [path] must be absolute and normalized.
///
@@ -642,7 +641,7 @@
throw ArgumentError('$uri is not a library.');
}
- UnitElementResult unitResult = (await getUnitElement(file.path!))!;
+ UnitElementResult unitResult = await getUnitElement(file.path!);
return unitResult.element.library;
}
@@ -784,8 +783,7 @@
}
/// Return a [Future] that completes with a [ResolvedUnitResult] for the Dart
- /// file with the given [path]. If the file is not a Dart file or cannot
- /// be analyzed, the [Future] completes with `null`.
+ /// file with the given [path].
///
/// The [path] must be absolute and normalized.
///
@@ -800,11 +798,13 @@
/// it, which is consistent with the current file state (including new states
/// of the files previously reported using [changeFile]), prior to the next
/// time the analysis state transitions to "idle".
- Future<ResolvedUnitResult?> getResult(String path,
+ Future<ResolvedUnitResult> getResult(String path,
{bool sendCachedToStream = false}) {
_throwIfNotAbsolutePath(path);
if (!_fsState.hasUri(path)) {
- return Future.value();
+ return Future.value(
+ NotValidResolvedUnitResultImpl(ResultState.NOT_FILE_OF_URI),
+ );
}
// Return the cached result.
@@ -842,11 +842,13 @@
}
/// Return a [Future] that completes with the [UnitElementResult] for the
- /// file with the given [path], or with `null` if the file cannot be analyzed.
- Future<UnitElementResult?> getUnitElement(String path) {
+ /// file with the given [path].
+ Future<UnitElementResult> getUnitElement(String path) {
_throwIfNotAbsolutePath(path);
if (!_fsState.hasUri(path)) {
- return Future.value();
+ return Future.value(
+ NotValidUnitElementResultImpl(ResultState.NOT_FILE_OF_URI),
+ );
}
var completer = Completer<UnitElementResult>();
_unitElementRequestedFiles
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index 5d19c53..9bd876d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -8,6 +8,7 @@
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type_provider.dart';
+import 'package:analyzer/dart/element/type_system.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
@@ -116,6 +117,58 @@
}
}
+/// The implementation of [ResolvedUnitResult] when not [ResultState.VALID].
+class NotValidResolvedUnitResultImpl extends NotValidFileResultImpl
+ implements ResolvedUnitResult {
+ NotValidResolvedUnitResultImpl(ResultState state) : super(state);
+
+ @override
+ String? get content {
+ throw StateError('This result is not valid');
+ }
+
+ @override
+ List<AnalysisError> get errors {
+ throw StateError('This result is not valid');
+ }
+
+ @override
+ LibraryElement get libraryElement {
+ throw StateError('This result is not valid');
+ }
+
+ @override
+ TypeProvider get typeProvider {
+ throw StateError('This result is not valid');
+ }
+
+ @override
+ TypeSystem get typeSystem {
+ throw StateError('This result is not valid');
+ }
+
+ @override
+ CompilationUnit? get unit {
+ throw StateError('This result is not valid');
+ }
+}
+
+/// The implementation of [UnitElementResult] when not [ResultState.VALID].
+class NotValidUnitElementResultImpl extends NotValidAnalysisResultImpl
+ implements UnitElementResult {
+ NotValidUnitElementResultImpl(ResultState state) : super(state);
+
+ @override
+ CompilationUnitElement get element {
+ throw StateError('This result is not valid');
+ }
+
+ @override
+ String get signature {
+ throw StateError('This result is not valid');
+ }
+}
+
class ParsedLibraryResultImpl extends AnalysisResultImpl
implements ParsedLibraryResult {
@override
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 821ebf0..7d24cf9 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -55,7 +55,7 @@
for (String file in files) {
if (searchedFiles.add(file, this)) {
var unitResult = await _driver.getUnitElement(file);
- if (unitResult != null) {
+ if (unitResult.state == ResultState.VALID) {
unitResult.element.types.forEach(addElements);
unitResult.element.mixins.forEach(addElements);
}
@@ -175,7 +175,7 @@
List<FileState> knownFiles = _driver.fsState.knownFiles.toList();
for (FileState file in knownFiles) {
var unitResult = await _driver.getUnitElement(file.path!);
- if (unitResult != null) {
+ if (unitResult.state == ResultState.VALID) {
CompilationUnitElement unitElement = unitResult.element;
unitElement.accessors.forEach(addElement);
unitElement.enums.forEach(addElement);
@@ -284,7 +284,7 @@
Future<CompilationUnitElement?> _getUnitElement(String file) async {
var result = await _driver.getUnitElement(file);
- return result?.element;
+ return result.state == ResultState.VALID ? result.element : null;
}
Future<List<SearchResult>> _searchReferences(
@@ -378,7 +378,7 @@
LibraryElement libraryElement = element.library;
for (CompilationUnitElement unitElement in libraryElement.units) {
String unitPath = unitElement.source.fullName;
- ResolvedUnitResult unitResult = (await _driver.getResult(unitPath))!;
+ ResolvedUnitResult unitResult = await _driver.getResult(unitPath);
_ImportElementReferencesVisitor visitor =
_ImportElementReferencesVisitor(element, unitElement);
unitResult.unit!.accept(visitor);
@@ -397,7 +397,7 @@
List<SearchResult> results = <SearchResult>[];
for (CompilationUnitElement unitElement in element.units) {
String unitPath = unitElement.source.fullName;
- ResolvedUnitResult unitResult = (await _driver.getResult(unitPath))!;
+ ResolvedUnitResult unitResult = await _driver.getResult(unitPath);
CompilationUnit unit = unitResult.unit!;
for (Directive directive in unit.directives) {
if (directive is PartOfDirective && directive.element == element) {
@@ -422,7 +422,7 @@
}
// Prepare the unit.
- ResolvedUnitResult unitResult = (await _driver.getResult(path))!;
+ ResolvedUnitResult unitResult = await _driver.getResult(path);
var unit = unitResult.unit;
if (unit == null) {
return const <SearchResult>[];
@@ -475,7 +475,7 @@
LibraryElement libraryElement = element.library;
for (CompilationUnitElement unitElement in libraryElement.units) {
String unitPath = unitElement.source.fullName;
- ResolvedUnitResult unitResult = (await _driver.getResult(unitPath))!;
+ ResolvedUnitResult unitResult = await _driver.getResult(unitPath);
_LocalReferencesVisitor visitor =
_LocalReferencesVisitor(element, unitElement);
unitResult.unit!.accept(visitor);
diff --git a/pkg/analyzer/lib/src/dart/analysis/session.dart b/pkg/analyzer/lib/src/dart/analysis/session.dart
index 787c675..7153b15 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session.dart
@@ -115,7 +115,7 @@
}
@override
- Future<ResolvedUnitResult?> getResolvedUnit(String path) {
+ Future<ResolvedUnitResult> getResolvedUnit(String path) {
_checkConsistency();
return _driver.getResult(path);
}
@@ -127,7 +127,7 @@
}
@override
- Future<UnitElementResult?> getUnitElement(String path) {
+ Future<UnitElementResult> getUnitElement(String path) {
_checkConsistency();
return _driver.getUnitElement(path);
}
diff --git a/pkg/analyzer/lib/src/lint/project.dart b/pkg/analyzer/lib/src/lint/project.dart
index 759dddc..ff937d9 100644
--- a/pkg/analyzer/lib/src/lint/project.dart
+++ b/pkg/analyzer/lib/src/lint/project.dart
@@ -134,7 +134,7 @@
for (Source source in sources!) {
String path = source.uri.path;
if (path.startsWith(libDir) && !path.startsWith(libSrcDir)) {
- ResolvedUnitResult result = (await driver.getResult(source.fullName))!;
+ ResolvedUnitResult result = await driver.getResult(source.fullName);
LibraryElement library = result.libraryElement;
NamespaceBuilder namespaceBuilder = NamespaceBuilder();
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 78b4c28..e4a7455 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -193,7 +193,7 @@
driver1.priorityFiles = [a];
driver2.priorityFiles = [a];
- ResolvedUnitResult result = (await driver2.getResult(b))!;
+ ResolvedUnitResult result = await driver2.getResult(b);
expect(result.path, b);
await scheduler.status.firstWhere((status) => status.isIdle);
@@ -442,9 +442,9 @@
part of 'lib.dart';
''');
- ResolvedUnitResult libResult = (await driver.getResult(lib))!;
- ResolvedUnitResult partResult1 = (await driver.getResult(part1))!;
- ResolvedUnitResult partResult2 = (await driver.getResult(part2))!;
+ ResolvedUnitResult libResult = await driver.getResult(lib);
+ ResolvedUnitResult partResult1 = await driver.getResult(part1);
+ ResolvedUnitResult partResult2 = await driver.getResult(part2);
CompilationUnit libUnit = libResult.unit!;
CompilationUnit partUnit1 = partResult1.unit!;
@@ -489,7 +489,7 @@
driver.addFile(lib);
- ResolvedUnitResult libResult = (await driver.getResult(lib))!;
+ ResolvedUnitResult libResult = await driver.getResult(lib);
List<AnalysisError> errors = libResult.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_UNNAMED_LIBRARY);
@@ -508,7 +508,7 @@
driver.addFile(lib);
- ResolvedUnitResult libResult = (await driver.getResult(lib))!;
+ ResolvedUnitResult libResult = await driver.getResult(lib);
List<AnalysisError> errors = libResult.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY);
@@ -527,7 +527,7 @@
driver.addFile(lib);
- ResolvedUnitResult libResult = (await driver.getResult(lib))!;
+ ResolvedUnitResult libResult = await driver.getResult(lib);
List<AnalysisError> errors = libResult.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY);
@@ -546,7 +546,7 @@
driver.addFile(lib);
- ResolvedUnitResult libResult = (await driver.getResult(lib))!;
+ ResolvedUnitResult libResult = await driver.getResult(lib);
List<AnalysisError> errors = libResult.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_NON_PART);
@@ -558,7 +558,7 @@
driver.priorityFiles = [a];
- ResolvedUnitResult result1 = (await driver.getResult(a))!;
+ ResolvedUnitResult result1 = await driver.getResult(a);
expect(driver.test.priorityResults, containsPair(a, result1));
await waitForIdleWithoutExceptions();
@@ -566,7 +566,7 @@
// Get the (cached) result, not reported to the stream.
{
- ResolvedUnitResult result2 = (await driver.getResult(a))!;
+ ResolvedUnitResult result2 = await driver.getResult(a);
expect(result2, same(result1));
expect(allResults, isEmpty);
}
@@ -574,7 +574,7 @@
// Get the (cached) result, reported to the stream.
{
ResolvedUnitResult result2 =
- (await driver.getResult(a, sendCachedToStream: true))!;
+ await driver.getResult(a, sendCachedToStream: true);
expect(result2, same(result1));
expect(allResults, hasLength(1));
@@ -590,21 +590,21 @@
driver.priorityFiles = [a];
- ResolvedUnitResult result1 = (await driver.getResult(a))!;
+ ResolvedUnitResult result1 = await driver.getResult(a);
expect(driver.test.priorityResults, containsPair(a, result1));
// Change a file.
// The cache is flushed.
driver.changeFile(a);
expect(driver.test.priorityResults, isEmpty);
- ResolvedUnitResult result2 = (await driver.getResult(a))!;
+ ResolvedUnitResult result2 = await driver.getResult(a);
expect(driver.test.priorityResults, containsPair(a, result2));
// Add a file.
// The cache is flushed.
driver.addFile(b);
expect(driver.test.priorityResults, isEmpty);
- ResolvedUnitResult result3 = (await driver.getResult(a))!;
+ ResolvedUnitResult result3 = await driver.getResult(a);
expect(driver.test.priorityResults, containsPair(a, result3));
// Remove a file.
@@ -621,7 +621,7 @@
driver.priorityFiles = [a];
- ResolvedUnitResult result1 = (await driver.getResult(a))!;
+ ResolvedUnitResult result1 = await driver.getResult(a);
expect(driver.test.priorityResults, hasLength(1));
expect(driver.test.priorityResults, containsPair(a, result1));
@@ -632,7 +632,7 @@
expect(driver.test.priorityResults, containsPair(a, result1));
// Get the result for "b".
- ResolvedUnitResult result2 = (await driver.getResult(b))!;
+ ResolvedUnitResult result2 = await driver.getResult(b);
expect(driver.test.priorityResults, hasLength(2));
expect(driver.test.priorityResults, containsPair(a, result1));
expect(driver.test.priorityResults, containsPair(b, result2));
@@ -648,11 +648,11 @@
var a = convertPath('/test/bin/a.dart');
newFile(a, content: 'var a = 1;');
- ResolvedUnitResult result1 = (await driver.getResult(a))!;
+ ResolvedUnitResult result1 = await driver.getResult(a);
expect(driver.test.priorityResults, isEmpty);
// The file is not priority, so its result is not cached.
- ResolvedUnitResult result2 = (await driver.getResult(a))!;
+ ResolvedUnitResult result2 = await driver.getResult(a);
expect(result2, isNot(same(result1)));
}
@@ -822,7 +822,7 @@
@A(5)
class C {}
''');
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
var atD = AstFinder.getClass(result.unit!, 'C').metadata[0];
var atDI = atD.elementAnnotation as ElementAnnotationImpl;
var value = atDI.evaluationResult!.value;
@@ -839,7 +839,7 @@
final value;
}
''');
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
var atD = AstFinder.getClass(result.unit!, 'C').metadata[0];
var atDI = atD.elementAnnotation as ElementAnnotationImpl;
var value = atDI.evaluationResult!.value!;
@@ -855,7 +855,7 @@
const x = 1;
@x class C {}
''');
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
Annotation at_x = AstFinder.getClass(result.unit!, 'C').metadata[0];
expect(at_x.elementAnnotation!.computeConstantValue()!.toIntValue(), 1);
}
@@ -865,7 +865,7 @@
const x = y + 1;
const y = x + 1;
''');
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x')
as TopLevelVariableElementImpl;
_expectCircularityError(x.evaluationResult!);
@@ -876,7 +876,7 @@
const x = y + 1;
const y = 1;
''');
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x');
var y = AstFinder.getTopLevelVariableElement(result.unit!, 'y');
expect(x.computeConstantValue()!.toIntValue(), 2);
@@ -893,7 +893,7 @@
class B {}
''');
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x');
expect(x.computeConstantValue(), isNotNull);
}
@@ -918,7 +918,7 @@
const c = C.WARNING;
const d = D.WARNING;
''');
- ResolvedUnitResult result = (await driver.getResult(b))!;
+ ResolvedUnitResult result = await driver.getResult(b);
expect(result.errors, isEmpty);
}
@@ -947,7 +947,7 @@
const C();
}
''');
- ResolvedUnitResult result = (await driver.getResult(b))!;
+ ResolvedUnitResult result = await driver.getResult(b);
expect(result.errors, isEmpty);
}
@@ -959,7 +959,7 @@
}
const x = const Derived();
''');
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x');
expect(x.computeConstantValue(), isNotNull);
}
@@ -968,7 +968,7 @@
addTestFile('''
const x = 1;
''');
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
var x = AstFinder.getTopLevelVariableElement(result.unit!, 'x');
expect(x.computeConstantValue()!.toIntValue(), 1);
}
@@ -977,14 +977,14 @@
var a = convertPath('/a.dart');
newFile(a, content: 'var V = 1;');
- (await driver.getResult(a))!;
+ await driver.getResult(a);
var session1 = driver.currentSession;
expect(session1, isNotNull);
modifyFile(a, 'var V = 2;');
driver.changeFile(a);
- (await driver.getResult(a))!;
+ await driver.getResult(a);
var session2 = driver.currentSession;
expect(session2, isNotNull);
@@ -1045,7 +1045,7 @@
export 'foo.dart';
''');
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
List<AnalysisError> errors = result.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST);
@@ -1056,7 +1056,7 @@
import 'foo.dart';
''');
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
List<AnalysisError> errors = result.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST);
@@ -1070,7 +1070,7 @@
}
''', priority: true);
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
List<AnalysisError> errors = result.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST);
@@ -1082,7 +1082,7 @@
part 'foo.dart';
''');
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
List<AnalysisError> errors = result.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST);
@@ -1122,12 +1122,12 @@
expect(allResults, isEmpty);
var result = await driver.getResult(templatePath);
- expect(result, isNull);
+ expect(result.state, ResultState.NOT_FILE_OF_URI);
expect(allExceptions, isEmpty);
expect(allResults, isEmpty);
- var element = await driver.getUnitElement(templatePath);
- expect(element, isNull);
+ var elementResult = await driver.getUnitElement(templatePath);
+ expect(elementResult.state, ResultState.NOT_FILE_OF_URI);
expect(allExceptions, isEmpty);
expect(allResults, isEmpty);
@@ -1147,7 +1147,7 @@
expect(driver.getCachedResult(a), isNull);
driver.priorityFiles = [a];
- ResolvedUnitResult result = (await driver.getResult(a))!;
+ ResolvedUnitResult result = await driver.getResult(a);
expect(driver.getCachedResult(a), same(result));
}
@@ -1284,7 +1284,7 @@
// Ensure that [a.dart] library cycle is loaded.
// So, `a.dart` is in the library context.
- (await driver.getResult(a))!;
+ await driver.getResult(a);
// Update the file, changing its API signature.
// Note that we don't call `changeFile`.
@@ -1298,14 +1298,14 @@
expect(driver.getFileSync(a).lineInfo.lineCount, 1);
// We have not read `a.dart`, so `A` is still not declared.
- expect(((await driver.getResult(b))!).errors, isNotEmpty);
+ expect((await driver.getResult(b)).errors, isNotEmpty);
// Notify the driver that the file was changed.
driver.changeFile(a);
// So, `class A {}` is declared now.
expect(driver.getFileSync(a).lineInfo.lineCount, 2);
- expect(((await driver.getResult(b))!).errors, isEmpty);
+ expect((await driver.getResult(b)).errors, isEmpty);
}
test_getFileSync_library() async {
@@ -1394,7 +1394,7 @@
String content = 'int f() => 42;';
addTestFile(content, priority: true);
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
expect(result.path, testFile);
expect(result.uri.toString(), 'package:test/test.dart');
expect(result.state, ResultState.VALID);
@@ -1426,14 +1426,14 @@
driver.addFile(b);
await waitForIdleWithoutExceptions();
- ResolvedUnitResult result = (await driver.getResult(b))!;
+ ResolvedUnitResult result = await driver.getResult(b);
expect(result.errors, isEmpty);
}
test_getResult_doesNotExist() async {
var a = convertPath('/test/lib/a.dart');
- ResolvedUnitResult result = (await driver.getResult(a))!;
+ ResolvedUnitResult result = await driver.getResult(a);
expect(result.path, a);
expect(result.uri.toString(), 'package:test/a.dart');
expect(result.state, ResultState.NOT_A_FILE);
@@ -1444,7 +1444,7 @@
String content = 'main() { int vv; }';
addTestFile(content, priority: true);
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
expect(result.path, testFile);
expect(result.errors, hasLength(1));
{
@@ -1467,7 +1467,7 @@
class B {}
''');
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
expect(result.path, testFile);
}
@@ -1479,7 +1479,7 @@
''';
addTestFile(content, priority: true);
- var result = (await driver.getResult(testFile))!;
+ var result = await driver.getResult(testFile);
expect(result.errors, isEmpty);
}
@@ -1498,7 +1498,7 @@
// No errors in b.dart
{
- ResolvedUnitResult result = (await driver.getResult(b))!;
+ ResolvedUnitResult result = await driver.getResult(b);
expect(result.errors, isEmpty);
}
@@ -1508,7 +1508,7 @@
// The unresolved URI error must be reported.
{
- ResolvedUnitResult result = (await driver.getResult(b))!;
+ ResolvedUnitResult result = await driver.getResult(b);
expect(
result.errors,
contains(predicate((AnalysisError e) =>
@@ -1521,7 +1521,7 @@
// No errors in b.dart again.
{
- ResolvedUnitResult result = (await driver.getResult(b))!;
+ ResolvedUnitResult result = await driver.getResult(b);
expect(result.errors, isEmpty);
}
}
@@ -1534,7 +1534,7 @@
''', priority: true);
await waitForIdleWithoutExceptions();
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
_assertClassFieldType(result.unit!, 'C', 'f', 'int');
}
@@ -1549,7 +1549,7 @@
''', priority: true);
await waitForIdleWithoutExceptions();
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
_assertClassMethodReturnType(result.unit!, 'A', 'm', 'int');
_assertClassMethodReturnType(result.unit!, 'B', 'm', 'int');
}
@@ -1562,7 +1562,7 @@
class C {}
''', priority: true);
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
ClassDeclaration c = result.unit!.declarations[1] as ClassDeclaration;
Annotation a = c.metadata[0];
expect(a.name.name, 'fff');
@@ -1589,7 +1589,7 @@
''';
addTestFile(content);
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
expect(result.path, testFile);
}
@@ -1601,7 +1601,7 @@
''';
addTestFile(content, priority: true);
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
expect(result.path, testFile);
// Has only exports for valid URIs.
List<ExportElement> imports = result.libraryElement.exports;
@@ -1618,7 +1618,7 @@
''';
addTestFile(content, priority: true);
- ResolvedUnitResult result = (await driver.getResult(testFile))!;
+ ResolvedUnitResult result = await driver.getResult(testFile);
expect(result.path, testFile);
// Has only imports for valid URIs.
List<ImportElement> imports = result.libraryElement.imports;
@@ -1639,7 +1639,7 @@
part '';
''';
addTestFile(content);
- (await driver.getResult(testFile))!;
+ await driver.getResult(testFile);
}
test_getResult_languageVersion() async {
@@ -1649,7 +1649,7 @@
class A{}
''');
- var result = (await driver.getResult(path))!;
+ var result = await driver.getResult(path);
var languageVersion = result.unit!.languageVersionToken!;
expect(languageVersion.major, 2);
expect(languageVersion.minor, 7);
@@ -1686,7 +1686,7 @@
// package:my_pkg/c.dart's import is erroneous, causing y's reference to z
// to be unresolved (and therefore have type dynamic).
{
- ResolvedUnitResult result = (await driver.getResult(a))!;
+ ResolvedUnitResult result = await driver.getResult(a);
expect(result.errors, isEmpty);
}
@@ -1696,7 +1696,7 @@
// successfully imports file:///my_pkg/test/d.dart, causing y to have an
// inferred type of String.
{
- ResolvedUnitResult result = (await driver.getResult(b))!;
+ ResolvedUnitResult result = await driver.getResult(b);
List<AnalysisError> errors = result.errors;
expect(errors, hasLength(1));
expect(errors[0].errorCode, CompileTimeErrorCode.INVALID_ASSIGNMENT);
@@ -1710,7 +1710,7 @@
var V;
''';
addTestFile(content);
- (await driver.getResult(testFile))!;
+ await driver.getResult(testFile);
}
test_getResult_nameConflict_local_typeInference() async {
@@ -1724,7 +1724,7 @@
}
''';
addTestFile(content);
- (await driver.getResult(testFile))!;
+ await driver.getResult(testFile);
}
test_getResult_notAbsolutePath() async {
@@ -1737,7 +1737,7 @@
var path = convertPath('/test/lib/test.txt');
newFile(path, content: 'class A {}');
- ResolvedUnitResult result = (await driver.getResult(path))!;
+ ResolvedUnitResult result = await driver.getResult(path);
expect(result, isNotNull);
expect(result.unit!.declaredElement!.types.map((e) => e.name), ['A']);
}
@@ -1749,7 +1749,7 @@
''';
addTestFile(content);
// Should not throw exceptions.
- (await driver.getResult(testFile))!;
+ await driver.getResult(testFile);
}
test_getResult_sameFile_twoUris() async {
@@ -1771,14 +1771,14 @@
await waitForIdleWithoutExceptions();
{
- ResolvedUnitResult result = (await driver.getResult(b))!;
+ ResolvedUnitResult result = await driver.getResult(b);
expect(_getImportSource(result.unit!, 0).uri.toString(),
'package:test/a.dart');
_assertTopLevelVarType(result.unit!, 'VB', 'A<int>');
}
{
- ResolvedUnitResult result = (await driver.getResult(c))!;
+ ResolvedUnitResult result = await driver.getResult(c);
expect(
_getImportSource(result.unit!, 0).uri,
toUri('/test/lib/a.dart'),
@@ -1805,7 +1805,7 @@
await waitForIdleWithoutExceptions();
{
- ResolvedUnitResult result = (await driver.getResult(a))!;
+ ResolvedUnitResult result = await driver.getResult(a);
_assertTopLevelVarType(result.unit!, 'A1', 'int');
_assertTopLevelVarType(result.unit!, 'A2', 'int');
}
@@ -1825,7 +1825,7 @@
driver.changeFile(a);
{
- ResolvedUnitResult result = (await driver.getResult(a))!;
+ ResolvedUnitResult result = await driver.getResult(a);
_assertTopLevelVarType(result.unit!, 'A1', 'double');
_assertTopLevelVarType(result.unit!, 'A2', 'double');
}
@@ -1837,7 +1837,7 @@
var resultFuture = driver.getResult(testFile);
driver.removeFile(testFile);
- var result = (await resultFuture)!;
+ var result = await resultFuture;
expect(result.path, testFile);
expect(result.unit!, isNotNull);
}
@@ -1850,8 +1850,8 @@
var future2 = driver.getResult(testFile);
// Both futures complete, with the same result.
- ResolvedUnitResult result1 = (await future1)!;
- ResolvedUnitResult result2 = (await future2)!;
+ ResolvedUnitResult result1 = await future1;
+ ResolvedUnitResult result2 = await future2;
expect(result2, same(result1));
expect(result1.path, testFile);
expect(result1.unit!, isNotNull);
@@ -1870,7 +1870,7 @@
// Ensure that [a.dart] library cycle is loaded.
// So, `a.dart` is in the library context.
- (await driver.getResult(a))!;
+ await driver.getResult(a);
// Update the file, changing its API signature.
// Note that we don't call `changeFile`.
@@ -1884,14 +1884,14 @@
expect(await driver.getSourceKind(a), SourceKind.PART);
// We have not read `a.dart`, so `A` is still not declared.
- expect(((await driver.getResult(b))!).errors, isNotEmpty);
+ expect((await driver.getResult(b)).errors, isNotEmpty);
// Notify the driver that the file was changed.
driver.changeFile(a);
// So, `class A {}` is declared now.
expect(await driver.getSourceKind(a), SourceKind.LIBRARY);
- expect(((await driver.getResult(b))!).errors, isEmpty);
+ expect((await driver.getResult(b)).errors, isEmpty);
}
test_getSourceKind_changeFile() async {
@@ -1945,7 +1945,7 @@
''';
addTestFile(content);
- UnitElementResult unitResult = (await driver.getUnitElement(testFile))!;
+ UnitElementResult unitResult = await driver.getUnitElement(testFile);
CompilationUnitElement unitElement = unitResult.element;
expect(unitElement.source.fullName, testFile);
expect(unitElement.functions.map((c) => c.name),
@@ -1973,7 +1973,7 @@
test_getUnitElement_notDart() async {
var path = convertPath('/test.txt');
newFile(path, content: 'class A {}');
- UnitElementResult unitResult = (await driver.getUnitElement(path))!;
+ UnitElementResult unitResult = await driver.getUnitElement(path);
expect(unitResult.element.types.map((e) => e.name), ['A']);
}
@@ -1985,7 +1985,7 @@
String signature = await driver.getUnitElementSignature(a);
expect(signature, isNotNull);
- UnitElementResult unitResult = (await driver.getUnitElement(a))!;
+ UnitElementResult unitResult = await driver.getUnitElement(a);
expect(unitResult.path, a);
expect(unitResult.signature, signature);
@@ -2047,7 +2047,7 @@
driver.addFile(a);
driver.addFile(b);
- (await driver.getResult(b))!;
+ await driver.getResult(b);
// Modify the library, but don't notify the driver.
// The driver should use the previous library content and elements.
@@ -2059,7 +2059,7 @@
}
''');
- var result = (await driver.getResult(b))!;
+ var result = await driver.getResult(b);
var c = _getTopLevelVar(result.unit!, 'c');
var typeC = c.declaredElement!.type as InterfaceType;
// The class C has an old field 'foo', not the new 'bar'.
@@ -2081,7 +2081,7 @@
driver.addFile(a);
driver.addFile(b);
- ResolvedUnitResult result = (await driver.getResult(a))!;
+ ResolvedUnitResult result = await driver.getResult(a);
expect(result.errors, isEmpty);
_assertTopLevelVarType(result.unit!, 'b', 'B');
}
@@ -2106,10 +2106,10 @@
''');
// This ensures that `a.dart` linked library is cached.
- (await driver.getResult(a))!;
+ await driver.getResult(a);
// Should not fail because of considering `b.dart` part as `a.dart` library.
- (await driver.getResult(c))!;
+ await driver.getResult(c);
}
test_instantiateToBounds_invalid() async {
@@ -2244,7 +2244,7 @@
// Ensure that [a.dart] library cycle is loaded.
// So, `a.dart` is in the library context.
- (await driver.getResult(a))!;
+ await driver.getResult(a);
// Update the file, changing its API signature.
// Note that we don't call `changeFile`.
@@ -2262,7 +2262,7 @@
// We have not read `a.dart`, so `A` is still not declared.
{
- var bResult = (await driver.getResult(b))!;
+ var bResult = await driver.getResult(b);
expect(bResult.errors, isNotEmpty);
}
@@ -2275,7 +2275,7 @@
expect(parseResult.unit.declarations, hasLength(1));
}
{
- var bResult = (await driver.getResult(b))!;
+ var bResult = await driver.getResult(b);
expect(bResult.errors, isEmpty);
}
}
@@ -2308,7 +2308,7 @@
// Ensure that [a.dart] library cycle is loaded.
// So, `a.dart` is in the library context.
- (await driver.getResult(a))!;
+ await driver.getResult(a);
// Update the file, changing its API signature.
// Note that we don't call `changeFile`.
@@ -2326,7 +2326,7 @@
// We have not read `a.dart`, so `A` is still not declared.
{
- var bResult = (await driver.getResult(b))!;
+ var bResult = await driver.getResult(b);
expect(bResult.errors, isNotEmpty);
}
@@ -2339,7 +2339,7 @@
expect(parseResult.unit.declarations, hasLength(1));
}
{
- var bResult = (await driver.getResult(b))!;
+ var bResult = await driver.getResult(b);
expect(bResult.errors, isEmpty);
}
}
@@ -2518,14 +2518,14 @@
// Process a.dart so that we know that it's a library for c.dart later.
{
- ResolvedUnitResult result = (await driver.getResult(a))!;
+ ResolvedUnitResult result = await driver.getResult(a);
expect(result.errors, isEmpty);
_assertTopLevelVarType(result.unit!, 'c', 'C');
}
// Now c.dart can be resolved without errors in the context of a.dart
{
- ResolvedUnitResult result = (await driver.getResult(c))!;
+ ResolvedUnitResult result = await driver.getResult(c);
expect(result.errors, isEmpty);
_assertTopLevelVarType(result.unit!, 'a', 'A');
_assertTopLevelVarType(result.unit!, 'b', 'B');
@@ -2557,7 +2557,7 @@
// b.dart will be analyzed after a.dart is analyzed.
// So, A and B references are resolved.
- ResolvedUnitResult result = (await driver.getResult(c))!;
+ ResolvedUnitResult result = await driver.getResult(c);
expect(result.errors, isEmpty);
_assertTopLevelVarType(result.unit!, 'a', 'A');
_assertTopLevelVarType(result.unit!, 'b', 'B');
@@ -2573,7 +2573,7 @@
driver.addFile(a);
// Analyze the library without the part.
- (await driver.getResult(a))!;
+ await driver.getResult(a);
// Create the part file.
// This should invalidate library file state (specifically the library
@@ -2585,7 +2585,7 @@
driver.changeFile(b);
// This should not crash.
- var result = (await driver.getResult(b))!;
+ var result = await driver.getResult(b);
expect(result.errors, isEmpty);
}
@@ -2602,7 +2602,7 @@
// There is no library which c.dart is a part of, so it has unresolved
// A and B references.
- ResolvedUnitResult result = (await driver.getResult(c))!;
+ ResolvedUnitResult result = await driver.getResult(c);
expect(result.errors, isNotEmpty);
expect(result.unit!, isNotNull);
}
@@ -2631,11 +2631,11 @@
driver.addFile(c);
// Process a.dart so that we know that it's a library for c.dart later.
- (await driver.getResult(a))!;
+ await driver.getResult(a);
// c.dart is resolve in the context of a.dart, knows 'A' and 'B'.
{
- UnitElementResult result = (await driver.getUnitElement(c))!;
+ UnitElementResult result = await driver.getUnitElement(c);
var partUnit = result.element;
assertType(partUnit.topLevelVariables[0].type, 'A');
@@ -2671,7 +2671,7 @@
// c.dart is resolve in the context of a.dart, knows 'A' and 'B'.
{
- UnitElementResult result = (await driver.getUnitElement(c))!;
+ UnitElementResult result = await driver.getUnitElement(c);
var partUnit = result.element;
assertType(partUnit.topLevelVariables[0].type, 'A');
@@ -2695,7 +2695,7 @@
// We don't know the library of c.dart, but we should get a result.
// The types "A" and "B" are unresolved.
{
- UnitElementResult result = (await driver.getUnitElement(c))!;
+ UnitElementResult result = await driver.getUnitElement(c);
var partUnit = result.element;
expect(partUnit.topLevelVariables[0].name, 'a');
@@ -2733,7 +2733,7 @@
String signatureBefore = await driver.getUnitElementSignature(c);
// Process a.dart so that we know that it's a library for c.dart later.
- (await driver.getResult(a))!;
+ await driver.getResult(a);
// The before and after signatures must be the same.
String signatureAfter = await driver.getUnitElementSignature(c);
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index b27723e..b053a6f 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -357,7 +357,7 @@
''');
var element = findElement.unnamedConstructor('A');
- CompilationUnit otherUnit = (await driver.getResult(other))!.unit!;
+ CompilationUnit otherUnit = (await driver.getResult(other)).unit!;
Element main = otherUnit.declaredElement!.functions[0];
var expected = [
ExpectedResult(main, SearchResultKind.REFERENCE,
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index e06ecf0..f1235ca 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -30,7 +30,7 @@
var relPath = 'dart/my/lib/a.dart';
newFile('$workspaceRootPath/bazel-bin/$relPath');
- var path = '$workspaceRootPath/$relPath';
+ var path = convertPath('$workspaceRootPath/$relPath');
var session = contextFor(path).currentSession;
var result = await session.getErrors(path);
expect(result.state, ResultState.NOT_FILE_OF_URI);
@@ -50,6 +50,56 @@
expect(result.errors, hasLength(1));
expect(result.uri.toString(), 'package:dart.my/a.dart');
}
+
+ void test_getResolvedUnit_notFileOfUri() async {
+ var relPath = 'dart/my/lib/a.dart';
+ newFile('$workspaceRootPath/bazel-bin/$relPath');
+
+ var path = convertPath('$workspaceRootPath/$relPath');
+ var session = contextFor(path).currentSession;
+ var result = await session.getResolvedUnit(path);
+ expect(result.state, ResultState.NOT_FILE_OF_URI);
+ expect(() => result.errors, throwsStateError);
+ }
+
+ void test_getResolvedUnit_valid() async {
+ var file = newFile(
+ '$workspaceRootPath/dart/my/lib/a.dart',
+ content: 'class A {}',
+ );
+
+ var session = contextFor(file.path).currentSession;
+ var result = await session.getResolvedUnit(file.path);
+ expect(result.state, ResultState.VALID);
+ expect(result.path, file.path);
+ expect(result.errors, isEmpty);
+ expect(result.uri.toString(), 'package:dart.my/a.dart');
+ }
+
+ void test_getUnitElement_notFileOfUri() async {
+ var relPath = 'dart/my/lib/a.dart';
+ newFile('$workspaceRootPath/bazel-bin/$relPath');
+
+ var path = convertPath('$workspaceRootPath/$relPath');
+ var session = contextFor(path).currentSession;
+ var result = await session.getUnitElement(path);
+ expect(result.state, ResultState.NOT_FILE_OF_URI);
+ expect(() => result.element, throwsStateError);
+ }
+
+ void test_getUnitElement_valid() async {
+ var file = newFile(
+ '$workspaceRootPath/dart/my/lib/a.dart',
+ content: 'class A {}',
+ );
+
+ var session = contextFor(file.path).currentSession;
+ var result = await session.getUnitElement(file.path);
+ expect(result.state, ResultState.VALID);
+ expect(result.path, file.path);
+ expect(result.element.types, hasLength(1));
+ expect(result.uri.toString(), 'package:dart.my/a.dart');
+ }
}
@reflectiveTest
@@ -153,7 +203,7 @@
test_getParsedLibrary_getElementDeclaration_notThisLibrary() async {
newFile(testPath, content: '');
- var resolvedUnit = (await session.getResolvedUnit(testPath))!;
+ var resolvedUnit = await session.getResolvedUnit(testPath);
var typeProvider = resolvedUnit.typeProvider;
var intClass = typeProvider.intType.element;
@@ -171,7 +221,7 @@
var parsedLibrary = session.getParsedLibrary(testPath);
- var unitElement = (await session.getUnitElement(testPath))!.element;
+ var unitElement = (await session.getUnitElement(testPath)).element;
var fooElement = unitElement.topLevelVariables[0];
expect(fooElement.name, 'foo');
@@ -481,7 +531,7 @@
class B {}
''');
- var unitResult = (await session.getResolvedUnit(testPath))!;
+ var unitResult = await session.getResolvedUnit(testPath);
expect(unitResult.session, session);
expect(unitResult.path, testPath);
expect(unitResult.uri, Uri.parse('package:test/test.dart'));
@@ -510,7 +560,7 @@
class B {}
''');
- var unitResult = (await session.getUnitElement(testPath))!;
+ var unitResult = await session.getUnitElement(testPath);
expect(unitResult.session, session);
expect(unitResult.path, testPath);
expect(unitResult.uri, Uri.parse('package:test/test.dart'));
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index 3f18aab..330c655 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -183,7 +183,7 @@
Future<ResolvedUnitResult> resolveFile(String path) async {
var analysisContext = contextFor(pathForContextSelection ?? path);
var session = analysisContext.currentSession;
- return (await session.getResolvedUnit(path))!;
+ return await session.getResolvedUnit(path);
}
@mustCallSuper
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index fb39435..fc25b65 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -2712,7 +2712,7 @@
var path = convertPath(testFilePath);
var analysisSession = contextFor(path).currentSession;
- var result = (await analysisSession.getUnitElement(path))!;
+ var result = await analysisSession.getUnitElement(path);
return result.element.library;
}
}
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index 08e94dd..19c16a4 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -173,7 +173,7 @@
var results = <Uri, ResolvedUnitResult>{};
for (var testUri in testUris) {
var path = resourceProvider.convertPath(testUri.path);
- var result = (await driver.getResult(path))!;
+ var result = await driver.getResult(path);
var errors =
result.errors.where((e) => e.severity == Severity.error).toList();
if (errors.isNotEmpty) {
diff --git a/tools/VERSION b/tools/VERSION
index 5f9ce2d..984173b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 119
+PRERELEASE 120
PRERELEASE_PATCH 0
\ No newline at end of file