@Override
  public Converter getConverter(int fieldIndex) {

    // get the real converter from the delegate
    Converter delegateConverter = checkNotNull(delegate.getConverter(fieldIndex), "delegate converter");

    // determine the indexFieldPath for the converter proxy we're about to make, which is
    // this converter's path + the requested fieldIndex
    List<Integer> newIndexFieldPath = new ArrayList<Integer>(indexFieldPath.size() + 1);
    newIndexFieldPath.addAll(indexFieldPath);
    newIndexFieldPath.add(fieldIndex);

    if (delegateConverter.isPrimitive()) {
      PrimitiveColumnIO columnIO = getColumnIO(newIndexFieldPath);
      ColumnPath columnPath = ColumnPath.get(columnIO.getColumnDescriptor().getPath());
      ValueInspector[] valueInspectors = getValueInspectors(columnPath);
      return new FilteringPrimitiveConverter(delegateConverter.asPrimitiveConverter(), valueInspectors);
    } else {
      return new FilteringGroupConverter(delegateConverter.asGroupConverter(), newIndexFieldPath, valueInspectorsByColumn, columnIOsByIndexFieldPath);
    }

  }
@Override
  public Converter getConverter(int fieldIndex) {

    
    Converter delegateConverter = checkNotNull(delegate.getConverter(fieldIndex), "delegate converter");

    
    
    List<Integer> newIndexFieldPath = new ArrayList<Integer>(indexFieldPath.size() + 1);
    newIndexFieldPath.addAll(indexFieldPath);
    newIndexFieldPath.add(fieldIndex);

    if (delegateConverter.isPrimitive()) {
      PrimitiveColumnIO columnIO = getColumnIO(newIndexFieldPath);
      ColumnPath columnPath = ColumnPath.get(columnIO.getColumnDescriptor().getPath());
      ValueInspector[] valueInspectors = getValueInspectors(columnPath);
      return new FilteringPrimitiveConverter(delegateConverter.asPrimitiveConverter(), valueInspectors);
    } else {
      return new FilteringGroupConverter(delegateConverter.asGroupConverter(), newIndexFieldPath, valueInspectorsByColumn, columnIOsByIndexFieldPath);
    }

  }
@ Override public Converter getConverter ( int fieldIndex ) { // get the real converter from the delegate Converter delegateConverter = checkNotNull ( delegate . getConverter ( fieldIndex ) , "delegate converter" ) ; // determine the indexFieldPath for the converter proxy we're about to make, which is // this converter's path + the requested fieldIndex List < Integer > newIndexFieldPath = new ArrayList < Integer > ( indexFieldPath . size ( ) + 1 ) ; newIndexFieldPath . addAll ( indexFieldPath ) ; newIndexFieldPath . add ( fieldIndex ) ; if ( delegateConverter . isPrimitive ( ) ) { PrimitiveColumnIO columnIO = getColumnIO ( newIndexFieldPath ) ; ColumnPath columnPath = ColumnPath . get ( columnIO . getColumnDescriptor ( ) . getPath ( ) ) ; ValueInspector [ ] valueInspectors = getValueInspectors ( columnPath ) ; return new FilteringPrimitiveConverter ( delegateConverter . asPrimitiveConverter ( ) , valueInspectors ) ; } else { return new FilteringGroupConverter ( delegateConverter . asGroupConverter ( ) , newIndexFieldPath , valueInspectorsByColumn , columnIOsByIndexFieldPath ) ; } }
TODO: making the assumption that getConverter(i) is only called once, is that valid?
TODO : making the assumption that getConverter ( i ) is only called once is that valid?