annotationWhere<T extends Element> function

AnnotationInformation<T>? annotationWhere<T extends Element>(
  1. T element,
  2. bool test(
    1. ElementAnnotation
    ),
  3. ComponentVisitorExceptionHandler exceptionHandler
)

Returns the AnnotationInformation for the first annotation on element that matches test or null if no such annotation exists.

Implementation

AnnotationInformation<T>? annotationWhere<T extends Element>(
  T element,
  bool Function(ElementAnnotation) test,
  ComponentVisitorExceptionHandler exceptionHandler,
) {
  for (
    var annotationIndex = 0;
    annotationIndex < element.metadata.annotations.length;
    annotationIndex++
  ) {
    final annotation = element.metadata.annotations[annotationIndex];

    final annotationInfo = AnnotationInformation(
      element,
      annotation,
      annotationIndex,
      exceptionHandler,
    );

    if (annotationInfo.constantValue == null) {
      exceptionHandler.handleWarning(
        KelicapAnalysisError(
          annotationInfo.constantEvaluationErrors,
          annotationInfo,
        ),
      );
    } else if (test(annotationInfo.annotation)) {
      return annotationInfo;
    }
  }
  return null;
}