code: public static List<AmendExecutionExtension> filterCompatibleExtensions(
              final List<AmendExecutionExtension> extensions,
              final Class<? extends RepositoryMethodDescriptor> descriptorType) {
          @SuppressWarnings("unchecked")
          final Class<? extends AmendExecutionExtension> supportedExtension =
                  (Class<? extends AmendExecutionExtension>) GenericsResolver.resolve(descriptorType)
                          .type(RepositoryMethodDescriptor.class).generic("E");
          return Lists.newArrayList(Iterables.filter(extensions, new Predicate<AmendExecutionExtension>() {
              @Override
              public boolean apply(@Nonnull final AmendExecutionExtension ext) {
                  final Class<?> rawExtType = RepositoryUtils.resolveRepositoryClass(ext);
                  final boolean compatible = supportedExtension.isAssignableFrom(rawExtType);
                  if (!compatible) {
                      LOGGER.debug("Extension {} ignored, because it doesn't implement required extension "
                              + "interface {}", rawExtType.getSimpleName(), supportedExtension.getSimpleName());
                  }
                  return compatible;
              }
          }));
      }
docs: Checks resolved amend extensions compatibility with method specific extension type.
  Extension may be universal and support some methods and doesn't support other.
  
  @param extensions     extensions to check
  @param descriptorType repository method descriptor type
  @return filtered extensions list (safe to use by method extension)