lookupDeclarationMetaData method

List<Object> lookupDeclarationMetaData(
  1. DeclarationMirror? declarationMirror
)

Implementation

List<Object> lookupDeclarationMetaData(DeclarationMirror? declarationMirror) {
  if (declarationMirror == null) {
    return _emptyDeclarationMetaData;
  }

  if (_cacheLookupDeclarationMetaData.containsKey(declarationMirror)) {
    return _cacheLookupDeclarationMetaData[declarationMirror]!;
  }

  var result = declarationMirror.metadata;
  final parentClassMirror = _safeGetParentClassMirror(declarationMirror);
  if (parentClassMirror == null) {
    return declarationMirror.metadata;
  }

  for (final element in [
    parentClassMirror,
    _safeGetSuperClassMirror(parentClassMirror),
    ...parentClassMirror.superinterfaces
  ]) {
    if (element == null) {
      continue;
    }
    final parentDeclarationMirror =
        ClassInfo.fromCache(element, cachedClasses)
            .getDeclarationMirror(declarationMirror.simpleName);
    result = result +
        (parentClassMirror.isTopLevel
            ? parentDeclarationMirror != null
                ? parentDeclarationMirror.metadata
                : []
            : lookupDeclarationMetaData(parentDeclarationMirror));
  }

  _cacheLookupDeclarationMetaData[declarationMirror] = result;
  return result;
}