code: public static Map<String,Collection<VarBindingDef>> getPropertySources( FunctionInputDef function)
      {
      SetValuedMap<String,VarBindingDef> sources = MultiMapUtils.newSetValuedHashMap();
  
      toStream( new VarDefIterator( function))
        .flatMap( var -> toStream( var.getValues()).map( value -> new VarBindingDef( var, value)))
        .forEach( binding -> toStream( binding.getValueDef().getProperties()).forEach( p -> sources.put( p, binding)));
      
      return sources.asMap();
      }
docs: Maps every property in the given function input definition to the variable value definitions that contribute it.