Skip to content

Commit a01d47d

Browse files
jensjohaCommit Queue
authored andcommitted
[analyzer] Cache/reuse CorrectionUtils
For `lsp_many_prefer_single_quotes_violations_benchmark.dart --sizes=3200`: Before: Initial analysis: 0.119093 First code action call: 2.632948 Subsequent action call 1: 2.176926 Subsequent action call 2: 2.316560 Select all code action call: 8.269120 Now: Initial analysis: 0.105622 First code action call: 2.629498 Subsequent action call 1: 2.240760 Subsequent action call 2: 2.354467 Select all code action call: 6.873468 Change-Id: Ic967e54592d96057e20a8d70355e47d5232653a7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426180 Commit-Queue: Jens Johansen <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent b378d24 commit a01d47d

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart
1818
import 'package:analysis_server/src/utilities/extensions/ast.dart';
1919
import 'package:analysis_server_plugin/edit/assist/assist.dart';
2020
import 'package:analysis_server_plugin/edit/assist/dart_assist_context.dart';
21+
import 'package:analysis_server_plugin/edit/correction_utils.dart';
2122
import 'package:analysis_server_plugin/edit/fix/dart_fix_context.dart';
2223
import 'package:analysis_server_plugin/src/correction/assist_performance.dart';
2324
import 'package:analysis_server_plugin/src/correction/assist_processor.dart';
@@ -210,6 +211,7 @@ class DartCodeActionsProducer extends AbstractCodeActionsProducer {
210211
Set<String>? skipAlreadyCalculatedIfNonNull =
211212
willBeDeduplicated ? {} : null;
212213
var workspace = DartChangeWorkspace(await server.currentSessions);
214+
CorrectionUtils? correctionUtils;
213215
for (var error in unitResult.errors) {
214216
// Return fixes for any part of the line where a diagnostic is.
215217
// If a diagnostic spans multiple lines, the fix will be included for
@@ -228,6 +230,7 @@ class DartCodeActionsProducer extends AbstractCodeActionsProducer {
228230
libraryResult: libraryResult,
229231
unitResult: unitResult,
230232
error: error,
233+
correctionUtils: correctionUtils ??= CorrectionUtils(unitResult),
231234
);
232235

233236
var performanceTracker = FixPerformance();

pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ final class CorrectionProducerContext {
244244
}) : _libraryResult = libraryResult,
245245
_unitResult = unitResult,
246246
_sessionHelper = AnalysisSessionHelper(unitResult.session),
247-
_utils = CorrectionUtils(unitResult),
247+
_utils = dartFixContext?.correctionUtils ?? CorrectionUtils(unitResult),
248248
_applyingBulkFixes = applyingBulkFixes,
249249
_diagnostic = diagnostic,
250250
_token = token,

pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:analysis_server_plugin/edit/correction_utils.dart';
56
import 'package:analysis_server_plugin/edit/fix/fix_context.dart';
67
import 'package:analysis_server_plugin/src/correction/change_workspace.dart';
78
import 'package:analyzer/dart/analysis/results.dart';
@@ -37,6 +38,9 @@ class DartFixContext implements FixContext {
3738
/// The unit result in which the fix operates.
3839
final ResolvedUnitResult unitResult;
3940

41+
// The [CorrectionUtils] for the unit result.
42+
final CorrectionUtils correctionUtils;
43+
4044
/// The workspace in which the fix contributor operates.
4145
final ChangeWorkspace workspace;
4246

@@ -58,7 +62,8 @@ class DartFixContext implements FixContext {
5862
required this.unitResult,
5963
required this.error,
6064
this.autoTriggered = false,
61-
});
65+
CorrectionUtils? correctionUtils,
66+
}) : correctionUtils = correctionUtils ?? CorrectionUtils(unitResult);
6267

6368
/// Returns the mapping from each library (that is available to this context)
6469
/// to a top-level declaration that is exported (not necessary declared) by

pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ final class FixInFileProcessor {
6969
libraryResult: _fixContext.libraryResult,
7070
unitResult: _fixContext.unitResult,
7171
error: error,
72+
correctionUtils: _fixContext.correctionUtils,
7273
);
7374
fixState = await _fixDiagnostic(fixContext, fixState, generator, error);
7475

@@ -85,6 +86,7 @@ final class FixInFileProcessor {
8586
libraryResult: _fixContext.libraryResult,
8687
unitResult: _fixContext.unitResult,
8788
error: error,
89+
correctionUtils: _fixContext.correctionUtils,
8890
);
8991
fixState =
9092
await _fixDiagnostic(fixContext, fixState, generator, error);

0 commit comments

Comments
 (0)