[analyzer] Migrate more LSP tests to null-safety
Change-Id: Iaeb2152d47df05434ab470901900da56cae7e792
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196125
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/lsp/flutter_outline_test.dart b/pkg/analysis_server/test/lsp/flutter_outline_test.dart
index 60bb110..2059de5 100644
--- a/pkg/analysis_server/test/lsp/flutter_outline_test.dart
+++ b/pkg/analysis_server/test/lsp/flutter_outline_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -48,13 +46,13 @@
expect(outlineBeforeChange, isNotNull);
expect(outlineBeforeChange.children, hasLength(1));
- expect(outlineBeforeChange.children[0].children[0].className,
+ expect(outlineBeforeChange.children![0].children![0].className,
equals('Container'));
expect(outlineAfterChange, isNotNull);
expect(outlineAfterChange.children, hasLength(1));
expect(
- outlineAfterChange.children[0].children[0].className, equals('Icon'));
+ outlineAfterChange.children![0].children![0].className, equals('Icon'));
}
Future<void> test_initial() async {
@@ -91,7 +89,7 @@
end: Position(line: 15, character: 0))));
expect(outline.children, hasLength(1));
- final build = outline.children[0];
+ final build = outline.children![0];
expect(build.kind, equals('DART_ELEMENT'));
expect(
build.range,
@@ -103,19 +101,20 @@
equals(Range(
start: Position(line: 3, character: 0),
end: Position(line: 14, character: 6))));
- expect(build.dartElement.kind, equals('FUNCTION'));
- expect(build.dartElement.name, equals('build'));
- expect(build.dartElement.parameters, equals('(BuildContext context)'));
+ final dartElement = build.dartElement!;
+ expect(dartElement.kind, equals('FUNCTION'));
+ expect(dartElement.name, equals('build'));
+ expect(dartElement.parameters, equals('(BuildContext context)'));
expect(
- build.dartElement.range,
+ dartElement.range,
equals(Range(
start: Position(line: 3, character: 7),
end: Position(line: 3, character: 12))));
- expect(build.dartElement.returnType, equals('Widget'));
+ expect(dartElement.returnType, equals('Widget'));
expect(build.children, hasLength(1));
final icon =
- build.children[0].children[0].children[0].children[0].children[0];
+ build.children![0].children![0].children![0].children![0].children![0];
expect(icon.kind, equals('NEW_INSTANCE'));
expect(icon.className, 'Icon');
expect(
@@ -125,10 +124,11 @@
end: Position(line: 8, character: 50))));
expect(icon.codeRange, equals(icon.range));
expect(icon.attributes, hasLength(1));
- expect(icon.attributes[0].name, equals('icon'));
- expect(icon.attributes[0].label, equals('Icons.ac_unit'));
+ final attributes = icon.attributes!;
+ expect(attributes[0].name, equals('icon'));
+ expect(attributes[0].label, equals('Icons.ac_unit'));
expect(
- icon.attributes[0].valueRange,
+ attributes[0].valueRange,
equals(Range(
start: Position(line: 8, character: 36),
end: Position(line: 8, character: 49))));
diff --git a/pkg/analysis_server/test/lsp/folding_test.dart b/pkg/analysis_server/test/lsp/folding_test.dart
index bea190d..51b2eef 100644
--- a/pkg/analysis_server/test/lsp/folding_test.dart
+++ b/pkg/analysis_server/test/lsp/folding_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
@@ -271,7 +269,7 @@
expect(regions, containsAll(expectedRegions));
}
- FoldingRange _toFoldingRange(Range range, FoldingRangeKind kind) {
+ FoldingRange _toFoldingRange(Range range, FoldingRangeKind? kind) {
return FoldingRange(
startLine: range.start.line,
startCharacter: range.start.character,
diff --git a/pkg/analysis_server/test/lsp/format_test.dart b/pkg/analysis_server/test/lsp/format_test.dart
index ad5bb9c..f00bc9b 100644
--- a/pkg/analysis_server/test/lsp/format_test.dart
+++ b/pkg/analysis_server/test/lsp/format_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/src/lsp/constants.dart';
import 'package:test/test.dart';
@@ -22,7 +20,7 @@
class FormatTest extends AbstractLspAnalysisServerTest {
Future<List<TextEdit>> expectFormattedContents(
Uri uri, String original, String expected) async {
- final formatEdits = await formatDocument(uri.toString());
+ final formatEdits = (await formatDocument(uri.toString()))!;
final formattedContents = applyTextEdits(original, formatEdits);
expect(formattedContents, equals(expected));
return formatEdits;
@@ -31,7 +29,7 @@
Future<List<TextEdit>> expectRangeFormattedContents(
Uri uri, String original, String expected) async {
final formatEdits =
- await formatRange(uri.toString(), rangeFromMarkers(original));
+ (await formatRange(uri.toString(), rangeFromMarkers(original)))!;
final formattedContents =
applyTextEdits(withoutMarkers(original), formatEdits);
expect(formattedContents, equals(expected));
@@ -96,7 +94,7 @@
{},
);
- Registration registration(Method method) =>
+ Registration? registration(Method method) =>
registrationFor(registrations, method);
// By default, the formatters should have been registered.
@@ -139,7 +137,7 @@
{},
);
- Registration registration(Method method) =>
+ Registration? registration(Method method) =>
registrationFor(registrations, method);
// By default, the formatters should have been registered.
@@ -181,9 +179,8 @@
await initialize();
await openFile(mainFileUri, withoutMarkers(contents));
- final formatEdits = await formatOnType(
- mainFileUri.toString(), positionFromMarker(contents), '}');
- expect(formatEdits, isNotNull);
+ final formatEdits = (await formatOnType(
+ mainFileUri.toString(), positionFromMarker(contents), '}'))!;
final formattedContents =
applyTextEdits(withoutMarkers(contents), formatEdits);
expect(formattedContents, equals(expected));
diff --git a/pkg/analysis_server/test/lsp/hover_test.dart b/pkg/analysis_server/test/lsp/hover_test.dart
index 0be55c5..77bb9b5 100644
--- a/pkg/analysis_server/test/lsp/hover_test.dart
+++ b/pkg/analysis_server/test/lsp/hover_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/src/lsp/constants.dart';
import 'package:test/test.dart';
@@ -37,7 +35,7 @@
await initialAnalysis;
var hover = await getHover(mainFileUri, positionFromMarker(content));
expect(hover, isNotNull);
- expect(hover.range, equals(rangeFromMarkers(content)));
+ expect(hover!.range, equals(rangeFromMarkers(content)));
expect(_getStringContents(hover), endsWith('This is shared content.'));
}
@@ -89,7 +87,7 @@
await openFile(mainFileUri, withoutMarkers(content));
final hover = await getHover(mainFileUri, positionFromMarker(content));
expect(hover, isNotNull);
- expect(hover.range, equals(rangeFromMarkers(content)));
+ expect(hover!.range, equals(rangeFromMarkers(content)));
expect(hover.contents, isNotNull);
final markup = _getMarkupContents(hover);
expect(markup.kind, equals(MarkupKind.Markdown));
@@ -108,7 +106,7 @@
await openFile(mainFileUri, withoutMarkers(content));
final hover = await getHover(mainFileUri, positionFromMarker(content));
expect(hover, isNotNull);
- expect(hover.range, equals(rangeFromMarkers(content)));
+ expect(hover!.range, equals(rangeFromMarkers(content)));
expect(hover.contents, isNotNull);
final markup = _getMarkupContents(hover);
expect(markup.kind, equals(MarkupKind.Markdown));
@@ -151,7 +149,7 @@
await openFile(mainFileUri, withoutMarkers(content));
final hover = await getHover(mainFileUri, positionFromMarker(content));
expect(hover, isNotNull);
- expect(hover.range, equals(rangeFromMarkers(content)));
+ expect(hover!.range, equals(rangeFromMarkers(content)));
expect(hover.contents, isNotNull);
// Ensure we got PlainText back as the type, even though we're sending the
// same markdown content.
@@ -172,7 +170,7 @@
await openFile(mainFileUri, withoutMarkers(content));
final hover = await getHover(mainFileUri, positionFromMarker(content));
expect(hover, isNotNull);
- expect(hover.range, equals(rangeFromMarkers(content)));
+ expect(hover!.range, equals(rangeFromMarkers(content)));
}
Future<void> test_string_noDocComment() async {
@@ -192,7 +190,7 @@
await openFile(mainFileUri, withoutMarkers(content));
final hover = await getHover(mainFileUri, positionFromMarker(content));
expect(hover, isNotNull);
- expect(hover.range, equals(rangeFromMarkers(content)));
+ expect(hover!.range, equals(rangeFromMarkers(content)));
expect(hover.contents, isNotNull);
expect(_getStringContents(hover), equals(expectedHoverContent));
}
@@ -210,12 +208,14 @@
await initialize();
await openFile(mainFileUri, withoutMarkers(original));
var hover = await getHover(mainFileUri, positionFromMarker(original));
- var contents = _getStringContents(hover);
+ expect(hover, isNotNull);
+ var contents = _getStringContents(hover!);
expect(contents, contains('Original'));
await replaceFile(222, mainFileUri, withoutMarkers(updated));
hover = await getHover(mainFileUri, positionFromMarker(updated));
- contents = _getStringContents(hover);
+ expect(hover, isNotNull);
+ contents = _getStringContents(hover!);
expect(contents, contains('Updated'));
}
@@ -229,7 +229,7 @@
await openFile(mainFileUri, withoutMarkers(content));
final hover = await getHover(mainFileUri, positionFromMarker(content));
expect(hover, isNotNull);
- expect(hover.range, equals(rangeFromMarkers(content)));
+ expect(hover!.range, equals(rangeFromMarkers(content)));
expect(hover.contents, isNotNull);
final contents = _getStringContents(hover);
expect(contents, contains('This is a string.'));
@@ -245,7 +245,7 @@
await initialize();
final hover = await getHover(mainFileUri, positionFromMarker(content));
expect(hover, isNotNull);
- expect(hover.range, equals(rangeFromMarkers(content)));
+ expect(hover!.range, equals(rangeFromMarkers(content)));
expect(hover.contents, isNotNull);
final markup = _getStringContents(hover);
expect(markup, contains('This is a string.'));
diff --git a/pkg/analysis_server/test/lsp/implementation_test.dart b/pkg/analysis_server/test/lsp/implementation_test.dart
index 63cc7f8..195b46b 100644
--- a/pkg/analysis_server/test/lsp/implementation_test.dart
+++ b/pkg/analysis_server/test/lsp/implementation_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index 93ecc62..fb9fcdf 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/lsp_protocol/protocol_special.dart';
import 'package:analysis_server/src/lsp/constants.dart';
@@ -54,7 +52,7 @@
final dartOptions = CompletionRegistrationOptions.fromJson(
dartRegistration.registerOptions);
expect(dartOptions.documentSelector, hasLength(1));
- expect(dartOptions.documentSelector[0].language, dartLanguageId);
+ expect(dartOptions.documentSelector![0].language, dartLanguageId);
expect(dartOptions.triggerCharacters, isNotEmpty);
// Check non-Dart registration.
@@ -63,7 +61,7 @@
r != dartRegistration);
final nonDartOptions = CompletionRegistrationOptions.fromJson(
nonDartRegistration.registerOptions);
- final otherLanguages = nonDartOptions.documentSelector
+ final otherLanguages = nonDartOptions.documentSelector!
.map((selector) => selector.language)
.toList();
expect(otherLanguages, isNot(contains('dart')));
@@ -91,8 +89,8 @@
// static registrations for them.
// https://github.com/dart-lang/sdk/issues/38490
final initResult = InitializeResult.fromJson(initResponse.result);
- expect(initResult.serverInfo.name, 'Dart SDK LSP Analysis Server');
- expect(initResult.serverInfo.version, isNotNull);
+ expect(initResult.serverInfo!.name, 'Dart SDK LSP Analysis Server');
+ expect(initResult.serverInfo!.version, isNotNull);
expect(initResult.capabilities, isNotNull);
expect(initResult.capabilities.textDocumentSync, isNull);
@@ -113,16 +111,17 @@
// The hover capability should only specific Dart.
expect(hover, isNotNull);
expect(hover.documentSelector, hasLength(1));
- expect(hover.documentSelector.single.language, equals('dart'));
+ expect(hover.documentSelector!.single.language, equals('dart'));
// didChange should also include pubspec + analysis_options.
expect(change, isNotNull);
expect(change.documentSelector, hasLength(greaterThanOrEqualTo(3)));
- expect(change.documentSelector.any((ds) => ds.language == 'dart'), isTrue);
- expect(change.documentSelector.any((ds) => ds.pattern == '**/pubspec.yaml'),
+ expect(change.documentSelector!.any((ds) => ds.language == 'dart'), isTrue);
+ expect(
+ change.documentSelector!.any((ds) => ds.pattern == '**/pubspec.yaml'),
isTrue);
expect(
- change.documentSelector
+ change.documentSelector!
.any((ds) => ds.pattern == '**/analysis_options.yaml'),
isTrue);
@@ -149,7 +148,7 @@
// When dynamic registration is not supported, we will always statically
// request text document open/close and incremental updates.
expect(initResult.capabilities.textDocumentSync, isNotNull);
- initResult.capabilities.textDocumentSync.map(
+ initResult.capabilities.textDocumentSync!.map(
(options) {
expect(options.openClose, isTrue);
expect(options.change, equals(TextDocumentSyncKind.Incremental));
@@ -169,7 +168,7 @@
expect(initResult.capabilities.codeActionProvider, isNotNull);
expect(initResult.capabilities.renameProvider, isNotNull);
expect(initResult.capabilities.foldingRangeProvider, isNotNull);
- expect(initResult.capabilities.workspace.fileOperations.willRename,
+ expect(initResult.capabilities.workspace!.fileOperations!.willRename,
equals(ServerCapabilitiesComputer.fileOperationRegistrationOptions));
expect(initResult.capabilities.semanticTokensProvider, isNotNull);
@@ -226,7 +225,7 @@
expect(initResult.capabilities.codeActionProvider, isNull);
expect(initResult.capabilities.renameProvider, isNull);
expect(initResult.capabilities.foldingRangeProvider, isNull);
- expect(initResult.capabilities.workspace.fileOperations, isNull);
+ expect(initResult.capabilities.workspace!.fileOperations, isNull);
expect(initResult.capabilities.semanticTokensProvider, isNull);
// Ensure all expected dynamic registrations.
@@ -465,7 +464,7 @@
expect(result.capabilities, isNotNull);
// Check some basic capabilities that are unlikely to change.
expect(result.capabilities.textDocumentSync, isNotNull);
- result.capabilities.textDocumentSync.map(
+ result.capabilities.textDocumentSync!.map(
(options) {
// We'll always request open/closed notifications and incremental updates.
expect(options.openClose, isTrue);
@@ -487,7 +486,7 @@
final response = await sendRequestToServer(request);
expect(response.id, equals(request.id));
expect(response.error, isNotNull);
- expect(response.error.code, equals(ErrorCodes.InvalidParams));
+ expect(response.error!.code, equals(ErrorCodes.InvalidParams));
expect(response.result, isNull);
}
@@ -497,8 +496,8 @@
expect(response, isNotNull);
expect(response.result, isNull);
expect(response.error, isNotNull);
- expect(
- response.error.code, equals(ServerErrorCodes.ServerAlreadyInitialized));
+ expect(response.error!.code,
+ equals(ServerErrorCodes.ServerAlreadyInitialized));
}
Future<void> test_initialize_rootPath() async {
@@ -643,7 +642,9 @@
// Wait up to 1sec to ensure no error/log notifications were sent back.
var didTimeout = false;
- final notificationFromServer = await nextNotification.timeout(
+ final notificationFromServer = await nextNotification
+ .then<NotificationMessage?>((notification) => notification)
+ .timeout(
const Duration(seconds: 1),
onTimeout: () {
didTimeout = true;
@@ -661,6 +662,6 @@
expect(response.id, equals(request.id));
expect(response.result, isNull);
expect(response.error, isNotNull);
- expect(response.error.code, ErrorCodes.ServerNotInitialized);
+ expect(response.error!.code, ErrorCodes.ServerNotInitialized);
}
}
diff --git a/pkg/analysis_server/test/lsp/mapping_test.dart b/pkg/analysis_server/test/lsp/mapping_test.dart
index 6c89580..ce08941 100644
--- a/pkg/analysis_server/test/lsp/mapping_test.dart
+++ b/pkg/analysis_server/test/lsp/mapping_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart' as lsp;
import 'package:analysis_server/src/lsp/mapping.dart' as lsp;
import 'package:analysis_server/src/protocol_server.dart' as server;
diff --git a/pkg/analysis_server/test/lsp/outline_test.dart b/pkg/analysis_server/test/lsp/outline_test.dart
index 1c04b0c..4310ec9 100644
--- a/pkg/analysis_server/test/lsp/outline_test.dart
+++ b/pkg/analysis_server/test/lsp/outline_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -33,11 +31,11 @@
expect(outlineBeforeChange, isNotNull);
expect(outlineBeforeChange.children, hasLength(1));
- expect(outlineBeforeChange.children[0].element.name, equals('A'));
+ expect(outlineBeforeChange.children![0].element.name, equals('A'));
expect(outlineAfterChange, isNotNull);
expect(outlineAfterChange.children, hasLength(1));
- expect(outlineAfterChange.children[0].element.name, equals('B'));
+ expect(outlineAfterChange.children![0].element.name, equals('B'));
}
Future<void> test_extensions() async {
@@ -53,8 +51,8 @@
expect(outline, isNotNull);
expect(outline.children, hasLength(2));
- expect(outline.children[0].element.name, equals('StringExtensions'));
- expect(outline.children[1].element.name, equals('<unnamed extension>'));
+ expect(outline.children![0].element.name, equals('StringExtensions'));
+ expect(outline.children![1].element.name, equals('<unnamed extension>'));
}
Future<void> test_initial() async {
@@ -88,7 +86,7 @@
expect(outline.children, hasLength(1));
// class A
- final classA = outline.children[0];
+ final classA = outline.children![0];
expect(classA.element.name, equals('A'));
expect(classA.element.kind, equals('CLASS'));
expect(
@@ -109,7 +107,7 @@
expect(classA.children, hasLength(2));
// b()
- final methodB = classA.children[0];
+ final methodB = classA.children![0];
expect(methodB.element.name, equals('b'));
expect(methodB.element.kind, equals('METHOD'));
expect(
@@ -130,7 +128,7 @@
expect(methodB.children, hasLength(1));
// c()
- final methodC = methodB.children[0];
+ final methodC = methodB.children![0];
expect(methodC.element.name, equals('c'));
expect(methodC.element.kind, equals('FUNCTION'));
expect(
@@ -154,7 +152,7 @@
expect(methodC.children, isNull);
// num get d
- final fieldD = classA.children[1];
+ final fieldD = classA.children![1];
expect(fieldD.element.name, equals('d'));
expect(fieldD.element.kind, equals('GETTER'));
expect(
diff --git a/pkg/analysis_server/test/lsp/priority_files_test.dart b/pkg/analysis_server/test/lsp/priority_files_test.dart
index 8d5107c..028f903 100644
--- a/pkg/analysis_server/test/lsp/priority_files_test.dart
+++ b/pkg/analysis_server/test/lsp/priority_files_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/lsp/pub_package_service_test.dart b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
index f40f50a..b00f285 100644
--- a/pkg/analysis_server/test/lsp/pub_package_service_test.dart
+++ b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/src/services/pub/pub_api.dart';
import 'package:analysis_server/src/services/pub/pub_package_service.dart';
import 'package:analyzer/instrumentation/service.dart';
@@ -25,12 +23,10 @@
class PubApiTest {
static const pubDefaultUrl = 'https://pub.dartlang.org';
- Uri lastCalledUrl;
- MockHttpClient httpClient;
+ Uri? lastCalledUrl;
+ late MockHttpClient httpClient;
- PubApi api;
-
- Future<void> check_pubHostedUrl(String envValue, String expectedBase) async {
+ Future<void> check_pubHostedUrl(String? envValue, String expectedBase) async {
final api =
PubApi(InstrumentationService.NULL_SERVICE, httpClient, envValue);
await api.allPackages();
@@ -303,7 +299,7 @@
await openFile(pubspecFileUri, '');
await pumpEventQueue();
- final cache = server.pubPackageService.readDiskCache();
+ final cache = server.pubPackageService.readDiskCache()!;
final packages = cache.packages.values.toList();
expect(packages.map((p) => p.packageName), equals(['one', 'two', 'three']));
diff --git a/pkg/analysis_server/test/lsp/reanalyze_test.dart b/pkg/analysis_server/test/lsp/reanalyze_test.dart
index 150c8a0..69afce8 100644
--- a/pkg/analysis_server/test/lsp/reanalyze_test.dart
+++ b/pkg/analysis_server/test/lsp/reanalyze_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/lsp/references_test.dart b/pkg/analysis_server/test/lsp/references_test.dart
index 9af7eef..350de59 100644
--- a/pkg/analysis_server/test/lsp/references_test.dart
+++ b/pkg/analysis_server/test/lsp/references_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/lsp/rename_test.dart b/pkg/analysis_server/test/lsp/rename_test.dart
index a65a4ef..0559614 100644
--- a/pkg/analysis_server/test/lsp/rename_test.dart
+++ b/pkg/analysis_server/test/lsp/rename_test.dart
@@ -2,11 +2,8 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/src/lsp/constants.dart';
-import 'package:meta/meta.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -93,8 +90,8 @@
expect(response.id, equals(request.id));
expect(response.result, isNull);
expect(response.error, isNotNull);
- expect(response.error.code, ServerErrorCodes.RenameNotValid);
- expect(response.error.message, contains('is defined in the SDK'));
+ expect(response.error!.code, ServerErrorCodes.RenameNotValid);
+ expect(response.error!.message, contains('is defined in the SDK'));
}
Future<void> test_prepare_variable() async {
@@ -174,8 +171,9 @@
action: UserPromptActions.renameAnyway,
);
- if (response.error != null) {
- throw response.error;
+ final error = response.error;
+ if (error != null) {
+ throw error;
}
final result = WorkspaceEdit.fromJson(response.result);
@@ -186,7 +184,7 @@
};
applyDocumentChanges(
contents,
- result.documentChanges,
+ result.documentChanges!,
);
expect(contents[mainFilePath], equals(expectedContent));
}
@@ -284,12 +282,12 @@
await openFile(referencedFileUri, withoutMarkers(referencedContent),
version: referencedVersion);
- final result = await rename(
+ final result = (await rename(
mainFileUri,
mainVersion,
positionFromMarker(mainContent),
'MyNewClass',
- );
+ ))!;
// Ensure applying the changes will give us the expected content.
final contents = {
@@ -302,7 +300,7 @@
};
applyDocumentChanges(
contents,
- result.documentChanges,
+ result.documentChanges!,
expectedVersions: documentVersions,
);
expect(contents[mainFilePath], equals(expectedMainContent));
@@ -377,8 +375,8 @@
expect(response.id, equals(request.id));
expect(response.result, isNull);
expect(response.error, isNotNull);
- expect(response.error.code, ServerErrorCodes.RenameNotValid);
- expect(response.error.message, contains('is defined in the SDK'));
+ expect(response.error!.code, ServerErrorCodes.RenameNotValid);
+ expect(response.error!.message, contains('is defined in the SDK'));
}
Future<void> test_rename_usingLegacyChangeInterface() async {
@@ -396,18 +394,18 @@
await initialize();
await openFile(mainFileUri, withoutMarkers(content), version: 222);
- final result = await rename(
+ final result = (await rename(
mainFileUri,
222,
positionFromMarker(content),
'MyNewClass',
- );
+ ))!;
// Ensure applying the changes will give us the expected content.
final contents = {
mainFilePath: withoutMarkers(content),
};
- applyChanges(contents, result.changes);
+ applyChanges(contents, result.changes!);
expect(contents[mainFilePath], equals(expectedContent));
}
@@ -444,7 +442,8 @@
sendRenameVersion: false);
}
- Future<void> _test_prepare(String content, String expectedPlaceholder) async {
+ Future<void> _test_prepare(
+ String content, String? expectedPlaceholder) async {
await initialize();
await openFile(mainFileUri, withoutMarkers(content));
@@ -454,7 +453,7 @@
if (expectedPlaceholder == null) {
expect(result, isNull);
} else {
- expect(result.range, equals(rangeFromMarkers(content)));
+ expect(result!.range, equals(rangeFromMarkers(content)));
expect(result.placeholder, equals(expectedPlaceholder));
}
}
@@ -481,7 +480,7 @@
expect(result.result, isNull);
expect(result.error, isNotNull);
- return result.error;
+ return result.error!;
}
/// Tests a rename that is expected to cause an error, which will trigger
@@ -490,9 +489,9 @@
Future<ResponseMessage> _test_rename_prompt(
String content,
String newName, {
- @required String expectedMessage,
- Future<void> Function() beforeResponding,
- @required String action,
+ required String expectedMessage,
+ Future<void> Function()? beforeResponding,
+ required String action,
int openFileVersion = 222,
int renameRequestFileVersion = 222,
}) async {
@@ -519,9 +518,9 @@
expect(params.type, equals(MessageType.Warning));
expect(params.message, equals(expectedMessage));
expect(params.actions, hasLength(2));
- expect(params.actions[0],
+ expect(params.actions![0],
equals(MessageActionItem(title: UserPromptActions.renameAnyway)));
- expect(params.actions[1],
+ expect(params.actions![1],
equals(MessageActionItem(title: UserPromptActions.cancel)));
// Allow the test to run some code before we send the response.
@@ -536,8 +535,7 @@
Future<void> _test_rename_withDocumentChanges(
String content,
String newName,
- String expectedContent, {
- sendDocumentVersion = true,
+ String? expectedContent, {
sendRenameVersion = true,
}) async {
// The specific number doesn't matter here, it's just a placeholder to confirm
@@ -548,7 +546,7 @@
withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
);
await openFile(mainFileUri, withoutMarkers(content),
- version: sendDocumentVersion ? documentVersion : null);
+ version: documentVersion);
final result = await rename(
mainFileUri,
@@ -568,7 +566,7 @@
};
applyDocumentChanges(
contents,
- result.documentChanges,
+ result!.documentChanges!,
expectedVersions: documentVersions,
);
expect(contents[mainFilePath], equals(expectedContent));
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index bbfcb99..6fcc641 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/src/lsp/constants.dart';
import 'package:analysis_server/src/lsp/semantic_tokens/legend.dart';
@@ -882,8 +880,8 @@
o.type == type &&
listEqual(
// Treat nulls the same as empty lists for convenience when comparing.
- o.modifiers ?? <SemanticTokenModifiers>[],
- modifiers ?? <SemanticTokenModifiers>[],
+ o.modifiers,
+ modifiers,
(SemanticTokenModifiers a, SemanticTokenModifiers b) => a == b);
/// Outputs a text representation of the token in the form of constructor
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 8091172..986d755 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'dart:async';
import 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart';
@@ -26,7 +24,7 @@
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
import 'package:analyzer_plugin/src/protocol/protocol_internal.dart' as plugin;
-import 'package:meta/meta.dart';
+import 'package:collection/collection.dart';
import 'package:path/path.dart' as path;
import 'package:test/test.dart' hide expect;
import 'package:test/test.dart' as test show expect;
@@ -51,10 +49,10 @@
ClientCapabilitiesHelperMixin,
LspAnalysisServerTestMixin,
ConfigurationFilesMixin {
- MockLspServerChannel channel;
- TestPluginManager pluginManager;
- LspAnalysisServer server;
- MockHttpClient httpClient;
+ late MockLspServerChannel channel;
+ late TestPluginManager pluginManager;
+ late LspAnalysisServer server;
+ late MockHttpClient httpClient;
/// The number of context builds that had already occurred the last time
/// resetContextBuildCounter() was called.
@@ -66,11 +64,12 @@
Stream<Message> get serverToClient => channel.serverToClient;
DiscoveredPluginInfo configureTestPlugin({
- plugin.ResponseResult respondWith,
- plugin.Notification notification,
+ plugin.ResponseResult? respondWith,
+ plugin.Notification? notification,
Duration respondAfter = Duration.zero,
}) {
- final info = DiscoveredPluginInfo('a', 'b', 'c', null, null);
+ final info = DiscoveredPluginInfo('a', 'b', 'c', server.notificationManager,
+ server.instrumentationService);
pluginManager.plugins.add(info);
if (respondWith != null) {
@@ -102,20 +101,21 @@
Future<T> expectSuccessfulResponseTo<T, R>(
RequestMessage request, T Function(R) fromJson) async {
final resp = await sendRequestToServer(request);
- if (resp.error != null) {
- throw resp.error;
+ final error = resp.error;
+ if (error != null) {
+ throw error;
} else {
- return resp.result == null ? null : fromJson(resp.result);
+ // resp.result should only be null when error != null if T allows null.
+ return resp.result == null ? null as T : fromJson(resp.result);
}
}
/// Finds the registration for a given LSP method.
- Registration registrationFor(
+ Registration? registrationFor(
List<Registration> registrations,
Method method,
) {
- return registrations.singleWhere((r) => r.method == method.toJson(),
- orElse: () => null);
+ return registrations.singleWhereOrNull((r) => r.method == method.toJson());
}
/// Finds the registration for a given LSP method with Dart in its
@@ -124,13 +124,12 @@
List<Registration> registrations,
Method method,
) {
- return registrations.singleWhere(
- (r) =>
- r.method == method.toJson() &&
- TextDocumentRegistrationOptions.fromJson(r.registerOptions)
+ return registrations.singleWhere((r) =>
+ r.method == method.toJson() &&
+ (TextDocumentRegistrationOptions.fromJson(r.registerOptions)
.documentSelector
- .any((selector) => selector.language == dartLanguageId),
- orElse: () => null);
+ ?.any((selector) => selector.language == dartLanguageId) ??
+ false));
}
void resetContextBuildCounter() {
@@ -514,8 +513,8 @@
void writePackageConfig(
String projectFolderPath, {
- PackageConfigFileBuilder config,
- String languageVersion,
+ PackageConfigFileBuilder? config,
+ String? languageVersion,
bool flutter = false,
bool meta = false,
bool pedantic = false,
@@ -579,8 +578,11 @@
Either2<num, String>.t2('client-test');
int _id = 0;
- String projectFolderPath, mainFilePath, pubspecFilePath, analysisOptionsPath;
- Uri projectFolderUri, mainFileUri, pubspecFileUri, analysisOptionsUri;
+ late String projectFolderPath,
+ mainFilePath,
+ pubspecFilePath,
+ analysisOptionsPath;
+ late Uri projectFolderUri, mainFileUri, pubspecFileUri, analysisOptionsUri;
final String simplePubspecContent = 'name: my_project';
final startOfDocPos = Position(line: 0, character: 0);
final startOfDocRange = Range(
@@ -590,7 +592,7 @@
/// The client capabilities sent to the server during initialization.
///
/// null if an initialization request has not yet been sent.
- ClientCapabilities _clientCapabilities;
+ ClientCapabilities? _clientCapabilities;
final validProgressTokens = <Either2<num, String>>{};
@@ -623,7 +625,7 @@
) {
changes.forEach((fileUri, edits) {
final path = Uri.parse(fileUri).toFilePath();
- fileContents[path] = applyTextEdits(fileContents[path], edits);
+ fileContents[path] = applyTextEdits(fileContents[path]!, edits);
});
}
@@ -632,7 +634,7 @@
Either2<List<TextDocumentEdit>,
List<Either4<TextDocumentEdit, CreateFile, RenameFile, DeleteFile>>>
documentChanges, {
- Map<String, int> expectedVersions,
+ Map<String, int>? expectedVersions,
}) {
// If we were supplied with expected versions, ensure that all returned
// edits match the versions.
@@ -680,7 +682,7 @@
throw 'Recieved edits for $path which was not provided as a file to be edited. '
'Perhaps a CreateFile change was missing from the edits?';
}
- oldFileContent[path] = applyTextDocumentEdit(oldFileContent[path], edit);
+ oldFileContent[path] = applyTextDocumentEdit(oldFileContent[path]!, edit);
});
}
@@ -774,13 +776,13 @@
await sendNotificationToServer(notification);
}
- Future changeWorkspaceFolders({List<Uri> add, List<Uri> remove}) async {
+ Future changeWorkspaceFolders({List<Uri>? add, List<Uri>? remove}) async {
var notification = makeNotification(
Method.workspace_didChangeWorkspaceFolders,
DidChangeWorkspaceFoldersParams(
event: WorkspaceFoldersChangeEvent(
- added: add?.map(toWorkspaceFolder)?.toList() ?? const [],
- removed: remove?.map(toWorkspaceFolder)?.toList() ?? const [],
+ added: add?.map(toWorkspaceFolder).toList() ?? const [],
+ removed: remove?.map(toWorkspaceFolder).toList() ?? const [],
),
),
);
@@ -796,17 +798,17 @@
await sendNotificationToServer(notification);
}
- Future<Object> executeCodeAction(
+ Future<Object?> executeCodeAction(
Either2<Command, CodeAction> codeAction) async {
final command = codeAction.map(
(command) => command,
- (codeAction) => codeAction.command,
+ (codeAction) => codeAction.command!,
);
return executeCommand(command);
}
- Future<Object> executeCommand(Command command,
- {Either2<num, String> workDoneToken}) async {
+ Future<Object?> executeCommand(Command command,
+ {Either2<num, String>? workDoneToken}) async {
final request = makeRequest(
Method.workspace_executeCommand,
ExecuteCommandParams(
@@ -818,7 +820,7 @@
return expectSuccessfulResponseTo(request, (result) => result);
}
- void expect(actual, matcher, {String reason}) =>
+ void expect(actual, matcher, {String? reason}) =>
test.expect(actual, matcher, reason: reason);
void expectDocumentVersion(
@@ -906,7 +908,7 @@
Future<T> expectSuccessfulResponseTo<T, R>(
RequestMessage request, T Function(R) fromJson);
- Future<List<TextEdit>> formatDocument(String fileUri) {
+ Future<List<TextEdit>?> formatDocument(String fileUri) {
final request = makeRequest(
Method.textDocument_formatting,
DocumentFormattingParams(
@@ -920,7 +922,7 @@
request, _fromJsonList(TextEdit.fromJson));
}
- Future<List<TextEdit>> formatOnType(
+ Future<List<TextEdit>?> formatOnType(
String fileUri, Position pos, String character) {
final request = makeRequest(
Method.textDocument_onTypeFormatting,
@@ -937,7 +939,7 @@
request, _fromJsonList(TextEdit.fromJson));
}
- Future<List<TextEdit>> formatRange(String fileUri, Range range) {
+ Future<List<TextEdit>?> formatRange(String fileUri, Range range) {
final request = makeRequest(
Method.textDocument_rangeFormatting,
DocumentRangeFormattingParams(
@@ -954,8 +956,8 @@
Future<List<Either2<Command, CodeAction>>> getCodeActions(
String fileUri, {
- Range range,
- List<CodeActionKind> kinds,
+ Range? range,
+ List<CodeActionKind>? kinds,
}) {
final request = makeRequest(
Method.textDocument_codeAction,
@@ -976,7 +978,7 @@
}
Future<List<CompletionItem>> getCompletion(Uri uri, Position pos,
- {CompletionContext context}) {
+ {CompletionContext? context}) {
final request = makeRequest(
Method.textDocument_completion,
CompletionParams(
@@ -1033,7 +1035,8 @@
return expectSuccessfulResponseTo(request, DartDiagnosticServer.fromJson);
}
- Future<List<DocumentHighlight>> getDocumentHighlights(Uri uri, Position pos) {
+ Future<List<DocumentHighlight>?> getDocumentHighlights(
+ Uri uri, Position pos) {
final request = makeRequest(
Method.textDocument_documentHighlight,
TextDocumentPositionParams(
@@ -1074,7 +1077,7 @@
request, _fromJsonList(FoldingRange.fromJson));
}
- Future<Hover> getHover(Uri uri, Position pos) {
+ Future<Hover?> getHover(Uri uri, Position pos) {
final request = makeRequest(
Method.textDocument_hover,
TextDocumentPositionParams(
@@ -1121,7 +1124,7 @@
Uri uri,
Position pos,
String label, {
- CompletionContext context,
+ CompletionContext? context,
}) async {
final completions = await getCompletion(uri, pos, context: context);
@@ -1152,8 +1155,8 @@
return expectSuccessfulResponseTo(request, SemanticTokens.fromJson);
}
- Future<SignatureHelp> getSignatureHelp(Uri uri, Position pos,
- [SignatureHelpContext context]) {
+ Future<SignatureHelp?> getSignatureHelp(Uri uri, Position pos,
+ [SignatureHelpContext? context]) {
final request = makeRequest(
Method.textDocument_signatureHelp,
SignatureHelpParams(
@@ -1211,10 +1214,10 @@
Method method,
R Function(Map<String, dynamic>) fromJson,
Future<T> Function() f, {
- @required FutureOr<RR> Function(R) handler,
+ required FutureOr<RR> Function(R) handler,
Duration timeout = const Duration(seconds: 5),
}) async {
- Future<T> outboundRequest;
+ late Future<T> outboundRequest;
// Run [f] and wait for the incoming request from the server.
final incomingRequest = await expectRequest(method, () {
@@ -1245,23 +1248,24 @@
/// full objects just to change one value (the types are immutable) so must
/// match the spec exactly and are not verified.
Future<ResponseMessage> initialize({
- String rootPath,
- Uri rootUri,
- List<Uri> workspaceFolders,
- TextDocumentClientCapabilities textDocumentCapabilities,
- ClientCapabilitiesWorkspace workspaceCapabilities,
- ClientCapabilitiesWindow windowCapabilities,
- Map<String, Object> experimentalCapabilities,
- Map<String, Object> initializationOptions,
+ String? rootPath,
+ Uri? rootUri,
+ List<Uri>? workspaceFolders,
+ TextDocumentClientCapabilities? textDocumentCapabilities,
+ ClientCapabilitiesWorkspace? workspaceCapabilities,
+ ClientCapabilitiesWindow? windowCapabilities,
+ Map<String, Object?>? experimentalCapabilities,
+ Map<String, Object?>? initializationOptions,
bool throwOnFailure = true,
bool allowEmptyRootUri = false,
}) async {
- _clientCapabilities = ClientCapabilities(
+ final clientCapabilities = ClientCapabilities(
workspace: workspaceCapabilities,
textDocument: textDocumentCapabilities,
window: windowCapabilities,
experimental: experimentalCapabilities,
);
+ _clientCapabilities = clientCapabilities;
// Handle any standard incoming requests that aren't test-specific, for example
// accepting requests to create progress tokens.
@@ -1291,32 +1295,33 @@
rootPath: rootPath,
rootUri: rootUri?.toString(),
initializationOptions: initializationOptions,
- capabilities: _clientCapabilities,
- workspaceFolders: workspaceFolders?.map(toWorkspaceFolder)?.toList(),
+ capabilities: clientCapabilities,
+ workspaceFolders: workspaceFolders?.map(toWorkspaceFolder).toList(),
));
final response = await sendRequestToServer(request);
expect(response.id, equals(request.id));
- if (response.error == null) {
+ final error = response.error;
+ if (error == null) {
final notification =
makeNotification(Method.initialized, InitializedParams());
await sendNotificationToServer(notification);
await pumpEventQueue();
} else if (throwOnFailure) {
throw 'Error during initialize request: '
- '${response.error.code}: ${response.error.message}';
+ '${error.code}: ${error.message}';
}
return response;
}
- NotificationMessage makeNotification(Method method, ToJsonable params) {
+ NotificationMessage makeNotification(Method method, ToJsonable? params) {
return NotificationMessage(
method: method, params: params, jsonrpc: jsonRpcVersion);
}
RequestMessage makeRenameRequest(
- int version, Uri uri, Position pos, String newName) {
+ int? version, Uri uri, Position pos, String newName) {
final docIdentifier = version != null
? VersionedTextDocumentIdentifier(version: version, uri: uri.toString())
: TextDocumentIdentifier(uri: uri.toString());
@@ -1328,7 +1333,7 @@
return request;
}
- RequestMessage makeRequest(Method method, ToJsonable params) {
+ RequestMessage makeRequest(Method method, ToJsonable? params) {
final id = Either2<num, String>.t1(_id++);
return RequestMessage(
id: id, method: method, params: params, jsonrpc: jsonRpcVersion);
@@ -1386,7 +1391,7 @@
return expectSuccessfulResponseTo(request, WorkspaceEdit.fromJson);
}
- Future openFile(Uri uri, String content, {num version = 1}) async {
+ Future openFile(Uri uri, String content, {int version = 1}) async {
var notification = makeNotification(
Method.textDocument_didOpen,
DidOpenTextDocumentParams(
@@ -1415,10 +1420,10 @@
Position positionFromOffset(int offset, String contents) {
final lineInfo = LineInfo.fromContent(withoutMarkers(contents));
- return toPosition(lineInfo.getLocation(offset));
+ return toPosition(lineInfo.getLocation(offset) as CharacterLocation);
}
- Future<RangeAndPlaceholder> prepareRename(Uri uri, Position pos) {
+ Future<RangeAndPlaceholder?> prepareRename(Uri uri, Position pos) {
final request = makeRequest(
Method.textDocument_prepareRename,
TextDocumentPositionParams(
@@ -1457,7 +1462,7 @@
}
/// Returns the range of [searchText] in [content].
- Range rangeOfString(String content, String searchText) {
+ Range? rangeOfString(String content, String searchText) {
content = withoutMarkers(content);
final startOffset = content.indexOf(searchText);
return startOffset == -1
@@ -1505,9 +1510,9 @@
return rangesFromMarkersImpl(content).toList();
}
- Future<WorkspaceEdit> rename(
+ Future<WorkspaceEdit?> rename(
Uri uri,
- int version,
+ int? version,
Position pos,
String newName,
) {
@@ -1573,7 +1578,7 @@
Future<Null> sendShutdown() {
final request = makeRequest(Method.shutdown, null);
- return expectSuccessfulResponseTo(request, (result) => result);
+ return expectSuccessfulResponseTo(request, (result) => result as Null);
}
/// Creates a [TextEdit] using the `insert` range of a [InsertReplaceEdit].
@@ -1619,7 +1624,7 @@
await serverToClient.firstWhere((message) {
if (message is NotificationMessage) {
if (message.method == CustomMethods.analyzerStatus) {
- if (_clientCapabilities.window?.workDoneProgress == true) {
+ if (_clientCapabilities!.window?.workDoneProgress == true) {
throw Exception(
'Recieved ${CustomMethods.analyzerStatus} notification '
'but client supports workDoneProgress');
@@ -1628,7 +1633,7 @@
final params = AnalyzerStatusParams.fromJson(message.params);
return params.isAnalyzing == analyzing;
} else if (message.method == Method.progress) {
- if (_clientCapabilities.window?.workDoneProgress != true) {
+ if (_clientCapabilities!.window?.workDoneProgress != true) {
throw Exception(
'Recieved ${CustomMethods.analyzerStatus} notification '
'but client supports workDoneProgress');
@@ -1660,7 +1665,7 @@
}
Future<List<ClosingLabel>> waitForClosingLabels(Uri uri) async {
- PublishClosingLabelsParams closingLabelsParams;
+ late PublishClosingLabelsParams closingLabelsParams;
await serverToClient.firstWhere((message) {
if (message is NotificationMessage &&
message.method == CustomMethods.publishClosingLabels) {
@@ -1674,13 +1679,14 @@
return closingLabelsParams.labels;
}
- Future<List<Diagnostic>> waitForDiagnostics(Uri uri) async {
- PublishDiagnosticsParams diagnosticParams;
- await serverToClient.firstWhere((message) {
+ Future<List<Diagnostic>?> waitForDiagnostics(Uri uri) async {
+ PublishDiagnosticsParams? diagnosticParams;
+ await serverToClient.map<Message?>((message) => message).firstWhere(
+ (message) {
if (message is NotificationMessage &&
message.method == Method.textDocument_publishDiagnostics) {
diagnosticParams = PublishDiagnosticsParams.fromJson(message.params);
- return diagnosticParams.uri == uri.toString();
+ return diagnosticParams!.uri == uri.toString();
}
return false;
}, orElse: () => null);
@@ -1688,7 +1694,7 @@
}
Future<FlutterOutline> waitForFlutterOutline(Uri uri) async {
- PublishFlutterOutlineParams outlineParams;
+ late PublishFlutterOutlineParams outlineParams;
await serverToClient.firstWhere((message) {
if (message is NotificationMessage &&
message.method == CustomMethods.publishFlutterOutline) {
@@ -1702,7 +1708,7 @@
}
Future<Outline> waitForOutline(Uri uri) async {
- PublishOutlineParams outlineParams;
+ late PublishOutlineParams outlineParams;
await serverToClient.firstWhere((message) {
if (message is NotificationMessage &&
message.method == CustomMethods.publishOutline) {
@@ -1748,7 +1754,7 @@
}
Future<void> _handleWorkDoneProgressCreate(RequestMessage request) async {
- if (_clientCapabilities.window?.workDoneProgress != true) {
+ if (_clientCapabilities!.window?.workDoneProgress != true) {
throw Exception('Server sent ${Method.window_workDoneProgress_create} '
'but client capabilities do not allow');
}
@@ -1775,9 +1781,10 @@
T1 Function(R) fromJson1,
bool Function(R, LspJsonReporter) canParse2,
T2 Function(R) fromJson2,
- [LspJsonReporter reporter]) {
+ [LspJsonReporter? reporter]) {
reporter ??= nullLspJsonReporter;
return (input) {
+ reporter!;
if (canParse1(input, reporter)) {
return Either2<T1, T2>.t1(fromJson1(input));
}
diff --git a/pkg/analysis_server/test/lsp/server_test.dart b/pkg/analysis_server/test/lsp/server_test.dart
index 07858b3..c5508eb 100644
--- a/pkg/analysis_server/test/lsp/server_test.dart
+++ b/pkg/analysis_server/test/lsp/server_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/lsp_protocol/protocol_special.dart';
import 'package:test/test.dart';
@@ -79,7 +77,8 @@
// Wait up to 1sec to ensure no error/log notifications were sent back.
var didTimeout = false;
- final notificationFromServer = await firstError.timeout(
+ final notificationFromServer =
+ await firstError.then<NotificationMessage?>((error) => error).timeout(
const Duration(seconds: 1),
onTimeout: () {
didTimeout = true;
@@ -97,7 +96,7 @@
final response = await channel.sendRequestToServer(request);
expect(response.id, equals(request.id));
expect(response.error, isNotNull);
- expect(response.error.code, equals(ErrorCodes.MethodNotFound));
+ expect(response.error!.code, equals(ErrorCodes.MethodNotFound));
expect(response.result, isNull);
}
@@ -107,7 +106,7 @@
final response = await channel.sendRequestToServer(request);
expect(response.id, equals(request.id));
expect(response.error, isNotNull);
- expect(response.error.code, equals(ErrorCodes.MethodNotFound));
+ expect(response.error!.code, equals(ErrorCodes.MethodNotFound));
expect(response.result, isNull);
}
}
diff --git a/pkg/analysis_server/test/lsp/signature_help_test.dart b/pkg/analysis_server/test/lsp/signature_help_test.dart
index 13432a9..9a6300f 100644
--- a/pkg/analysis_server/test/lsp/signature_help_test.dart
+++ b/pkg/analysis_server/test/lsp/signature_help_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -23,11 +21,11 @@
String expectedLabel,
String expectedDoc,
List<ParameterInformation> expectedParams, {
- MarkupKind expectedFormat = MarkupKind.Markdown,
- SignatureHelpContext context,
+ MarkupKind? expectedFormat = MarkupKind.Markdown,
+ SignatureHelpContext? context,
}) async {
- final res = await getSignatureHelp(
- mainFileUri, positionFromMarker(fileContent), context);
+ final res = (await getSignatureHelp(
+ mainFileUri, positionFromMarker(fileContent), context))!;
// TODO(dantup): Update this when there is clarification on how to handle
// no valid selected parameter.
@@ -41,7 +39,7 @@
// Test the format matches the tests expectation.
// For clients that don't support MarkupContent it'll be a plain string,
// but otherwise it'll be a MarkupContent of type PlainText or Markdown.
- final doc = sig.documentation;
+ final doc = sig.documentation!;
if (expectedFormat == null) {
// Plain string.
expect(doc.valueEquals(expectedDoc), isTrue);
diff --git a/pkg/analysis_server/test/lsp/super_test.dart b/pkg/analysis_server/test/lsp/super_test.dart
index 29eec48..b9192d9 100644
--- a/pkg/analysis_server/test/lsp/super_test.dart
+++ b/pkg/analysis_server/test/lsp/super_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/lsp/will_rename_files_test.dart b/pkg/analysis_server/test/lsp/will_rename_files_test.dart
index 124671d..9d88945 100644
--- a/pkg/analysis_server/test/lsp/will_rename_files_test.dart
+++ b/pkg/analysis_server/test/lsp/will_rename_files_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'dart:async';
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
@@ -56,7 +54,7 @@
final contents = {
mainFilePath: withoutMarkers(mainContent),
};
- applyChanges(contents, edit.changes);
+ applyChanges(contents, edit.changes!);
expect(contents[mainFilePath], equals(expectedMainContent));
}
}
diff --git a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
index 915a8a3..c2715d7 100644
--- a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/lsp_protocol/protocol_special.dart';
import 'package:test/test.dart';
@@ -100,10 +98,11 @@
);
final response = await sendRequestToServer(request);
- expect(response.error.code, equals(ErrorCodes.InvalidParams));
+ final error = response.error!;
+ expect(error.code, equals(ErrorCodes.InvalidParams));
// Ensure the error is useful to the client.
expect(
- response.error.message,
+ error.message,
equals('Invalid params for workspace/symbol:\n'
'params.query must not be undefined'),
);
diff --git a/pkg/analysis_server/test/mocks_lsp.dart b/pkg/analysis_server/test/mocks_lsp.dart
index fdb402e..d8eafef 100644
--- a/pkg/analysis_server/test/mocks_lsp.dart
+++ b/pkg/analysis_server/test/mocks_lsp.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'dart:async';
import 'dart:convert';
@@ -21,8 +19,6 @@
final StreamController<lsp.Message> _serverToClient =
StreamController<lsp.Message>.broadcast();
- String name;
-
/// Completer that will be signalled when the input stream is closed.
final Completer _closed = Completer();
@@ -78,7 +74,7 @@
@override
void listen(void Function(lsp.Message message) onMessage,
- {Function onError, void Function() onDone}) {
+ {Function? onError, void Function()? onDone}) {
_clientToServer.stream.listen(onMessage, onError: onError, onDone: onDone);
}