Skip to content

Commit 8572b5c

Browse files
author
Dart CI
committed
Version 2.11.0-199.0.dev
Merge commit 'f84bba289746ee865cbfa4fe577cfe9771621995' into 'dev'
2 parents 8f1a963 + f84bba2 commit 8572b5c

File tree

612 files changed

+77417
-277
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

612 files changed

+77417
-277
lines changed

.dart_tool/package_config.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,11 +444,22 @@
444444
"packageUri": "lib/",
445445
"languageVersion": "2.2"
446446
},
447+
{
448+
"name": "observatory_2",
449+
"rootUri": "../runtime/observatory_2",
450+
"packageUri": "lib/",
451+
"languageVersion": "2.2"
452+
},
447453
{
448454
"name": "observatory_test_package",
449455
"rootUri": "../runtime/observatory/tests/service/observatory_test_package",
450456
"languageVersion": "2.7"
451457
},
458+
{
459+
"name": "observatory_test_package_2",
460+
"rootUri": "../runtime/observatory_2/tests/service_2/observatory_test_package_2",
461+
"languageVersion": "2.7"
462+
},
452463
{
453464
"name": "package_config",
454465
"rootUri": "../third_party/pkg_tested/package_config",

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

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,11 @@ import 'package:analyzer/exception/exception.dart';
4242
import 'package:analyzer/file_system/file_system.dart';
4343
import 'package:analyzer/source/line_info.dart';
4444
import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
45+
import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
4546
import 'package:analyzer/src/dart/analysis/results.dart' as engine;
4647
import 'package:analyzer/src/dart/ast/utilities.dart';
4748
import 'package:analyzer/src/dart/scanner/scanner.dart' as engine;
49+
import 'package:analyzer/src/dart/sdk/sdk.dart';
4850
import 'package:analyzer/src/error/codes.dart' as engine;
4951
import 'package:analyzer/src/exception/exception.dart';
5052
import 'package:analyzer/src/generated/engine.dart' as engine;
@@ -105,15 +107,21 @@ class EditDomainHandler extends AbstractRequestHandler {
105107
}
106108
}
107109

