Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 analyzer.src.generated.resolver; | 5 library analyzer.src.generated.resolver; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/ast/visitor.dart'; | 10 import 'package:analyzer/dart/ast/visitor.dart'; |
| (...skipping 3983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3994 for (int i = 0; i < count; i++) { | 3994 for (int i = 0; i < count; i++) { |
| 3995 annotations[i].accept(this); | 3995 annotations[i].accept(this); |
| 3996 } | 3996 } |
| 3997 } | 3997 } |
| 3998 } | 3998 } |
| 3999 | 3999 |
| 4000 /** | 4000 /** |
| 4001 * An [AstVisitor] that fills [UsedLocalElements]. | 4001 * An [AstVisitor] that fills [UsedLocalElements]. |
| 4002 */ | 4002 */ |
| 4003 class GatherUsedLocalElementsVisitor extends RecursiveAstVisitor { | 4003 class GatherUsedLocalElementsVisitor extends RecursiveAstVisitor { |
| 4004 final List<Element> definedElements = <Element>[]; | |
| 4004 final UsedLocalElements usedElements = new UsedLocalElements(); | 4005 final UsedLocalElements usedElements = new UsedLocalElements(); |
| 4005 | 4006 |
| 4006 final LibraryElement _enclosingLibrary; | 4007 final LibraryElement _enclosingLibrary; |
| 4007 ClassElement _enclosingClass; | 4008 ClassElement _enclosingClass; |
| 4008 ExecutableElement _enclosingExec; | 4009 ExecutableElement _enclosingExec; |
| 4009 | 4010 |
| 4010 GatherUsedLocalElementsVisitor(this._enclosingLibrary); | 4011 GatherUsedLocalElementsVisitor(this._enclosingLibrary); |
| 4011 | 4012 |
| 4012 @override | 4013 @override |
| 4013 visitCatchClause(CatchClause node) { | 4014 visitCatchClause(CatchClause node) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4063 try { | 4064 try { |
| 4064 _enclosingExec = node.element; | 4065 _enclosingExec = node.element; |
| 4065 super.visitMethodDeclaration(node); | 4066 super.visitMethodDeclaration(node); |
| 4066 } finally { | 4067 } finally { |
| 4067 _enclosingExec = enclosingExecOld; | 4068 _enclosingExec = enclosingExecOld; |
| 4068 } | 4069 } |
| 4069 } | 4070 } |
| 4070 | 4071 |
| 4071 @override | 4072 @override |
| 4072 visitSimpleIdentifier(SimpleIdentifier node) { | 4073 visitSimpleIdentifier(SimpleIdentifier node) { |
| 4074 Element element = node.staticElement; | |
| 4073 if (node.inDeclarationContext()) { | 4075 if (node.inDeclarationContext()) { |
| 4076 definedElements.add(element); | |
| 4074 return; | 4077 return; |
| 4075 } | 4078 } |
| 4076 Element element = node.staticElement; | |
| 4077 bool isIdentifierRead = _isReadIdentifier(node); | 4079 bool isIdentifierRead = _isReadIdentifier(node); |
| 4078 if (element is LocalVariableElement) { | 4080 if (element is LocalVariableElement) { |
| 4079 if (isIdentifierRead) { | 4081 if (isIdentifierRead) { |
| 4080 usedElements.addElement(element); | 4082 usedElements.addElement(element); |
| 4081 } | 4083 } |
| 4082 } else { | 4084 } else { |
| 4083 _useIdentifierElement(node); | 4085 _useIdentifierElement(node); |
| 4084 if (element == null || | 4086 if (element == null || |
| 4085 element.enclosingElement is ClassElement && | 4087 element.enclosingElement is ClassElement && |
| 4086 !identical(element, _enclosingExec)) { | 4088 !identical(element, _enclosingExec)) { |
| (...skipping 8054 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 12141 } | 12143 } |
| 12142 return false; | 12144 return false; |
| 12143 } | 12145 } |
| 12144 } | 12146 } |
| 12145 | 12147 |
| 12146 /** | 12148 /** |
| 12147 * Instances of the class [UnusedLocalElementsVerifier] traverse an element | 12149 * Instances of the class [UnusedLocalElementsVerifier] traverse an element |
| 12148 * structure looking for cases of [HintCode.UNUSED_ELEMENT], | 12150 * structure looking for cases of [HintCode.UNUSED_ELEMENT], |
| 12149 * [HintCode.UNUSED_FIELD], [HintCode.UNUSED_LOCAL_VARIABLE], etc. | 12151 * [HintCode.UNUSED_FIELD], [HintCode.UNUSED_LOCAL_VARIABLE], etc. |
| 12150 */ | 12152 */ |
| 12151 class UnusedLocalElementsVerifier extends RecursiveElementVisitor { | 12153 class UnusedLocalElementsVerifier extends SimpleElementVisitor { |
| 12152 /** | 12154 /** |
| 12153 * The error listener to which errors will be reported. | 12155 * The error listener to which errors will be reported. |
| 12154 */ | 12156 */ |
| 12155 final AnalysisErrorListener _errorListener; | 12157 final AnalysisErrorListener _errorListener; |
| 12156 | 12158 |
| 12157 /** | 12159 /** |
| 12158 * The elements know to be used. | 12160 * The elements know to be used. |
| 12159 */ | 12161 */ |
| 12160 final UsedLocalElements _usedElements; | 12162 final UsedLocalElements _usedElements; |
| 12161 | 12163 |
| 12162 /** | 12164 /** |
| 12163 * Create a new instance of the [UnusedLocalElementsVerifier]. | 12165 * Create a new instance of the [UnusedLocalElementsVerifier]. |
| 12164 */ | 12166 */ |
| 12165 UnusedLocalElementsVerifier(this._errorListener, this._usedElements); | 12167 UnusedLocalElementsVerifier(this._errorListener, this._usedElements); |
| 12166 | 12168 |
| 12167 @override | 12169 @override |
| 12168 visitClassElement(ClassElement element) { | 12170 visitClassElement(ClassElement element) { |
| 12169 if (!_isUsedElement(element)) { | 12171 if (!_isUsedElement(element)) { |
| 12170 _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, | 12172 _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
| 12171 [element.kind.displayName, element.displayName]); | 12173 [element.kind.displayName, element.displayName]); |
| 12172 } | 12174 } |
| 12173 super.visitClassElement(element); | 12175 super.visitClassElement(element); |
| 12174 } | 12176 } |
| 12175 | 12177 |
| 12178 visitElement(Element element) { | |
|
Paul Berry
2016/02/09 20:34:25
Why not simply:
element.accept(this);
Or bet
Brian Wilkerson
2016/02/09 20:35:57
I was about to make the same comment. After all, o
| |
| 12179 if (element is ClassElement) { | |
| 12180 visitClassElement(element); | |
| 12181 } else if (element is FieldElement) { | |
| 12182 visitFieldElement(element); | |
| 12183 } else if (element is FunctionElement) { | |
| 12184 visitFunctionElement(element); | |
| 12185 } else if (element is FunctionTypeAliasElement) { | |
| 12186 visitFunctionTypeAliasElement(element); | |
| 12187 } else if (element is LocalVariableElement) { | |
| 12188 visitLocalVariableElement(element); | |
| 12189 } else if (element is MethodElement) { | |
| 12190 visitMethodElement(element); | |
| 12191 } else if (element is PropertyAccessorElement) { | |
| 12192 visitPropertyAccessorElement(element); | |
| 12193 } | |
| 12194 } | |
| 12195 | |
| 12176 @override | 12196 @override |
| 12177 visitFieldElement(FieldElement element) { | 12197 visitFieldElement(FieldElement element) { |
| 12178 if (!_isReadMember(element)) { | 12198 if (!_isReadMember(element)) { |
| 12179 _reportErrorForElement( | 12199 _reportErrorForElement( |
| 12180 HintCode.UNUSED_FIELD, element, [element.displayName]); | 12200 HintCode.UNUSED_FIELD, element, [element.displayName]); |
| 12181 } | 12201 } |
| 12182 super.visitFieldElement(element); | 12202 super.visitFieldElement(element); |
| 12183 } | 12203 } |
| 12184 | 12204 |
| 12185 @override | 12205 @override |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 12680 nonFields.add(node); | 12700 nonFields.add(node); |
| 12681 return null; | 12701 return null; |
| 12682 } | 12702 } |
| 12683 | 12703 |
| 12684 @override | 12704 @override |
| 12685 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); | 12705 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); |
| 12686 | 12706 |
| 12687 @override | 12707 @override |
| 12688 Object visitWithClause(WithClause node) => null; | 12708 Object visitWithClause(WithClause node) => null; |
| 12689 } | 12709 } |
| OLD | NEW |