visitFieldDeclaration method

  1. @override
void visitFieldDeclaration(
  1. FieldDeclaration node
)
override

Implementation

@override
void visitFieldDeclaration(FieldDeclaration node) {
  if (dataType != null) return;

  print("$fieldName $dataType: ${node.isStatic} ${node.fields.isConst}");
  if (node.isStatic && node.fields.isConst) {
    print("static const variables ${node.fields.variables}");
    for (var variable in node.fields.variables) {
      if (variable.name.lexeme != fieldName) {
        continue;
      }

      // print("${variable.name.lexeme} ${fieldName}");
      print(variable.toString());
      var element = variable.declaredFragment;
      print("element $element");


      if (element != null) {
        // 4. Get the Type
        DartType type = element.element.type;

        print(type); // Output: Set<String>
        print(type.isDartCoreSet); // Output: true
        // dataTypeNode = type;
        dataType = type.toString();
        isExists = true;
        print("${dataType}");
        return;
      } else {
        // 1. Check if there is an initializer
        var initializer = variable.initializer;

        // 2. Check if it is a Set/Map literal
        if (initializer is SetOrMapLiteral) {
          final result = getLiteralTypeInfo(initializer);
          dataType = result.dataType;
          dataTypeNode = result.dataTypeNode;
          isExists = result.isExists;
          if (isExists) {
            return;
          }
        }
      }
    }
  }

  for (final variable in node.fields.variables) {
    if (variable.name.lexeme == fieldName) {
      dataTypeNode = node.fields.type;
      dataType = dataTypeNode?.toSource();
      isExists = true;
      break;
    }
  }
  super.visitFieldDeclaration(node);
}