@Override
 protected ModelPath calculateTarget(MutableModelNode target) {
   if (targetProperty != null) {
     return ((ManagedInstance) values.get(targetProperty.getName())).getBackingNode().getPath();
   }
   return target.getPath();
 }
 @Override
 protected List<ModelReference<?>> withImplicitInputs(List<? extends ModelReference<?>> inputs) {
   List<ModelReference<?>> allInputs =
       new ArrayList<ModelReference<?>>(inputs.size() + implicitInputs.size());
   allInputs.addAll(inputs);
   for (ModelProperty<?> property : implicitInputs) {
     ManagedInstance value = (ManagedInstance) values.get(property.getName());
     allInputs.add(ModelReference.of(value.getBackingNode().getPath()));
   }
   return allInputs;
 }
 @Override
 public void set(String name, Object value) {
   values.put(name, value);
 }
 @Override
 public Object get(String name) {
   return values.get(name);
 }