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; }