Skip to content

Commit 2f66c07

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Extract CompletionSuggestion.copyWith() into an extension.
Change-Id: I7cc391f91f74b5f9d37435a78d04c773f3672fcd Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/218744 Reviewed-by: Samuel Rawlins <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 0d74a3e commit 2f66c07

File tree

1 file changed

+54
-26
lines changed

1 file changed

+54
-26
lines changed

pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@ import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
2525
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
2626
import '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.
3040
class 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

Comments
 (0)