public boolean apply(ClassMap classMap, Configuration configuration) {
            Class<?> srcClass = classMap.getSrcClassToMap();
            Class<?> destClass = classMap.getDestClassToMap();
            PropertyDescriptor[] properties;
            boolean destinationIsMap = false;

            if (MappingUtils.isSupportedMap(srcClass) || classMap.getSrcClassMapGetMethod() != null) {
                properties = ReflectionUtils.getPropertyDescriptors(destClass);
            } else {
                properties = ReflectionUtils.getPropertyDescriptors(srcClass);
                destinationIsMap = true;
            }

            for (PropertyDescriptor property : properties) {
                String fieldName = property.getName();

                if (GeneratorUtils.shouldIgnoreField(fieldName, srcClass, destClass, beanContainer)) {
                    continue;
                }

                // already mapped
                if (destinationIsMap && classMap.getFieldMapUsingSrc(fieldName) != null) {
                    continue;
                }

                // already mapped
                if (!destinationIsMap && classMap.getFieldMapUsingDest(fieldName, true) != null) {
                    continue;
                }

                FieldMap fieldMap = new MapFieldMap(classMap, beanContainer, destBeanCreator, propertyDescriptorFactory);
                DozerField srcField = new DozerField(MappingUtils.isSupportedMap(srcClass) ? DozerConstants.SELF_KEYWORD : fieldName, null);
                srcField.setKey(fieldName);

                if (StringUtils.isNotEmpty(classMap.getSrcClassMapGetMethod())
                    || StringUtils.isNotEmpty(classMap.getSrcClassMapSetMethod())) {
                    srcField.setMapGetMethod(classMap.getSrcClassMapGetMethod());
                    srcField.setMapSetMethod(classMap.getSrcClassMapSetMethod());
                    srcField.setName(DozerConstants.SELF_KEYWORD);
                }

                DozerField destField = new DozerField(MappingUtils.isSupportedMap(destClass) ? DozerConstants.SELF_KEYWORD : fieldName,
                                                      null);
                srcField.setKey(fieldName);

                if (StringUtils.isNotEmpty(classMap.getDestClassMapGetMethod())
                    || StringUtils.isNotEmpty(classMap.getDestClassMapSetMethod())) {
                    destField.setMapGetMethod(classMap.getDestClassMapGetMethod());
                    destField.setMapSetMethod(classMap.getDestClassMapSetMethod());
                    destField.setName(DozerConstants.SELF_KEYWORD);
                }

                fieldMap.setSrcField(srcField);
                fieldMap.setDestField(destField);

                classMap.addFieldMapping(fieldMap);
            }
            return true;
        }
true if we should stop after applied

@param classMap      information about the classes being mapped
@param configuration configuration of the mapping
@return true if we should stop after applied
core/src/main/java/com/github/dozermapper/core/classmap/ClassMapBuilder.java