Version 2.15.0-271.0.dev
Merge commit '2f66c077c9e6264b0811d8a9a00c57ece5c988f3' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index 7de9949..1a432af 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -25,6 +25,16 @@
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/range_factory.dart';
+/// Wrapper around a potentially nullable value.
+///
+/// When the wrapper instance is provided for a property, the property
+/// value is replaced, even if the value to set is `null` itself.
+class CopyWithValue<T> {
+ final T value;
+
+ CopyWithValue(this.value);
+}
+
/// This class provides suggestions based upon the visible instance members in
/// an interface type.
class MemberSuggestionBuilder {
@@ -154,32 +164,8 @@
var suggestion = entry.value;
if (!_current.contains(suggestion)) {
libraryUriToImportIndex ??= produce();
- suggestionMap[entry.key] = protocol.CompletionSuggestion(
- suggestion.kind,
- suggestion.relevance,
- suggestion.completion,
- suggestion.selectionOffset,
- suggestion.selectionLength,
- suggestion.isDeprecated,
- suggestion.isPotential,
- displayText: suggestion.displayText,
- replacementOffset: suggestion.replacementOffset,
- replacementLength: suggestion.replacementLength,
- docSummary: suggestion.docSummary,
- docComplete: suggestion.docComplete,
- declaringType: suggestion.declaringType,
- defaultArgumentListString: suggestion.defaultArgumentListString,
- defaultArgumentListTextRanges:
- suggestion.defaultArgumentListTextRanges,
- element: suggestion.element,
- returnType: suggestion.returnType,
- parameterNames: suggestion.parameterNames,
- parameterTypes: suggestion.parameterTypes,
- requiredParameterCount: suggestion.requiredParameterCount,
- hasNamedParameters: suggestion.hasNamedParameters,
- parameterName: suggestion.parameterName,
- parameterType: suggestion.parameterType,
- libraryUriToImportIndex: libraryUriToImportIndex,
+ suggestionMap[entry.key] = suggestion.copyWith(
+ libraryUriToImportIndex: CopyWithValue(libraryUriToImportIndex),
);
}
}
@@ -1314,3 +1300,45 @@
other.prefix == prefix;
}
}
+
+extension CompletionSuggestionExtension on CompletionSuggestion {
+ CompletionSuggestion copyWith({
+ CopyWithValue<int?>? libraryUriToImportIndex,
+ }) {
+ return protocol.CompletionSuggestion(
+ kind,
+ relevance,
+ completion,
+ selectionOffset,
+ selectionLength,
+ isDeprecated,
+ isPotential,
+ displayText: displayText,
+ replacementOffset: replacementOffset,
+ replacementLength: replacementLength,
+ docSummary: docSummary,
+ docComplete: docComplete,
+ declaringType: declaringType,
+ defaultArgumentListString: defaultArgumentListString,
+ defaultArgumentListTextRanges: defaultArgumentListTextRanges,
+ element: element,
+ returnType: returnType,
+ parameterNames: parameterNames,
+ parameterTypes: parameterTypes,
+ requiredParameterCount: requiredParameterCount,
+ hasNamedParameters: hasNamedParameters,
+ parameterName: parameterName,
+ parameterType: parameterType,
+ libraryUriToImportIndex: libraryUriToImportIndex.orElse(
+ this.libraryUriToImportIndex,
+ ),
+ );
+ }
+}
+
+extension _CopyWithValueExtension<T> on CopyWithValue<T>? {
+ T orElse(T defaultValue) {
+ final self = this;
+ return self != null ? self.value : defaultValue;
+ }
+}
diff --git a/tools/VERSION b/tools/VERSION
index 9f69da1..341b927 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 270
+PRERELEASE 271
PRERELEASE_PATCH 0
\ No newline at end of file