Как редактировать исходный файл в дротике с помощью анализатора.Это то, что я пробовал
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/error.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer/src/generated/scanner.dart';
String src = """
Dynamism d = new Dynamism(expert:true);
main(){
var o = new Object();
d.on(o).hi = 'bye';
}
""";
main() {
var ast = parseCompilationUnit(src, parseFunctionBodies: true);
print('initial value: ');
print(ast.toSource());
var v = new Visitor();
ast.visitChildren(v);
print('After modification:');
print(ast.toSource());
}
class Visitor extends RecursiveAstVisitor {
@override
visitAssignmentExpression(AssignmentExpression node) {
//filter
var p = new RegExp(r'.*\.on\(\w\)');
if (!p.hasMatch(node.toString())) return;
//replace
SimpleStringLiteral ssl = _create_SimpleStringLiteral(node);
node.parent.accept(new NodeReplacer(node, ssl));
}
}
SimpleStringLiteral _create_SimpleStringLiteral(AstNode node) {
String new_string = modify(node.toString());
int line_num = node.offset;
//holds the position and type
StringToken st = new StringToken(TokenType.STRING, new_string,
line_num);
return new SimpleStringLiteral(st, new_string);
}
String modify(String s) {
List parts = s.split('=');
var value = parts[1];
List l = parts[0].split('.');
String dynamism = l.sublist(0, l.length - 1).join('.');
String propertyName = l.last.trim();
return '${dynamism}.set("${propertyName}",${value})';
}
, но выдает ошибку на SimpleStringLiteral, говоря, что это абстрактный класс.Пожалуйста, помогите мне отредактировать «пока» на «до свидания». Я думаю, что предыдущая версия дротика имеет свою реализацию, но теперь она абстрактна.