获取 AST
builder
中对象解析是基于 analyzer
模块实现的,对于 Element 对象未封装的元数据,
可以直接通过访问其 AST 获取。
在 LibraryElement 对象中提供了 session 属性用于访问解析库的会话 AnalysisSession 对象, 这里可以查询已解析的元素语法树。
// 初始化参数从 AST 中取
final libraryResult = library.session.getParsedLibraryByElement(library) as ParsedLibraryResult;
final declarationResult = libraryResult.getElementDeclaration(field);
if (declarationResult != null) {
final variableDeclaration = declarationResult.node as VariableDeclaration;
if (variableDeclaration.initializer != null) {
builder.assignment = code.Code(variableDeclaration.initializer!.toSource());
}
}
在 VSCode 中调试生成器
build
库通过生成 .dart_tool/build/entrypoint/build.dart
执行代码生成,调试这个 dart 文件就可以加载自己写的生成器。
在 .vscode 的 launch.json
文件中增加
{
"name": "model_gen_example model_gen",
"cwd": "packages/model_gen_example",
"request": "launch",
"program": ".dart_tool/build/entrypoint/build.dart",
"type": "dart",
"args": ["build", "--delete-conflicting-outputs", "--verbose"]
}