Static Meta-Programming

Problem

How do we do meta-programming(Reflection/Code-generation) without the usual use of reflection.

Proposal

Solution Requirements:

  • no annotations

  • structured

  • retains reference of generated code

Syntax:

static extention <name> on <selector> {

}
class DataClass {
    const DataClass._();
}
DataClass Person(String name, {String Address}){
    String NameFirstChar(){
        return name.first;
    }
}
static extention DataClass<T> on DataClass<T> Function {


    DataClass from
    Map<String, dynamic> toJson();
    String toString();

}
@data class Person {String name, String Address}
static extention DataClass<T> on @data<T> {
    T fromJson(Map<String, dynamic> json);
    Map<String, dynamic> toJson();
    String toString();
    Spec _$generate(){
        // access to reflection data
        return generatedCode;
    }
}

Last updated