docs: @SuppressWarnings("unchecked")
      public Multimap<String, Processor> getAllRequiredAttributes() {
          Multimap<String, Processor> requiredInputs = HashMultimap.create();
          for (ProcessorGraphNode root: this.roots) {
              final BiMap<String, String> inputMapper = root.getInputMapper();
              for (String attr: inputMapper.keySet()) {
                  requiredInputs.put(attr, root.getProcessor());
              }
              final Object inputParameter = root.getProcessor().createInputParameter();
              if (inputParameter instanceof Values) {
                  continue;
              } else if (inputParameter != null) {
                  final Class<?> inputParameterClass = inputParameter.getClass();
                  final Set<String> requiredAttributesDefinedInInputParameter =
                          getAttributeNames(inputParameterClass,
                                            FILTER_ONLY_REQUIRED_ATTRIBUTES);
                  for (String attName: requiredAttributesDefinedInInputParameter) {
                      try {
                          if (inputParameterClass.getField(attName).getType() == Values.class) {
                              continue;
                          }
                      } catch (NoSuchFieldException e) {
                          throw new RuntimeException(e);
                      }
                      String mappedName = ProcessorUtils.getInputValueName(
                              root.getProcessor().getInputPrefix(),
                              inputMapper, attName);
                      requiredInputs.put(mappedName, root.getProcessor());
                  }
              }
          }
  
          return requiredInputs;
      }