code: private FilterDescriptor createFilter(FilterType filterType, Map<String, FilterDescriptor> filters, ScannerContext context) {
          Store store = context.getStore();
          FilterDescriptor filterDescriptor = getOrCreateNamedDescriptor(FilterDescriptor.class, filterType.getFilterName().getValue(), filters, store);
          setAsyncSupported(filterDescriptor, filterType.getAsyncSupported());
          for (DescriptionType descriptionType : filterType.getDescription()) {
              filterDescriptor.getDescriptions().add(XmlDescriptorHelper.createDescription(descriptionType, store));
          }
          for (DisplayNameType displayNameType : filterType.getDisplayName()) {
              filterDescriptor.getDisplayNames().add(XmlDescriptorHelper.createDisplayName(displayNameType, store));
          }
          FullyQualifiedClassType filterClass = filterType.getFilterClass();
          if (filterClass != null) {
              TypeResolver typeResolver = context.peek(TypeResolver.class);
              TypeCache.CachedType<TypeDescriptor> filterClassDescriptor = typeResolver.resolve(filterClass.getValue(), context);
              filterDescriptor.setType(filterClassDescriptor.getTypeDescriptor());
          }
          for (IconType iconType : filterType.getIcon()) {
              IconDescriptor iconDescriptor = XmlDescriptorHelper.createIcon(iconType, store);
              filterDescriptor.getIcons().add(iconDescriptor);
          }
          for (ParamValueType paramValueType : filterType.getInitParam()) {
              ParamValueDescriptor paramValueDescriptor = createParamValue(paramValueType, store);
              filterDescriptor.getInitParams().add(paramValueDescriptor);
          }
          return filterDescriptor;
      }
docs: Create a filter descriptor.
  
  @param filterType
  The XML filter type.
  @param context
  The scanner context.
  @return The filter descriptor.