dart - 是否有比较通用静态 Dart 类型 (DartType) 的简单方法?

标签 dart types code-generation analyzer visitor-pattern

使用 SimpleElementVisitor(来自 Dart 包 source_gen)我正在尝试处理输入文件 player_input.dart:

class _PlayerInput {
  final id = Property<int>();
  final name = Property<String>();
  final int teamId;
} 

要生成模型,请说 player.dart:

class Player {
  final int id;
  final String name;
  const Player({this.id, this.name});
}

在遍历 _PlayerInput 的字段时我想过滤掉 Property<int>, Property<bool>, Property<String>. 类型的元素

是否有比较(通用)静态 DartType 的直接方法? 类似的东西:

if (element.type == (A static type corresponding to Property<int> || ... ){
  properties.add(element);

}

目前,我使用的是 TypeChecker ,以一种相当复杂的方式。见方法_addProperty()下面。

class _PlayerVisitor extends SimpleElementVisitor {
  List<FieldElement> fields = [];
  List<FieldElement> properties = [];

  static var _propertyChecker = TypeChecker.fromRuntime(Property);
  static var _argumentChecker = TypeChecker.any([
    TypeChecker.fromRuntime(int),
    TypeChecker.fromRuntime(bool),
    TypeChecker.fromRuntime(String),
  ]);

  _addProperty(FieldElement element) {
    // Check if element is [Property<Type>].
    if (!_propertyChecker.isAssignableFromType(element.type)) return;

    // Validate type argument of Property<Type>
    var propertyType = typeArgumentsOf(element.type).first;
    if (_argumentChecker.isExactlyType(propertyType)) {
        properties.add(element);
    } else {
        // Invalid type argument of generic class Property<Type>.
        throw ModelGeneratorException(
            '''Variable ${element.name} has unsupported type: Property<$propertyType>.
          Valid types are: Property<int>, Property<String>, Property<bool>''');
    }
  }

  @override
  visitFieldElement(FieldElement element) {
    fields.add(element);
    _addProperty(element);
  }

  List<DartType> typeArgumentsOf(DartType type) {
    return type is ParameterizedType ? type.typeArguments : const [];
  }


}
...

最佳答案

isDartCoreInt 呢?

即:

bool isRaw(element) => element.type.isDartCoreInt || 
  element.type.isDartCoreBool

关于dart - 是否有比较通用静态 Dart 类型 (DartType) 的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59619164/

相关文章:

linq - Entity Framework 、每种类型的表和 Linq - 获取 "Type"

C++ - 使用 <class T> 而不是 <typename T> 有什么意义吗

c# - 在构建服务器上运行 TextTransform.exe (T4)

java - 如何从sqlite db生成hibernate pojo?

c# - 自动生成 View 模型

flutter - 如何在 flutter 中创建无限网格?

java - Android 上的 Flutter path_provider 错误,而在 iOS 上运行完美

Java确保相同的通配符捕获类型

multithreading - 如何在Flutter中显示带有后台任务的AlertDialog

android - Flutter Android 透明导航栏和按钮