| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 /// Holds a couple utility functions used at various places in the system. | 5 /// Holds a couple utility functions used at various places in the system. |
| 6 library dev_compiler.src.utils; | 6 library dev_compiler.src.utils; |
| 7 | 7 |
| 8 import 'dart:io'; | 8 import 'dart:io'; |
| 9 | 9 |
| 10 import 'package:path/path.dart' as path; | 10 import 'package:path/path.dart' as path; |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 /// inDeclarationContext, this method returns true if [node] is used in an | 373 /// inDeclarationContext, this method returns true if [node] is used in an |
| 374 /// invocation context such as a MethodInvocation. | 374 /// invocation context such as a MethodInvocation. |
| 375 bool inInvocationContext(SimpleIdentifier node) { | 375 bool inInvocationContext(SimpleIdentifier node) { |
| 376 var parent = node.parent; | 376 var parent = node.parent; |
| 377 return parent is MethodInvocation && parent.methodName == node; | 377 return parent is MethodInvocation && parent.methodName == node; |
| 378 } | 378 } |
| 379 | 379 |
| 380 // TODO(vsm): Move this onto the appropriate class. Ideally, we'd attach | 380 // TODO(vsm): Move this onto the appropriate class. Ideally, we'd attach |
| 381 // it to TypeProvider. | 381 // it to TypeProvider. |
| 382 | 382 |
| 383 final _objectMap = new Expando('providerToObjectMap'); | |
| 384 Map<String, DartType> getObjectMemberMap(TypeProvider typeProvider) { | |
| 385 var map = _objectMap[typeProvider] as Map<String, DartType>; | |
| 386 if (map == null) { | |
| 387 map = <String, DartType>{}; | |
| 388 _objectMap[typeProvider] = map; | |
| 389 var objectType = typeProvider.objectType; | |
| 390 var element = objectType.element; | |
| 391 // Only record methods (including getters) with no parameters. As parameter
s are contravariant wrt | |
| 392 // type, using Object's version may be too strict. | |
| 393 // Add instance methods. | |
| 394 element.methods.where((method) => !method.isStatic).forEach((method) { | |
| 395 map[method.name] = method.type; | |
| 396 }); | |
| 397 // Add getters. | |
| 398 element.accessors | |
| 399 .where((member) => !member.isStatic && member.isGetter) | |
| 400 .forEach((member) { | |
| 401 map[member.name] = member.type.returnType; | |
| 402 }); | |
| 403 } | |
| 404 return map; | |
| 405 } | |
| 406 | |
| 407 /// Searches all supertype, in order of most derived members, to see if any | 383 /// Searches all supertype, in order of most derived members, to see if any |
| 408 /// [match] a condition. If so, returns the first match, otherwise returns null. | 384 /// [match] a condition. If so, returns the first match, otherwise returns null. |
| 409 InterfaceType findSupertype(InterfaceType type, bool match(InterfaceType t)) { | 385 InterfaceType findSupertype(InterfaceType type, bool match(InterfaceType t)) { |
| 410 for (var m in type.mixins.reversed) { | 386 for (var m in type.mixins.reversed) { |
| 411 if (match(m)) return m; | 387 if (match(m)) return m; |
| 412 } | 388 } |
| 413 var s = type.superclass; | 389 var s = type.superclass; |
| 414 if (s == null) return null; | 390 if (s == null) return null; |
| 415 | 391 |
| 416 if (match(s)) return type; | 392 if (match(s)) return type; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 } | 425 } |
| 450 } | 426 } |
| 451 | 427 |
| 452 bool isInlineJS(Element e) => e is FunctionElement && | 428 bool isInlineJS(Element e) => e is FunctionElement && |
| 453 e.library.source.uri.toString() == 'dart:_foreign_helper' && | 429 e.library.source.uri.toString() == 'dart:_foreign_helper' && |
| 454 e.name == 'JS'; | 430 e.name == 'JS'; |
| 455 | 431 |
| 456 bool isDartMathMinMax(Element e) => e is FunctionElement && | 432 bool isDartMathMinMax(Element e) => e is FunctionElement && |
| 457 e.library.source.uri.toString() == 'dart:math' && | 433 e.library.source.uri.toString() == 'dart:math' && |
| 458 (e.name == 'min' || e.name == 'max'); | 434 (e.name == 'min' || e.name == 'max'); |
| OLD | NEW |