@@ -25,6 +25,16 @@ import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
2525import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart' ;
2626import 'package:analyzer_plugin/utilities/range_factory.dart' ;
2727
28+ /// Wrapper around a potentially nullable value.
29+ ///
30+ /// When the wrapper instance is provided for a property, the property
31+ /// value is replaced, even if the value to set is `null` itself.
32+ class CopyWithValue <T > {
33+ final T value;
34+
35+ CopyWithValue (this .value);
36+ }
37+
2838/// This class provides suggestions based upon the visible instance members in
2939/// an interface type.
3040class MemberSuggestionBuilder {
@@ -154,32 +164,8 @@ class NewSuggestionsProcessor {
154164 var suggestion = entry.value;
155165 if (! _current.contains (suggestion)) {
156166 libraryUriToImportIndex ?? = produce ();
157- suggestionMap[entry.key] = protocol.CompletionSuggestion (
158- suggestion.kind,
159- suggestion.relevance,
160- suggestion.completion,
161- suggestion.selectionOffset,
162- suggestion.selectionLength,
163- suggestion.isDeprecated,
164- suggestion.isPotential,
165- displayText: suggestion.displayText,
166- replacementOffset: suggestion.replacementOffset,
167- replacementLength: suggestion.replacementLength,
168- docSummary: suggestion.docSummary,
169- docComplete: suggestion.docComplete,
170- declaringType: suggestion.declaringType,
171- defaultArgumentListString: suggestion.defaultArgumentListString,
172- defaultArgumentListTextRanges:
173- suggestion.defaultArgumentListTextRanges,
174- element: suggestion.element,
175- returnType: suggestion.returnType,
176- parameterNames: suggestion.parameterNames,
177- parameterTypes: suggestion.parameterTypes,
178- requiredParameterCount: suggestion.requiredParameterCount,
179- hasNamedParameters: suggestion.hasNamedParameters,
180- parameterName: suggestion.parameterName,
181- parameterType: suggestion.parameterType,
182- libraryUriToImportIndex: libraryUriToImportIndex,
167+ suggestionMap[entry.key] = suggestion.copyWith (
168+ libraryUriToImportIndex: CopyWithValue (libraryUriToImportIndex),
183169 );
184170 }
185171 }
@@ -1314,3 +1300,45 @@ class _CompletionSuggestionInputs {
13141300 other.prefix == prefix;
13151301 }
13161302}
1303+
1304+ extension CompletionSuggestionExtension on CompletionSuggestion {
1305+ CompletionSuggestion copyWith ({
1306+ CopyWithValue <int ?>? libraryUriToImportIndex,
1307+ }) {
1308+ return protocol.CompletionSuggestion (
1309+ kind,
1310+ relevance,
1311+ completion,
1312+ selectionOffset,
1313+ selectionLength,
1314+ isDeprecated,
1315+ isPotential,
1316+ displayText: displayText,
1317+ replacementOffset: replacementOffset,
1318+ replacementLength: replacementLength,
1319+ docSummary: docSummary,
1320+ docComplete: docComplete,
1321+ declaringType: declaringType,
1322+ defaultArgumentListString: defaultArgumentListString,
1323+ defaultArgumentListTextRanges: defaultArgumentListTextRanges,
1324+ element: element,
1325+ returnType: returnType,
1326+ parameterNames: parameterNames,
1327+ parameterTypes: parameterTypes,
1328+ requiredParameterCount: requiredParameterCount,
1329+ hasNamedParameters: hasNamedParameters,
1330+ parameterName: parameterName,
1331+ parameterType: parameterType,
1332+ libraryUriToImportIndex: libraryUriToImportIndex.orElse (
1333+ this .libraryUriToImportIndex,
1334+ ),
1335+ );
1336+ }
1337+ }
1338+
1339+ extension _CopyWithValueExtension <T > on CopyWithValue <T >? {
1340+ T orElse (T defaultValue) {
1341+ final self = this ;
1342+ return self != null ? self.value : defaultValue;
1343+ }
1344+ }
0 commit comments