@@ -25,6 +25,16 @@ import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
25
25
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart' ;
26
26
import 'package:analyzer_plugin/utilities/range_factory.dart' ;
27
27
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
+
28
38
/// This class provides suggestions based upon the visible instance members in
29
39
/// an interface type.
30
40
class MemberSuggestionBuilder {
@@ -154,32 +164,8 @@ class NewSuggestionsProcessor {
154
164
var suggestion = entry.value;
155
165
if (! _current.contains (suggestion)) {
156
166
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),
183
169
);
184
170
}
185
171
}
@@ -1314,3 +1300,45 @@ class _CompletionSuggestionInputs {
1314
1300
other.prefix == prefix;
1315
1301
}
1316
1302
}
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