public Set<ValueSpecification> getResults(final FunctionCompilationContext context, final ComputationTarget target, final Map<ValueSpecification, ValueRequirement> inputs) {
final Set<ValueSpecification> results = Sets.newHashSetWithExpectedSize(inputs.size());
for (Map.Entry<ValueSpecification, ValueRequirement> inputEntry : inputs.entrySet()) {
ValueProperties.Builder properties = createValueProperties();
properties.with(CURRENCY_MATRIX_NAME_PROPERTY, inputEntry.getValue().getTargetReference().getRequirement().getIdentifiers().getValue(CurrencyMatrixResolver.IDENTIFIER_SCHEME));
final ValueProperties inputProperties = inputEntry.getKey().getProperties();
for (String propertyName : inputProperties.getProperties()) {
if (!AbstractCurrencyMatrixSourcingFunction.SOURCE_CURRENCY_PROPERTY.equals(propertyName)
&& !AbstractCurrencyMatrixSourcingFunction.TARGET_CURRENCY_PROPERTY.equals(propertyName)
&& !ValuePropertyNames.FUNCTION.equals(propertyName)) {
final Set<String> values = inputProperties.getValues(propertyName);
if (values.isEmpty()) {
properties.withAny(propertyName);
} else {
properties.with(propertyName, values);
}