Search code examples
inheritancereflectiondartdart-mirrors

Find all subclasses in dart


I have three classes in dart:

class A {}

class B extends A{}

class C extends A{}

There is a way to get all subclasses from A?

Edit:

Thanks Alexandre Ardhuin your solution worked perfectly!

I'm learning the dart i edited your code and put the recursive solution, take a look:

import 'dart:mirrors';

class A {}
class B extends A{}
class C extends A{}
class D {}
class E extends C {}

bool isParent(String parent,ClassMirror clazz){
  var objectParentName = MirrorSystem.getName(clazz.superclass.simpleName);
  if (objectParentName == "Object"){
    return parent == "Object";
  }
  var result = parent == objectParentName;
  if (!result){
    return isParent(parent,clazz.superclass);
  }
  return result;
}

List<String> findAllSubclasses(String clazz){
  var result = [];
  final ms = currentMirrorSystem();
  ms.isolate.rootLibrary.classes.forEach((s,c) {
    if (isParent(clazz,c)){
      result.add(MirrorSystem.getName(c.simpleName));
    }
  });
  return result;
}


main(){
  var result = findAllSubclasses('A');
  print(result);
}

Solution

  • Mirror library can provide some infos :

    import 'dart:mirrors';
    
    class A {}
    class B extends A{}
    class C extends A{}
    class D {}
    
    main(){
      final ms = currentMirrorSystem();
      ms.isolate.rootLibrary.classes.forEach((s,c) {
        final parentClassName = MirrorSystem.getName(c.superclass.simpleName);
        if (parentClassName == 'A') {
          final className = MirrorSystem.getName(c.simpleName);
          print('$className has A as super class');
        }
      });
    }
    

    The output will be :

    C has A as super class
    B has A as super class