of<T> static method

InstanceMirror of<T>(
  1. Object? instance, {
  2. required Kind? kind,
})

Returns an instance mirror for instance.

If kind is specified, it is used instead of Kind.find. Otherwise Kind.find is used.

Implementation

static InstanceMirror of<T>(Object? instance, {required Kind? kind}) {
  if (instance == null ||
      instance is bool ||
      instance is num ||
      instance is String ||
      instance is DateTime ||
      instance is TypedData) {
    return const _InstanceMirror();
  }
  final expando = _expando;
  final existing = expando[instance];
  if (existing != null) {
    return existing;
  }
  _ImmutableInstanceMirrorBuilder builder;
  if (instance is Walkable) {
    builder = _ImmutableInstanceMirrorBuilder(instance.runtimeType);
    instance.walk(builder);
  } else {
    kind ??= Kind.find(instance: instance);
    if (kind is! ImmutableKind) {
      assert(false);
      return const _InstanceMirror();
    }
    builder = _ImmutableInstanceMirrorBuilder(instance.runtimeType);
    kind.map(builder, instance);
  }
  final mirror = builder._build();
  expando[instance] = mirror;
  return mirror;
}