abstract class Interface {
  int get field;
}

class Class<T> implements Interface {
  var field;
  Class([this.field = 0]);
  Class.named(this.field);
  Class.redirectingGenerative(int field) : this(field);
  factory Class.fact(int field) => new Class(field);
  factory Class.redirectingFactory(int field) = Class;
}

mixin Mixin<S> {}
class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;
test() {}
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;
main() {}
