Index: pkg/analyzer/lib/src/generated/resolver.dart |
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart |
index c82c479bd1f7ded7ac0fa640a1e13f6db5058c2f..73fcb2600b2713334b9f72a6b7a4011df52eadca 100644 |
--- a/pkg/analyzer/lib/src/generated/resolver.dart |
+++ b/pkg/analyzer/lib/src/generated/resolver.dart |
@@ -12,7 +12,6 @@ import 'package:analyzer/dart/ast/token.dart'; |
import 'package:analyzer/dart/ast/visitor.dart'; |
import 'package:analyzer/dart/element/element.dart'; |
import 'package:analyzer/dart/element/type.dart'; |
-import 'package:analyzer/dart/element/visitor.dart'; |
import 'package:analyzer/error/error.dart'; |
import 'package:analyzer/error/listener.dart'; |
import 'package:analyzer/exception/exception.dart'; |
@@ -10308,11 +10307,11 @@ class TypeResolverVisitor extends ScopedVisitor { |
} |
/** |
- * Instances of the class [UnusedLocalElementsVerifier] traverse an element |
- * structure looking for cases of [HintCode.UNUSED_ELEMENT], |
- * [HintCode.UNUSED_FIELD], [HintCode.UNUSED_LOCAL_VARIABLE], etc. |
+ * Instances of the class [UnusedLocalElementsVerifier] traverse an AST |
+ * looking for cases of [HintCode.UNUSED_ELEMENT], [HintCode.UNUSED_FIELD], |
+ * [HintCode.UNUSED_LOCAL_VARIABLE], etc. |
*/ |
-class UnusedLocalElementsVerifier extends RecursiveElementVisitor { |
+class UnusedLocalElementsVerifier extends GeneralizingAstVisitor { |
Brian Wilkerson
2017/07/05 17:07:23
I think a RecursiveAstVisitor would work and be mo
scheglov
2017/07/05 17:11:54
Acknowledged.
|
/** |
* The error listener to which errors will be reported. |
*/ |
@@ -10328,73 +10327,25 @@ class UnusedLocalElementsVerifier extends RecursiveElementVisitor { |
*/ |
UnusedLocalElementsVerifier(this._errorListener, this._usedElements); |
- @override |
- visitClassElement(ClassElement element) { |
- if (!_isUsedElement(element)) { |
- _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
- [element.kind.displayName, element.displayName]); |
- } |
- super.visitClassElement(element); |
- } |
- |
- @override |
- visitFieldElement(FieldElement element) { |
- if (!_isReadMember(element)) { |
- _reportErrorForElement( |
- HintCode.UNUSED_FIELD, element, [element.displayName]); |
- } |
- super.visitFieldElement(element); |
- } |
- |
- @override |
- visitFunctionElement(FunctionElement element) { |
- if (!_isUsedElement(element)) { |
- _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
- [element.kind.displayName, element.displayName]); |
- } |
- super.visitFunctionElement(element); |
- } |
- |
- @override |
- visitFunctionTypeAliasElement(FunctionTypeAliasElement element) { |
- if (!_isUsedElement(element)) { |
- _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
- [element.kind.displayName, element.displayName]); |
- } |
- super.visitFunctionTypeAliasElement(element); |
- } |
- |
- @override |
- visitLocalVariableElement(LocalVariableElement element) { |
- if (!_isUsedElement(element) && !_isNamedUnderscore(element)) { |
- HintCode errorCode; |
- if (_usedElements.isCatchException(element)) { |
- errorCode = HintCode.UNUSED_CATCH_CLAUSE; |
- } else if (_usedElements.isCatchStackTrace(element)) { |
- errorCode = HintCode.UNUSED_CATCH_STACK; |
- } else { |
- errorCode = HintCode.UNUSED_LOCAL_VARIABLE; |
+ visitSimpleIdentifier(SimpleIdentifier node) { |
+ if (node.inDeclarationContext()) { |
+ var element = node.staticElement; |
+ if (element is ClassElement) { |
+ _visitClassElement(element); |
+ } else if (element is FieldElement) { |
+ _visitFieldElement(element); |
+ } else if (element is FunctionElement) { |
+ _visitFunctionElement(element); |
+ } else if (element is FunctionTypeAliasElement) { |
+ _visitFunctionTypeAliasElement(element); |
+ } else if (element is LocalVariableElement) { |
+ _visitLocalVariableElement(element); |
+ } else if (element is MethodElement) { |
+ _visitMethodElement(element); |
+ } else if (element is PropertyAccessorElement) { |
+ _visitPropertyAccessorElement(element); |
} |
- _reportErrorForElement(errorCode, element, [element.displayName]); |
- } |
- } |
- |
- @override |
- visitMethodElement(MethodElement element) { |
- if (!_isUsedMember(element)) { |
- _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
- [element.kind.displayName, element.displayName]); |
- } |
- super.visitMethodElement(element); |
- } |
- |
- @override |
- visitPropertyAccessorElement(PropertyAccessorElement element) { |
- if (!_isUsedMember(element)) { |
- _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
- [element.kind.displayName, element.displayName]); |
} |
- super.visitPropertyAccessorElement(element); |
} |
bool _isNamedUnderscore(LocalVariableElement element) { |
@@ -10456,6 +10407,62 @@ class UnusedLocalElementsVerifier extends RecursiveElementVisitor { |
element.nameOffset, element.nameLength, errorCode, arguments)); |
} |
} |
+ |
+ _visitClassElement(ClassElement element) { |
+ if (!_isUsedElement(element)) { |
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
+ [element.kind.displayName, element.displayName]); |
+ } |
+ } |
+ |
+ _visitFieldElement(FieldElement element) { |
+ if (!_isReadMember(element)) { |
+ _reportErrorForElement( |
+ HintCode.UNUSED_FIELD, element, [element.displayName]); |
+ } |
+ } |
+ |
+ _visitFunctionElement(FunctionElement element) { |
+ if (!_isUsedElement(element)) { |
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
+ [element.kind.displayName, element.displayName]); |
+ } |
+ } |
+ |
+ _visitFunctionTypeAliasElement(FunctionTypeAliasElement element) { |
+ if (!_isUsedElement(element)) { |
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
+ [element.kind.displayName, element.displayName]); |
+ } |
+ } |
+ |
+ _visitLocalVariableElement(LocalVariableElement element) { |
+ if (!_isUsedElement(element) && !_isNamedUnderscore(element)) { |
+ HintCode errorCode; |
+ if (_usedElements.isCatchException(element)) { |
+ errorCode = HintCode.UNUSED_CATCH_CLAUSE; |
+ } else if (_usedElements.isCatchStackTrace(element)) { |
+ errorCode = HintCode.UNUSED_CATCH_STACK; |
+ } else { |
+ errorCode = HintCode.UNUSED_LOCAL_VARIABLE; |
+ } |
+ _reportErrorForElement(errorCode, element, [element.displayName]); |
+ } |
+ } |
+ |
+ _visitMethodElement(MethodElement element) { |
+ if (!_isUsedMember(element)) { |
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
+ [element.kind.displayName, element.displayName]); |
+ } |
+ } |
+ |
+ _visitPropertyAccessorElement(PropertyAccessorElement element) { |
+ if (!_isUsedMember(element)) { |
+ _reportErrorForElement(HintCode.UNUSED_ELEMENT, element, |
+ [element.kind.displayName, element.displayName]); |
+ } |
+ } |
} |
/** |