How to find corresponding setters and getters?

Issue

Using the dart:mirrors library how can I find all corresponding getters and setters for any class mirror.

class Person {
  String _name;
  Person(this._name);
  String get name => _name;
  set name (String value) {_name = value;}
}

In this example I’d like to find “name” setter and getter methods to group them without any prior knowledge about the class.

Is there a way to do this properly? Or should I hack my way through using class mirror’s instanceMembers, perhaps converting setters symbols to strings or something like that?

Solution

you can list getters and setters like this:

import 'dart:mirrors';

class Person {
  String _name;
  Person(this._name);
  String get name => _name;
  set name (String value) {_name = value;}
  void bar() {

  }
}

void main() {
  ClassMirror mirror = reflectClass(Person);
  mirror.declarations.forEach((Symbol symbol, DeclarationMirror declaration) {
    if(declaration is MethodMirror) {
      if(declaration.isSetter) {
        print('setter: ' + MirrorSystem.getName(declaration.simpleName));
      }

      if(declaration.isGetter) {
        print('getter: ' + MirrorSystem.getName(declaration.simpleName));
      }
    }
  });
}

Output:

getter: name
setter: name=

Is that what you need? I don’t think you can do it in a different way.

I don’t think you can directly get the variable (_name). You can use declaration.source to get the source code. maybe you can do some splitting here. 🙂

Does this help?

Regards,
Robert

Answered By – Robert

Answer Checked By – Robin (FlutterFixes Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *