| 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.dart.element.builder; | 5 library analyzer.src.dart.element.builder; |
| 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/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 _visitChildren(holder, node); | 265 _visitChildren(holder, node); |
| 266 FunctionBody body = expression.body; | 266 FunctionBody body = expression.body; |
| 267 Token property = node.propertyKeyword; | 267 Token property = node.propertyKeyword; |
| 268 if (property == null) { | 268 if (property == null) { |
| 269 SimpleIdentifier functionName = node.name; | 269 SimpleIdentifier functionName = node.name; |
| 270 FunctionElementImpl element = | 270 FunctionElementImpl element = |
| 271 new FunctionElementImpl.forNode(functionName); | 271 new FunctionElementImpl.forNode(functionName); |
| 272 _setCodeRange(element, node); | 272 _setCodeRange(element, node); |
| 273 element.metadata = _createElementAnnotations(node.metadata); | 273 element.metadata = _createElementAnnotations(node.metadata); |
| 274 setElementDocumentationComment(element, node); | 274 setElementDocumentationComment(element, node); |
| 275 if (node.externalKeyword != null) { | 275 if (node.externalKeyword != null || body is NativeFunctionBody) { |
| 276 element.external = true; | 276 element.external = true; |
| 277 } | 277 } |
| 278 element.functions = holder.functions; | 278 element.functions = holder.functions; |
| 279 element.labels = holder.labels; | 279 element.labels = holder.labels; |
| 280 element.localVariables = holder.localVariables; | 280 element.localVariables = holder.localVariables; |
| 281 element.parameters = holder.parameters; | 281 element.parameters = holder.parameters; |
| 282 element.typeParameters = holder.typeParameters; | 282 element.typeParameters = holder.typeParameters; |
| 283 if (body.isAsynchronous) { | 283 if (body.isAsynchronous) { |
| 284 element.asynchronous = true; | 284 element.asynchronous = true; |
| 285 } | 285 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 306 variable.isFinal = true; | 306 variable.isFinal = true; |
| 307 variable.isSynthetic = true; | 307 variable.isSynthetic = true; |
| 308 _currentHolder.addTopLevelVariable(variable); | 308 _currentHolder.addTopLevelVariable(variable); |
| 309 } | 309 } |
| 310 if (node.isGetter) { | 310 if (node.isGetter) { |
| 311 PropertyAccessorElementImpl getter = | 311 PropertyAccessorElementImpl getter = |
| 312 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 312 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 313 _setCodeRange(getter, node); | 313 _setCodeRange(getter, node); |
| 314 getter.metadata = _createElementAnnotations(node.metadata); | 314 getter.metadata = _createElementAnnotations(node.metadata); |
| 315 setElementDocumentationComment(getter, node); | 315 setElementDocumentationComment(getter, node); |
| 316 if (node.externalKeyword != null) { | 316 if (node.externalKeyword != null || body is NativeFunctionBody) { |
| 317 getter.external = true; | 317 getter.external = true; |
| 318 } | 318 } |
| 319 getter.functions = holder.functions; | 319 getter.functions = holder.functions; |
| 320 getter.labels = holder.labels; | 320 getter.labels = holder.labels; |
| 321 getter.localVariables = holder.localVariables; | 321 getter.localVariables = holder.localVariables; |
| 322 if (body.isAsynchronous) { | 322 if (body.isAsynchronous) { |
| 323 getter.asynchronous = true; | 323 getter.asynchronous = true; |
| 324 } | 324 } |
| 325 if (body.isGenerator) { | 325 if (body.isGenerator) { |
| 326 getter.generator = true; | 326 getter.generator = true; |
| 327 } | 327 } |
| 328 getter.variable = variable; | 328 getter.variable = variable; |
| 329 getter.getter = true; | 329 getter.getter = true; |
| 330 getter.isStatic = true; | 330 getter.isStatic = true; |
| 331 variable.getter = getter; | 331 variable.getter = getter; |
| 332 if (node.returnType == null) { | 332 if (node.returnType == null) { |
| 333 getter.hasImplicitReturnType = true; | 333 getter.hasImplicitReturnType = true; |
| 334 } | 334 } |
| 335 _currentHolder.addAccessor(getter); | 335 _currentHolder.addAccessor(getter); |
| 336 expression.element = getter; | 336 expression.element = getter; |
| 337 propertyNameNode.staticElement = getter; | 337 propertyNameNode.staticElement = getter; |
| 338 } else { | 338 } else { |
| 339 PropertyAccessorElementImpl setter = | 339 PropertyAccessorElementImpl setter = |
| 340 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 340 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 341 _setCodeRange(setter, node); | 341 _setCodeRange(setter, node); |
| 342 setter.metadata = _createElementAnnotations(node.metadata); | 342 setter.metadata = _createElementAnnotations(node.metadata); |
| 343 setElementDocumentationComment(setter, node); | 343 setElementDocumentationComment(setter, node); |
| 344 if (node.externalKeyword != null) { | 344 if (node.externalKeyword != null || body is NativeFunctionBody) { |
| 345 setter.external = true; | 345 setter.external = true; |
| 346 } | 346 } |
| 347 setter.functions = holder.functions; | 347 setter.functions = holder.functions; |
| 348 setter.labels = holder.labels; | 348 setter.labels = holder.labels; |
| 349 setter.localVariables = holder.localVariables; | 349 setter.localVariables = holder.localVariables; |
| 350 setter.parameters = holder.parameters; | 350 setter.parameters = holder.parameters; |
| 351 if (body.isAsynchronous) { | 351 if (body.isAsynchronous) { |
| 352 setter.asynchronous = true; | 352 setter.asynchronous = true; |
| 353 } | 353 } |
| 354 if (body.isGenerator) { | 354 if (body.isGenerator) { |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 if (nameOfMethod == TokenType.MINUS.lexeme && | 497 if (nameOfMethod == TokenType.MINUS.lexeme && |
| 498 node.parameters.parameters.length == 0) { | 498 node.parameters.parameters.length == 0) { |
| 499 nameOfMethod = "unary-"; | 499 nameOfMethod = "unary-"; |
| 500 } | 500 } |
| 501 MethodElementImpl element = | 501 MethodElementImpl element = |
| 502 new MethodElementImpl(nameOfMethod, methodName.offset); | 502 new MethodElementImpl(nameOfMethod, methodName.offset); |
| 503 _setCodeRange(element, node); | 503 _setCodeRange(element, node); |
| 504 element.metadata = _createElementAnnotations(node.metadata); | 504 element.metadata = _createElementAnnotations(node.metadata); |
| 505 setElementDocumentationComment(element, node); | 505 setElementDocumentationComment(element, node); |
| 506 element.abstract = node.isAbstract; | 506 element.abstract = node.isAbstract; |
| 507 if (node.externalKeyword != null) { | 507 if (node.externalKeyword != null || body is NativeFunctionBody) { |
| 508 element.external = true; | 508 element.external = true; |
| 509 } | 509 } |
| 510 element.functions = holder.functions; | 510 element.functions = holder.functions; |
| 511 element.labels = holder.labels; | 511 element.labels = holder.labels; |
| 512 element.localVariables = holder.localVariables; | 512 element.localVariables = holder.localVariables; |
| 513 element.parameters = holder.parameters; | 513 element.parameters = holder.parameters; |
| 514 element.isStatic = isStatic; | 514 element.isStatic = isStatic; |
| 515 element.typeParameters = holder.typeParameters; | 515 element.typeParameters = holder.typeParameters; |
| 516 if (body.isAsynchronous) { | 516 if (body.isAsynchronous) { |
| 517 element.asynchronous = true; | 517 element.asynchronous = true; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 535 field.isStatic = isStatic; | 535 field.isStatic = isStatic; |
| 536 field.isSynthetic = true; | 536 field.isSynthetic = true; |
| 537 _currentHolder.addField(field); | 537 _currentHolder.addField(field); |
| 538 } | 538 } |
| 539 if (node.isGetter) { | 539 if (node.isGetter) { |
| 540 PropertyAccessorElementImpl getter = | 540 PropertyAccessorElementImpl getter = |
| 541 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 541 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 542 _setCodeRange(getter, node); | 542 _setCodeRange(getter, node); |
| 543 getter.metadata = _createElementAnnotations(node.metadata); | 543 getter.metadata = _createElementAnnotations(node.metadata); |
| 544 setElementDocumentationComment(getter, node); | 544 setElementDocumentationComment(getter, node); |
| 545 if (node.externalKeyword != null) { | 545 if (node.externalKeyword != null || body is NativeFunctionBody) { |
| 546 getter.external = true; | 546 getter.external = true; |
| 547 } | 547 } |
| 548 getter.functions = holder.functions; | 548 getter.functions = holder.functions; |
| 549 getter.labels = holder.labels; | 549 getter.labels = holder.labels; |
| 550 getter.localVariables = holder.localVariables; | 550 getter.localVariables = holder.localVariables; |
| 551 if (body.isAsynchronous) { | 551 if (body.isAsynchronous) { |
| 552 getter.asynchronous = true; | 552 getter.asynchronous = true; |
| 553 } | 553 } |
| 554 if (body.isGenerator) { | 554 if (body.isGenerator) { |
| 555 getter.generator = true; | 555 getter.generator = true; |
| 556 } | 556 } |
| 557 getter.variable = field; | 557 getter.variable = field; |
| 558 getter.abstract = node.isAbstract; | 558 getter.abstract = node.isAbstract; |
| 559 getter.getter = true; | 559 getter.getter = true; |
| 560 getter.isStatic = isStatic; | 560 getter.isStatic = isStatic; |
| 561 field.getter = getter; | 561 field.getter = getter; |
| 562 if (node.returnType == null) { | 562 if (node.returnType == null) { |
| 563 getter.hasImplicitReturnType = true; | 563 getter.hasImplicitReturnType = true; |
| 564 } | 564 } |
| 565 _currentHolder.addAccessor(getter); | 565 _currentHolder.addAccessor(getter); |
| 566 propertyNameNode.staticElement = getter; | 566 propertyNameNode.staticElement = getter; |
| 567 } else { | 567 } else { |
| 568 PropertyAccessorElementImpl setter = | 568 PropertyAccessorElementImpl setter = |
| 569 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 569 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 570 _setCodeRange(setter, node); | 570 _setCodeRange(setter, node); |
| 571 setter.metadata = _createElementAnnotations(node.metadata); | 571 setter.metadata = _createElementAnnotations(node.metadata); |
| 572 setElementDocumentationComment(setter, node); | 572 setElementDocumentationComment(setter, node); |
| 573 if (node.externalKeyword != null) { | 573 if (node.externalKeyword != null || body is NativeFunctionBody) { |
| 574 setter.external = true; | 574 setter.external = true; |
| 575 } | 575 } |
| 576 setter.functions = holder.functions; | 576 setter.functions = holder.functions; |
| 577 setter.labels = holder.labels; | 577 setter.labels = holder.labels; |
| 578 setter.localVariables = holder.localVariables; | 578 setter.localVariables = holder.localVariables; |
| 579 setter.parameters = holder.parameters; | 579 setter.parameters = holder.parameters; |
| 580 if (body.isAsynchronous) { | 580 if (body.isAsynchronous) { |
| 581 setter.asynchronous = true; | 581 setter.asynchronous = true; |
| 582 } | 582 } |
| 583 if (body.isGenerator) { | 583 if (body.isGenerator) { |
| (...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1210 return null; | 1210 return null; |
| 1211 } | 1211 } |
| 1212 | 1212 |
| 1213 ElementHolder holder = new ElementHolder(); | 1213 ElementHolder holder = new ElementHolder(); |
| 1214 _visitChildren(holder, node); | 1214 _visitChildren(holder, node); |
| 1215 | 1215 |
| 1216 FunctionElementImpl element = new FunctionElementImpl.forNode(node.name); | 1216 FunctionElementImpl element = new FunctionElementImpl.forNode(node.name); |
| 1217 _setCodeRange(element, node); | 1217 _setCodeRange(element, node); |
| 1218 setElementDocumentationComment(element, node); | 1218 setElementDocumentationComment(element, node); |
| 1219 element.metadata = _createElementAnnotations(node.metadata); | 1219 element.metadata = _createElementAnnotations(node.metadata); |
| 1220 if (node.externalKeyword != null) { | 1220 FunctionBody body = expression.body; |
| 1221 if (node.externalKeyword != null || body is NativeFunctionBody) { |
| 1221 element.external = true; | 1222 element.external = true; |
| 1222 } | 1223 } |
| 1223 element.functions = holder.functions; | 1224 element.functions = holder.functions; |
| 1224 element.labels = holder.labels; | 1225 element.labels = holder.labels; |
| 1225 element.localVariables = holder.localVariables; | 1226 element.localVariables = holder.localVariables; |
| 1226 element.parameters = holder.parameters; | 1227 element.parameters = holder.parameters; |
| 1227 element.typeParameters = holder.typeParameters; | 1228 element.typeParameters = holder.typeParameters; |
| 1228 | 1229 |
| 1229 FunctionBody body = expression.body; | |
| 1230 if (body.isAsynchronous) { | 1230 if (body.isAsynchronous) { |
| 1231 element.asynchronous = body.isAsynchronous; | 1231 element.asynchronous = body.isAsynchronous; |
| 1232 } | 1232 } |
| 1233 if (body.isGenerator) { | 1233 if (body.isGenerator) { |
| 1234 element.generator = true; | 1234 element.generator = true; |
| 1235 } | 1235 } |
| 1236 | 1236 |
| 1237 { | 1237 { |
| 1238 Block enclosingBlock = node.getAncestor((node) => node is Block); | 1238 Block enclosingBlock = node.getAncestor((node) => node is Block); |
| 1239 if (enclosingBlock != null) { | 1239 if (enclosingBlock != null) { |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1672 return null; | 1672 return null; |
| 1673 } | 1673 } |
| 1674 | 1674 |
| 1675 /** | 1675 /** |
| 1676 * Return the lexical identifiers associated with the given [identifiers]. | 1676 * Return the lexical identifiers associated with the given [identifiers]. |
| 1677 */ | 1677 */ |
| 1678 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { | 1678 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { |
| 1679 return identifiers.map((identifier) => identifier.name).toList(); | 1679 return identifiers.map((identifier) => identifier.name).toList(); |
| 1680 } | 1680 } |
| 1681 } | 1681 } |
| OLD | NEW |