private static MappingOptions reconcileOptions(final Class<?> srcClass, final Class<?> dstClass) {
            final MappingOptions srcOpts = srcClass.getAnnotation(MappingOptions.class);
            final MappingOptions dstOpts = dstClass.getAnnotation(MappingOptions.class);
            if (srcOpts == null) {
                return dstOpts;
            }
            if (dstOpts == null) {
                return srcOpts;
            }

            return new MappingOptions() {

                private OptionValue reconcile(String fieldName, OptionValue srcOption, OptionValue dstOption) {
                    if (srcOption == dstOption) {
                        return srcOption;
                    }
                    if (srcOption == OptionValue.INHERITED) {
                        return dstOption;
                    }
                    if (dstOption == OptionValue.INHERITED) {
                        return srcOption;
                    }
                    log.info("Conflicting class annotations for " + fieldName + " on src class " + srcClass.getCanonicalName() + " and dst class " + dstClass.getCanonicalName());
                    return dstOption;
                }

                private String reconcile(String fieldName, String srcOption, String dstOption) {
                    if (srcOption.equals(dstOption)) {
                        return srcOption;
                    }
                    if (srcOption.isEmpty()) {
                        return dstOption;
                    }
                    if (dstOption.isEmpty()) {
                        return srcOption;
                    }
                    log.info("Conflicting class annotations for " + fieldName + " on src class " + srcClass.getCanonicalName() + " and dst class " + dstClass.getCanonicalName());
                    return dstOption;
                }

                @Override
                public OptionValue wildCard() {
                    return reconcile("wildCard", srcOpts.wildCard(), dstOpts.wildCard());
                }

                @Override
                public OptionValue wildCardCaseInsensitive() {
                    return reconcile("wildCardCaseInsensitive", srcOpts.wildCardCaseInsensitive(), dstOpts.wildCardCaseInsensitive());
                }

                @Override
                public OptionValue stopOnErrors() {
                    return reconcile("stopOnErrors", srcOpts.stopOnErrors(), dstOpts.stopOnErrors());
                }

                @Override
                public OptionValue mapNull() {
                    return reconcile("mapNull", srcOpts.mapNull(), dstOpts.mapNull());
                }

                @Override
                public OptionValue mapEmptyString() {
                    return reconcile("mapEmptyString", srcOpts.mapEmptyString(), dstOpts.mapEmptyString());
                }

                @Override
                public String dateFormat() {
                    return reconcile("dateFormat", srcOpts.dateFormat(), dstOpts.dateFormat());
                }

                @Override
                public Class<? extends Annotation> annotationType() {
                    return MappingOptions.class;
                }
            };
        }
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