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 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 /// value of that field. | 380 /// value of that field. |
381 /// | 381 /// |
382 /// If the field is missing or is not [expectedType], returns null. | 382 /// If the field is missing or is not [expectedType], returns null. |
383 Object getConstantField( | 383 Object getConstantField( |
384 DartObjectImpl value, String fieldName, DartType expectedType) { | 384 DartObjectImpl value, String fieldName, DartType expectedType) { |
385 if (value == null) return null; | 385 if (value == null) return null; |
386 var f = value.fields[fieldName]; | 386 var f = value.fields[fieldName]; |
387 return (f == null || f.type != expectedType) ? null : f.value; | 387 return (f == null || f.type != expectedType) ? null : f.value; |
388 } | 388 } |
389 | 389 |
390 InterfaceType fillDynamicTypeArgs(InterfaceType t, TypeProvider types) => | 390 ParameterizedType fillDynamicTypeArgs(ParameterizedType t, TypeProvider types) { |
391 t.substitute4(new List.filled(t.typeArguments.length, types.dynamicType)); | 391 var dyn = new List.filled(t.typeArguments.length, types.dynamicType); |
| 392 return t.substitute2(dyn, t.typeArguments); |
| 393 } |
392 | 394 |
393 /// Similar to [SimpleIdentifier] inGetterContext, inSetterContext, and | 395 /// Similar to [SimpleIdentifier] inGetterContext, inSetterContext, and |
394 /// inDeclarationContext, this method returns true if [node] is used in an | 396 /// inDeclarationContext, this method returns true if [node] is used in an |
395 /// invocation context such as a MethodInvocation. | 397 /// invocation context such as a MethodInvocation. |
396 bool inInvocationContext(SimpleIdentifier node) { | 398 bool inInvocationContext(SimpleIdentifier node) { |
397 var parent = node.parent; | 399 var parent = node.parent; |
398 return parent is MethodInvocation && parent.methodName == node; | 400 return parent is MethodInvocation && parent.methodName == node; |
399 } | 401 } |
400 | 402 |
401 // TODO(vsm): Move this onto the appropriate class. Ideally, we'd attach | 403 // TODO(vsm): Move this onto the appropriate class. Ideally, we'd attach |
(...skipping 28 matching lines...) Expand all Loading... |
430 InterfaceType findSupertype(InterfaceType type, bool match(InterfaceType t)) { | 432 InterfaceType findSupertype(InterfaceType type, bool match(InterfaceType t)) { |
431 for (var m in type.mixins.reversed) { | 433 for (var m in type.mixins.reversed) { |
432 if (match(m)) return m; | 434 if (match(m)) return m; |
433 } | 435 } |
434 var s = type.superclass; | 436 var s = type.superclass; |
435 if (s == null) return null; | 437 if (s == null) return null; |
436 | 438 |
437 if (match(s)) return type; | 439 if (match(s)) return type; |
438 return findSupertype(s, match); | 440 return findSupertype(s, match); |
439 } | 441 } |
OLD | NEW |