private void map(ClassMap classMap, Object srcObj, Object destObj, boolean bypassSuperMappings, List<String> mappedParentFields, String mapId) {
        srcObj = MappingUtils.deProxy(srcObj, beanContainer);

        // 1596766 - Recursive object mapping issue. Prevent recursive mapping
        // infinite loop. Keep a record of mapped fields
        // by storing the id of the sourceObj and the destObj to be mapped. This can
        // be referred to later to avoid recursive mapping loops
        mappedFields.put(srcObj, destObj, mapId);

        // If class map hasn't already been determined, find the appropriate one for
        // the src/dest object combination
        if (classMap == null) {
            classMap = getClassMap(srcObj.getClass(), destObj.getClass(), mapId);
        }

        Class<?> srcClass = srcObj.getClass();
        Class<?> destClass = destObj.getClass();

        // Check to see if custom converter has been specified for this mapping
        // combination. If so, just use it.
        Class<?> converterClass = MappingUtils.findCustomConverter(converterByDestTypeCache, classMap.getCustomConverters(), srcClass,
                                                                   destClass);
        if (converterClass != null) {
            destObj = mapUsingCustomConverter(converterClass, srcClass, srcObj, destClass, destObj, null, true);
            return;
        }

        // Now check for super class mappings.  Process super class mappings first.
        if (!bypassSuperMappings) {
            Collection<ClassMap> superMappings = new ArrayList<>();

            Collection<ClassMap> superClasses = checkForSuperTypeMapping(srcClass, destClass);
            //List<ClassMap> interfaceMappings = classMappings.findInterfaceMappings(srcClass, destClass);

            superMappings.addAll(superClasses);
            //superMappings.addAll(interfaceMappings);
            if (!superMappings.isEmpty()) {
                processSuperTypeMapping(superMappings, srcObj, destObj, mappedParentFields, mapId);
            }
        }

        // Perform mappings for each field. Iterate through Fields Maps for this class mapping
        for (FieldMap fieldMapping : classMap.getFieldMaps()) {
            //Bypass field if it has already been mapped as part of super class mappings.
            String key = MappingUtils.getMappedParentFieldKey(destObj, fieldMapping);
            if (mappedParentFields != null && mappedParentFields.contains(key)) {
                continue;
            }
            mapField(fieldMapping, srcObj, destObj);
        }
    }
This function used to map into created instance of destination class

@param classMap            object with mapping configuration
@param srcObj              source object
@param destObj             destination object
@param bypassSuperMappings //TODO
@param mapId               mapping identifier
core/src/main/java/com/github/dozermapper/core/MappingProcessor.java