Skip to content

Commit 771ee9f

Browse files
bwilkersoncommit-bot@chromium.org
authored andcommitted
Pass the output directory to dartfix and install a listener when output should be generated
Change-Id: Ie73287f212246493a6f95aa39f56bf60c0b23f4d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117769 Reviewed-by: Samuel Rawlins <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent 93f1324 commit 771ee9f

File tree

8 files changed

+102
-37
lines changed

8 files changed

+102
-37
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class EditDartFix
7373
}
7474
}
7575
for (DartFixInfo info in fixInfo) {
76-
info.setup(this, listener);
76+
info.setup(this, listener, params);
7777
}
7878

7979
// Validate each included file and directory.

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

Lines changed: 10 additions & 7 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:analysis_server/plugin/edit/assist/assist_core.dart';
6+
import 'package:analysis_server/protocol/protocol_generated.dart';
67
import 'package:analysis_server/src/edit/fix/dartfix_listener.dart';
78
import 'package:analysis_server/src/edit/fix/dartfix_registrar.dart';
89
import 'package:analysis_server/src/edit/fix/fix_lint_task.dart';
@@ -47,8 +48,8 @@ class BasicFixLintAssistTask extends FixLintTask {
4748
}
4849
}
4950

50-
static void preferForElementsToMapFromIterable(
51-
DartFixRegistrar registrar, DartFixListener listener) {
51+
static void preferForElementsToMapFromIterable(DartFixRegistrar registrar,
52+
DartFixListener listener, EditDartfixParams params) {
5253
registrar.registerLintTask(
5354
Registry.ruleRegistry['prefer_for_elements_to_map_fromIterable'],
5455
new BasicFixLintAssistTask(
@@ -57,25 +58,27 @@ class BasicFixLintAssistTask extends FixLintTask {
5758
}
5859

5960
static void preferIfElementsToConditionalExpressions(
60-
DartFixRegistrar registrar, DartFixListener listener) {
61+
DartFixRegistrar registrar,
62+
DartFixListener listener,
63+
EditDartfixParams params) {
6164
registrar.registerLintTask(
6265
Registry.ruleRegistry['prefer_if_elements_to_conditional_expressions'],
6366
new BasicFixLintAssistTask(
6467
DartAssistKind.CONVERT_TO_IF_ELEMENT, listener),
6568
);
6669
}
6770

68-
static void preferIntLiterals(
69-
DartFixRegistrar registrar, DartFixListener listener) {
71+
static void preferIntLiterals(DartFixRegistrar registrar,
72+
DartFixListener listener, EditDartfixParams params) {
7073
registrar.registerLintTask(
7174
Registry.ruleRegistry['prefer_int_literals'],
7275
new BasicFixLintAssistTask(
7376
DartAssistKind.CONVERT_TO_INT_LITERAL, listener),
7477
);
7578
}
7679

77-
static void preferSpreadCollections(
78-
DartFixRegistrar registrar, DartFixListener listener) {
80+
static void preferSpreadCollections(DartFixRegistrar registrar,
81+
DartFixListener listener, EditDartfixParams params) {
7982
registrar.registerLintTask(
8083
Registry.ruleRegistry['prefer_spread_collections'],
8184
new BasicFixLintAssistTask(DartAssistKind.CONVERT_TO_SPREAD, listener),

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

Lines changed: 9 additions & 8 deletions
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/protocol/protocol_generated.dart';
56
import 'package:analysis_server/src/edit/fix/dartfix_listener.dart';
67
import 'package:analysis_server/src/edit/fix/dartfix_registrar.dart';
78
import 'package:analysis_server/src/edit/fix/fix_lint_task.dart';
@@ -15,34 +16,34 @@ class BasicFixLintErrorTask extends FixLintTask {
1516
BasicFixLintErrorTask(this.fixKind, DartFixListener listener)
1617
: super(listener);
1718

18-
static void nullClosures(
19-
DartFixRegistrar registrar, DartFixListener listener) {
19+
static void nullClosures(DartFixRegistrar registrar, DartFixListener listener,
20+
EditDartfixParams params) {
2021
registrar.registerLintTask(
2122
Registry.ruleRegistry['null_closures'],
2223
new BasicFixLintErrorTask(
2324
DartFixKind.REPLACE_NULL_WITH_CLOSURE, listener),
2425
);
2526
}
2627

27-
static void preferEqualForDefaultValues(
28-
DartFixRegistrar registrar, DartFixListener listener) {
28+
static void preferEqualForDefaultValues(DartFixRegistrar registrar,
29+
DartFixListener listener, EditDartfixParams params) {
2930
registrar.registerLintTask(
3031
Registry.ruleRegistry['prefer_equal_for_default_values'],
3132
new BasicFixLintErrorTask(
3233
DartFixKind.REPLACE_COLON_WITH_EQUALS, listener),
3334
);
3435
}
3536

36-
static void preferIsEmpty(
37-
DartFixRegistrar registrar, DartFixListener listener) {
37+
static void preferIsEmpty(DartFixRegistrar registrar,
38+
DartFixListener listener, EditDartfixParams params) {
3839
registrar.registerLintTask(
3940
Registry.ruleRegistry['prefer_is_empty'],
4041
new BasicFixLintErrorTask(DartFixKind.REPLACE_WITH_IS_EMPTY, listener),
4142
);
4243
}
4344

44-
static void preferIsNotEmpty(
45-
DartFixRegistrar registrar, DartFixListener listener) {
45+
static void preferIsNotEmpty(DartFixRegistrar registrar,
46+
DartFixListener listener, EditDartfixParams params) {
4647
registrar.registerLintTask(
4748
Registry.ruleRegistry['prefer_is_not_empty'],
4849
new BasicFixLintErrorTask(

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
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/protocol/protocol_generated.dart' show DartFix;
5+
import 'package:analysis_server/protocol/protocol_generated.dart'
6+
show DartFix, EditDartfixParams;
67
import 'package:analysis_server/src/edit/edit_dartfix.dart';
8+
import 'package:analysis_server/src/edit/fix/basic_fix_lint_assist_task.dart';
9+
import 'package:analysis_server/src/edit/fix/basic_fix_lint_error_task.dart';
710
import 'package:analysis_server/src/edit/fix/dartfix_listener.dart';
811
import 'package:analysis_server/src/edit/fix/dartfix_registrar.dart';
912
import 'package:analysis_server/src/edit/fix/fix_error_task.dart';
1013
import 'package:analysis_server/src/edit/fix/non_nullable_fix.dart';
1114
import 'package:analysis_server/src/edit/fix/prefer_mixin_fix.dart';
12-
import 'package:analysis_server/src/edit/fix/basic_fix_lint_assist_task.dart';
13-
import 'package:analysis_server/src/edit/fix/basic_fix_lint_error_task.dart';
1415

1516
const allFixes = <DartFixInfo>[
1617
//
@@ -186,7 +187,8 @@ class DartFixInfo {
186187
final bool isDefault;
187188
final bool isPedantic;
188189
final bool isRequired;
189-
final void Function(DartFixRegistrar dartfix, DartFixListener listener) setup;
190+
final void Function(DartFixRegistrar dartfix, DartFixListener listener,
191+
EditDartfixParams params) setup;
190192

191193
const DartFixInfo(
192194
this.key,

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

Lines changed: 3 additions & 2 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:analysis_server/plugin/edit/fix/fix_core.dart';
6+
import 'package:analysis_server/protocol/protocol_generated.dart';
67
import 'package:analysis_server/src/edit/edit_dartfix.dart';
78
import 'package:analysis_server/src/edit/fix/dartfix_listener.dart';
89
import 'package:analysis_server/src/edit/fix/dartfix_registrar.dart';
@@ -62,8 +63,8 @@ class FixErrorTask {
6263
}
6364
}
6465

65-
static void fixNamedConstructorTypeArgs(
66-
DartFixRegistrar registrar, DartFixListener listener) {
66+
static void fixNamedConstructorTypeArgs(DartFixRegistrar registrar,
67+
DartFixListener listener, EditDartfixParams params) {
6768
registrar.registerErrorTask(
6869
StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
6970
new FixErrorTask(listener));

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

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
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/protocol/protocol_generated.dart';
56
import 'package:analysis_server/src/edit/fix/dartfix_listener.dart';
67
import 'package:analysis_server/src/edit/fix/dartfix_registrar.dart';
78
import 'package:analysis_server/src/edit/fix/fix_code_task.dart';
9+
import 'package:analysis_server/src/edit/nnbd_migration/instrumentation_listener.dart';
810
import 'package:analyzer/dart/analysis/results.dart';
911
import 'package:analyzer/dart/ast/ast.dart';
1012
import 'package:analyzer/file_system/file_system.dart';
13+
import 'package:analyzer/file_system/overlay_file_system.dart';
1114
import 'package:analyzer/src/dart/analysis/experiments.dart';
1215
import 'package:analyzer/src/generated/source.dart';
1316
import 'package:analyzer/src/task/options.dart';
@@ -26,24 +29,40 @@ class NonNullableFix extends FixCodeTask {
2629

2730
final DartFixListener listener;
2831

29-
final NullabilityMigration migration;
32+
final String outputDir;
33+
34+
InstrumentationListener instrumentationListener;
35+
36+
NullabilityMigration migration;
3037

3138
/// If this flag has a value of `false`, then something happened to prevent
3239
/// at least one package from being marked as non-nullable.
3340
/// If this occurs, then don't update any code.
3441
bool _packageIsNNBD = true;
3542

36-
NonNullableFix(this.listener)
37-
: migration = new NullabilityMigration(
38-
new NullabilityMigrationAdapter(listener),
39-
permissive: _usePermissiveMode);
43+
NonNullableFix(this.listener, this.outputDir) {
44+
instrumentationListener =
45+
outputDir == null ? null : InstrumentationListener();
46+
migration = new NullabilityMigration(
47+
new NullabilityMigrationAdapter(listener),
48+
permissive: _usePermissiveMode,
49+
instrumentation: instrumentationListener);
50+
}
4051

4152
@override
4253
int get numPhases => 2;
4354

4455
@override
4556
Future<void> finish() async {
4657
migration.finish();
58+
if (outputDir != null) {
59+
OverlayResourceProvider provider = listener.server.resourceProvider;
60+
Folder outputFolder = provider.getFolder(outputDir);
61+
if (!outputFolder.exists) {
62+
outputFolder.create();
63+
}
64+
_generateOutput(outputFolder);
65+
}
4766
}
4867

4968
/// If the package contains an analysis_options.yaml file, then update the
@@ -176,8 +195,21 @@ analyzer:
176195
_packageIsNNBD = false;
177196
}
178197

179-
static void task(DartFixRegistrar registrar, DartFixListener listener) {
180-
registrar.registerCodeTask(new NonNullableFix(listener));
198+
/// Generate output into the given [folder].
199+
void _generateOutput(Folder folder) {
200+
File main = folder.getChildAssumingFile('main.html');
201+
main.writeAsStringSync('''
202+
<html>
203+
<body>
204+
Generated output at ${DateTime.now()}.
205+
</body>
206+
</html>
207+
''');
208+
}
209+
210+
static void task(DartFixRegistrar registrar, DartFixListener listener,
211+
EditDartfixParams params) {
212+
registrar.registerCodeTask(new NonNullableFix(listener, params.outputDir));
181213
}
182214
}
183215

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

Lines changed: 3 additions & 1 deletion
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:analysis_server/plugin/edit/assist/assist_core.dart';
6+
import 'package:analysis_server/protocol/protocol_generated.dart';
67
import 'package:analysis_server/src/edit/fix/dartfix_listener.dart';
78
import 'package:analysis_server/src/edit/fix/dartfix_registrar.dart';
89
import 'package:analysis_server/src/edit/fix/fix_code_task.dart';
@@ -91,7 +92,8 @@ class PreferMixinFix extends FixLintTask implements FixCodeTask {
9192
@override
9293
Future<void> processUnit(int phase, ResolvedUnitResult result) async {}
9394

94-
static void task(DartFixRegistrar registrar, DartFixListener listener) {
95+
static void task(DartFixRegistrar registrar, DartFixListener listener,
96+
EditDartfixParams params) {
9597
var task = new PreferMixinFix(listener);
9698
registrar.registerLintTask(Registry.ruleRegistry['prefer_mixin'], task);
9799
registrar.registerCodeTask(task);

pkg/analysis_server/test/domain_edit_dartfix_test.dart

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,23 @@ class EditDartfixDomainHandlerTest extends AbstractAnalysisTest {
4949
}
5050

5151
Future<EditDartfixResult> performFix(
52-
{List<String> includedFixes, bool pedantic}) async {
53-
var response =
54-
await performFixRaw(includedFixes: includedFixes, pedantic: pedantic);
52+
{List<String> includedFixes, String outputDir, bool pedantic}) async {
53+
var response = await performFixRaw(
54+
includedFixes: includedFixes, outputDir: outputDir, pedantic: pedantic);
5555
expect(response.error, isNull);
5656
return EditDartfixResult.fromResponse(response);
5757
}
5858

5959
Future<Response> performFixRaw(
6060
{List<String> includedFixes,
6161
List<String> excludedFixes,
62+
String outputDir,
6263
bool pedantic}) async {
6364
final id = nextRequestId;
6465
final params = new EditDartfixParams([projectPath]);
6566
params.includedFixes = includedFixes;
6667
params.excludedFixes = excludedFixes;
68+
params.outputDir = outputDir;
6769
params.includePedanticFixes = pedantic;
6870
final request = new Request(id, 'edit.dartfix', params.toJson());
6971

@@ -190,7 +192,7 @@ f(Iterable<int> i) {
190192
''');
191193
}
192194

193-
test_dartfix_non_nullable() async {
195+
test_dartfix_nonNullable() async {
194196
// Add analysis options to enable non-nullable analysis
195197
newFile('/project/analysis_options.yaml', content: '''
196198
analyzer:
@@ -218,7 +220,7 @@ void test() {
218220
''');
219221
}
220222

221-
test_dartfix_non_nullable_analysis_options_created() async {
223+
test_dartfix_nonNullable_analysisOptions_created() async {
222224
// Add pubspec for nnbd migration to detect
223225
newFile('/project/pubspec.yaml', content: '''
224226
name: testnnbd
@@ -237,7 +239,7 @@ analyzer:
237239
''');
238240
}
239241

240-
test_dartfix_non_nullable_analysis_options_experiments_added() async {
242+
test_dartfix_nonNullable_analysisOptions_experimentsAdded() async {
241243
String originalOptions = '''
242244
analyzer:
243245
something:
@@ -265,7 +267,7 @@ linter:
265267
''');
266268
}
267269

268-
test_dartfix_non_nullable_analysis_options_nnbd_added() async {
270+
test_dartfix_nonNullable_analysisOptions_nnbdAdded() async {
269271
String originalOptions = '''
270272
analyzer:
271273
enable-experiment:
@@ -290,6 +292,28 @@ linter:
290292
''');
291293
}
292294

295+
test_dartfix_nonNullable_outputDir() async {
296+
// Add analysis options to enable non-nullable analysis
297+
newFile('/project/analysis_options.yaml', content: '''
298+
analyzer:
299+
enable-experiment:
300+
- non-nullable
301+
''');
302+
addTestFile('''
303+
int f(int i) => 0;
304+
int g(int i) => f(i);
305+
void test() {
306+
g(null);
307+
}
308+
''');
309+
createProject();
310+
var outputDir = getFolder('/outputDir');
311+
await performFix(
312+
includedFixes: ['non-nullable'], outputDir: outputDir.path);
313+
expect(outputDir.exists, true);
314+
expect(outputDir.getChildren(), isNotEmpty);
315+
}
316+
293317
test_dartfix_partFile() async {
294318
newFile('/project/lib/lib.dart', content: '''
295319
library lib2;

0 commit comments

Comments
 (0)