Search code examples
dartdart-mirrors

How to get the parameterized type of an instance with Dart and smoke?


Consider this code:

class Foo {
  List<String> listOfStrings;
}

Using the smoke package, how can I get String by looking at listOfStrings ?

I see we can get a Declaration from a Type, but I don't see how to get the parameterized type from Declaration.

This is important for, among other things, building a serialization library.


Solution

  • That's not currently possible to do in smoke.

    It might not even be possible to do with the mirrors API directly either. For example:

    import 'dart:mirrors';
    class B<T> {}
    class A {
      static B<int> b = new B<int>();
    }
    main() {
      var x = reflectType(A);
      print(x);
      print(x.declarations[#b].type);
    }
    

    will print B, but not B<int>.