# Static Meta-Programming

## Problem

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

## Proposal &#x20;

#### Solution Requirements:

* no annotations
* structured
* retains reference of generated code

#### Syntax:

```
static extention <name> on <selector> {

}
```

```dart
class DataClass {
    const DataClass._();
}
```

```dart
DataClass Person(String name, {String Address}){
    String NameFirstChar(){
        return name.first;
    }
}
```

```dart
static extention DataClass<T> on DataClass<T> Function {


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

}
```

```dart
@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;
    }
}
```
