protected function loadFrom(Aspect $aspect, Reflector $reflector, array $loaders): array
    {
        $loadedItems = [];

        foreach ($loaders as $loader) {
            $loaderKind = $loader->getKind();
            switch ($loaderKind) {
                case AspectLoaderExtension::KIND_REFLECTION:
                    if ($loader->supports($aspect, $reflector)) {
                        $loadedItems += $loader->load($aspect, $reflector);
                    }
                    break;

                case AspectLoaderExtension::KIND_ANNOTATION:
                    $annotations = $this->getAnnotations($reflector);
                    foreach ($annotations as $annotation) {
                        if ($loader->supports($aspect, $reflector, $annotation)) {
                            $loadedItems += $loader->load($aspect, $reflector, $annotation);
                        }
                    }
                    break;

                default:
                    throw new InvalidArgumentException("Unsupported loader kind {$loaderKind}");
            }
        }

        return $loadedItems;
    }