// Path: jaxrs-versioning/src/main/java/de/openknowledge/jaxrs/versioning/Provider.java
// public interface Provider<T> {
//   public T get(VersionContext versionContext);
// }


import java.util.Collection;
import org.apache.commons.lang3.StringUtils;
import de.openknowledge.jaxrs.versioning.Added;
import de.openknowledge.jaxrs.versioning.MovedFrom;
import de.openknowledge.jaxrs.versioning.Provider;
import de.openknowledge.jaxrs.versioning.Removed;
            versionProperty.set(object, value);
          }
          map(value, context.getChildContext(value));
        }
        continue;
      }
      if (versionProperty.isDefault(object)) {
        updateDependentValues(new VersionPropertyValue(versionProperty, context));
      } else {
        Object value = versionProperty.get(object);
        setDependentValues(versionType, movedFrom, added, versionProperty, value, context);
        if (!versionProperty.isSimple()) {
          map(value, context.getChildContext(value));
        }
      }
    }
  }

  private void updateDependentValues(VersionPropertyValue propertyValue) {
    DefaultVersionContext dependentContext = propertyValue.getContext();
    VersionType<?> dependentType = versionTypeFactory.get(dependentContext.getParent().getClass());

    MovedFrom movedFrom = propertyValue.getAnnotation(MovedFrom.class);
    if (movedFrom != null) {
      updateDependentValues(dependentType, propertyValue, movedFrom, dependentContext);
      if (!propertyValue.isDefault()) {
        return;
      }
    }
    String defaultValue = StringUtils.EMPTY;
// Path: jaxrs-versioning/src/main/java/de/openknowledge/jaxrs/versioning/Provider.java
// public interface Provider<T> {
//   public T get(VersionContext versionContext);
// }


// Path: jaxrs-versioning/src/main/java/de/openknowledge/jaxrs/versioning/conversion/CompatibilityMapper.java
import java.util.Collection;
import org.apache.commons.lang3.StringUtils;
import de.openknowledge.jaxrs.versioning.Added;
import de.openknowledge.jaxrs.versioning.MovedFrom;
import de.openknowledge.jaxrs.versioning.Provider;
import de.openknowledge.jaxrs.versioning.Removed;

            versionProperty.set(object, value);
          }
          map(value, context.getChildContext(value));
        }
        continue;
      }
      if (versionProperty.isDefault(object)) {
        updateDependentValues(new VersionPropertyValue(versionProperty, context));
      } else {
        Object value = versionProperty.get(object);
        setDependentValues(versionType, movedFrom, added, versionProperty, value, context);
        if (!versionProperty.isSimple()) {
          map(value, context.getChildContext(value));
        }
      }
    }
  }

  private void updateDependentValues(VersionPropertyValue propertyValue) {
    DefaultVersionContext dependentContext = propertyValue.getContext();
    VersionType<?> dependentType = versionTypeFactory.get(dependentContext.getParent().getClass());

    MovedFrom movedFrom = propertyValue.getAnnotation(MovedFrom.class);
    if (movedFrom != null) {
      updateDependentValues(dependentType, propertyValue, movedFrom, dependentContext);
      if (!propertyValue.isDefault()) {
        return;
      }
    }
    String defaultValue = StringUtils.EMPTY;
    Class<? extends Provider> provider = Provider.class;