public int getSource(int target) {
   if (target == this.target) {
     return this.source;
   } else {
     return parent.getSource(target);
   }
 }
 public boolean isIdentity() {
   // FIXME: It's possible that parent was not the identity but that
   // this overriding fixed it.
   return (source == target) && parent.isIdentity();
 }
 public Mapping inverse() {
   return new OverridingTargetMapping((TargetMapping) parent.inverse(), target, source);
 }
 public MappingType getMappingType() {
   // FIXME: Mapping type might be weaker than parent.
   return parent.getMappingType();
 }
 public int size() {
   return parent.getSourceOpt(target) >= 0 ? parent.size() : parent.size() + 1;
 }