ClassInfo<T> constructor

ClassInfo<T>({
  1. String? name,
  2. required T newInstance(
    1. JsScript,
    2. List argv
    ),
  3. Map<String, JsFunction<T>> functions = const {},
  4. Map<String, JsField<T, dynamic>> fields = const {},
})

Implementation

ClassInfo({
  String? name,
  required T Function(JsScript, List argv) newInstance,
  Map<String, JsFunction<T>> functions = const {},
  Map<String, JsField<T, dynamic>> fields = const {},
}) : type = T, name = name == null ? T.toString() : name {
  members.add(_MemberInfo(
      this.name,
      MEMBER_CONSTRUCTOR,
      (script, argv) => newInstance(script, argv)
  ));
  functions.forEach((name, func) {
    members.add(_MemberInfo(
      name,
      MEMBER_FUNCTION | (func.isStatic ? MEMBER_STATIC : 0),
      func.function
    ));
  });
  fields.forEach((name, field) {
    if (field.getter != null) {
      members.add(_MemberInfo(
          name,
          MEMBER_GETTER | (field.isStatic ? MEMBER_STATIC : 0),
          field.getter!
      ));
    }
    if (field.setter != null) {
      members.add(_MemberInfo(
          name,
          MEMBER_SETTER | (field.isStatic ? MEMBER_STATIC : 0),
          field.setter!
      ));
    }
  });
  if (!functions.containsKey("toString")) {
    members.add(_MemberInfo(
        "toString",
        MEMBER_FUNCTION,
            (self, argv) => self.toString()
    ));
  }
}