code: public InfoOperation getInfoOperation(final Field destination, final Field source) {
  		
  		Class<?> dClass = destination.getType();
  		Class<?> sClass = source.getType();
  		Class<?> dItem = null;
  		Class<?> sItem = null;
  		
  		InfoOperation operation = new InfoOperation().setConversionType(UNDEFINED);
  		
  		// Array[] = Collection<>
  		if(dClass.isArray() && collectionIsAssignableFrom(sClass)){
  			dItem = dClass.getComponentType();
  			sItem = getCollectionItemClass(source);
  			operation.setInstructionType(ARRAY_LIST);
  
              if(areMappedObjects(dItem,sItem,xml))
  				return operation.setInstructionType(ARRAY_LIST_WITH_MAPPED_ITEMS)
  						        .setConfigChosen(configChosen(dItem,sItem,xml));
  		}
  		
  		// Collection<> = Array[]
  		if(collectionIsAssignableFrom(dClass) && sClass.isArray()){
  			dItem = getCollectionItemClass(destination);
  			sItem = sClass.getComponentType();
  			operation.setInstructionType(LIST_ARRAY);
  			
              if(areMappedObjects(dItem,sItem,xml))
  				return operation.setInstructionType(LIST_ARRAY_WITH_MAPPED_ITEMS)
  						        .setConfigChosen(configChosen(dItem,sItem,xml));
  		}
  
  		if(isAssignableFrom(dItem,sItem))
  			return operation.setConversionType(ABSENT);
  
  		// if components are primitive or wrapper types, apply implicit conversion
  		if(areBasic(dItem,sItem))
  			return operation.setConversionType(getConversionType(dItem, sItem));
  				
  		return operation;
  	}
docs: This method calculates and returns information relating the operation to be performed.
  @param destination destination field to be analyzed
  @param source source field to be analyzed
  @return all information relating the operation to be performed