ed390e7bad
R=dmitryas@google.com Change-Id: If2e1f735de9f3879fcf321af5d5fa00e291e28a8 Reviewed-on: https://dart-review.googlesource.com/16460 Reviewed-by: Dmitry Stefantsov <dmitryas@google.com> Commit-Queue: Karl Klose <karlklose@google.com>
55 lines
1.4 KiB
Dart
55 lines
1.4 KiB
Dart
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
library kernel.transformations.reify.ast_helpers;
|
|
|
|
import '../../ast.dart';
|
|
|
|
Class getEnclosingClass(TreeNode node) {
|
|
TreeNode original = node;
|
|
while (node != null && node is! Class) {
|
|
node = node.parent;
|
|
}
|
|
if (node == null) {
|
|
throw 'internal error: enclosing class not found for $original';
|
|
}
|
|
return node;
|
|
}
|
|
|
|
Library getEnclosingLibrary(TreeNode node) {
|
|
TreeNode original = node;
|
|
while (node != null && node is! Library) {
|
|
node = node.parent;
|
|
}
|
|
if (node == null) {
|
|
throw 'internal error: enclosing library not found for $original';
|
|
}
|
|
return node;
|
|
}
|
|
|
|
Member getEnclosingMember(TreeNode node) {
|
|
TreeNode original = node;
|
|
while (node != null && node is! Member) {
|
|
node = node.parent;
|
|
}
|
|
if (node == null) {
|
|
throw 'internal error: enclosing member not found for $original';
|
|
}
|
|
return node;
|
|
}
|
|
|
|
List<TypeParameter> typeVariables(DartType type) {
|
|
List<TypeParameter> parameters = <TypeParameter>[];
|
|
collect(DartType type) {
|
|
if (type is InterfaceType) {
|
|
type.typeArguments.map(collect);
|
|
} else if (type is TypeParameterType) {
|
|
parameters.add(type.parameter);
|
|
}
|
|
}
|
|
|
|
collect(type);
|
|
return parameters;
|
|
}
|