getInnerTypeByLevel function

String? getInnerTypeByLevel(
  1. TypeAnnotation? returnType, {
  2. int level = 1,
  3. bool? useLexeme = false,
})

Implementation

String? getInnerTypeByLevel(
  TypeAnnotation? returnType, {
  int level = 1,
  bool? useLexeme = false,
}) {
  if (returnType is! NamedType) {
    return null;
  }

  if (level <= 0) {
    return returnType.toSource();
  }

  NamedType typeToInspect = returnType;
  for (var i = 0; i < level; i++) {
    final typeArguments = typeToInspect.typeArguments;
    if (typeArguments == null || typeArguments.arguments.isEmpty) {
      return null;
    }
    final innerType = typeArguments.arguments.first;
    if (innerType is! NamedType) {
      return innerType.toSource();
    }
    typeToInspect = innerType;
  }

  final result = switch (useLexeme) {
    true => typeToInspect.name.lexeme,
    _ => typeToInspect.toSource(),
  };
  print("[getInnerTypeByLevel] $result");
  return result;
}