108-
var paths = <String>[];
109-
for (var include in params.included) {
110-
var resource = server.resourceProvider.getResource(include);
111-
resource.collectDartFilePaths(paths);
112-
}
113-
114110
var workspace = DartChangeWorkspace(server.currentSessions);
115111
var processor = BulkFixProcessor(workspace);
116-
var changeBuilder = await processor.fixErrorsInLibraries(paths);
112+
113+
String sdkPath;
114+
var sdk = server.findSdk();
115+
if (sdk is FolderBasedDartSdk) {
116+
sdkPath = sdk.directory.path;
117+
}
118+
var collection = AnalysisContextCollectionImpl(
119+
includedPaths: params.included,
120+
resourceProvider: server.resourceProvider,
121+
sdkPath: sdkPath,
122+
);
123+
var changeBuilder = await processor.fixErrors(collection.contexts);
124+
117125
var response = EditBulkFixesResult(changeBuilder.sourceChange.edits)
118126
.toResponse(request.id);
119127
server.sendResponse(response);
@@ -1315,15 +1323,3 @@ class _RefactoringManager {
13151323
/// [_RefactoringManager] throws instances of this class internally to stop
13161324
/// processing in a manager that was reset.
13171325
class _ResetError {}
1318-
1319-
extension ResourceExtension on Resource {
1320-
void collectDartFilePaths(List<String> paths) {
1321-
if (this is File && AnalysisEngine.isDartFileName(path)) {
1322-
paths.add(path);
1323-
} else if (this is Folder) {
1324-
for (var child in (this as Folder).getChildren()) {
1325-
child.collectDartFilePaths(paths);
1326-
}
1327-
}
1328-
}
1329-
}

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

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,12 @@ import 'package:analysis_server/src/services/correction/dart/use_rethrow.dart';
6161
import 'package:analysis_server/src/services/correction/fix.dart';
6262
import 'package:analysis_server/src/services/correction/fix_internal.dart';
6363
import 'package:analysis_server/src/services/linter/lint_names.dart';
64+
import 'package:analyzer/dart/analysis/analysis_context.dart';
6465
import 'package:analyzer/dart/analysis/results.dart';
6566
import 'package:analyzer/error/error.dart';
6667
import 'package:analyzer/source/error_processor.dart';
6768
import 'package:analyzer/src/error/codes.dart';
69+
import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
6870
import 'package:analyzer/src/generated/source.dart';
6971
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
7072

@@ -341,16 +343,22 @@ class BulkFixProcessor {
341343
}
342344

343345
/// Return a change builder that has been used to create fixes for the
344-
/// diagnostics in the libraries at the given [libraryPaths].
345-
Future<ChangeBuilder> fixErrorsInLibraries(List<String> libraryPaths) async {
346-
for (var path in libraryPaths) {
347-
var session = workspace.getSession(path);
348-
var kind = await session.getSourceKind(path);
349-
if (kind == SourceKind.LIBRARY) {
350-
var libraryResult = await session.getResolvedLibrary(path);
351-
await _fixErrorsInLibrary(libraryResult);
346+
/// diagnostics in the libraries in the given [contexts].
347+
Future<ChangeBuilder> fixErrors(List<AnalysisContext> contexts) async {
348+
for (var context in contexts) {
349+
for (var path in context.contextRoot.analyzedFiles()) {
350+
if (!AnalysisEngine.isDartFileName(path)) {
351+
continue;
352+
}
353+
var kind = await context.currentSession.getSourceKind(path);
354+
if (kind != SourceKind.LIBRARY) {
355+
continue;
356+
}
357+
var library = await context.currentSession.getResolvedLibrary(path);
358+
await _fixErrorsInLibrary(library);
352359
}
353360
}
361+
354362
return builder;
355363
}
356364

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

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
66
import 'package:analysis_server/src/services/correction/fix.dart';
77
import 'package:analysis_server/src/services/correction/fix/data_driven/element_descriptor.dart';
8+
import 'package:analysis_server/src/services/correction/fix/data_driven/element_matcher.dart';
89
import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
910
import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set.dart';
1011
import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
@@ -33,36 +34,50 @@ class DataDriven extends MultiCorrectionProducer {
3334
importedUris.add(Uri.parse(uri));
3435
}
3536
}
37+
var matcher = ElementMatcher(importedUris: importedUris, name: name);
3638
for (var set in _availableTransformSetsForLibrary(library)) {
37-
for (var transform in set.transformsFor(name, importedUris)) {
39+
for (var transform in set.transformsFor(matcher)) {
3840
yield DataDrivenFix(transform);
3941
}
4042
}
4143
}
4244

4345
/// Return the name of the element that was changed.
4446
String get _name {
47+
String nameFromParent(AstNode node) {
48+
var parent = node.parent;
49+
if (parent is MethodInvocation) {
50+
return parent.methodName.name;
51+
} else if (parent is InstanceCreationExpression) {
52+
var constructorName = parent.constructorName;
53+
if (constructorName.name != null) {
54+
return constructorName.name.name;
55+
}
56+
return constructorName.type.name.name;
57+
} else if (parent is ExtensionOverride) {
58+
return parent.extensionName.name;
59+
}
60+
return null;
61+
}
62+
4563
var node = this.node;
4664
if (node is SimpleIdentifier) {
65+
var parent = node.parent;
66+
if (parent is Label && parent.parent is NamedExpression) {
67+
// The parent of the named expression is an argument list. Because we
68+
// don't represent parameters as elements, the element we need to match
69+
// against is the invocation containing those arguments.
70+
return nameFromParent(parent.parent.parent);
71+
}
4772
return node.name;
4873
} else if (node is ConstructorName) {
4974
return node.name.name;
5075
} else if (node is NamedType) {
5176
return node.name.name;
5277
} else if (node is TypeArgumentList) {
53-
var parent = node.parent;
54-
if (parent is MethodInvocation) {
55-
return parent.methodName.name;
56-
} else if (parent is ExtensionOverride) {
57-
return parent.extensionName.name;
58-
}
78+
return nameFromParent(node);
5979
} else if (node is ArgumentList) {
60-
var parent = node.parent;
61-
if (parent is MethodInvocation) {
62-
return parent.methodName.name;
63-
} else if (parent is ExtensionOverride) {
64-
return parent.extensionName.name;
65-
}
80+
return nameFromParent(node);
6681
}
6782
return null;
6883
}

pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,4 @@ class ElementDescriptor {
2727

2828
/// Return `true` if the described element is a constructor.
2929
bool get isConstructor => _kind == 'constructor';
30-
31-
/// Return `true` if this descriptor matches an element with the given [name]
32-
/// in a library that imports the [importedUris].
33-
bool matches(String name, List<Uri> importedUris) {
34-
var lastComponent = components.last;
35-
if (lastComponent.isEmpty) {
36-
if (components[components.length - 2] != name) {
37-
return false;
38-
}
39-
} else if (lastComponent != name) {
40-
return false;
41-
}
42-
for (var importedUri in importedUris) {
43-
if (libraryUris.contains(importedUri)) {
44-
return true;
45-
}
46-
}
47-
return false;
48-
}
4930
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:analysis_server/src/services/correction/fix/data_driven/element_descriptor.dart';
6+
import 'package:meta/meta.dart';
7+
8+
/// An object that can be used to determine whether an element is appropriate
9+
/// for a given reference.
10+
class ElementMatcher {
11+
/// The URIs of the libraries that are imported in the library containing the
12+
/// reference.
13+
final List<Uri> importedUris;
14+
15+
/// The name of the element being referenced.
16+
final String name;
17+
18+
/// Initialize a newly created matcher representing a reference to an element
19+
/// with the given [name] in a library that imports the [importedUris].
20+
ElementMatcher({@required this.importedUris, @required this.name});
21+
22+
/// Return `true` if this matcher matches the given [element].
23+
bool matches(ElementDescriptor element) {
24+
var components = element.components;
25+
var lastComponent = components.last;
26+
if (lastComponent.isEmpty) {
27+
if (components[components.length - 2] != name) {
28+
return false;
29+
}
30+
} else if (lastComponent != name) {
31+
return false;
32+
}
33+
var libraryUris = element.libraryUris;
34+
for (var importedUri in importedUris) {
35+
if (libraryUris.contains(importedUri)) {
36+
return true;
37+
}
38+
}
39+
return false;
40+
}
41+
}

pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform.dart

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

55
import 'package:analysis_server/src/services/correction/fix/data_driven/change.dart';
66
import 'package:analysis_server/src/services/correction/fix/data_driven/element_descriptor.dart';
7+
import 'package:analysis_server/src/services/correction/fix/data_driven/element_matcher.dart';
78
import 'package:meta/meta.dart';
89

910
/// A description of a set of changes to a single element of the API.
@@ -29,9 +30,8 @@ class Transform {
2930
@required this.changes});
3031

3132
/// Return `true` if this transform can be applied to fix an issue related to
32-
/// an element with the given [name] in a library that imports the
33-
/// [importedUris].
34-
bool appliesTo(String name, List<Uri> importedUris) {
35-
return element.matches(name, importedUris);
33+
/// an element that matches the given [matcher].
34+
bool appliesTo(ElementMatcher matcher) {
35+
return matcher.matches(element);
3636
}
3737
}

pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set.dart

Lines changed: 4 additions & 4 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/src/services/correction/fix/data_driven/element_matcher.dart';
56
import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
67

78
/// A set of transforms used to aid in the construction of fixes for issues
@@ -16,12 +17,11 @@ class TransformSet {
1617
_transforms.add(transform);
1718
}
1819

19-
/// Return a list of the transforms that apply for a reference to the given
20-
/// [name] in a library that imports the [importedUris].
21-
List<Transform> transformsFor(String name, List<Uri> importedUris) {
20+
/// Return a list of the transforms that match the [matcher].
21+
List<Transform> transformsFor(ElementMatcher matcher) {
2222
var result = <Transform>[];
2323
for (var transform in _transforms) {
24-
if (transform.appliesTo(name, importedUris)) {
24+
if (transform.appliesTo(matcher)) {
2525
result.add(transform);
2626
}
2727
}

0 commit comments

Comments
 (0)