Skip to content

Instantly share code, notes, and snippets.

@guid-empty
Created March 21, 2018 00:01
Show Gist options
  • Save guid-empty/d361ac845480fb8ce5f9a1f704baac54 to your computer and use it in GitHub Desktop.
Save guid-empty/d361ac845480fb8ce5f9a1f704baac54 to your computer and use it in GitHub Desktop.
String nameOf(dynamic model, dynamic resolved) => (resolved as SymbolResolvedValue).name;
SymbolResolvedValue resolve(dynamic model, dynamic resolved) => resolved as SymbolResolvedValue;
Symbol symbolOf(dynamic model, dynamic resolved) => (resolved as SymbolResolvedValue).symbol;
class SymbolResolvedValue {
String name;
Symbol symbol;
SymbolResolvedValue(this.name, this.symbol);
}
void main() {
// codecomplete должен помочь нам избежать ошибок и сопоставить сгенерерованный символ нашему полю (из generic или лямбды)
// чтобы уметь сгенерировать символы в контексте использования, мы должны иметь рабочий код с обращением к конкретному полю нашей модели,
// и по такому обращению однозначно вернуть символ
// это означает, что у нас в любом случае должно быть гдето определенно соответствие между этим конкретным обращением (ключ)
// с соответствующим сгенерированным кодом
print(nameOf((TempTask t) => t.attachments, $model.taskNames.title)); //~!!!! потенциально можем ошибиться
print(symbolOf((TempTask t) => t.attachments, $model.taskNames.title)); //~!!!! потенциально можем ошибиться
print(resolve((TempTask t) => t.attachments, $model.taskNames.title).symbol); //~!!!! потенциально можем ошибиться
print(resolve((TempFolder t) => t.parentFolders, $model.folderNames.parentFolders).symbol); //~!!!! потенциально можем ошибиться
}
class $folderNames {
SymbolResolvedValue get parentFolders => new SymbolResolvedValue('parentFolders', #parentFolders);
}
///
/// GENERATED CODE, DO NOT MODIFY IT BY HANDS
///
class $model<T> {
static $taskNames taskNames = new $taskNames();
static $folderNames folderNames = new $folderNames();
}
class $taskNames {
SymbolResolvedValue get title => new SymbolResolvedValue('title', #title);
}
class TempFolder {
String parentFolders;
}
class TempTask {
String title;
String parent;
String attachments;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment