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

Side by Side Diff: pkg/analyzer/lib/src/dart/element/builder.dart

Issue 2748713002: Invoke native methods directly (Closed)
Patch Set: Address comments / cleanup Created 3 years, 9 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
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.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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/summarize_ast.dart » ('j') | pkg/dev_compiler/lib/src/compiler/code_generator.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698