diff --git a/lib/src/constructor_declaration.dart b/lib/src/constructor_declaration.dart index 206c426..69ab322 100644 --- a/lib/src/constructor_declaration.dart +++ b/lib/src/constructor_declaration.dart @@ -13,7 +13,19 @@ Map? serializeConstructorDeclaration( hasPrivateAnnotation(annotations)) { return null; } - final className = (constructor.parent! as ClassDeclaration).name.lexeme; + final String className; + + if (constructor.parent is ClassDeclaration) { + className = (constructor.parent! as ClassDeclaration).name.lexeme; + } else if (constructor.parent is EnumDeclaration) { + className = (constructor.parent! as EnumDeclaration).name.lexeme; + } else { + throw UnsupportedError( + 'Constructor parent is neither ClassDeclaration nor EnumDeclaration. ' + 'It is ${constructor.parent.runtimeType}', + ); + } + final constructorName = constructor.name == null ? className : '$className.${constructor.name!.lexeme}'; diff --git a/test/enum_declaration_test.dart b/test/enum_declaration_test.dart index 9b269b3..40b3800 100644 --- a/test/enum_declaration_test.dart +++ b/test/enum_declaration_test.dart @@ -96,4 +96,26 @@ void main() { ); }); }); + + test('enum with constructor', () { + expect( + parseAsJson(''' + enum Abc { + a; + + const Abc(); + } + '''), + { + 'kind': 'enum', + 'name': 'Abc', + 'values': [ + {'name': 'a'}, + ], + 'members': [ + {'kind': 'constructor', 'name': 'Abc', 'const': true}, + ], + }, + ); + }); }