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

Side by Side Diff: pkg/analyzer/lib/src/generated/resolver.dart

Issue 1687573002: Collect defined elements together with used elements. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/task/dart.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/task/dart.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698