Как получить подтипы с помощью класса DartType из анализатора?

Как получить подтипы элемента с помощью класса DartType из пакета анализатора?


person Luis Vargas    schedule 20.01.2017    source источник


Ответы (1)


Для тех, кому интересно, DartType < / a> - это статически разрешенный тип, который создается пакетом analyzer, пакетом статических инструментов Dart. Автор спрашивает, как они могут получить другие типы с учетом DartType - я думаю, вы имеете в виду супер типы, то есть типы, которые вы наследуете или реализуете.

(Если вы просто хотите проверить, является ли DartType подтипом чего-либо, вы можете использовать _ 5_)

Мы можем получить Element, от которого исходит DartType, а затем, если это ClassElement, просто вернуть все супертипы, в противном случае, возможно, по умолчанию будет пустой список:

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';

/// Returns all sub-types of [type].
Iterable<DartType> getSubTypes(DartType type) {
  final element = type.element;
  if (element is ClassElement) {
    return element.allSupertypes;
  }
  return const [];
}

Это в analyzer версии 0.29.3.

person matanlurey    schedule 20.01.2017
comment
извините, мне нужны подтипы общего типа, например: List<String> Я хочу String. - person Luis Vargas; 20.01.2017
comment
я должен изменить вопрос? - person Luis Vargas; 20.01.2017
comment
Тот или другой спросите - думаю, это будет кому-то полезно :) - person matanlurey; 20.01.2017
comment
другой вопрос: stackoverflow.com/questions/41754912/ - person Luis Vargas; 20.01.2017
comment
@matanlurey вы знаете, как получить DartType из типа? Поскольку в моем генераторе я хочу использовать isSubtypeOf, но не могу, так как у меня есть только Type, а не dartType для сравнения с - person jaumard; 01.03.2019