void methodMissing()

in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy [652:698]


    void methodMissing(String name, Object args) {
        if(methodMissingIncludes != null && !methodMissingIncludes.contains(name)) {
            return
        }
        else if(methodMissingExcludes.contains(name)) {
            return
        }

        boolean hasArgs = args.asBoolean()
        if ('user-type' == name && hasArgs && (args[0] instanceof Map)) {
            hibernateCustomUserType(args[0])
        }
        else if('importFrom' == name && hasArgs && (args[0] instanceof Class)) {
            // ignore, handled by constraints
            List<Closure> constraintsToImports = ClassPropertyFetcher.getStaticPropertyValuesFromInheritanceHierarchy((Class)args[0], GormProperties.CONSTRAINTS, Closure)
            if(constraintsToImports) {

                List originalIncludes = this.methodMissingIncludes
                List originalExludes = this.methodMissingExcludes
                try {
                    if(args[-1] instanceof Map) {
                        Map argMap = (Map) args[-1]
                        def includes = argMap.get(INCLUDE_PARAM)
                        def excludes = argMap.get(EXCLUDE_PARAM)
                        if(includes instanceof List) {
                            this.methodMissingIncludes = includes
                        }
                        if(excludes instanceof List) {
                            this.methodMissingExcludes = excludes
                        }
                    }

                    for(Closure callable in constraintsToImports) {
                        callable.setDelegate(this)
                        callable.setResolveStrategy(Closure.DELEGATE_ONLY)
                        callable.call()
                    }
                } finally {
                    this.methodMissingIncludes = originalIncludes
                    this.methodMissingExcludes = originalExludes
                }
            }
        }
        else if (args && ((args[0] instanceof Map) || (args[0] instanceof Closure))) {
            handleMethodMissing(name, args)
        }
    }