ClassUtils.hx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. package hrt.tools;
  2. class ClassUtils {
  3. public static function getInheritance<T>(startClass:Class<T>, baseClass: Class<T>) : Array<Class<T>> {
  4. var classes : Array<Class<T>> = [];
  5. var cl : Class<Dynamic> = startClass;
  6. while(true) {
  7. classes.unshift(cast cl);
  8. if (cl == baseClass)
  9. break;
  10. cl = Type.getSuperClass(cl);
  11. }
  12. return classes;
  13. }
  14. public static function getCommonClass<T>(instances:Array<T>, baseClass: Class<T>) : Class<T> {
  15. if (instances.length == 0)
  16. return baseClass;
  17. var commonDenominator : Array<Class<T>> = getInheritance(Type.getClass(instances[0]), baseClass);
  18. for (instance in instances) {
  19. var inheritance = getInheritance(Type.getClass(instance), baseClass);
  20. var min = commonDenominator.length > inheritance.length ? inheritance.length : commonDenominator.length;
  21. var lastCommon = min-1;
  22. for (index in 0...min) {
  23. if (commonDenominator[index] != inheritance[index]) {
  24. lastCommon = index-1;
  25. break;
  26. }
  27. }
  28. commonDenominator = commonDenominator.slice(0, lastCommon+1);
  29. }
  30. return commonDenominator.pop();
  31. }
  32. }