| Index: pkg/analysis_server/lib/src/services/correction/util.dart
|
| diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
|
| index 414765de04d6a61544c05152e96876b9ff700983..33a31052474bfd976e39df83f3b2b15cfc876b56 100644
|
| --- a/pkg/analysis_server/lib/src/services/correction/util.dart
|
| +++ b/pkg/analysis_server/lib/src/services/correction/util.dart
|
| @@ -12,7 +12,6 @@ import 'package:analysis_server/src/protocol_server.dart'
|
| show doSourceChange_addElementEdit;
|
| import 'package:analysis_server/src/services/correction/source_range.dart';
|
| import 'package:analysis_server/src/services/correction/strings.dart';
|
| -import 'package:analysis_server/src/services/search/element_visitors.dart';
|
| import 'package:analyzer/dart/element/element.dart';
|
| import 'package:analyzer/dart/element/type.dart';
|
| import 'package:analyzer/src/generated/ast.dart';
|
| @@ -668,20 +667,9 @@ class CorrectionUtils {
|
| AstNode enclosingNode = findNode(offset);
|
| Block enclosingBlock = enclosingNode.getAncestor((node) => node is Block);
|
| if (enclosingBlock != null) {
|
| - SourceRange newRange = rangeStartEnd(offset, enclosingBlock.end);
|
| - ExecutableElement enclosingExecutable =
|
| - getEnclosingExecutableElement(enclosingNode);
|
| - if (enclosingExecutable != null) {
|
| - visitChildren(enclosingExecutable, (Element element) {
|
| - if (element is LocalElement) {
|
| - SourceRange elementRange = element.visibleRange;
|
| - if (elementRange != null && elementRange.intersects(newRange)) {
|
| - conflicts.add(element.displayName);
|
| - }
|
| - }
|
| - return true;
|
| - });
|
| - }
|
| + _CollectReferencedUnprefixedNames visitor = new _CollectReferencedUnprefixedNames();
|
| + enclosingBlock.accept(visitor);
|
| + return visitor.names;
|
| }
|
| return conflicts;
|
| }
|
| @@ -1437,6 +1425,26 @@ class TokenUtils {
|
| tokens.length == 1 && tokens[0].type == type;
|
| }
|
|
|
| +class _CollectReferencedUnprefixedNames extends RecursiveAstVisitor {
|
| + final Set<String> names = new Set<String>();
|
| +
|
| + void visitSimpleIdentifier(SimpleIdentifier node) {
|
| + if (!_isPrefixed(node)) {
|
| + names.add(node.name);
|
| + }
|
| + }
|
| +
|
| + static bool _isPrefixed(SimpleIdentifier node) {
|
| + AstNode parent = node.parent;
|
| + return parent is ConstructorName && parent.name == node ||
|
| + parent is MethodInvocation &&
|
| + parent.methodName == node &&
|
| + parent.realTarget != null ||
|
| + parent is PrefixedIdentifier && parent.identifier == node ||
|
| + parent is PropertyAccess && parent.target == node;
|
| + }
|
| +}
|
| +
|
| /**
|
| * A container with a source and its precedence.
|
| */
|
|
|