generateForElement method

  1. @visibleForTesting
String generateForElement(
  1. Element element,
  2. ConstantReader annotation,
  3. LibraryReader library
)

Implementation

@visibleForTesting
String generateForElement(
  Element element,
  ConstantReader annotation,
  LibraryReader library,
) {
  final classes = annotation.read('classes').listValue;
  final ClassElement classElement = _validateElement(element, false);
  final subTypes = classes.isNotEmpty
      ? _findSubTypesForAllClasses(classes, library)
      : [_findSubTypesForSingleClass(library, classElement)];
  for (final e in subTypes) {
    _validateSubType(e, classes.isNotEmpty);
  }

  final optionsReader = annotation.read('options');

  final ClassSwitchOptions generatorOptions =
      extractOptionsFromAnnotation(optionsReader);

  final ClassSwitchClassGenerator classSwitchCodeBuilder =
      ClassSwitchClassGenerator.create(
    classElement,
    subTypes,
    generatorOptions,
  );
  return classSwitchCodeBuilder.generateAll();
}