visitClassDeclaration method

  1. @override
void visitClassDeclaration(
  1. ClassDeclaration node
)
override

Implementation

@override
void visitClassDeclaration(ClassDeclaration node) {
  // 检查是否extends TcmppFlutterEventChannel
  final extendsClause = node.extendsClause;
  if (extendsClause != null) {
    final superclass = extendsClause.superclass.name2.toString();
    if (superclass == 'TcmppFlutterEventChannel') {
      // 遍历类的所有方法
      for (final member in node.members) {
        if (member is MethodDeclaration) {
          // 查找EventConfig注解
          for (final annotation in member.metadata) {
            final annotationName = annotation.name.toString();
            if (annotationName == 'EventConfig') {
              // 解析注解参数
              bool value = false;
              final arguments = annotation.arguments;
              if (arguments != null) {
                for (final arg in arguments.arguments) {
                  if (arg is NamedExpression) {
                    if (arg.name.label.name == 'value') {
                      final expression = arg.expression;
                      if (expression is BooleanLiteral) {
                        value = expression.value;
                      }
                    }
                  }
                }
              }

              final methodName = member.name.lexeme;
              eventConfigs[methodName] = value;
            }
          }
        }
      }
    }
  }

  super.visitClassDeclaration(node);
}