Skip to content

Commit c91a245

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Use ChangeWorkspace to limit where DartChangeBuilder(s) can edit.
[email protected] Bug: dart-lang#35402 Change-Id: If5f78b44b69f01d9ddc235401f70cc4aefd3ca37 Reviewed-on: https://dart-review.googlesource.com/c/87382 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent f0babb6 commit c91a245

23 files changed

+382
-150
lines changed

pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:analyzer/dart/analysis/results.dart';
6+
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
67

78
/**
89
* An object used to provide context information for Dart assist contributors.
@@ -24,4 +25,9 @@ abstract class DartAssistContext {
2425
* The start of the selection.
2526
*/
2627
int get selectionOffset;
28+
29+
/**
30+
* The workspace in which the fix contributor operates.
31+
*/
32+
ChangeWorkspace get workspace;
2733
}

pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
66
import 'package:analyzer/dart/analysis/results.dart';
7+
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
78

89
/**
910
* An object used to provide context information for [DartFixContributor]s.
@@ -15,4 +16,9 @@ abstract class DartFixContext implements FixContext {
1516
* The resolution result in which fix operates.
1617
*/
1718
ResolvedUnitResult get resolveResult;
19+
20+
/**
21+
* The workspace in which the fix contributor operates.
22+
*/
23+
ChangeWorkspace get workspace;
1824
}

pkg/analysis_server/lib/src/analysis_server_abstract.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:analysis_server/src/context_manager.dart';
99
import 'package:analysis_server/src/services/correction/namespace.dart';
1010
import 'package:analysis_server/src/services/search/element_visitors.dart';
1111
import 'package:analyzer/dart/analysis/results.dart';
12+
import 'package:analyzer/dart/analysis/session.dart';
1213
import 'package:analyzer/dart/ast/ast.dart';
1314
import 'package:analyzer/dart/element/element.dart';
1415
import 'package:analyzer/exception/exception.dart';
@@ -73,6 +74,11 @@ abstract class AbstractAnalysisServer {
7374
return _analyzedFilesGlobs;
7475
}
7576

77+
/// The list of current analysis sessions in all contexts.
78+
List<AnalysisSession> get currentSessions {
79+
return driverMap.values.map((driver) => driver.currentSession).toList();
80+
}
81+
7682
/// A table mapping [Folder]s to the [AnalysisDriver]s associated with them.
7783
Map<Folder, nd.AnalysisDriver> get driverMap => contextManager.driverMap;
7884

pkg/analysis_server/lib/src/edit/edit_dartfix.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:analysis_server/protocol/protocol_generated.dart';
88
import 'package:analysis_server/src/analysis_server.dart';
99
import 'package:analysis_server/src/edit/fix/prefer_int_literals_fix.dart';
1010
import 'package:analysis_server/src/edit/fix/prefer_mixin_fix.dart';
11+
import 'package:analysis_server/src/services/correction/change_workspace.dart';
1112
import 'package:analysis_server/src/services/correction/fix.dart';
1213
import 'package:analysis_server/src/services/correction/fix_internal.dart';
1314
import 'package:analyzer/dart/analysis/results.dart';
@@ -212,7 +213,8 @@ class EditDartFix {
212213
return false;
213214
}
214215

215-
final dartContext = new DartFixContextImpl(result, error);
216+
final workspace = DartChangeWorkspace(server.currentSessions);
217+
final dartContext = new DartFixContextImpl(workspace, result, error);
216218
final processor = new FixProcessor(dartContext);
217219
Fix fix = await processor.computeFix();
218220
final location = locationFor(result, error.offset, error.length);

