blob: 0516b0b3da7bf37706f5d632e7fa9f039f9259ad [file] [log] [blame]
// 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 'package:kernel/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;
}