Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Side by Side Diff: pkg/analysis_server/lib/src/services/correction/util.dart

Issue 1012623002: Issue 22833. Quick Assist to convert for-each into for-index. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library services.src.correction.util; 5 library services.src.correction.util;
6 6
7 import 'dart:math'; 7 import 'dart:math';
8 8
9 import 'package:analysis_server/src/protocol.dart' 9 import 'package:analysis_server/src/protocol.dart'
10 show SourceChange, SourceEdit; 10 show SourceChange, SourceEdit;
11 import 'package:analysis_server/src/protocol_server.dart' 11 import 'package:analysis_server/src/protocol_server.dart'
12 show doSourceChange_addElementEdit; 12 show doSourceChange_addElementEdit;
13 import 'package:analysis_server/src/services/correction/source_range.dart'; 13 import 'package:analysis_server/src/services/correction/source_range.dart';
14 import 'package:analysis_server/src/services/correction/strings.dart'; 14 import 'package:analysis_server/src/services/correction/strings.dart';
15 import 'package:analysis_server/src/services/search/element_visitors.dart';
15 import 'package:analyzer/src/generated/ast.dart'; 16 import 'package:analyzer/src/generated/ast.dart';
16 import 'package:analyzer/src/generated/element.dart'; 17 import 'package:analyzer/src/generated/element.dart';
17 import 'package:analyzer/src/generated/engine.dart'; 18 import 'package:analyzer/src/generated/engine.dart';
18 import 'package:analyzer/src/generated/resolver.dart'; 19 import 'package:analyzer/src/generated/resolver.dart';
19 import 'package:analyzer/src/generated/scanner.dart'; 20 import 'package:analyzer/src/generated/scanner.dart';
20 import 'package:analyzer/src/generated/source.dart'; 21 import 'package:analyzer/src/generated/source.dart';
21 import 'package:path/path.dart'; 22 import 'package:path/path.dart';
22 23
23 /** 24 /**
24 * Adds edits to the given [change] that ensure that all the [libraries] are 25 * Adds edits to the given [change] that ensure that all the [libraries] are
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 return new SourceEdit(range.offset, range.length, newSource); 590 return new SourceEdit(range.offset, range.length, newSource);
590 } 591 }
591 592
592 /** 593 /**
593 * Returns the [AstNode] that encloses the given offset. 594 * Returns the [AstNode] that encloses the given offset.
594 */ 595 */
595 AstNode findNode(int offset) => 596 AstNode findNode(int offset) =>
596 new NodeLocator.con1(offset).searchWithin(unit); 597 new NodeLocator.con1(offset).searchWithin(unit);
597 598
598 /** 599 /**
600 * Returns names of elements that might conflict with a new local variable
601 * declared at [offset].
602 */
603 Set<String> findPossibleLocalVariableConflicts(int offset) {
604 Set<String> conflicts = new Set<String>();
605 AstNode enclosingNode = findNode(offset);
606 Block enclosingBlock = enclosingNode.getAncestor((node) => node is Block);
607 if (enclosingBlock != null) {
608 SourceRange newRange = rangeStartEnd(offset, enclosingBlock.end);
609 ExecutableElement enclosingExecutable =
610 getEnclosingExecutableElement(enclosingNode);
611 if (enclosingExecutable != null) {
612 visitChildren(enclosingExecutable, (Element element) {
613 if (element is LocalElement) {
614 SourceRange elementRange = element.visibleRange;
615 if (elementRange != null && elementRange.intersects(newRange)) {
616 conflicts.add(element.displayName);
617 }
618 }
619 return true;
620 });
621 }
622 }
623 return conflicts;
624 }
625
626 /**
599 * Returns the actual type source of the given [Expression], may be `null` 627 * Returns the actual type source of the given [Expression], may be `null`
600 * if can not be resolved, should be treated as the `dynamic` type. 628 * if can not be resolved, should be treated as the `dynamic` type.
601 */ 629 */
602 String getExpressionTypeSource( 630 String getExpressionTypeSource(
603 Expression expression, Set<LibraryElement> librariesToImport) { 631 Expression expression, Set<LibraryElement> librariesToImport) {
604 if (expression == null) { 632 if (expression == null) {
605 return null; 633 return null;
606 } 634 }
607 DartType type = expression.bestType; 635 DartType type = expression.bestType;
608 if (type.isDynamic) { 636 if (type.isDynamic) {
(...skipping 864 matching lines...) Expand 10 before | Expand all | Expand 10 after
1473 1501
1474 @override 1502 @override
1475 Object visitExpression(Expression node) { 1503 Object visitExpression(Expression node) {
1476 if (node is BinaryExpression && node.operator.type == groupOperatorType) { 1504 if (node is BinaryExpression && node.operator.type == groupOperatorType) {
1477 return super.visitNode(node); 1505 return super.visitNode(node);
1478 } 1506 }
1479 operands.add(node); 1507 operands.add(node);
1480 return null; 1508 return null;
1481 } 1509 }
1482 } 1510 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698