pkg/analysis_server/lib/src/edit/edit_domain.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import 'package:analysis_server/src/services/completion/postfix/postfix_completi
1919
import 'package:analysis_server/src/services/completion/statement/statement_completion.dart';
2020
import 'package:analysis_server/src/services/correction/assist.dart';
2121
import 'package:analysis_server/src/services/correction/assist_internal.dart';
22+
import 'package:analysis_server/src/services/correction/change_workspace.dart';
2223
import 'package:analysis_server/src/services/correction/fix.dart';
2324
import 'package:analysis_server/src/services/correction/fix_internal.dart';
2425
import 'package:analysis_server/src/services/correction/organize_directives.dart';
@@ -183,7 +184,12 @@ class EditDomainHandler extends AbstractRequestHandler {
183184
//
184185
ResolvedUnitResult result = await server.getResolvedUnit(file);
185186
if (result != null) {
186-
var context = new DartAssistContextImpl(result, offset, length);
187+
var context = new DartAssistContextImpl(
188+
DartChangeWorkspace(server.currentSessions),
189+
result,
190+
offset,
191+
length,
192+
);
187193
try {
188194
AssistProcessor processor = new AssistProcessor(context);
189195
List<Assist> assists = await processor.compute();
@@ -528,7 +534,8 @@ class EditDomainHandler extends AbstractRequestHandler {
528534
for (engine.AnalysisError error in result.errors) {
529535
int errorLine = lineInfo.getLocation(error.offset).lineNumber;
530536
if (errorLine == requestLine) {
531-
var context = new DartFixContextImpl(result, error);
537+
var workspace = DartChangeWorkspace(server.currentSessions);
538+
var context = new DartFixContextImpl(workspace, result, error);
532539
List<Fix> fixes =
533540
await new DartFixContributor().computeFixes(context);
534541
if (fixes.isNotEmpty) {

pkg/analysis_server/lib/src/edit/fix/prefer_int_literals_fix.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
66
import 'package:analysis_server/src/edit/edit_dartfix.dart';
77
import 'package:analysis_server/src/services/correction/assist.dart';
88
import 'package:analysis_server/src/services/correction/assist_internal.dart';
9+
import 'package:analysis_server/src/services/correction/change_workspace.dart';
910
import 'package:analyzer/dart/analysis/results.dart';
1011
import 'package:analyzer/dart/ast/ast.dart';
1112
import 'package:analyzer/error/error.dart';
@@ -20,7 +21,12 @@ class PreferIntLiteralsFix extends LinterFix {
2021
while (literalsToConvert.isNotEmpty) {
2122
DoubleLiteral literal = literalsToConvert.removeLast();
2223
AssistProcessor processor = new AssistProcessor(
23-
new DartAssistContextImpl(result, literal.offset, 0),
24+
new DartAssistContextImpl(
25+
DartChangeWorkspace(dartFix.server.currentSessions),
26+
result,
27+
literal.offset,
28+
0,
29+
),
2430
);
2531
List<Assist> assists =
2632
await processor.computeAssist(DartAssistKind.CONVERT_TO_INT_LITERAL);

pkg/analysis_server/lib/src/edit/fix/prefer_mixin_fix.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
66
import 'package:analysis_server/src/edit/edit_dartfix.dart';
77
import 'package:analysis_server/src/services/correction/assist.dart';
88
import 'package:analysis_server/src/services/correction/assist_internal.dart';
9+
import 'package:analysis_server/src/services/correction/change_workspace.dart';
910
import 'package:analyzer/dart/analysis/results.dart';
1011
import 'package:analyzer/dart/ast/ast.dart';
1112
import 'package:analyzer/dart/element/element.dart';
@@ -37,7 +38,11 @@ class PreferMixinFix extends LinterFix {
3738
if (declaration is ClassOrMixinDeclaration &&
3839
declaration.name.name == elem.name) {
3940
AssistProcessor processor = new AssistProcessor(
40-
new DartAssistContextImpl(result, declaration.name.offset, 0),
41+
new DartAssistContextImpl(
42+
DartChangeWorkspace(dartFix.server.currentSessions),
43+
result,
44+
declaration.name.offset,
45+
0),
4146
);
4247
List<Assist> assists = await processor
4348
.computeAssist(DartAssistKind.CONVERT_CLASS_TO_MIXIN);

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'package:analysis_server/src/lsp/source_edits.dart';
1717
import 'package:analysis_server/src/protocol_server.dart' show SourceChange;
1818
import 'package:analysis_server/src/services/correction/assist.dart';
1919
import 'package:analysis_server/src/services/correction/assist_internal.dart';
20+
import 'package:analysis_server/src/services/correction/change_workspace.dart';
2021
import 'package:analysis_server/src/services/correction/fix.dart';
2122
import 'package:analysis_server/src/services/correction/fix_internal.dart';
2223
import 'package:analyzer/dart/analysis/results.dart';
@@ -128,7 +129,12 @@ class CodeActionHandler extends MessageHandler<CodeActionParams,
128129
}
129130

130131
try {
131-
var context = new DartAssistContextImpl(unit, offset, length);
132+
var context = new DartAssistContextImpl(
133+
DartChangeWorkspace(server.currentSessions),
134+
unit,
135+
offset,
136+
length,
137+
);
132138
final processor = new AssistProcessor(context);
133139
final assists = await processor.compute();
134140
assists.sort(Assist.SORT_BY_RELEVANCE);
@@ -184,7 +190,8 @@ class CodeActionHandler extends MessageHandler<CodeActionParams,
184190
// Server lineNumber is one-based so subtract one.
185191
int errorLine = lineInfo.getLocation(error.offset).lineNumber - 1;
186192
if (errorLine >= range.start.line && errorLine <= range.end.line) {
187-
var context = new DartFixContextImpl(unit, error);
193+
var workspace = DartChangeWorkspace(server.currentSessions);
194+
var context = new DartFixContextImpl(workspace, unit, error);
188195
final fixes = await fixContributor.computeFixes(context);
189196
if (fixes.isNotEmpty) {
190197
fixes.sort(Fix.SORT_BY_RELEVANCE);

pkg/analysis_server/lib/src/services/correction/assist.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55
import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
66
import 'package:analyzer/dart/analysis/results.dart';
77
import 'package:analyzer_plugin/utilities/assist/assist.dart';
8+
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
89

910
/**
1011
* The implementation of [DartAssistContext].
1112
*/
1213
class DartAssistContextImpl implements DartAssistContext {
14+
@override
15+
final ChangeWorkspace workspace;
16+
1317
@override
1418
final ResolvedUnitResult resolveResult;
1519

@@ -19,8 +23,8 @@ class DartAssistContextImpl implements DartAssistContext {
1923
@override
2024
final int selectionLength;
2125

22-
DartAssistContextImpl(
23-
this.resolveResult, this.selectionOffset, this.selectionLength);
26+
DartAssistContextImpl(this.workspace, this.resolveResult,
27+
this.selectionOffset, this.selectionLength);
2428
}
2529

2630
/**

pkg/analysis_server/lib/src/services/correction/assist_internal.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import 'package:analyzer/src/generated/java_core.dart';
2727
import 'package:analyzer/src/generated/resolver.dart';
2828
import 'package:analyzer/src/generated/source.dart';
2929
import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
30+
import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.dart';
3031
import 'package:analyzer_plugin/utilities/assist/assist.dart'
3132
hide AssistContributor;
3233
import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
@@ -3353,8 +3354,7 @@ class AssistProcessor {
33533354
}
33543355

33553356
DartChangeBuilder _newDartChangeBuilder() {
3356-
DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
3357-
return changeBuilder;
3357+
return new DartChangeBuilderImpl.forWorkspace(context.workspace);
33583358
}
33593359

33603360
bool _setupCompute() {

0 commit comments

Comments
 (0)