code: public static List<Annotation> findAmendAnnotations(
              final Method method, final Class<?> root,
              final Class<? extends RepositoryMethodDescriptor> descriptorType) {
          final List<Annotation> res = filterAnnotations(AmendMethod.class, method.getAnnotations());
          // strict check: if bad annotation defined - definitely error
          ExtCompatibilityUtils.checkAmendExtensionsCompatibility(descriptorType, res);
          // some annotations may be defined on type; these annotations are filtered according to descriptor
          merge(res, filterAnnotations(AmendMethod.class, method.getDeclaringClass().getAnnotations()), descriptorType);
          if (root != method.getDeclaringClass()) {
              // global extensions may be applied on repository level
              merge(res, filterAnnotations(AmendMethod.class, root.getAnnotations()), descriptorType);
          }
          return res;
      }
docs: Searches for amend annotations (annotations annotated with
  {@link ru.vyarus.guice.persist.orient.repository.core.spi.amend.AmendMethod}).
  <p>
  Amend annotation may be defined on method, type and probably globally on root repository type.
  If annotation is defined in two places then only more prioritized will be used.
  Priorities: method, direct method type, repository type (in simple cases the last two will be the same type).
  <p>
  Extensions compatibility is checked against descriptor object. If extension declared directly on method
  error will be throw (bad usage). For type and root type declared extensions, incompatible extensions simply
  skipped (case when extension should apply to all methods except few).
  
  @param method         repository method
  @param root           root repository type
  @param descriptorType type of descriptor object (used to filter extensions)
  @return list of found extension annotations