private static Collection<OutputValue> getOutputValues(
      final ProcessorGraphNode<Object, Object> node) {
    final Map<String, String> outputMapper = node.getOutputMapper();
    final Set<OutputValue> values = Sets.newHashSet();

    final Set<String> mappings = outputMapper.keySet();
    final Class<?> paramType = node.getProcessor().getOutputType();
    verifyAllMappingsMatchParameter(
        mappings,
        paramType,
        "One or more of the output mapping keys of '"
            + node
            + "' do not match an "
            + "output parameter.  The bad mappings are: ");
    final Collection<Field> allProperties = getAllAttributes(paramType);
    for (Field field : allProperties) {
      // if the field is annotated with @DebugValue, it can be renamed automatically in a
      // mapping in case of a conflict.
      final boolean canBeRenamed = field.getAnnotation(InternalValue.class) != null;
      String name =
          ProcessorUtils.getOutputValueName(
              node.getProcessor().getOutputPrefix(), outputMapper, field);
      values.add(new OutputValue(name, canBeRenamed, field.getType()));
    }

    return values;
  }