| 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.element_resolver; | 5 library analyzer.src.generated.element_resolver; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/element/element.dart'; | 9 import 'package:analyzer/dart/element/element.dart'; |
| 10 import 'package:analyzer/dart/element/type.dart'; | 10 import 'package:analyzer/dart/element/type.dart'; |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 | 210 |
| 211 @override | 211 @override |
| 212 Object visitClassTypeAlias(ClassTypeAlias node) { | 212 Object visitClassTypeAlias(ClassTypeAlias node) { |
| 213 setMetadata(node.element, node); | 213 setMetadata(node.element, node); |
| 214 return null; | 214 return null; |
| 215 } | 215 } |
| 216 | 216 |
| 217 @override | 217 @override |
| 218 Object visitCommentReference(CommentReference node) { | 218 Object visitCommentReference(CommentReference node) { |
| 219 Identifier identifier = node.identifier; | 219 Identifier identifier = node.identifier; |
| 220 if (identifier.isSynthetic) { |
| 221 return null; |
| 222 } |
| 220 if (identifier is SimpleIdentifier) { | 223 if (identifier is SimpleIdentifier) { |
| 221 SimpleIdentifier simpleIdentifier = identifier; | 224 SimpleIdentifier simpleIdentifier = identifier; |
| 222 Element element = _resolveSimpleIdentifier(simpleIdentifier); | 225 Element element = _resolveSimpleIdentifier(simpleIdentifier); |
| 223 if (element == null) { | 226 if (element == null) { |
| 224 // | 227 // |
| 225 // This might be a reference to an imported name that is missing the | 228 // This might be a reference to an imported name that is missing the |
| 226 // prefix. | 229 // prefix. |
| 227 // | 230 // |
| 228 element = _findImportWithoutPrefix(simpleIdentifier); | 231 element = _findImportWithoutPrefix(simpleIdentifier); |
| 229 if (element is MultiplyDefinedElement) { | 232 if (element is MultiplyDefinedElement) { |
| 230 // TODO(brianwilkerson) Report this error? | 233 // TODO(brianwilkerson) Report this error? |
| 231 element = null; | 234 element = null; |
| 232 } | 235 } |
| 233 } | 236 } |
| 234 if (element == null) { | 237 if (element == null) { |
| 235 // TODO(brianwilkerson) Report this error? | 238 _resolver.reportErrorForNode(HintCode.UNDEFINED_IDENTIFIER, |
| 236 // resolver.reportError( | 239 simpleIdentifier, [simpleIdentifier.name]); |
| 237 // StaticWarningCode.UNDEFINED_IDENTIFIER, | |
| 238 // simpleIdentifier, | |
| 239 // simpleIdentifier.getName()); | |
| 240 } else { | 240 } else { |
| 241 if (element.library == null || element.library != _definingLibrary) { | 241 if (element.library == null || element.library != _definingLibrary) { |
| 242 // TODO(brianwilkerson) Report this error? | 242 // TODO(brianwilkerson) Report this error? |
| 243 } | 243 } |
| 244 simpleIdentifier.staticElement = element; | 244 simpleIdentifier.staticElement = element; |
| 245 if (node.newKeyword != null) { | 245 if (node.newKeyword != null) { |
| 246 if (element is ClassElement) { | 246 if (element is ClassElement) { |
| 247 ConstructorElement constructor = element.unnamedConstructor; | 247 ConstructorElement constructor = element.unnamedConstructor; |
| 248 if (constructor == null) { | 248 if (constructor == null) { |
| 249 // TODO(brianwilkerson) Report this error. | 249 // TODO(brianwilkerson) Report this error. |
| 250 } else { | 250 } else { |
| 251 simpleIdentifier.staticElement = constructor; | 251 simpleIdentifier.staticElement = constructor; |
| 252 } | 252 } |
| 253 } else { | 253 } else { |
| 254 // TODO(brianwilkerson) Report this error. | 254 // TODO(brianwilkerson) Report this error. |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 } | 257 } |
| 258 } else if (identifier is PrefixedIdentifier) { | 258 } else if (identifier is PrefixedIdentifier) { |
| 259 PrefixedIdentifier prefixedIdentifier = identifier; | 259 PrefixedIdentifier prefixedIdentifier = identifier; |
| 260 SimpleIdentifier prefix = prefixedIdentifier.prefix; | 260 SimpleIdentifier prefix = prefixedIdentifier.prefix; |
| 261 SimpleIdentifier name = prefixedIdentifier.identifier; | 261 SimpleIdentifier name = prefixedIdentifier.identifier; |
| 262 Element element = _resolveSimpleIdentifier(prefix); | 262 Element element = _resolveSimpleIdentifier(prefix); |
| 263 if (element == null) { | 263 if (element == null) { |
| 264 // resolver.reportError(StaticWarningCode.UNDEFINED_IDENTIFIER, prefix, p
refix.getName()); | 264 _resolver.reportErrorForNode( |
| 265 HintCode.UNDEFINED_IDENTIFIER, prefix, [prefix.name]); |
| 265 } else { | 266 } else { |
| 266 prefix.staticElement = element; | 267 prefix.staticElement = element; |
| 267 if (element is PrefixElement) { | 268 if (element is PrefixElement) { |
| 268 // TODO(brianwilkerson) Report this error? | 269 // TODO(brianwilkerson) Report this error? |
| 269 element = _resolver.nameScope.lookup(identifier, _definingLibrary); | 270 element = _resolver.nameScope.lookup(identifier, _definingLibrary); |
| 270 name.staticElement = element; | 271 name.staticElement = element; |
| 271 return null; | 272 return null; |
| 272 } | 273 } |
| 273 LibraryElement library = element.library; | 274 LibraryElement library = element.library; |
| 274 if (library == null) { | 275 if (library == null) { |
| 275 // TODO(brianwilkerson) We need to understand how the library could | 276 // TODO(brianwilkerson) We need to understand how the library could |
| 276 // ever be null. | 277 // ever be null. |
| 277 AnalysisEngine.instance.logger | 278 AnalysisEngine.instance.logger |
| 278 .logError("Found element with null library: ${element.name}"); | 279 .logError("Found element with null library: ${element.name}"); |
| 279 } else if (library != _definingLibrary) { | 280 } else if (library != _definingLibrary) { |
| 280 // TODO(brianwilkerson) Report this error. | 281 // TODO(brianwilkerson) Report this error. |
| 281 } | 282 } |
| 282 if (node.newKeyword == null) { | 283 if (node.newKeyword == null) { |
| 283 if (element is ClassElement) { | 284 if (element is ClassElement) { |
| 284 Element memberElement = | 285 Element memberElement = |
| 285 _lookupGetterOrMethod(element.type, name.name); | 286 _lookupGetterOrMethod(element.type, name.name); |
| 286 if (memberElement == null) { | 287 if (memberElement == null) { |
| 287 memberElement = element.getNamedConstructor(name.name); | 288 memberElement = element.getNamedConstructor(name.name); |
| 288 if (memberElement == null) { | 289 if (memberElement == null) { |
| 289 memberElement = _lookUpSetter(prefix, element.type, name.name); | 290 memberElement = _lookUpSetter(prefix, element.type, name.name); |
| 290 } | 291 } |
| 291 } | 292 } |
| 292 if (memberElement == null) { | 293 if (memberElement == null) { |
| 293 // reportGetterOrSetterNotFound(prefixedIdentifier, name, element.g
etDisplayName()); | 294 _resolver.reportErrorForNode( |
| 295 HintCode.UNDEFINED_MEMBER, name, [name.name, prefix.name]); |
| 294 } else { | 296 } else { |
| 295 name.staticElement = memberElement; | 297 name.staticElement = memberElement; |
| 296 } | 298 } |
| 297 } else { | 299 } else { |
| 298 // TODO(brianwilkerson) Report this error. | 300 // TODO(brianwilkerson) Report this error. |
| 299 } | 301 } |
| 300 } else { | 302 } else { |
| 301 if (element is ClassElement) { | 303 if (element is ClassElement) { |
| 302 ConstructorElement constructor = | 304 ConstructorElement constructor = |
| 303 element.getNamedConstructor(name.name); | 305 element.getNamedConstructor(name.name); |
| (...skipping 2340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2644 | 2646 |
| 2645 @override | 2647 @override |
| 2646 Element get staticElement => null; | 2648 Element get staticElement => null; |
| 2647 | 2649 |
| 2648 @override | 2650 @override |
| 2649 accept(AstVisitor visitor) => null; | 2651 accept(AstVisitor visitor) => null; |
| 2650 | 2652 |
| 2651 @override | 2653 @override |
| 2652 void visitChildren(AstVisitor visitor) {} | 2654 void visitChildren(AstVisitor visitor) {} |
| 2653 } | 2655 } |
| OLD | NEW |