anchor.diff:      if (decl is ClassDeclaration) {
         for (var meta in decl.metadata) {
           String annotationName = meta.name.name;
  -
           evalArg(String argumentName) {
             var expr = _findNamedArgument(meta.arguments, argumentName);
             var result = expr == null ? null : _eval(expr);
  
positive.code:             var template = evalArg('template');
              if (template != null) {
                List styleUrls = evalArg('styleUrls') ?? [evalArg('cssUrl')];
                if (styleUrls.contains(cssUrl)) {
                    templates.add(template);
                }
  
negative.code:   throw new ArgumentError("Unsupported literal type: ${expr.runtimeType} ($expr)");
  }
  
  String _assetIdToUri(AssetId id) {
    var path = id.path;
    if (path.startsWith('lib/')) path = path.substring('lib/'.length);
    return 'package:${id.package}/$path';
  }
  
  Expression _findNamedArgument(ArgumentList argumentList, String name) {
    for (var arg in argumentList.arguments) {
      if (arg is AssignmentExpression && arg.leftHandSide is Identifier
          && arg.leftHandSide.name == name) {
        return arg.rightHandSide;
      } else if (arg is NamedExpression && arg.name.label.name == name) {
        return arg.expression;
      }
    }
    return null;
  