parseRoute method

Future<MetaRoute?> parseRoute(
  1. Units units
)

Implementation

Future<MetaRoute?> parseRoute(Units units) async {
  if (!path
      .basename(units.parsed.path)
      .contains(RegExp(r'[._]controller\.dart$'))) {
    return null;
  }

  final resolved = await units.resolved();

  final classVisitor = ControllerVisitor();
  resolved.libraryElement.accept(classVisitor);

  if (!classVisitor.hasController) {
    return null;
  }

  final (:element, path: routePath, :constructor, :params, :methods, :type) =
      classVisitor.values;

  return MetaRoute(
    path: routePath,
    filePath: units.parsed.path,
    className: element.name ?? (throw Exception('Class name is null')),
    params: params,
    element: element,
    constructorName:
        constructor.name ?? (throw Exception('Constructor name is null')),
    methods: methods,
    type: type,
    annotationsFor:
        ({required List<OnMatch> onMatch, NonMatch? onNonMatch}) =>
            getAnnotations(
              element: element,
              onMatch: onMatch,
              onNonMatch: onNonMatch,
            ),
  );
}