code: public static Map<String,Collection<VarBindingDef>> getPropertiesUnused( FunctionInputDef function)
      {
      Map<String,Collection<VarBindingDef>> sources = getPropertySources( function);
      Collection<String> unused = CollectionUtils.subtract( sources.keySet(), getPropertyReferences( function).keySet());
  
      return
        sources.entrySet().stream()
        .filter( entry -> unused.contains( entry.getKey()))
        .collect( toMap( entry -> entry.getKey(), entry -> entry.getValue()));
      }
docs: For every property in the given function input definition that is defined but never referenced,
  maps the property to the variable value definitions that contribute it.