diff --git a/pkgs/_analyzer_cfe_macros/lib/metadata_converter.dart b/pkgs/_analyzer_cfe_macros/lib/metadata_converter.dart index e203f6b..a69dbea 100644 --- a/pkgs/_analyzer_cfe_macros/lib/metadata_converter.dart +++ b/pkgs/_analyzer_cfe_macros/lib/metadata_converter.dart @@ -502,7 +502,10 @@ T? convert(Object? object) => switch (object) { front_end.TypedefReference o => dart_model.TypedefReference(name: convert(o.name)) as T, front_end.TypeLiteral o => - dart_model.TypeLiteral(typeAnnotation: convert(o.typeAnnotation)) as T, + dart_model.TypeLiteral( + typeAnnotation: convertToTypeAnnotation(o.typeAnnotation), + ) + as T, front_end.TypeReference o => dart_model.TypeReference() as T, front_end.UnaryExpression o => dart_model.UnaryExpression( diff --git a/pkgs/_analyzer_cfe_macros/test/metadata_converter_test.dart b/pkgs/_analyzer_cfe_macros/test/metadata_converter_test.dart index 7153927..2e84b74 100644 --- a/pkgs/_analyzer_cfe_macros/test/metadata_converter_test.dart +++ b/pkgs/_analyzer_cfe_macros/test/metadata_converter_test.dart @@ -81,4 +81,28 @@ void main() { }); }); }); + + test('converts a type literal', () { + final invocation = TypeLiteral(NamedTypeAnnotation(TestClassReference())); + + Scope.query.run(() { + expect(convert(invocation), { + 'typeAnnotation': { + 'type': 'NamedTypeAnnotation', + 'value': { + 'reference': { + 'type': 'ClassReference', + 'value': {'name': 'Test'}, + }, + 'typeArguments': [], + }, + }, + }); + }); + }); +} + +class TestClassReference implements ClassReference { + @override + String get name => 'Test'; }