Я пытаюсь создать библиотеку JSON-сериализации на основе отражения (от dart: mirrors), но я не могу найти способ отразить redirecting constructor
.
Напримерздесь класс T
с redirecting constructor
, я пробую множество способов отразить конструктор T(String)
, например, найти его в полях cls.staticMembers
и cls.declarations
, но я не могу его получить.
class T {
final String test;
const T._(this.test);
const factory T(String test) = T._;
}
Пробовал:
var cls = reflectClass(T);
cls.declarations.entries.forEach(print);
cls.staticMembers.entries.forEach(print);
Результат:
MapEntry(Symbol("test"): VariableMirror on 'test')
MapEntry(Symbol("_redirecting#"): VariableMirror on '_redirecting#')
MapEntry(Symbol("T._"): MethodMirror on 'T._')
MapEntry(Symbol("_redirecting#"): Instance of '_SyntheticAccessor')
MapEntry(Symbol("_redirecting#="): Instance of '_SyntheticAccessor')
Кстати, ни у VariableMirror on '_redirecting#'
, ни у Instance of '_SyntheticAccessor'
нет нужных мне полей.
Наиболее распространенным примером является встроенный тип Symbol
, он имеет redirecting constructor
, например:
abstract class Symbol {
...
const factory Symbol(String name) = internal.Symbol;
...
}
Более того, для класса Symbol
я должендаже не нашел ничего подобного Symbol("_redirecting#")
.Попробовал:
var cls = reflectClass(Symbol);
cls.declarations.entries.forEach(print);
cls.staticMembers.entries.forEach(print);
Только найдено:
MapEntry(Symbol("unaryMinus"): VariableMirror on 'unaryMinus')
MapEntry(Symbol("empty"): VariableMirror on 'empty')
MapEntry(Symbol("hashCode"): MethodMirror on 'hashCode')
MapEntry(Symbol("=="): MethodMirror on '==')
MapEntry(Symbol("unaryMinus"): Instance of '_SyntheticAccessor')
MapEntry(Symbol("empty"): Instance of '_SyntheticAccessor')