@@ -1826,6 +1826,59 @@ TextSerializer<InstanceConstant> instanceConstantSerializer =
1826
1826
1827
1827
Case <Constant > constantSerializer = Case .uninitialized (ConstantTagger ());
1828
1828
1829
+ class InitializerTagger implements Tagger <Initializer > {
1830
+ const InitializerTagger ();
1831
+
1832
+ String tag (Initializer node) {
1833
+ if (node is AssertInitializer ) {
1834
+ return "assert" ;
1835
+ } else if (node is FieldInitializer ) {
1836
+ return "field" ;
1837
+ } else if (node is InvalidInitializer ) {
1838
+ return "invalid" ;
1839
+ } else if (node is LocalInitializer ) {
1840
+ return "local" ;
1841
+ } else if (node is RedirectingInitializer ) {
1842
+ return "redirecting" ;
1843
+ } else if (node is SuperInitializer ) {
1844
+ return "super" ;
1845
+ } else {
1846
+ throw UnimplementedError ("InitializerTagger.tag(${node .runtimeType })." );
1847
+ }
1848
+ }
1849
+ }
1850
+
1851
+ TextSerializer <AssertInitializer > assertInitializerSerializer = Wrapped (
1852
+ (w) => w.statement, (u) => AssertInitializer (u), statementSerializer);
1853
+
1854
+ TextSerializer <FieldInitializer > fieldInitializerSerializer = Wrapped (
1855
+ (w) => Tuple2 (w.fieldReference.canonicalName, w.value),
1856
+ (u) => FieldInitializer .byReference (u.first.getReference (), u.second),
1857
+ Tuple2Serializer (CanonicalNameSerializer (), expressionSerializer));
1858
+
1859
+ TextSerializer <InvalidInitializer > invalidInitializerSerializer =
1860
+ Wrapped ((_) => null , (_) => InvalidInitializer (), Nothing ());
1861
+
1862
+ TextSerializer <LocalInitializer > localInitializerSerializer = Wrapped (
1863
+ (w) => w.variable,
1864
+ (u) => LocalInitializer (u),
1865
+ variableDeclarationSerializer);
1866
+
1867
+ TextSerializer <RedirectingInitializer > redirectingInitializerSerializer =
1868
+ Wrapped (
1869
+ (w) => Tuple2 (w.targetReference.canonicalName, w.arguments),
1870
+ (u) => RedirectingInitializer .byReference (
1871
+ u.first.getReference (), u.second),
1872
+ Tuple2Serializer (CanonicalNameSerializer (), argumentsSerializer));
1873
+
1874
+ TextSerializer <SuperInitializer > superInitializerSerializer = Wrapped (
1875
+ (w) => Tuple2 (w.targetReference.canonicalName, w.arguments),
1876
+ (u) => SuperInitializer .byReference (u.first.getReference (), u.second),
1877
+ Tuple2Serializer (CanonicalNameSerializer (), argumentsSerializer));
1878
+
1879
+ Case <Initializer > initializerSerializer =
1880
+ Case .uninitialized (InitializerTagger ());
1881
+
1829
1882
void initializeSerializers () {
1830
1883
expressionSerializer.registerTags ({
1831
1884
"string" : stringLiteralSerializer,
@@ -1950,4 +2003,12 @@ void initializeSerializers() {
1950
2003
"const-expr" : unevaluatedConstantSerializer,
1951
2004
"const-object" : instanceConstantSerializer,
1952
2005
});
2006
+ initializerSerializer.registerTags ({
2007
+ "assert" : assertInitializerSerializer,
2008
+ "field" : fieldInitializerSerializer,
2009
+ "invalid" : invalidInitializerSerializer,
2010
+ "local" : localInitializerSerializer,
2011
+ "redirecting" : redirectingInitializerSerializer,
2012
+ "super" : superInitializerSerializer,
2013
+ });
1953
2014
}
0 commit comments