Version 2.18.0-271.0.dev
Merge commit 'c481790c506960fa57d5b2fd9cc3660143659f89' into 'dev'
diff --git a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
index 5033928..6393fdb 100644
--- a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
@@ -17,10 +17,10 @@
@reflectiveTest
class OptionsIntegrationTest extends AbstractAnalysisServerIntegrationTest {
- void optionsAnalysisSetup() {
+ Future<void> optionsAnalysisSetup() async {
// Add an empty Dart file; required to trigger analysis (#35383).
writeFile(sourcePath('test.dart'), '');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
}
Future<void> test_option_warning_optionFile() async {
@@ -31,7 +31,7 @@
- camel_case_typo # :)
''');
- optionsAnalysisSetup();
+ await optionsAnalysisSetup();
await analysisFinished;
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index d209eee..445560e 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -36,19 +36,19 @@
expect(errors[0].location.file, equals(filePath));
}
- Future<void> test_detect_simple_error() {
+ Future<void> test_detect_simple_error() async {
var pathname = sourcePath('test.dart');
writeFile(pathname, '''
void f() {
print(null) // parse error: missing ';'
}''');
- standardAnalysisSetup();
- return analysisFinished.then((_) {
- expect(currentAnalysisErrors[pathname], isList);
- var errors = existingErrorsForFile(pathname);
- expect(errors, hasLength(1));
- expect(errors[0].location.file, equals(pathname));
- });
+ await standardAnalysisSetup();
+
+ await analysisFinished;
+ expect(currentAnalysisErrors[pathname], isList);
+ var errors = existingErrorsForFile(pathname);
+ expect(errors, hasLength(1));
+ expect(errors[0].location.file, equals(pathname));
}
@failingTest
@@ -77,7 +77,7 @@
// ignore: deprecated_member_use_from_same_package
await sendAnalysisUpdateOptions(
AnalysisOptions()..enableSuperMixins = true);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isList);
var errors = currentAnalysisErrors[pathname];
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
index 455d2c5..2ba0d35 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
@@ -126,7 +126,7 @@
import 'dart:fake';
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var errors = existingErrorsForFile(pathname);
expect(errors, hasLength(1));
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
index d47f008..6cd60fe 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
@@ -22,7 +22,7 @@
var x // parse error: missing ';'
}''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendAnalysisGetErrors(pathname);
expect(result.errors, equals(currentAnalysisErrors[pathname]));
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index ba5f9d6..793f921 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -133,7 +133,7 @@
Future<void> test_getHover() async {
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// Note: analysis.getHover doesn't wait for analysis to complete--it simply
// returns the latest results that are available at the time that the
diff --git a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
index c53a0f4..9fa33a8 100644
--- a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
@@ -95,7 +95,7 @@
void f() {}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
await checkNoElements('f() {}');
@@ -112,7 +112,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
if (disableManageImportsOnPaste) {
diff --git a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
index caf757e..0cea1d5 100644
--- a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
@@ -28,7 +28,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendAnalysisGetLibraryDependencies();
diff --git a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
index 1288adb..c9e1e5f 100644
--- a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
@@ -26,7 +26,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
@@ -53,7 +53,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
diff --git a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
index 0073bde..e6230d7 100644
--- a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
@@ -30,7 +30,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result =
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index 2f1fbd3..a7f7589 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -26,7 +26,7 @@
Future<void> computeHighlights(String pathname, String text) async {
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
sendAnalysisSetSubscriptions({
AnalysisService.HIGHLIGHTS: [pathname]
diff --git a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
index f07d1ac..61cebef 100644
--- a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
@@ -29,7 +29,7 @@
writeFile(testPath, '''
Future<int> zero() async => 0;
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// There is a hint with this SDK version constraint.
await analysisFinished;
diff --git a/pkg/analysis_server/test/integration/analysis/lint_test.dart b/pkg/analysis_server/test/integration/analysis/lint_test.dart
index a41d0f5..ada666d 100644
--- a/pkg/analysis_server/test/integration/analysis/lint_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/lint_test.dart
@@ -22,7 +22,7 @@
writeFile(source, '''
class abc { // lint: not CamelCase (should get ignored though)
}''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[source], isList);
@@ -43,7 +43,7 @@
class a { // lint: not CamelCase
}''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index 91a6e69..69d039e 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -54,7 +54,7 @@
part of foo;
''';
writeFile(pathname2, text2);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
sendAnalysisSetSubscriptions({
AnalysisService.NAVIGATION: [pathname1]
});
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index ee237c4..e0006e8 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -30,7 +30,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
sendAnalysisSetSubscriptions({
AnalysisService.OCCURRENCES: [pathname]
});
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index df5a0ea..217013e 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -41,7 +41,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
sendAnalysisSetSubscriptions({
AnalysisService.OUTLINE: [pathname]
});
diff --git a/pkg/analysis_server/test/integration/analysis/overrides_test.dart b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
index 0358bb4..7099c52 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
@@ -52,7 +52,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
sendAnalysisSetSubscriptions({
AnalysisService.OVERRIDES: [pathname]
});
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
index d28f9e0..339862a 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
@@ -20,7 +20,7 @@
@reflectiveTest
class ReanalyzeTest extends AbstractAnalysisServerIntegrationTest {
@TestTimeout(Timeout.factor(2))
- Future<void> test_reanalyze_concurrent() {
+ Future<void> test_reanalyze_concurrent() async {
var pathname = sourcePath('test.dart');
var text = '''
// Do a bunch of imports so that analysis has some work to do.
@@ -30,18 +30,19 @@
void f() {}''';
writeFile(pathname, text);
- standardAnalysisSetup();
- return analysisFinished.then((_) {
- sendAnalysisReanalyze();
- // Wait for reanalysis to start.
- return onServerStatus.first.then((_) {
- sendAnalysisReanalyze();
- return analysisFinished.then((_) {
- // Now that reanalysis has finished, give the server an extra second
- // to make sure it doesn't crash.
- return Future.delayed(Duration(seconds: 1));
- });
- });
- });
+ await standardAnalysisSetup();
+
+ await analysisFinished;
+ await sendAnalysisReanalyze();
+
+ // Wait for reanalysis to start.
+ await onServerStatus.first;
+
+ await sendAnalysisReanalyze();
+ await analysisFinished;
+
+ // Now that reanalysis has finished, give the server an extra second
+ // to make sure it doesn't crash.
+ await Future.delayed(Duration(seconds: 1));
}
}
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
index 49e4bf5..cc15622 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
@@ -16,24 +16,24 @@
@reflectiveTest
class ReanalyzeTest extends AbstractAnalysisServerIntegrationTest {
- Future<void> test_reanalyze() {
+ Future<void> test_reanalyze() async {
var pathname = sourcePath('test.dart');
var text = 'void f() {}';
writeFile(pathname, text);
- standardAnalysisSetup();
- return analysisFinished.then((_) {
- // Make sure that reanalyze causes analysis to restart.
- var analysisRestarted = false;
- onServerStatus.listen((ServerStatusParams data) {
- var analysisStatus = data.analysis;
- if (analysisStatus != null && analysisStatus.isAnalyzing) {
- analysisRestarted = true;
- }
- });
- sendAnalysisReanalyze();
- return analysisFinished.then((_) {
- expect(analysisRestarted, isTrue);
- });
+ await standardAnalysisSetup();
+ await analysisFinished;
+
+ // Make sure that reanalyze causes analysis to restart.
+ var analysisRestarted = false;
+ onServerStatus.listen((ServerStatusParams data) {
+ var analysisStatus = data.analysis;
+ if (analysisStatus != null && analysisStatus.isAnalyzing) {
+ analysisRestarted = true;
+ }
});
+
+ await sendAnalysisReanalyze();
+ await analysisFinished;
+ expect(analysisRestarted, isTrue);
}
}
diff --git a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
index c8b991d..1b7257a 100644
--- a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
@@ -24,7 +24,7 @@
''');
// Calling this will call analysis.setAnalysisRoots.
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isEmpty);
diff --git a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
index 18cc929..3467e8b 100644
--- a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
@@ -26,7 +26,7 @@
}
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await sendAnalysisSetGeneralSubscriptions(
[GeneralAnalysisService.ANALYZED_FILES]);
diff --git a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
index bc7b3e4..bf030cd 100644
--- a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
@@ -20,7 +20,7 @@
writeFile(pathname, 'class Foo { void baz() {} }');
writeFile(sourcePath('bar.dart'), 'class Bar { void baz() {} }');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await sendAnalysisSetPriorityFiles([pathname]);
var status = await analysisFinished;
diff --git a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
index d9d22d0..7ed22d0 100644
--- a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
@@ -24,7 +24,7 @@
''');
// Calling this will subscribe to ServerService.STATUS.
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isEmpty);
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
index 344c4c0..b41a1df 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class UpdateContentTest extends AbstractAnalysisServerIntegrationTest {
- Future<void> test_updateContent_list() {
+ Future<void> test_updateContent_list() async {
var pathname = sourcePath('test.dart');
var goodText = r'''
void f() {
@@ -26,27 +26,24 @@
var badText = goodText.replaceAll('"', '');
// Create a dummy file
writeFile(pathname, '// dummy text');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// Override file contents with badText.
- sendAnalysisUpdateContent({pathname: AddContentOverlay(badText)});
- return analysisFinished.then((_) {
- // The overridden contents (badText) are missing quotation marks.
- expect(currentAnalysisErrors[pathname], isNotEmpty);
- }).then((_) {
- // Prepare a set of edits which add the missing quotation marks, in the
- // order in which they appear in the file. If these edits are applied in
- // the wrong order, some of the quotation marks will be in the wrong
- // places, and there will still be errors.
- var edits = '"'
- .allMatches(goodText)
- .map((Match match) => SourceEdit(match.start, 0, '"'))
- .toList();
- sendAnalysisUpdateContent({pathname: ChangeContentOverlay(edits)});
- return analysisFinished;
- }).then((_) {
- // There should be no errors now, assuming that quotation marks have been
- // inserted in all the correct places.
- expect(currentAnalysisErrors[pathname], isEmpty);
- });
+ await sendAnalysisUpdateContent({pathname: AddContentOverlay(badText)});
+ await analysisFinished;
+ // The overridden contents (badText) are missing quotation marks.
+ expect(currentAnalysisErrors[pathname], isNotEmpty);
+ // Prepare a set of edits which add the missing quotation marks, in the
+ // order in which they appear in the file. If these edits are applied in
+ // the wrong order, some of the quotation marks will be in the wrong
+ // places, and there will still be errors.
+ var edits = '"'
+ .allMatches(goodText)
+ .map((Match match) => SourceEdit(match.start, 0, '"'))
+ .toList();
+ await sendAnalysisUpdateContent({pathname: ChangeContentOverlay(edits)});
+ await analysisFinished;
+ // There should be no errors now, assuming that quotation marks have been
+ // inserted in all the correct places.
+ expect(currentAnalysisErrors[pathname], isEmpty);
}
}
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index 414ea26..7fcbcca 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -25,7 +25,7 @@
var badText = goodText.replaceAll(';', '');
writeFile(path, badText);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// The contents on disk (badText) are missing a semicolon.
await analysisFinished;
@@ -73,7 +73,7 @@
print(p);
}
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isList);
var errors1 = existingErrorsForFile(pathname);
diff --git a/pkg/analysis_server/test/integration/analysis/update_options_test.dart b/pkg/analysis_server/test/integration/analysis/update_options_test.dart
index 4864f2c..1821232 100644
--- a/pkg/analysis_server/test/integration/analysis/update_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_options_test.dart
@@ -28,7 +28,7 @@
void bar() {}
}
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// ignore: deprecated_member_use_from_same_package
await sendAnalysisUpdateOptions(AnalysisOptions()..generateHints = false);
diff --git a/pkg/analysis_server/test/integration/analytics/enable_test.dart b/pkg/analysis_server/test/integration/analytics/enable_test.dart
index 780810e..52a17cd 100644
--- a/pkg/analysis_server/test/integration/analytics/enable_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/enable_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class EnableTest extends AbstractAnalysisServerIntegrationTest {
Future<void> test_call_enable() async {
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// Toggle the value twice; do light verification of the changes, as the
// analysis server - when running on our CI bots - deliberately does not
diff --git a/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart b/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
index 0f86bfe..222a52b 100644
--- a/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class IsEnabledTest extends AbstractAnalysisServerIntegrationTest {
Future<void> test_isEnabled() async {
- standardAnalysisSetup();
+ await standardAnalysisSetup();
var result = await sendAnalyticsIsEnabled();
// Very lightweight validation of the returned data.
diff --git a/pkg/analysis_server/test/integration/analytics/send_event_test.dart b/pkg/analysis_server/test/integration/analytics/send_event_test.dart
index 5f5aefe..292d7d9 100644
--- a/pkg/analysis_server/test/integration/analytics/send_event_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/send_event_test.dart
@@ -15,7 +15,7 @@
@reflectiveTest
class SendEventTest extends AbstractAnalysisServerIntegrationTest {
Future<void> test_send_event() async {
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// Disable analytics.
var result1 = await sendAnalyticsIsEnabled();
diff --git a/pkg/analysis_server/test/integration/analytics/send_timing_test.dart b/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
index 8e74028..7ff18f8 100644
--- a/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
@@ -15,7 +15,7 @@
@reflectiveTest
class SendTimingTest extends AbstractAnalysisServerIntegrationTest {
Future<void> test_send_timing() async {
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// Disable analytics.
var result1 = await sendAnalyticsIsEnabled();
diff --git a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
index 8e1ac58..c606f27 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -90,7 +90,7 @@
test.^
}
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
// Create an overlay but do not write the file to "disk"
// writeFile(pathname, text);
@@ -110,7 +110,7 @@
// Do not write the file to "disk"
// writeFile(pathname, text);
// Don't wait for any results except the completion notifications
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
// Missing file and no overlay
//sendAnalysisUpdateContent({path: new AddContentOverlay(content)});
diff --git a/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart b/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
index 0081707..79cf5e9 100644
--- a/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
+++ b/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class GetDiagnosticsTest extends AbstractAnalysisServerIntegrationTest {
Future<void> test_getDiagnostics() async {
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendDiagnosticGetDiagnostics();
diff --git a/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart b/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
index 42541e2..cb65c5a 100644
--- a/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
+++ b/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
@@ -19,7 +19,7 @@
@reflectiveTest
class GetServerPortTest extends AbstractAnalysisServerIntegrationTest {
Future<void> test_connect() async {
- standardAnalysisSetup();
+ await standardAnalysisSetup();
var result = await sendDiagnosticGetServerPort();
expect(result.port, isNotNull);
diff --git a/pkg/analysis_server/test/integration/edit/bulk_fixes_test.dart b/pkg/analysis_server/test/integration/edit/bulk_fixes_test.dart
index 5cdb5ea..2bb0462 100644
--- a/pkg/analysis_server/test/integration/edit/bulk_fixes_test.dart
+++ b/pkg/analysis_server/test/integration/edit/bulk_fixes_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class BulkFixesTest extends AbstractAnalysisServerIntegrationTest {
- void setupTarget() {
+ Future<void> setupTarget() async {
writeFile(sourcePath('test.dart'), '''
class A {
void f() {}
@@ -25,7 +25,7 @@
void f() { }
}
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
}
Future<void> test_bulk_fix_override() async {
@@ -42,7 +42,7 @@
void f() { }
}
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendEditBulkFixes([sourceDirectory.path]);
diff --git a/pkg/analysis_server/test/integration/edit/format_test.dart b/pkg/analysis_server/test/integration/edit/format_test.dart
index 081d9fc..64075ce 100644
--- a/pkg/analysis_server/test/integration/edit/format_test.dart
+++ b/pkg/analysis_server/test/integration/edit/format_test.dart
@@ -15,7 +15,7 @@
@reflectiveTest
class FormatTest extends AbstractAnalysisServerIntegrationTest {
- String formatTestSetup({bool withErrors = false}) {
+ Future<String> formatTestSetup({bool withErrors = false}) async {
var pathname = sourcePath('test.dart');
if (withErrors) {
@@ -41,12 +41,12 @@
''';
writeFile(pathname, text);
}
- standardAnalysisSetup();
+ await standardAnalysisSetup();
return pathname;
}
Future<void> test_format() async {
- var pathname = formatTestSetup();
+ var pathname = await formatTestSetup();
var result = await sendEditFormat(pathname, 0, 0);
expect(result.edits, isNotEmpty);
@@ -55,7 +55,7 @@
}
Future<void> test_format_preserve_selection() async {
- var pathname = formatTestSetup();
+ var pathname = await formatTestSetup();
// format with 'bar' selected
var initialPosition = readFile(pathname).indexOf('bar()');
@@ -66,7 +66,7 @@
}
Future<void> test_format_with_errors() async {
- var pathname = formatTestSetup(withErrors: true);
+ var pathname = await formatTestSetup(withErrors: true);
try {
await sendEditFormat(pathname, 0, 0);
diff --git a/pkg/analysis_server/test/integration/edit/get_assists_test.dart b/pkg/analysis_server/test/integration/edit/get_assists_test.dart
index 015a385..bf3dc7a 100644
--- a/pkg/analysis_server/test/integration/edit/get_assists_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_assists_test.dart
@@ -24,7 +24,7 @@
var c = Completer();
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isEmpty);
diff --git a/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart b/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
index 79b7389..7706cef 100644
--- a/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
@@ -22,7 +22,7 @@
void foo() { }
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isEmpty);
diff --git a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
index 1c7c608..f12763b 100644
--- a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
@@ -22,7 +22,7 @@
FutureOr f;
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isNotEmpty);
@@ -50,7 +50,7 @@
FutureOr f;
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendEditGetFixes(pathname, text.indexOf('FutureOr f'));
diff --git a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
index db032ec..74e6664 100644
--- a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
@@ -28,7 +28,7 @@
var loc = text.indexOf('.tryon');
text = text.replaceAll('.tryon', '');
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isEmpty);
diff --git a/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart b/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
index 6896e4b..9ffd893 100644
--- a/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
@@ -28,7 +28,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isEmpty);
diff --git a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
index 5c3ce3e..f535fbe 100644
--- a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
@@ -23,7 +23,7 @@
void bar() { foo() } // missing semi-colon
void foo() { }''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isNotEmpty);
diff --git a/pkg/analysis_server/test/integration/edit/import_elements_test.dart b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
index e54e426..e6f612a 100644
--- a/pkg/analysis_server/test/integration/edit/import_elements_test.dart
+++ b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
@@ -79,7 +79,7 @@
Future<void> test_importElements_definingUnit() async {
writeFile(pathname, 'void f() {}');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var provider = PhysicalResourceProvider.INSTANCE;
var sdkPath = getSdkPath();
@@ -95,7 +95,7 @@
Future<void> test_importElements_noEdits() async {
writeFile(pathname, '');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
await checkNoEdits(<ImportedElements>[]);
@@ -112,7 +112,7 @@
class C {}
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var provider = PhysicalResourceProvider.INSTANCE;
var sdkPath = getSdkPath();
diff --git a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
index af423d1..3bb3ba9 100644
--- a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
+++ b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
@@ -27,7 +27,7 @@
var loc = text.indexOf('.tryon');
text = text.replaceAll('.tryon', '');
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
expect(currentAnalysisErrors[pathname], isEmpty);
diff --git a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
index 21f950d..e92bc41 100644
--- a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
+++ b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
@@ -27,7 +27,7 @@
''';
text = text.replaceAll('.tryon', '');
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
diff --git a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
index deeeb37..552e7a3 100644
--- a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
@@ -25,7 +25,7 @@
int minified(int x, int y) => min(x, y);
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendEditOrganizeDirectives(pathname);
@@ -45,7 +45,7 @@
int minified(int x, int y) => min(x, y);
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendEditOrganizeDirectives(pathname);
@@ -63,7 +63,7 @@
int minified(int x, int y) => min(x, y);
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
try {
diff --git a/pkg/analysis_server/test/integration/edit/sort_members_test.dart b/pkg/analysis_server/test/integration/edit/sort_members_test.dart
index 25ba753..5e411f3 100644
--- a/pkg/analysis_server/test/integration/edit/sort_members_test.dart
+++ b/pkg/analysis_server/test/integration/edit/sort_members_test.dart
@@ -22,7 +22,7 @@
int bar;
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendEditSortMembers(pathname);
@@ -38,7 +38,7 @@
int foo;
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var result = await sendEditSortMembers(pathname);
@@ -53,7 +53,7 @@
int bar;
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
try {
diff --git a/pkg/analysis_server/test/integration/execution/create_context_test.dart b/pkg/analysis_server/test/integration/execution/create_context_test.dart
index 563e405..66c3215 100644
--- a/pkg/analysis_server/test/integration/execution/create_context_test.dart
+++ b/pkg/analysis_server/test/integration/execution/create_context_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class CreateContextTest extends AbstractAnalysisServerIntegrationTest {
Future<void> test_create() async {
- standardAnalysisSetup();
+ await standardAnalysisSetup();
var contextId = (await sendExecutionCreateContext(sourceDirectory.path)).id;
expect(contextId, isNotNull);
}
diff --git a/pkg/analysis_server/test/integration/execution/delete_context_test.dart b/pkg/analysis_server/test/integration/execution/delete_context_test.dart
index 609902d..138cdaf 100644
--- a/pkg/analysis_server/test/integration/execution/delete_context_test.dart
+++ b/pkg/analysis_server/test/integration/execution/delete_context_test.dart
@@ -18,7 +18,7 @@
Future<void> test_delete() async {
var pathname = sourcePath('lib/main.dart');
writeFile(pathname, '// dummy');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var contextId = (await sendExecutionCreateContext(sourceDirectory.path)).id;
diff --git a/pkg/analysis_server/test/integration/execution/map_uri_test.dart b/pkg/analysis_server/test/integration/execution/map_uri_test.dart
index 4538798..509089b 100644
--- a/pkg/analysis_server/test/integration/execution/map_uri_test.dart
+++ b/pkg/analysis_server/test/integration/execution/map_uri_test.dart
@@ -18,7 +18,7 @@
Future<void> test_mapUri() async {
var pathname = sourcePath('lib/main.dart');
writeFile(pathname, '// dummy');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var contextId = (await sendExecutionCreateContext(sourceDirectory.path)).id;
diff --git a/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
index 340ded4..f9a786b 100644
--- a/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class SetSubscriptionsTest extends AbstractAnalysisServerIntegrationTest {
Future<void> test_subscribe() async {
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// ignore: deprecated_member_use_from_same_package
await sendExecutionSetSubscriptions([ExecutionService.LAUNCH_DATA]);
}
diff --git a/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart b/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
index 00719b3..23033ee 100644
--- a/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
+++ b/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
@@ -26,7 +26,7 @@
}
''';
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
diff --git a/pkg/analysis_server/test/integration/search/find_element_references_test.dart b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
index 2fd85a7..647b99a 100644
--- a/pkg/analysis_server/test/integration/search/find_element_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
@@ -29,7 +29,7 @@
pathname = sourcePath('foo.dart');
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var results = await _findElementReferences(text);
@@ -47,7 +47,7 @@
pathname = sourcePath('foo.dart');
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var results = (await _findElementReferences(text))!;
diff --git a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
index f8f65cf..fa78aea 100644
--- a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
@@ -28,7 +28,7 @@
var pathname = sourcePath('foo.dart');
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var declarationsResult = await sendSearchFindMemberDeclarations('bar');
diff --git a/pkg/analysis_server/test/integration/search/find_member_references_test.dart b/pkg/analysis_server/test/integration/search/find_member_references_test.dart
index 176a205..3f91865 100644
--- a/pkg/analysis_server/test/integration/search/find_member_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_references_test.dart
@@ -28,7 +28,7 @@
var pathname = sourcePath('foo.dart');
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var referencesResult = await sendSearchFindMemberReferences('bar');
diff --git a/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
index 4ea563b..191c730 100644
--- a/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
@@ -29,7 +29,7 @@
var pathname = sourcePath('foo.dart');
writeFile(pathname, text);
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await analysisFinished;
var declarationsResult = await sendSearchFindTopLevelDeclarations(r'qu.*');
diff --git a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
index 92bbda8..5bde20d 100644
--- a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
@@ -193,7 +193,7 @@
// Write a dummy file which will be overridden by tests using
// [sendAnalysisUpdateContent].
writeFile(pathname, '// dummy');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
// Run all the getTypeHierarchy tests at once so that the server can take
// advantage of incremental analysis and the test doesn't time out.
diff --git a/pkg/analysis_server/test/integration/server/bazel_changes_test.dart b/pkg/analysis_server/test/integration/server/bazel_changes_test.dart
index 903297e..9767c8f 100644
--- a/pkg/analysis_server/test/integration/server/bazel_changes_test.dart
+++ b/pkg/analysis_server/test/integration/server/bazel_changes_test.dart
@@ -123,7 +123,7 @@
import 'generated.dart';
void f() { my_fun(); }
''');
- standardAnalysisSetup();
+ await standardAnalysisSetup();
await processedNotification.future;
expect(errors, isNotEmpty);
diff --git a/pkg/analysis_server/test/integration/server/command_line_options_test.dart b/pkg/analysis_server/test/integration/server/command_line_options_test.dart
index ba051a3..a42c6bb 100644
--- a/pkg/analysis_server/test/integration/server/command_line_options_test.dart
+++ b/pkg/analysis_server/test/integration/server/command_line_options_test.dart
@@ -50,7 +50,7 @@
);
}
- Future<void> test_it() {
+ Future<void> test_it() async {
var pathname = sourcePath('test.dart');
writeFile(pathname, '''
import 'package:foo/foo.dart';
@@ -58,10 +58,10 @@
my_foo;
}
''');
- standardAnalysisSetup();
- return analysisFinished.then((_) {
- var errors = existingErrorsForFile(pathname);
- expect(errors, isEmpty);
- });
+ await standardAnalysisSetup();
+ await analysisFinished;
+
+ var errors = existingErrorsForFile(pathname);
+ expect(errors, isEmpty);
}
}
diff --git a/pkg/analysis_server/test/integration/server/status_test.dart b/pkg/analysis_server/test/integration/server/status_test.dart
index bdae4e3..bdb1df8 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -40,7 +40,7 @@
void f() {
var x;
}''');
- standardAnalysisSetup();
+ unawaited(standardAnalysisSetup());
expect(analysisBegun.isCompleted, isFalse);
expect(analysisFinished.isCompleted, isFalse);
await analysisBegun.future;
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 6f64355..22fae35 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -504,6 +504,47 @@
InterfaceType get returnType;
}
+/// Meaning of a URI referenced in a directive.
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class DirectiveUri {}
+
+/// [DirectiveUriWithSource] that references a [LibraryElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class DirectiveUriWithLibrary extends DirectiveUriWithSource {
+ LibraryElement get library;
+}
+
+/// [DirectiveUriWithRelativeUriString] that can be parsed into a relative URI.
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class DirectiveUriWithRelativeUri
+ extends DirectiveUriWithRelativeUriString {
+ Uri get relativeUri;
+}
+
+/// [DirectiveUri] for which we can get its relative URI string.
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class DirectiveUriWithRelativeUriString extends DirectiveUri {
+ String get relativeUriString;
+}
+
+/// [DirectiveUriWithRelativeUri] that resolves to a [Source].
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class DirectiveUriWithSource extends DirectiveUriWithRelativeUri {
+ Source get source;
+}
+
+/// [DirectiveUriWithSource] that references a [CompilationUnitElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class DirectiveUriWithUnit extends DirectiveUriWithSource {
+ CompilationUnitElement get unit;
+}
+
/// The base class for all of the elements in the element model. Generally
/// speaking, the element model is a semantic model of the program that
/// represents things that are declared with a name and hence can be referenced
@@ -1668,25 +1709,9 @@
/// A 'part' directive within a library.
///
/// Clients may not extend, implement or mix-in this class.
-abstract class PartElement implements _ExistingElement {}
-
-/// [PartElementWithSource] that represents a valid part of this library.
-///
-/// Clients may not extend, implement or mix-in this class.
-abstract class PartElementWithPart implements PartElementWithSource {
- /// The part [CompilationUnitElement] referenced by [uriSource].
- CompilationUnitElement get includedUnit;
-}
-
-/// [PartElement] with a relative URI that resolves to a [Source].
-///
-/// Clients may not extend, implement or mix-in this class.
-abstract class PartElementWithSource implements PartElement {
- /// The string value of the URI.
- String get relativeUriString;
-
- /// The source to which [relativeUriString] resolves.
- Source get uriSource;
+abstract class PartElement implements _ExistingElement {
+ /// The interpretation of the URI specified in the directive.
+ DirectiveUri get uri;
}
/// A prefix used to import one or more libraries into another library.
diff --git a/pkg/analyzer/lib/dart/element/visitor.dart b/pkg/analyzer/lib/dart/element/visitor.dart
index 3e64e10..86e4839 100644
--- a/pkg/analyzer/lib/dart/element/visitor.dart
+++ b/pkg/analyzer/lib/dart/element/visitor.dart
@@ -431,12 +431,7 @@
R? visitParameterElement(ParameterElement element) => null;
@override
- R? visitPartElement(PartElement element) {
- if (element is PartElementWithPart) {
- visitCompilationUnitElement(element.includedUnit);
- }
- return null;
- }
+ R? visitPartElement(PartElement element) => null;
@override
R? visitPrefixElement(PrefixElement element) => null;
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index b692981..a55028c 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -85,7 +85,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 228;
+ static const int DATA_VERSION = 229;
/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index f2d1e98..4675824 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -136,7 +136,7 @@
}
/// [DirectiveUriWithUri] with URI that resolves to a [FileState].
-class DirectiveUriWithFile extends DirectiveUriWithUri {
+class DirectiveUriWithFile extends DirectiveUriWithSource {
final FileState file;
DirectiveUriWithFile({
@@ -146,14 +146,14 @@
});
@override
- Source? get source => file.source;
+ Source get source => file.source;
@override
String toString() => '$file';
}
-/// [DirectiveUriWithUri] with URI that resolves to a [InSummarySource].
-class DirectiveUriWithInSummarySource extends DirectiveUriWithUri {
+/// [DirectiveUriWithSource] with a [InSummarySource].
+class DirectiveUriWithInSummarySource extends DirectiveUriWithSource {
@override
final InSummarySource source;
@@ -167,6 +167,20 @@
String toString() => '$source';
}
+/// [DirectiveUriWithUri] that can be resolved into a [Source].
+abstract class DirectiveUriWithSource extends DirectiveUriWithUri {
+ DirectiveUriWithSource({
+ required super.relativeUriStr,
+ required super.relativeUri,
+ });
+
+ @override
+ Source get source;
+
+ @override
+ String toString() => '$source';
+}
+
/// [DirectiveUri] for which we can get its relative URI string.
class DirectiveUriWithString extends DirectiveUri {
final String relativeUriStr;
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 8d74735..1a47eb1 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -794,8 +794,11 @@
@override
void visitPartDirective(PartDirective node) {
final partElement = node.element;
- if (partElement is PartElementWithPart) {
- recordUriReference(partElement.includedUnit, node.uri);
+ if (partElement is PartElement) {
+ final partElementUri = partElement.uri;
+ if (partElementUri is DirectiveUriWithUnit) {
+ recordUriReference(partElementUri.unit, node.uri);
+ }
}
super.visitPartDirective(node);
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 1e61c76..2fc3001 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -10,6 +10,7 @@
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/context/source.dart';
import 'package:analyzer/src/dart/analysis/file_state.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart' as file_state;
import 'package:analyzer/src/dart/analysis/testing_data.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
@@ -772,10 +773,10 @@
void _resolveNamespaceDirective({
required NamespaceDirectiveImpl directive,
required StringLiteralImpl primaryUriNode,
- required DirectiveUri primaryUriState,
- required DirectiveUri selectedUriState,
+ required file_state.DirectiveUri primaryUriState,
+ required file_state.DirectiveUri selectedUriState,
required List<Configuration> configurationNodes,
- required List<DirectiveUri> configurationUris,
+ required List<file_state.DirectiveUri> configurationUris,
}) {
for (var i = 0; i < configurationNodes.length; i++) {
final configurationNode = configurationNodes[i];
@@ -882,10 +883,10 @@
return;
}
- // TODO(scheglov) Unsafe.
var partUnit = units[includedFile]!;
- if (partElement is PartElementWithPart) {
- partUnit.element = partElement.includedUnit;
+ final partElementUri = partElement.uri;
+ if (partElementUri is DirectiveUriWithUnit) {
+ partUnit.element = partElementUri.unit;
}
final partSource = includedKind.file.source;
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index d56a2cb..60e5845 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -8779,8 +8779,9 @@
@override
CompilationUnitElement? get uriElement {
final partElement = element as PartElement?;
- if (partElement is PartElementWithPart) {
- return partElement.includedUnit;
+ final partElementUri = partElement?.uri;
+ if (partElementUri is DirectiveUriWithUnit) {
+ return partElementUri.unit;
}
return null;
}
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index 17553e0..e9ff526 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -164,10 +164,12 @@
void writePartElement(PartElementImpl element) {
_write('part ');
- if (element is PartElementWithPartImpl) {
- _write('unit ${element.includedUnit.source.uri}');
- } else if (element is PartElementWithSourceImpl) {
- _write('uriSource ${element.uriSource}');
+
+ final uri = element.uri;
+ if (uri is DirectiveUriWithUnitImpl) {
+ _write('unit ${uri.unit.source.uri}');
+ } else if (uri is DirectiveUriWithSourceImpl) {
+ _write('source ${uri.source}');
} else {
_write('<unknown>');
}
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 41d1897..8d2924b8 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1662,6 +1662,72 @@
}
}
+class DirectiveUriImpl implements DirectiveUri {}
+
+class DirectiveUriWithLibraryImpl extends DirectiveUriWithRelativeUriImpl
+ implements DirectiveUriWithLibrary {
+ @override
+ final LibraryElementImpl library;
+
+ DirectiveUriWithLibraryImpl({
+ required super.relativeUriString,
+ required super.relativeUri,
+ required this.library,
+ });
+
+ @override
+ Source get source => library.source;
+}
+
+class DirectiveUriWithRelativeUriImpl
+ extends DirectiveUriWithRelativeUriStringImpl
+ implements DirectiveUriWithRelativeUri {
+ @override
+ final Uri relativeUri;
+
+ DirectiveUriWithRelativeUriImpl({
+ required super.relativeUriString,
+ required this.relativeUri,
+ });
+}
+
+class DirectiveUriWithRelativeUriStringImpl
+ implements DirectiveUriWithRelativeUriString {
+ @override
+ final String relativeUriString;
+
+ DirectiveUriWithRelativeUriStringImpl({
+ required this.relativeUriString,
+ });
+}
+
+class DirectiveUriWithSourceImpl extends DirectiveUriWithRelativeUriImpl
+ implements DirectiveUriWithSource {
+ @override
+ final Source source;
+
+ DirectiveUriWithSourceImpl({
+ required super.relativeUriString,
+ required super.relativeUri,
+ required this.source,
+ });
+}
+
+class DirectiveUriWithUnitImpl extends DirectiveUriWithRelativeUriImpl
+ implements DirectiveUriWithUnit {
+ @override
+ final CompilationUnitElementImpl unit;
+
+ DirectiveUriWithUnitImpl({
+ required super.relativeUriString,
+ required super.relativeUri,
+ required this.unit,
+ });
+
+ @override
+ Source get source => unit.source;
+}
+
/// The synthetic element representing the declaration of the type `dynamic`.
class DynamicElementImpl extends ElementImpl implements TypeDefiningElement {
/// Return the unique instance of this class.
@@ -3932,10 +3998,7 @@
@Deprecated('Use parts2 instead')
@override
List<CompilationUnitElement> get parts {
- return _parts2
- .whereType<PartElementWithPart>()
- .map((partElement) => partElement.includedUnit)
- .toList();
+ return _partUnits;
}
@override
@@ -3945,8 +4008,9 @@
for (final part in parts) {
part as PartElementImpl;
part.enclosingElement = this;
- if (part is PartElementWithPartImpl) {
- part.includedUnit.enclosingElement = this;
+ final uri = part.uri;
+ if (uri is DirectiveUriWithUnitImpl) {
+ uri.unit.enclosingElement = this;
}
}
_parts2 = parts;
@@ -3994,10 +4058,18 @@
List<CompilationUnitElement> get units {
return [
_definingCompilationUnit,
- ...parts2.whereType<PartElementWithPart>().map((e) => e.includedUnit),
+ ..._partUnits,
];
}
+ List<CompilationUnitElement> get _partUnits {
+ return parts2
+ .map((e) => e.uri)
+ .whereType<DirectiveUriWithUnit>()
+ .map((e) => e.unit)
+ .toList();
+ }
+
@override
T? accept<T>(ElementVisitor<T> visitor) => visitor.visitLibraryElement(this);
@@ -4071,9 +4143,10 @@
if (prefix == null && name.startsWith(r'_$')) {
for (var partElement in parts2) {
- if (partElement is PartElementWithSource &&
- partElement is! PartElementWithPart &&
- file_paths.isGenerated(partElement.relativeUriString)) {
+ final uri = partElement.uri;
+ if (uri is DirectiveUriWithSource &&
+ uri is! DirectiveUriWithUnit &&
+ file_paths.isGenerated(uri.relativeUriString)) {
return true;
}
}
@@ -4114,6 +4187,9 @@
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(parts2, visitor);
+ for (final partUnit in _partUnits) {
+ partUnit.accept(visitor);
+ }
}
static List<PrefixElement> buildPrefixesFromImports(
@@ -5102,7 +5178,12 @@
}
class PartElementImpl extends _ExistingElementImpl implements PartElement {
- PartElementImpl() : super(null, -1);
+ @override
+ final DirectiveUri uri;
+
+ PartElementImpl({
+ required this.uri,
+ }) : super(null, -1);
@override
CompilationUnitElementImpl get enclosingUnit {
@@ -5125,37 +5206,6 @@
}
}
-class PartElementWithPartImpl extends PartElementWithSourceImpl
- implements PartElementWithPart {
- @override
- final CompilationUnitElementImpl includedUnit;
-
- PartElementWithPartImpl({
- required super.relativeUriString,
- required super.uriSource,
- required this.includedUnit,
- });
-
- @override
- void visitChildren(ElementVisitor visitor) {
- includedUnit.accept(visitor);
- }
-}
-
-class PartElementWithSourceImpl extends PartElementImpl
- implements PartElementWithSource {
- @override
- final String relativeUriString;
-
- @override
- final Source uriSource;
-
- PartElementWithSourceImpl({
- required this.relativeUriString,
- required this.uriSource,
- });
-}
-
/// A concrete implementation of a [PrefixElement].
class PrefixElementImpl extends _ExistingElementImpl implements PrefixElement {
/// The scope of this prefix, `null` if it has not been created yet.
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
index e81a7dc..83c6aea 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
@@ -7,9 +7,12 @@
static const int genericFunctionElement = 1;
}
-enum PartElementKind {
- withPart,
+enum DirectiveUriKind {
+ withLibrary,
+ withUnit,
withSource,
+ withRelativeUri,
+ withRelativeUriString,
withNothing,
}
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index b8a91b6..aa14833f 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -432,7 +432,6 @@
LibraryElementImpl readElement({required Source librarySource}) {
var analysisContext = _elementFactory.analysisContext;
var analysisSession = _elementFactory.analysisSession;
- var sourceFactory = analysisContext.sourceFactory;
_reader.offset = _offset;
var resolutionOffset = _baseResolutionOffset + _reader.readUInt30();
@@ -453,7 +452,6 @@
var unitContainerRef = _reference.getChild('@unit');
libraryElement.definingCompilationUnit = _readUnitElement(
- sourceFactory: sourceFactory,
unitContainerRef: unitContainerRef,
libraryElement: libraryElement,
librarySource: librarySource,
@@ -582,6 +580,73 @@
});
}
+ DirectiveUri _readDirectiveUri({
+ required Reference unitContainerRef,
+ required LibraryElementImpl libraryElement,
+ }) {
+ DirectiveUriWithRelativeUriStringImpl readWithRelativeUriString() {
+ final relativeUriString = _reader.readStringReference();
+ return DirectiveUriWithRelativeUriStringImpl(
+ relativeUriString: relativeUriString,
+ );
+ }
+
+ DirectiveUriWithRelativeUriImpl readWithRelativeUri() {
+ final parent = readWithRelativeUriString();
+ final relativeUri = Uri.parse(_reader.readStringReference());
+ return DirectiveUriWithRelativeUriImpl(
+ relativeUriString: parent.relativeUriString,
+ relativeUri: relativeUri,
+ );
+ }
+
+ DirectiveUriWithSourceImpl readWithSource() {
+ final parent = readWithRelativeUri();
+
+ final analysisContext = _elementFactory.analysisContext;
+ final sourceFactory = analysisContext.sourceFactory;
+
+ final sourceUriStr = _reader.readStringReference();
+ final sourceUri = Uri.parse(sourceUriStr);
+ final source = sourceFactory.forUri2(sourceUri)!;
+
+ return DirectiveUriWithSourceImpl(
+ relativeUriString: parent.relativeUriString,
+ relativeUri: parent.relativeUri,
+ source: source,
+ );
+ }
+
+ final kindIndex = _reader.readByte();
+ final kind = DirectiveUriKind.values[kindIndex];
+ switch (kind) {
+ case DirectiveUriKind.withUnit:
+ final parent = readWithSource();
+ final unitElement = _readUnitElement(
+ unitContainerRef: unitContainerRef,
+ libraryElement: libraryElement,
+ librarySource: libraryElement.source,
+ unitSource: parent.source,
+ );
+ return DirectiveUriWithUnitImpl(
+ relativeUriString: parent.relativeUriString,
+ relativeUri: parent.relativeUri,
+ unit: unitElement,
+ );
+ case DirectiveUriKind.withLibrary:
+ // TODO: Handle this case.
+ throw UnimplementedError();
+ case DirectiveUriKind.withSource:
+ return readWithSource();
+ case DirectiveUriKind.withRelativeUri:
+ return readWithRelativeUri();
+ case DirectiveUriKind.withRelativeUriString:
+ return readWithRelativeUriString();
+ case DirectiveUriKind.withNothing:
+ return DirectiveUriImpl();
+ }
+ }
+
EnumElementImpl _readEnumElement(
CompilationUnitElementImpl unitElement,
Reference unitReference,
@@ -982,41 +1047,14 @@
required Reference unitContainerRef,
required LibraryElementImpl libraryElement,
}) {
- final analysisContext = _elementFactory.analysisContext;
- final sourceFactory = analysisContext.sourceFactory;
+ final uri = _readDirectiveUri(
+ unitContainerRef: unitContainerRef,
+ libraryElement: libraryElement,
+ );
- final kindIndex = _reader.readByte();
- final kind = PartElementKind.values[kindIndex];
- switch (kind) {
- case PartElementKind.withPart:
- final relativeUriString = _reader.readStringReference();
- final uriStr = _reader.readStringReference();
- final uri = Uri.parse(uriStr);
- final uriSource = sourceFactory.forUri2(uri)!;
- final unitElement = _readUnitElement(
- sourceFactory: sourceFactory,
- unitContainerRef: unitContainerRef,
- libraryElement: libraryElement,
- librarySource: libraryElement.source,
- unitSource: uriSource,
- );
- return PartElementWithPartImpl(
- relativeUriString: relativeUriString,
- uriSource: uriSource,
- includedUnit: unitElement,
- );
- case PartElementKind.withSource:
- final relativeUriString = _reader.readStringReference();
- final uriStr = _reader.readStringReference();
- final uri = Uri.parse(uriStr);
- final uriSource = sourceFactory.forUri2(uri)!;
- return PartElementWithSourceImpl(
- relativeUriString: relativeUriString,
- uriSource: uriSource,
- );
- case PartElementKind.withNothing:
- return PartElementImpl();
- }
+ return PartElementImpl(
+ uri: uri,
+ );
}
PropertyAccessorElementImpl _readPropertyAccessorElement(
@@ -1234,7 +1272,6 @@
}
CompilationUnitElementImpl _readUnitElement({
- required SourceFactory sourceFactory,
required Reference unitContainerRef,
required LibraryElementImpl libraryElement,
required Source librarySource,
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 1993b8e..1008851 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -174,6 +174,42 @@
});
}
+ void _writeDirectiveUri(DirectiveUri element) {
+ void writeWithUriString(DirectiveUriWithRelativeUriString element) {
+ _sink._writeStringReference(element.relativeUriString);
+ }
+
+ void writeWithRelativeUri(DirectiveUriWithRelativeUri element) {
+ writeWithUriString(element);
+ _sink._writeStringReference('${element.relativeUri}');
+ }
+
+ void writeWithSource(DirectiveUriWithSource element) {
+ writeWithRelativeUri(element);
+ _sink._writeStringReference('${element.source.uri}');
+ }
+
+ if (element is DirectiveUriWithLibrary) {
+ // TODO(scheglov) implement
+ throw UnimplementedError();
+ } else if (element is DirectiveUriWithUnit) {
+ _sink.writeByte(DirectiveUriKind.withUnit.index);
+ writeWithSource(element);
+ _writeUnitElement(element.unit);
+ } else if (element is DirectiveUriWithSource) {
+ _sink.writeByte(DirectiveUriKind.withSource.index);
+ writeWithSource(element);
+ } else if (element is DirectiveUriWithRelativeUri) {
+ _sink.writeByte(DirectiveUriKind.withRelativeUri.index);
+ writeWithRelativeUri(element);
+ } else if (element is DirectiveUriWithRelativeUriString) {
+ _sink.writeByte(DirectiveUriKind.withRelativeUriString.index);
+ writeWithUriString(element);
+ } else {
+ _sink.writeByte(DirectiveUriKind.withNothing.index);
+ }
+ }
+
void _writeEnumElement(ClassElement element) {
element as EnumElementImpl;
_sink.writeUInt30(_resolutionSink.offset);
@@ -394,18 +430,7 @@
}
void _writePartElement(PartElement element) {
- if (element is PartElementWithPart) {
- _sink.writeByte(PartElementKind.withPart.index);
- _sink._writeStringReference(element.relativeUriString);
- _sink._writeStringReference('${element.uriSource.uri}');
- _writeUnitElement(element.includedUnit);
- } else if (element is PartElementWithSource) {
- _sink.writeByte(PartElementKind.withSource.index);
- _sink._writeStringReference(element.relativeUriString);
- _sink._writeStringReference('${element.uriSource.uri}');
- } else {
- _sink.writeByte(PartElementKind.withNothing.index);
- }
+ _writeDirectiveUri(element.uri);
}
void _writePropertyAccessorElement(PropertyAccessorElement element) {
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index e0f47f2..83db6a1 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -7,7 +7,8 @@
import 'package:analyzer/dart/ast/ast.dart' as ast;
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/visitor.dart';
-import 'package:analyzer/src/dart/analysis/file_state.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart' hide DirectiveUri;
+import 'package:analyzer/src/dart/analysis/file_state.dart' as file_state;
import 'package:analyzer/src/dart/ast/ast.dart' as ast;
import 'package:analyzer/src/dart/ast/mixin_super_invoked_names.dart';
import 'package:analyzer/src/dart/element/element.dart';
@@ -322,10 +323,12 @@
_bindReference(unitReference, unitElement);
element.parts2.add(
- PartElementWithPartImpl(
- relativeUriString: '_macro_types.dart',
- uriSource: unitSource,
- includedUnit: unitElement,
+ PartElementImpl(
+ uri: DirectiveUriWithUnitImpl(
+ relativeUriString: '_macro_types.dart',
+ relativeUri: unitUri,
+ unit: unitElement,
+ ),
),
);
@@ -476,6 +479,9 @@
final parts = <PartElementImpl>[];
for (final partState in inputLibrary.parts) {
+ final uriState = partState.uri;
+
+ final DirectiveUri directiveUri;
if (partState is PartDirectiveWithFile) {
final includedPart = partState.includedPart;
if (includedPart != null) {
@@ -489,13 +495,6 @@
unitElement.isSynthetic = !partFile.exists;
unitElement.uri = partFile.uriStr;
unitElement.setCodeRange(0, partUnitNode.length);
- parts.add(
- PartElementWithPartImpl(
- relativeUriString: partState.uri.relativeUriStr,
- uriSource: partFile.source,
- includedUnit: unitElement,
- ),
- );
final unitReference = unitContainerRef.getChild(partFile.uriStr);
_bindReference(unitReference, unitElement);
@@ -508,19 +507,43 @@
element: unitElement,
),
);
+
+ directiveUri = DirectiveUriWithUnitImpl(
+ relativeUriString: partState.uri.relativeUriStr,
+ relativeUri: partState.uri.relativeUri,
+ unit: unitElement,
+ );
} else {
- parts.add(
- PartElementWithSourceImpl(
- relativeUriString: partState.uri.relativeUriStr,
- uriSource: partState.includedFile.source,
- ),
+ directiveUri = DirectiveUriWithSourceImpl(
+ relativeUriString: partState.uri.relativeUriStr,
+ relativeUri: partState.uri.relativeUri,
+ source: partState.includedFile.source,
);
}
- } else {
- parts.add(
- PartElementImpl(),
+ } else if (uriState is file_state.DirectiveUriWithSource) {
+ directiveUri = DirectiveUriWithSourceImpl(
+ relativeUriString: uriState.relativeUriStr,
+ relativeUri: uriState.relativeUri,
+ source: uriState.source,
);
+ } else if (uriState is file_state.DirectiveUriWithUri) {
+ directiveUri = DirectiveUriWithRelativeUriImpl(
+ relativeUriString: uriState.relativeUriStr,
+ relativeUri: uriState.relativeUri,
+ );
+ } else if (uriState is file_state.DirectiveUriWithString) {
+ directiveUri = DirectiveUriWithRelativeUriStringImpl(
+ relativeUriString: uriState.relativeUriStr,
+ );
+ } else {
+ directiveUri = DirectiveUriImpl();
}
+
+ parts.add(
+ PartElementImpl(
+ uri: directiveUri,
+ ),
+ );
}
libraryElement.parts2 = parts;
diff --git a/pkg/analyzer/lib/src/test_utilities/find_element.dart b/pkg/analyzer/lib/src/test_utilities/find_element.dart
index 29ff647..d2923f5 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_element.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_element.dart
@@ -218,9 +218,10 @@
CompilationUnitElement part(String targetUri) {
CompilationUnitElement? result;
- for (final part in libraryElement.parts2) {
- if (part is PartElementWithPart) {
- final unitElement = part.includedUnit;
+ for (final partElement in libraryElement.parts2) {
+ final uri = partElement.uri;
+ if (uri is DirectiveUriWithUnit) {
+ final unitElement = uri.unit;
if ('${unitElement.source.uri}' == targetUri) {
if (result != null) {
throw StateError('Not unique: $targetUri');
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 9714635..c59203e 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -1293,9 +1293,9 @@
''');
LibraryElement element = result.libraryElement;
CompilationUnitElement unitElementA =
- (element.parts2[0] as PartElementWithPart).includedUnit;
+ (element.parts2[0].uri as DirectiveUriWithUnit).unit;
CompilationUnitElement unitElementB =
- (element.parts2[1] as PartElementWithPart).includedUnit;
+ (element.parts2[1].uri as DirectiveUriWithUnit).unit;
var expected = [
ExpectedResult(unitElementA, SearchResultKind.REFERENCE,
codeA.indexOf('lib; // A'), 'lib'.length),
@@ -1331,9 +1331,9 @@
''');
LibraryElement element = result.libraryElement;
CompilationUnitElement unitElementA =
- (element.parts2[0] as PartElementWithPart).includedUnit;
+ (element.parts2[0].uri as DirectiveUriWithUnit).unit;
CompilationUnitElement unitElementB =
- (element.parts2[1] as PartElementWithPart).includedUnit;
+ (element.parts2[1].uri as DirectiveUriWithUnit).unit;
var expected = [
ExpectedResult(unitElementA, SearchResultKind.REFERENCE,
codeA.indexOf('lib; // A'), 'lib'.length),
diff --git a/pkg/analyzer/test/src/dart/resolution/part_test.dart b/pkg/analyzer/test/src/dart/resolution/part_test.dart
index 54aad7c..2afd418 100644
--- a/pkg/analyzer/test/src/dart/resolution/part_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/part_test.dart
@@ -39,7 +39,7 @@
staticType: String
stringValue: null
semicolon: ;
- element: PartElement
+ element: DirectiveUri
uriContent: null
uriElement: notUnitElement
uriSource: <null>
@@ -62,8 +62,8 @@
uri: SimpleStringLiteral
literal: 'a.dart'
semicolon: ;
- element: PartElementWithPart
- part: package:test/a.dart
+ element: DirectiveUriWithUnit
+ uri: package:test/a.dart
uriContent: null
uriElement: unitElement package:test/a.dart
uriSource: package:test/a.dart
@@ -85,8 +85,8 @@
uri: SimpleStringLiteral
literal: 'a.dart'
semicolon: ;
- element: PartElementWithPart
- part: package:test/a.dart
+ element: DirectiveUriWithUnit
+ uri: package:test/a.dart
uriContent: null
uriElement: unitElement package:test/a.dart
uriSource: package:test/a.dart
@@ -110,7 +110,7 @@
uri: SimpleStringLiteral
literal: 'a.dart'
semicolon: ;
- element: PartElementWithSource
+ element: DirectiveUriWithSource
source: package:test/a.dart
uriContent: null
uriElement: notUnitElement
@@ -133,7 +133,7 @@
uri: SimpleStringLiteral
literal: 'a.dart'
semicolon: ;
- element: PartElementWithSource
+ element: DirectiveUriWithSource
source: package:test/a.dart
uriContent: null
uriElement: notUnitElement
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 73308ff..2c955c4 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -425,6 +425,20 @@
}
}
+ void _writeDirectiveUri(DirectiveUri uri) {
+ if (uri is DirectiveUriWithUnit) {
+ _writelnWithIndent('${uri.unit.source.uri}');
+ } else if (uri is DirectiveUriWithSource) {
+ _writelnWithIndent("source '${uri.source.uri}'");
+ } else if (uri is DirectiveUriWithRelativeUri) {
+ _writelnWithIndent("relativeUri '${uri.relativeUri}'");
+ } else if (uri is DirectiveUriWithRelativeUriString) {
+ _writelnWithIndent("relativeUriString '${uri.relativeUriString}'");
+ } else {
+ _writelnWithIndent('noRelativeUriString');
+ }
+ }
+
void _writeDisplayName(Element e) {
if (withDisplayName) {
_writelnWithIndent('displayName: ${e.displayName}');
@@ -712,25 +726,15 @@
}
void _writePartElement(PartElement e) {
- if (e is PartElementWithPart) {
- _writelnWithIndent('${e.includedUnit.source.uri}');
- _withIndent(() {
- _writeMetadata(e);
- _writeUnitElement(e.includedUnit);
- });
- } else if (e is PartElementWithSource) {
- _writelnWithIndent("source '${e.uriSource.uri}'");
- _withIndent(() {
- _writeMetadata(e);
- });
- } else if (e is PartElementImpl) {
- _writelnWithIndent('noSource');
- _withIndent(() {
- _writeMetadata(e);
- });
- } else {
- throw UnimplementedError('(${e.runtimeType}) $e');
- }
+ final uri = e.uri;
+ _writeDirectiveUri(uri);
+
+ _withIndent(() {
+ _writeMetadata(e);
+ if (uri is DirectiveUriWithUnit) {
+ _writeUnitElement(uri.unit);
+ }
+ });
}
void _writePropertyAccessorElement(PropertyAccessorElement e) {
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index b49c61b..0f4a224 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -25379,9 +25379,9 @@
<unresolved>
definingUnit
parts
- noSource
+ relativeUriString ':[invaliduri]'
source 'package:test/a3.dart'
- noSource
+ relativeUriString ':[invaliduri]'
''');
}
@@ -25468,7 +25468,7 @@
library
definingUnit
parts
- noSource
+ noRelativeUriString
''');
}
@@ -25525,6 +25525,19 @@
''');
}
+ test_library_parts_withRelativeUri_noSource() async {
+ newFile('$testPackageLibPath/a.dart', '');
+ final library = await buildLibrary(r'''
+part 'foo:bar';
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ parts
+ relativeUri 'foo:bar'
+''');
+ }
+
test_library_parts_withRelativeUri_notPart_emptyUriSelf() async {
final library = await buildLibrary(r'''
part '';
@@ -25570,7 +25583,7 @@
library
definingUnit
parts
- noSource
+ relativeUriString ':'
''');
}
diff --git a/pkg/analyzer/test/src/summary/macro_test.dart b/pkg/analyzer/test/src/summary/macro_test.dart
index 2a23acf..6e0f286 100644
--- a/pkg/analyzer/test/src/summary/macro_test.dart
+++ b/pkg/analyzer/test/src/summary/macro_test.dart
@@ -1806,8 +1806,8 @@
}
if (expected != null) {
- final partElement = library.parts2.single as PartElementWithPart;
- final x = partElement.includedUnit.topLevelVariables.single;
+ final partUri = library.parts2.single.uri as DirectiveUriWithUnit;
+ final x = partUri.unit.topLevelVariables.single;
expect(x.name, 'x');
x as ConstTopLevelVariableElementImpl;
final actual = (x.constantInitializer as SimpleStringLiteral).value;
@@ -1869,8 +1869,8 @@
library.definingCompilationUnit.getType('A'),
);
- final partElement = library.parts2.single as PartElementWithPart;
- final x = partElement.includedUnit.topLevelVariables.single;
+ final partUri = library.parts2.single.uri as DirectiveUriWithUnit;
+ final x = partUri.unit.topLevelVariables.single;
expect(x.name, 'x');
x as ConstTopLevelVariableElementImpl;
var x_literal = x.constantInitializer as SimpleStringLiteral;
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 1b9b710..44ad036 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -1352,6 +1352,34 @@
_indent = indent;
}
+ void _writeDirectiveUri(DirectiveUri uri) {
+ if (uri is DirectiveUriWithUnit) {
+ _writeln('DirectiveUriWithUnit');
+ _withIndent(() {
+ final uriStr = _stringOfSource(uri.unit.source);
+ _writelnWithIndent('uri: $uriStr');
+ });
+ } else if (uri is DirectiveUriWithSource) {
+ _writeln('DirectiveUriWithSource');
+ _withIndent(() {
+ final uriStr = _stringOfSource(uri.source);
+ _writelnWithIndent('source: $uriStr');
+ });
+ } else if (uri is DirectiveUriWithRelativeUri) {
+ _writeln('DirectiveUriWithRelativeUri');
+ _withIndent(() {
+ _writelnWithIndent('relativeUri: ${uri.relativeUri}');
+ });
+ } else if (uri is DirectiveUriWithRelativeUriString) {
+ _writeln('DirectiveUriWithRelativeUriString');
+ _withIndent(() {
+ _writelnWithIndent('relativeUriString: ${uri.relativeUriString}');
+ });
+ } else {
+ _writeln('DirectiveUri');
+ }
+ }
+
void _writeElement(String name, Element? element) {
if (_withResolution) {
_sink.write(_indent);
@@ -1504,21 +1532,7 @@
}
void _writePartElement(PartElement element) {
- if (element is PartElementWithPart) {
- _writeln('PartElementWithPart');
- _withIndent(() {
- final uriStr = _stringOfSource(element.includedUnit.source);
- _writelnWithIndent('part: $uriStr');
- });
- } else if (element is PartElementWithSource) {
- _writeln('PartElementWithSource');
- _withIndent(() {
- final uriStr = _stringOfSource(element.uriSource);
- _writelnWithIndent('source: $uriStr');
- });
- } else {
- _writeln('PartElement');
- }
+ _writeDirectiveUri(element.uri);
}
void _writePartUnitElement(String name, Element? element) {
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index 29b6891..dada67b 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -384,18 +384,21 @@
@override
void visitPartDirective(PartDirective node) {
final element = node.element;
- if (element is PartElementWithPart) {
- computer._addRegionForNode(node.uri, element.includedUnit);
- } else if (element is PartElementWithSource) {
- final uriNode = node.uri;
- final source = element.uriSource;
- computer.collector.addRegion(
- uriNode.offset,
- uriNode.length,
- protocol.ElementKind.FILE,
- protocol.Location(source.fullName, 0, 0, 0, 0,
- endLine: 0, endColumn: 0),
- );
+ if (element is PartElement) {
+ final uri = element.uri;
+ if (uri is DirectiveUriWithUnit) {
+ computer._addRegionForNode(node.uri, uri.unit);
+ } else if (uri is DirectiveUriWithSource) {
+ final uriNode = node.uri;
+ final source = uri.source;
+ computer.collector.addRegion(
+ uriNode.offset,
+ uriNode.length,
+ protocol.ElementKind.FILE,
+ protocol.Location(source.fullName, 0, 0, 0, 0,
+ endLine: 0, endColumn: 0),
+ );
+ }
}
super.visitPartDirective(node);
diff --git a/tools/VERSION b/tools/VERSION
index d775846..31ffcb9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 18
PATCH 0
-PRERELEASE 270
+PRERELEASE 271
PRERELEASE_PATCH 0
\ No newline at end of file