| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'package:analyzer/dart/ast/ast.dart'; | 5 import 'package:analyzer/dart/ast/ast.dart'; |
| 6 import 'package:analyzer/dart/ast/visitor.dart'; | 6 import 'package:analyzer/dart/ast/visitor.dart'; |
| 7 | 7 |
| 8 /** | 8 /** |
| 9 * Compute the set of external names referenced in the [unit]. | 9 * Compute the set of external names referenced in the [unit]. |
| 10 */ | 10 */ |
| 11 Set<String> computeReferencedNames(CompilationUnit unit) { | 11 Set<String> computeReferencedNames(CompilationUnit unit) { |
| 12 _ReferencedNamesComputer computer = new _ReferencedNamesComputer(); | 12 _ReferencedNamesComputer computer = new _ReferencedNamesComputer(); |
| 13 unit.accept(computer); | 13 unit.accept(computer); |
| 14 return computer.names; | 14 return computer.names; |
| 15 } | 15 } |
| 16 | 16 |
| 17 /** | 17 /** |
| 18 * Compute the set of names which are used in `extends`, `with` or `implements` |
| 19 * clauses in the file. Import prefixes and type arguments are not included. |
| 20 */ |
| 21 Set<String> computeSubtypedNames(CompilationUnit unit) { |
| 22 Set<String> subtypedNames = new Set<String>(); |
| 23 |
| 24 void _addSubtypedName(TypeName type) { |
| 25 if (type != null) { |
| 26 Identifier name = type.name; |
| 27 if (name is SimpleIdentifier) { |
| 28 subtypedNames.add(name.name); |
| 29 } else if (name is PrefixedIdentifier) { |
| 30 subtypedNames.add(name.identifier.name); |
| 31 } |
| 32 } |
| 33 } |
| 34 |
| 35 void _addSubtypedNames(List<TypeName> types) { |
| 36 types?.forEach(_addSubtypedName); |
| 37 } |
| 38 |
| 39 for (CompilationUnitMember declaration in unit.declarations) { |
| 40 if (declaration is ClassDeclaration) { |
| 41 _addSubtypedName(declaration.extendsClause?.superclass); |
| 42 _addSubtypedNames(declaration.withClause?.mixinTypes); |
| 43 _addSubtypedNames(declaration.implementsClause?.interfaces); |
| 44 } |
| 45 } |
| 46 |
| 47 return subtypedNames; |
| 48 } |
| 49 |
| 50 /** |
| 18 * Chained set of local names, that hide corresponding external names. | 51 * Chained set of local names, that hide corresponding external names. |
| 19 */ | 52 */ |
| 20 class _LocalNameScope { | 53 class _LocalNameScope { |
| 21 final _LocalNameScope enclosing; | 54 final _LocalNameScope enclosing; |
| 22 Set<String> names; | 55 Set<String> names; |
| 23 | 56 |
| 24 _LocalNameScope(this.enclosing); | 57 _LocalNameScope(this.enclosing); |
| 25 | 58 |
| 26 factory _LocalNameScope.forBlock(_LocalNameScope enclosing, Block node) { | 59 factory _LocalNameScope.forBlock(_LocalNameScope enclosing, Block node) { |
| 27 _LocalNameScope scope = new _LocalNameScope(enclosing); | 60 _LocalNameScope scope = new _LocalNameScope(enclosing); |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 } | 302 } |
| 270 | 303 |
| 271 static bool _isNameExpressionLabel(AstNode parent) { | 304 static bool _isNameExpressionLabel(AstNode parent) { |
| 272 if (parent is Label) { | 305 if (parent is Label) { |
| 273 AstNode parent2 = parent?.parent; | 306 AstNode parent2 = parent?.parent; |
| 274 return parent2 is NamedExpression && parent2.name == parent; | 307 return parent2 is NamedExpression && parent2.name == parent; |
| 275 } | 308 } |
| 276 return false; | 309 return false; |
| 277 } | 310 } |
| 278 } | 311 } |
| OLD | NEW |