| // Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | import 'package:analyzer/dart/ast/ast.dart'; | 
 | import 'package:analyzer/src/dart/resolver/lexical_lookup.dart'; | 
 | import 'package:analyzer/src/generated/resolver.dart'; | 
 |  | 
 | /// Class containing static methods for resolving identifiers as implicit | 
 | /// property gets/sets on the type of `this`. | 
 | class ThisLookup { | 
 |   /// Do not construct | 
 |   ThisLookup._() { | 
 |     assert(false, 'Do not construct instances of LexicalLookup'); | 
 |   } | 
 |  | 
 |   /// Attempts to resolve an identifier with name [id] via implicit `this.`, | 
 |   /// assuming we are trying to look up a getter.  If a matching element is | 
 |   /// found, a [LexicalLookupResult] is returned.  Otherwise `null` is returned. | 
 |   static LexicalLookupResult? lookupGetter( | 
 |       ResolverVisitor resolver, SimpleIdentifier node) { | 
 |     var id = node.name; | 
 |     var thisType = resolver.thisType; | 
 |     if (thisType == null) { | 
 |       return null; | 
 |     } | 
 |  | 
 |     var propertyResult = resolver.typePropertyResolver.resolve( | 
 |       receiver: null, | 
 |       receiverType: thisType, | 
 |       name: id, | 
 |       propertyErrorEntity: node, | 
 |       nameErrorEntity: node, | 
 |     ); | 
 |  | 
 |     var getterElement = propertyResult.getter; | 
 |     if (getterElement != null) { | 
 |       return LexicalLookupResult(requested: getterElement); | 
 |     } else { | 
 |       return LexicalLookupResult(recovery: propertyResult.setter); | 
 |     } | 
 |   } | 
 |  | 
 |   /// Attempts to resolve an identifier with name [id] via implicit `this.`, | 
 |   /// assuming we are trying to look up a setter.  If a matching element is | 
 |   /// found, a [LexicalLookupResult] is returned.  Otherwise `null` is returned. | 
 |   static LexicalLookupResult? lookupSetter( | 
 |       ResolverVisitor resolver, SimpleIdentifier node) { | 
 |     var id = node.name; | 
 |     var thisType = resolver.thisType; | 
 |     if (thisType == null) { | 
 |       return null; | 
 |     } | 
 |  | 
 |     var propertyResult = resolver.typePropertyResolver.resolve( | 
 |       receiver: null, | 
 |       receiverType: thisType, | 
 |       name: id, | 
 |       propertyErrorEntity: node, | 
 |       nameErrorEntity: node, | 
 |     ); | 
 |  | 
 |     var setterElement = propertyResult.setter; | 
 |     if (setterElement != null) { | 
 |       return LexicalLookupResult(requested: setterElement); | 
 |     } else { | 
 |       return LexicalLookupResult(recovery: propertyResult.getter); | 
 |     } | 
 |   } | 
 | } |