Version 2.14.0-10.0.dev
Merge commit 'db2aceaa427c7f98686ac16da8e24123e023b737' into 'dev'
diff --git a/pkg/analysis_server/lib/src/edit/edit_dartfix.dart b/pkg/analysis_server/lib/src/edit/edit_dartfix.dart
index 2468615..e94f0f5 100644
--- a/pkg/analysis_server/lib/src/edit/edit_dartfix.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_dartfix.dart
@@ -224,8 +224,8 @@
continue;
break;
case SourceKind.LIBRARY:
- var result = await driver.getResolvedLibrary(path);
- if (result != null) {
+ var result = await driver.getResolvedLibrary2(path);
+ if (result is ResolvedLibraryResult) {
for (var unit in result.units) {
if (pathsToProcess.contains(unit.path) &&
!pathsProcessed.contains(unit.path)) {
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 65467c5..bf43bf5 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -176,8 +176,10 @@
if (kind != SourceKind.LIBRARY) {
continue;
}
- var library = await context.currentSession.getResolvedLibrary(path);
- await _fixErrorsInLibrary(library);
+ var library = await context.currentSession.getResolvedLibrary2(path);
+ if (library is ResolvedLibraryResult) {
+ await _fixErrorsInLibrary(library);
+ }
}
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
index 397af5c..b8535bd 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
@@ -85,7 +85,10 @@
if (element == libraryElement.definingCompilationUnit) {
// Handle part-of directives in this library
var libraryResult = await driver.currentSession
- .getResolvedLibraryByElement(libraryElement);
+ .getResolvedLibraryByElement2(libraryElement);
+ if (libraryResult is! ResolvedLibraryResult) {
+ return changeBuilder.sourceChange;
+ }
var definingUnitResult = libraryResult.units!.first;
for (var result in libraryResult.units!) {
if (result.isPart) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
index e845848..60665b9 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
@@ -5,6 +5,8 @@
// @dart = 2.9
import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
+import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/analysis/session.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -35,7 +37,7 @@
var testFile = convertPath('/home/test/lib/test.dart');
addSource(testFile, '');
- var result = await session.getResolvedLibrary(testFile);
+ var result = await session.getResolvedLibraryValid(testFile);
var sets = manager.forLibrary(result.element);
expect(sets, hasLength(2));
}
@@ -46,7 +48,7 @@
addSource('/home/test/pubspec.yaml', '');
var testFile = convertPath('/home/test/lib/test.dart');
addSource(testFile, '');
- var result = await session.getResolvedLibrary(testFile);
+ var result = await session.getResolvedLibraryValid(testFile);
var sets = manager.forLibrary(result.element);
expect(sets, hasLength(0));
}
@@ -67,3 +69,9 @@
''');
}
}
+
+extension on AnalysisSession {
+ Future<ResolvedLibraryResult> getResolvedLibraryValid(String path) async {
+ return await getResolvedLibrary2(path) as ResolvedLibraryResult;
+ }
+}
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index aed9fad..bfe3d95 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -3,6 +3,10 @@
Use `AnalysisSession.getUnitElement2()` instead.
* Deprecated `AnalysisSession.getResolvedUnit()`.
Use `AnalysisSession.getResolvedUnit2()` instead.
+* Deprecated `AnalysisSession.getResolvedLibrary()`.
+ Use `AnalysisSession.getResolvedLibrary2()` instead.
+* Deprecated `AnalysisSession.getResolvedLibraryByElement()`.
+ Use `AnalysisSession.getResolvedLibraryByElement2()` instead.
## 1.4.0
* Deprecated `TypeProvider.nonSubtypableClasses`.
diff --git a/pkg/analyzer/lib/dart/analysis/results.dart b/pkg/analyzer/lib/dart/analysis/results.dart
index ca07131..3c6107a 100644
--- a/pkg/analyzer/lib/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/dart/analysis/results.dart
@@ -42,6 +42,12 @@
List<AnalysisError> get errors;
}
+/// The type of [InvalidResult] returned when the given URI cannot be resolved.
+///
+/// Clients may not extend, implement or mix-in this class.
+class CannotResolveUriResult
+ implements InvalidResult, SomeResolvedLibraryResult {}
+
/// The declaration of an [Element].
abstract class ElementDeclarationResult {
/// The [Element] that this object describes.
@@ -86,13 +92,31 @@
///
/// Clients may not extend, implement or mix-in this class.
class InvalidPathResult
- implements InvalidResult, SomeResolvedUnitResult, SomeUnitElementResult {}
+ implements
+ InvalidResult,
+ SomeResolvedLibraryResult,
+ SomeResolvedUnitResult,
+ SomeUnitElementResult {}
/// The base class for any invalid result.
///
/// Clients may not extend, implement or mix-in this class.
abstract class InvalidResult {}
+/// The type of [InvalidResult] returned when the given element was not
+/// created by the requested session.
+///
+/// Clients may not extend, implement or mix-in this class.
+class NotElementOfThisSessionResult
+ implements InvalidResult, SomeResolvedLibraryResult {}
+
+/// The type of [InvalidResult] returned when the given file is not a library,
+/// but a part of a library.
+///
+/// Clients may not extend, implement or mix-in this class.
+class NotLibraryButPartResult
+ implements InvalidResult, SomeResolvedLibraryResult {}
+
/// The type of [InvalidResult] returned when the given file path does not
/// represent the corresponding URI.
///
@@ -102,7 +126,11 @@
///
/// Clients may not extend, implement or mix-in this class.
class NotPathOfUriResult
- implements InvalidResult, SomeResolvedUnitResult, SomeUnitElementResult {}
+ implements
+ InvalidResult,
+ SomeResolvedLibraryResult,
+ SomeResolvedUnitResult,
+ SomeUnitElementResult {}
/// The result of building parsed AST(s) for the whole library.
///
@@ -155,7 +183,8 @@
/// The result of building resolved AST(s) for the whole library.
///
/// Clients may not extend, implement or mix-in this class.
-abstract class ResolvedLibraryResult implements AnalysisResult {
+abstract class ResolvedLibraryResult
+ implements SomeResolvedLibraryResult, AnalysisResult {
/// The element representing this library.
LibraryElement? get element;
@@ -219,6 +248,14 @@
VALID
}
+/// The result of building resolved AST(s) for the whole library.
+///
+/// Clients may not extend, implement or mix-in this class.
+///
+/// There are existing implementations of this class.
+/// [ResolvedLibraryResult] represents a valid result.
+abstract class SomeResolvedLibraryResult {}
+
/// The result of building a resolved AST for a single file. The errors returned
/// include both syntactic and semantic errors.
///
@@ -255,3 +292,10 @@
/// to need to be re-analyzed.
String get signature;
}
+
+/// The type of [InvalidResult] returned when the given URI corresponds to
+/// a library that is served from an external summary bundle.
+///
+/// Clients may not extend, implement or mix-in this class.
+class UriOfExternalLibraryResult
+ implements InvalidResult, SomeResolvedLibraryResult {}
diff --git a/pkg/analyzer/lib/dart/analysis/session.dart b/pkg/analyzer/lib/dart/analysis/session.dart
index ff10b22..b0f0f77 100644
--- a/pkg/analyzer/lib/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/dart/analysis/session.dart
@@ -69,16 +69,30 @@
///
/// Throw [ArgumentError] if the given [path] is not the defining compilation
/// unit for a library (that is, is a part of a library).
+ @Deprecated('Use getResolvedLibrary2() instead')
Future<ResolvedLibraryResult> getResolvedLibrary(String path);
/// Return a future that will complete with information about the results of
+ /// resolving all of the files in the library with the given absolute,
+ /// normalized [path].
+ Future<SomeResolvedLibraryResult> getResolvedLibrary2(String path);
+
+ /// Return a future that will complete with information about the results of
/// resolving all of the files in the library with the library [element].
///
/// Throw [ArgumentError] if the [element] was not produced by this session.
+ @Deprecated('Use getResolvedLibraryByElement2() instead')
Future<ResolvedLibraryResult> getResolvedLibraryByElement(
LibraryElement element);
/// Return a future that will complete with information about the results of
+ /// resolving all of the files in the library with the library [element].
+ ///
+ /// Throw [ArgumentError] if the [element] was not produced by this session.
+ Future<SomeResolvedLibraryResult> getResolvedLibraryByElement2(
+ LibraryElement element);
+
+ /// Return a future that will complete with information about the results of
/// resolving the file with the given absolute, normalized [path].
@Deprecated('Use getResolvedUnit2() instead')
Future<ResolvedUnitResult> getResolvedUnit(String path);
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index ca35727..83112cd 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -155,7 +155,7 @@
final _requestedFiles = <String, List<Completer<ResolvedUnitResult>>>{};
/// The mapping from the files for which analysis was requested using
- /// [getResolvedLibrary] to the [Completer]s to report the result.
+ /// [getResolvedLibrary2] to the [Completer]s to report the result.
final _requestedLibraries =
<String, List<Completer<ResolvedLibraryResult>>>{};
@@ -713,22 +713,56 @@
/// state (including new states of the files previously reported using
/// [changeFile]), prior to the next time the analysis state transitions
/// to "idle".
- Future<ResolvedLibraryResult> getResolvedLibrary(String path) {
+ @Deprecated('Use getResolvedLibrary2() instead')
+ Future<ResolvedLibraryResult> getResolvedLibrary(String path) async {
_throwIfNotAbsolutePath(path);
+
+ var result = await getResolvedLibrary2(path);
+
+ if (result is NotPathOfUriResult) {
+ return Future.value(); // bug?
+ }
+
+ if (result is NotLibraryButPartResult) {
+ throw ArgumentError('Is a part: $path');
+ }
+
+ return result as ResolvedLibraryResult;
+ }
+
+ /// Return a [Future] that completes with a [ResolvedLibraryResult] for the
+ /// Dart library file with the given [path]. If the file cannot be analyzed,
+ /// the [Future] completes with an [InvalidResult].
+ ///
+ /// The [path] must be absolute and normalized.
+ ///
+ /// The [path] can be any file - explicitly or implicitly analyzed, or neither.
+ ///
+ /// Invocation of this method causes the analysis state to transition to
+ /// "analyzing" (if it is not in that state already), the driver will produce
+ /// the resolution result for 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<SomeResolvedLibraryResult> getResolvedLibrary2(String path) {
+ if (!_isAbsolutePath(path)) {
+ return Future.value(
+ InvalidPathResult(),
+ );
+ }
+
if (!_fsState.hasUri(path)) {
- return Future.value();
+ return Future.value(
+ NotPathOfUriResult(),
+ );
}
FileState file = _fsState.getFileForPath(path);
- if (file.isExternalLibrary) {
- return Future.value(
- ResolvedLibraryResultImpl.external(currentSession, file.uri),
- );
- }
-
if (file.isPart) {
- throw ArgumentError('Is a part: $path');
+ return Future.value(
+ NotLibraryButPartResult(),
+ );
}
// Schedule analysis.
@@ -752,6 +786,7 @@
/// state (including new states of the files previously reported using
/// [changeFile]), prior to the next time the analysis state transitions
/// to "idle".
+ @Deprecated('Use getResolvedLibraryByUri2() instead')
Future<ResolvedLibraryResult> getResolvedLibraryByUri(Uri uri) {
var fileOr = _fsState.getFileForUri(uri);
return fileOr.map(
@@ -770,6 +805,34 @@
);
}
+ /// Return a [Future] that completes with a [ResolvedLibraryResult] for the
+ /// Dart library file with the given [uri]. If the file cannot be analyzed,
+ /// the [Future] completes with an [InvalidResult].
+ ///
+ /// Invocation of this method causes the analysis state to transition to
+ /// "analyzing" (if it is not in that state already), the driver will produce
+ /// the resolution result for 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<SomeResolvedLibraryResult> getResolvedLibraryByUri2(Uri uri) {
+ var fileOr = _fsState.getFileForUri(uri);
+ return fileOr.map(
+ (file) async {
+ if (file == null) {
+ return CannotResolveUriResult();
+ }
+ if (file.isPart) {
+ return NotLibraryButPartResult();
+ }
+ return getResolvedLibrary2(file.path);
+ },
+ (externalLibrary) async {
+ return UriOfExternalLibraryResult();
+ },
+ );
+ }
+
ApiSignature getResolvedUnitKeyByPath(String path) {
_throwIfNotAbsolutePath(path);
ApiSignature signature = getUnitKeyByPath(path);
@@ -808,7 +871,8 @@
}
/// Return a [Future] that completes with a [SomeResolvedUnitResult] for the
- /// Dart file with the given [path].
+ /// Dart file with the given [path]. If the file cannot be analyzed,
+ /// the [Future] completes with an [InvalidResult].
///
/// The [path] must be absolute and normalized.
///
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 7401cb1..d8e7821 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -63,7 +63,7 @@
required DeclaredVariables declaredVariables,
required SourceFactory sourceFactory,
required this.externalSummaries,
- }) : logger = logger,
+ }) : logger = logger,
byteStore = byteStore,
analysisSession = session {
var synchronousSession =
diff --git a/pkg/analyzer/lib/src/dart/analysis/session.dart b/pkg/analyzer/lib/src/dart/analysis/session.dart
index 9af60f9..1d7915d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session.dart
@@ -100,6 +100,7 @@
return _driver.parseFileSync(path);
}
+ @Deprecated('Use getResolvedLibrary2() instead')
@override
Future<ResolvedLibraryResult> getResolvedLibrary(String path) {
_checkConsistency();
@@ -107,6 +108,13 @@
}
@override
+ Future<SomeResolvedLibraryResult> getResolvedLibrary2(String path) {
+ _checkConsistency();
+ return _driver.getResolvedLibrary2(path);
+ }
+
+ @Deprecated('Use getResolvedLibraryByElement2() instead')
+ @override
Future<ResolvedLibraryResult> getResolvedLibraryByElement(
LibraryElement element) {
_checkConsistency();
@@ -114,6 +122,21 @@
return _driver.getResolvedLibraryByUri(element.source.uri);
}
+ @override
+ Future<SomeResolvedLibraryResult> getResolvedLibraryByElement2(
+ LibraryElement element,
+ ) {
+ _checkConsistency();
+
+ if (element.session != this) {
+ return Future.value(
+ NotElementOfThisSessionResult(),
+ );
+ }
+
+ return _driver.getResolvedLibraryByUri2(element.source.uri);
+ }
+
@Deprecated('Use getResolvedUnit2() instead')
@override
Future<ResolvedUnitResult> getResolvedUnit(String path) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/session_helper.dart b/pkg/analyzer/lib/src/dart/analysis/session_helper.dart
index 235e67d..dbaaefd 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session_helper.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session_helper.dart
@@ -36,22 +36,17 @@
Future<ElementDeclarationResult?> getElementDeclaration(
Element element) async {
var libraryPath = element.library!.source.fullName;
-
- // This should not happen in valid code, but sometimes we treat a file
- // with a `part of` directive as a library, because there is no library
- // that contains this part, or because it is imported as a library.
- if (isPart(libraryPath)) {
- return null;
- }
-
var resolvedLibrary = await _getResolvedLibrary(libraryPath);
- return resolvedLibrary.getElementDeclaration(element);
+ return resolvedLibrary?.getElementDeclaration(element);
}
/// Return the resolved unit that declares the given [element].
Future<ResolvedUnitResult?> getResolvedUnitByElement(Element element) async {
var libraryPath = element.library!.source.fullName;
var resolvedLibrary = await _getResolvedLibrary(libraryPath);
+ if (resolvedLibrary == null) {
+ return null;
+ }
var unitPath = element.source!.fullName;
return resolvedLibrary.units!.singleWhere((resolvedUnit) {
@@ -79,11 +74,13 @@
}
/// Return a newly resolved, or cached library with the given [path].
- Future<ResolvedLibraryResult> _getResolvedLibrary(String path) async {
+ Future<ResolvedLibraryResult?> _getResolvedLibrary(String path) async {
var result = _resolvedLibraries[path];
if (result == null) {
- result = await session.getResolvedLibrary(path);
- _resolvedLibraries[path] = result;
+ var some = await session.getResolvedLibrary2(path);
+ if (some is ResolvedLibraryResult) {
+ result = _resolvedLibraries[path] = some;
+ }
}
return result;
}
diff --git a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
index df022bf..a49f404 100644
--- a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
@@ -203,7 +203,7 @@
}
@override
- Future<ResolvedLibraryResult> getResolvedLibrary(String path) async {
+ Future<SomeResolvedLibraryResult> getResolvedLibrary2(String path) async {
return analysisContext.fileResolver.resolveLibrary(path: path);
}
diff --git a/pkg/analyzer/test/src/dart/analysis/dependency/base.dart b/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
index 3eec88f..6570844 100644
--- a/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/src/dart/analysis/dependency/library_builder.dart';
import 'package:analyzer/src/dart/analysis/dependency/node.dart';
@@ -137,7 +138,8 @@
Future<List<CompilationUnit>> _resolveLibrary(String libraryPath) async {
var session = contextFor(libraryPath).currentSession;
- var resolvedLibrary = await session.getResolvedLibrary(libraryPath);
+ var resolvedLibrary = await session.getResolvedLibrary2(libraryPath);
+ resolvedLibrary as ResolvedLibraryResult;
return resolvedLibrary.units!.map((ru) => ru.unit!).toList();
}
}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index fd84578..c1dac7b 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -1122,21 +1122,16 @@
expect(allExceptions, isEmpty);
expect(allResults, isEmpty);
- var result = await driver.getResult(templatePath);
- expect(result.state, ResultState.NOT_FILE_OF_URI);
- expect(allExceptions, isEmpty);
- expect(allResults, isEmpty);
-
{
- var elementResult = await driver.getUnitElement(templatePath);
- expect(elementResult.state, ResultState.NOT_FILE_OF_URI);
+ var result = await driver.getResult(templatePath);
+ expect(result.state, ResultState.NOT_FILE_OF_URI);
expect(allExceptions, isEmpty);
expect(allResults, isEmpty);
}
{
- var elementResult = await driver.getUnitElement2(templatePath);
- expect(elementResult, isA<NotPathOfUriResult>());
+ var result = await driver.getUnitElement(templatePath);
+ expect(result.state, ResultState.NOT_FILE_OF_URI);
expect(allExceptions, isEmpty);
expect(allResults, isEmpty);
}
@@ -1183,22 +1178,23 @@
expect(allExceptions, isEmpty);
expect(allResults, isEmpty);
- var result = await driver.getResult2(templatePath);
- expect(result, isA<NotPathOfUriResult>());
- expect(allExceptions, isEmpty);
- expect(allResults, isEmpty);
-
{
- // ignore: deprecated_member_use_from_same_package
- var elementResult = await driver.getUnitElement(templatePath);
- expect(elementResult.state, ResultState.NOT_FILE_OF_URI);
+ var result = await driver.getResolvedLibrary2(templatePath);
+ expect(result, isA<NotPathOfUriResult>());
expect(allExceptions, isEmpty);
expect(allResults, isEmpty);
}
{
- var elementResult = await driver.getUnitElement2(templatePath);
- expect(elementResult, isA<NotPathOfUriResult>());
+ var result = await driver.getResult2(templatePath);
+ expect(result, isA<NotPathOfUriResult>());
+ expect(allExceptions, isEmpty);
+ expect(allResults, isEmpty);
+ }
+
+ {
+ var result = await driver.getUnitElement2(templatePath);
+ expect(result, isA<NotPathOfUriResult>());
expect(allExceptions, isEmpty);
expect(allResults, isEmpty);
}
@@ -1462,6 +1458,58 @@
}, throwsArgumentError);
}
+ test_getResolvedLibrary2() async {
+ var content = 'class A {}';
+ addTestFile(content);
+ var result = await driver.getResolvedLibrary2(testFile);
+ result as ResolvedLibraryResult;
+ expect(result.units, hasLength(1));
+ expect(result.units![0].path, testFile);
+ expect(result.units![0].content, content);
+ expect(result.units![0].unit!, isNotNull);
+ expect(result.units![0].errors, isEmpty);
+ }
+
+ test_getResolvedLibrary2_invalidPath_notAbsolute() async {
+ var result = await driver.getResolvedLibrary2('not_absolute.dart');
+ expect(result, isA<InvalidPathResult>());
+ }
+
+ test_getResolvedLibrary2_notLibraryButPart() async {
+ addTestFile('part of my;');
+ var result = await driver.getResolvedLibrary2(testFile);
+ expect(result, isA<NotLibraryButPartResult>());
+ }
+
+ test_getResolvedLibraryByUri2() async {
+ var content = 'class A {}';
+ addTestFile(content);
+
+ var uri = Uri.parse('package:test/test.dart');
+ var result = await driver.getResolvedLibraryByUri2(uri);
+ result as ResolvedLibraryResult;
+ expect(result.uri, uri);
+ expect(result.element!.source.fullName, testFile);
+ expect(result.units, hasLength(1));
+ expect(result.units![0].uri, uri);
+ expect(result.units![0].path, testFile);
+ expect(result.units![0].content, content);
+ }
+
+ test_getResolvedLibraryByUri2_notLibrary() async {
+ addTestFile('part of my;');
+
+ var uri = Uri.parse('package:test/test.dart');
+ var result = await driver.getResolvedLibraryByUri2(uri);
+ expect(result, isA<NotLibraryButPartResult>());
+ }
+
+ test_getResolvedLibraryByUri2_unresolvedUri() async {
+ var uri = Uri.parse('package:unknown/a.dart');
+ var result = await driver.getResolvedLibraryByUri2(uri);
+ expect(result, isA<CannotResolveUriResult>());
+ }
+
test_getResult() async {
String content = 'int f() => 42;';
addTestFile(content, priority: true);
@@ -1483,7 +1531,7 @@
expect(allResults, [result]);
}
- test_getResult2_notAbsolutePath() async {
+ test_getResult2_invalidPath_notAbsolute() async {
var result = await driver.getResult2('not_absolute.dart');
expect(result, isA<InvalidPathResult>());
}
@@ -2056,11 +2104,11 @@
import 'package:test/b.dart';
''');
- await driver.getResolvedLibrary(a);
+ await driver.getResolvedLibrary2(a);
await driver.getUnitElement2(b);
}
- test_getUnitElement2_notAbsolutePath() async {
+ test_getUnitElement2_invalidPath_notAbsolute() async {
var result = await driver.getUnitElement2('not_absolute.dart');
expect(result, isA<InvalidPathResult>());
}
diff --git a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
index 71c8f83..6984d0e 100644
--- a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
@@ -455,8 +455,8 @@
return library.getElementDeclaration(element);
}
- Future<ResolvedLibraryResult> _getResolvedLibrary(String path) {
+ Future<ResolvedLibraryResult> _getResolvedLibrary(String path) async {
var session = contextFor(path).currentSession;
- return session.getResolvedLibrary(path);
+ return await session.getResolvedLibrary2(path) as ResolvedLibraryResult;
}
}
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 7812b9d..8b85e92 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -5,7 +5,9 @@
import 'package:analyzer/dart/analysis/analysis_context.dart';
import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/generated/source.dart';
@@ -51,6 +53,16 @@
expect(result.uri.toString(), 'package:dart.my/a.dart');
}
+ void test_getResolvedLibrary2_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.getResolvedLibrary2(path);
+ expect(result, isA<NotPathOfUriResult>());
+ }
+
void test_getResolvedUnit2_notFileOfUri() async {
var relPath = 'dart/my/lib/a.dart';
newFile('$workspaceRootPath/bazel-bin/$relPath');
@@ -103,6 +115,17 @@
expect(result.uri.toString(), 'package:dart.my/a.dart');
}
+ void test_getUnitElement2_invalidPath_notAbsolute() async {
+ var file = newFile(
+ '$workspaceRootPath/dart/my/lib/a.dart',
+ content: 'class A {}',
+ );
+
+ var session = contextFor(file.path).currentSession;
+ var result = await session.getUnitElement2('not_absolute.dart');
+ expect(result, isA<InvalidPathResult>());
+ }
+
void test_getUnitElement2_notPathOfUri() async {
var relPath = 'dart/my/lib/a.dart';
newFile('$workspaceRootPath/bazel-bin/$relPath');
@@ -120,8 +143,7 @@
);
var session = contextFor(file.path).currentSession;
- var result = await session.getUnitElement2(file.path);
- result as UnitElementResult;
+ var result = await session.getUnitElementValid(file.path);
expect(result.state, ResultState.VALID);
expect(result.path, file.path);
expect(result.element.types, hasLength(1));
@@ -481,7 +503,7 @@
''';
newFile(b, content: bContent);
- var resolvedLibrary = await session.getResolvedLibrary(a);
+ var resolvedLibrary = await session.getResolvedLibraryValid(a);
expect(resolvedLibrary.session, session);
expect(resolvedLibrary.path, a);
expect(resolvedLibrary.uri, Uri.parse('package:test/a.dart'));
@@ -528,10 +550,22 @@
expect(bNode.declaredElement!.name, 'B');
}
+ test_getResolvedLibrary2_invalidPath_notAbsolute() async {
+ var result = await session.getResolvedLibrary2('not_absolute.dart');
+ expect(result, isA<InvalidPathResult>());
+ }
+
+ test_getResolvedLibrary2_notLibrary() async {
+ newFile(testPath, content: 'part of "a.dart";');
+
+ var result = await session.getResolvedLibrary2(testPath);
+ expect(result, isA<NotLibraryButPartResult>());
+ }
+
test_getResolvedLibrary_getElementDeclaration_notThisLibrary() async {
newFile(testPath, content: '');
- var resolvedLibrary = await session.getResolvedLibrary(testPath);
+ var resolvedLibrary = await session.getResolvedLibraryValid(testPath);
expect(() {
var intClass = resolvedLibrary.typeProvider.intType.element;
@@ -544,7 +578,7 @@
int foo = 0;
''');
- var resolvedLibrary = await session.getResolvedLibrary(testPath);
+ var resolvedLibrary = await session.getResolvedLibraryValid(testPath);
var unitElement = resolvedLibrary.element!.definingCompilationUnit;
var fooElement = unitElement.topLevelVariables[0];
@@ -570,7 +604,7 @@
part 'c.dart';
''');
- var resolvedLibrary = await session.getResolvedLibrary(testPath);
+ var resolvedLibrary = await session.getResolvedLibraryValid(testPath);
expect(resolvedLibrary.units, hasLength(3));
expect(
@@ -587,14 +621,16 @@
);
}
+ @deprecated
test_getResolvedLibrary_notLibrary() async {
newFile(testPath, content: 'part of "a.dart";');
- expect(() {
- session.getResolvedLibrary(testPath);
+ expect(() async {
+ await session.getResolvedLibrary(testPath);
}, throwsArgumentError);
}
+ @deprecated
test_getResolvedLibraryByElement() async {
newFile(testPath, content: '');
@@ -608,6 +644,32 @@
expect(resolvedLibrary.units![0].unit!.declaredElement, isNotNull);
}
+ test_getResolvedLibraryByElement2() async {
+ newFile(testPath, content: '');
+
+ var element = await session.getLibraryByUri('package:test/test.dart');
+
+ var result = await session.getResolvedLibraryByElementValid(element);
+ expect(result.session, session);
+ expect(result.path, testPath);
+ expect(result.uri, Uri.parse('package:test/test.dart'));
+ expect(result.units, hasLength(1));
+ expect(result.units![0].unit!.declaredElement, isNotNull);
+ }
+
+ test_getResolvedLibraryByElement2_differentSession() async {
+ newFile(testPath, content: '');
+
+ var element = await session.getLibraryByUri('package:test/test.dart');
+
+ var aaaSession =
+ contextCollection.contextFor(aaaContextPath).currentSession;
+
+ var result = await aaaSession.getResolvedLibraryByElement2(element);
+ expect(result, isA<NotElementOfThisSessionResult>());
+ }
+
+ @deprecated
test_getResolvedLibraryByElement_differentSession() async {
newFile(testPath, content: '');
@@ -690,8 +752,7 @@
class B {}
''');
- var unitResult = await session.getUnitElement2(testPath);
- unitResult as UnitElementResult;
+ var unitResult = await session.getUnitElementValid(testPath);
expect(unitResult.session, session);
expect(unitResult.path, testPath);
expect(unitResult.uri, Uri.parse('package:test/test.dart'));
@@ -705,3 +766,18 @@
expect(session.resourceProvider, resourceProvider);
}
}
+
+extension on AnalysisSession {
+ Future<UnitElementResult> getUnitElementValid(String path) async {
+ return await getUnitElement2(path) as UnitElementResult;
+ }
+
+ Future<ResolvedLibraryResult> getResolvedLibraryValid(String path) async {
+ return await getResolvedLibrary2(path) as ResolvedLibraryResult;
+ }
+
+ Future<ResolvedLibraryResult> getResolvedLibraryByElementValid(
+ LibraryElement element) async {
+ return await getResolvedLibraryByElement2(element) as ResolvedLibraryResult;
+ }
+}
diff --git a/pkg/nnbd_migration/lib/migration_cli.dart b/pkg/nnbd_migration/lib/migration_cli.dart
index 0590138..e90259e 100644
--- a/pkg/nnbd_migration/lib/migration_cli.dart
+++ b/pkg/nnbd_migration/lib/migration_cli.dart
@@ -1072,8 +1072,8 @@
continue;
break;
case SourceKind.LIBRARY:
- var result = await driver.getResolvedLibrary(path);
- if (result != null) {
+ var result = await driver.getResolvedLibrary2(path);
+ if (result is ResolvedLibraryResult) {
for (var unit in result.units) {
if (!pathsProcessed.contains(unit.path)) {
await process(unit);
diff --git a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
index 39c2926..75bdd5b 100644
--- a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
@@ -96,8 +96,8 @@
for (var filePath in sources) {
progressBar.tick();
var session = driverProvider.getAnalysisSession(filePath);
- if (!session.getFile(filePath).isPart) {
- var result = await session.getResolvedLibrary(filePath);
+ var result = await session.getResolvedLibrary2(filePath);
+ if (result is ResolvedLibraryResult) {
for (var unitResult in result.units) {
var sourceInfo =
sourceInfoMap[unitResult.unit.declaredElement.source];
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index 7f5df1c..70abd3d5 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:nnbd_migration/nnbd_migration.dart';
import 'package:test/test.dart';
@@ -62,8 +63,9 @@
removeViaComments: removeViaComments,
warnOnWeakCode: warnOnWeakCode);
for (var path in input.keys) {
- if (!(session.getFile(path)).isPart) {
- for (var unit in (await session.getResolvedLibrary(path)).units) {
+ var resolvedLibrary = await session.getResolvedLibrary2(path);
+ if (resolvedLibrary is ResolvedLibraryResult) {
+ for (var unit in resolvedLibrary.units) {
migration.prepareInput(unit);
}
}
@@ -71,16 +73,18 @@
expect(migration.unmigratedDependencies, isEmpty);
_betweenStages();
for (var path in input.keys) {
- if (!(session.getFile(path)).isPart) {
- for (var unit in (await session.getResolvedLibrary(path)).units) {
+ var resolvedLibrary = await session.getResolvedLibrary2(path);
+ if (resolvedLibrary is ResolvedLibraryResult) {
+ for (var unit in resolvedLibrary.units) {
migration.processInput(unit);
}
}
}
_betweenStages();
for (var path in input.keys) {
- if (!(session.getFile(path)).isPart) {
- for (var unit in (await session.getResolvedLibrary(path)).units) {
+ var resolvedLibrary = await session.getResolvedLibrary2(path);
+ if (resolvedLibrary is ResolvedLibraryResult) {
+ for (var unit in resolvedLibrary.units) {
migration.finalizeInput(unit);
}
}
diff --git a/tools/VERSION b/tools/VERSION
index 1916272..bcb0d00 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 9
+PRERELEASE 10
PRERELEASE_PATCH 0
\ No newline at end of file