Open helightdev opened 4 months ago
macro class TestMacro implements ClassTypesMacro, ClassDeclarationsMacro {
const TestMacro();
@override
FutureOr<void> buildTypesForClass(ClassDeclaration clazz, ClassTypeBuilder builder) {
var implName = "${clazz.identifier.name}Impl";
builder.declareType(implName, DeclarationCode.fromParts([
"class $implName extends ${clazz.identifier.name} {",
" factory $implName({Object? arg = #default_value}) {",
" return $implName._(arg: arg == #default_value ? 5 : arg as int?);",
" }",
" $implName._({int? arg}) : super.name(arg: arg);",
"}"
]));
}
@override
FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz, MemberDeclarationBuilder builder) {
builder.declareInType(DeclarationCode.fromParts([
"int? arg;",
"factory ${clazz.identifier.name}({int? arg}) = ${clazz.identifier.name}Impl;",
"${clazz.identifier.name}.name({this.arg});"
]));
}
}
void main() {
Test(arg: 5);
}
@TestMacro()
class Test {}
Similar problem as in #55432
While working on a port of my serialization library, I found following compiler crash while implementing a redirecting factory.
While the analyzer runs without any errors and also recognized the constructor, trying to run the code via
dart run
results in the previously included crash. Using non redirecting factories works like expected.Isolated example: https://github.com/helightdev/FactoriesIssueMinimal
dart --version
: