protected static LeoObject getNativeMember(Class<?> ownerClass, Object owner, Map<LeoObject, LeoObject> nativeApi, LeoObject key) {
        LeoObject func = nativeApi.get(key);
        if (!LeoObject.isTrue(func)) {
            synchronized (nativeApi) {
                /* unsure that we don't override
                 * any previous thread's attempt at creating 
                 * our native function
                 */
                func = nativeApi.get(key);
                if (!LeoObject.isTrue(func)) {
                    
                    String keyStr = key.toString();
                    
                    List<Method> methods = ClassUtil.getMethodsByName(ownerClass, keyStr);
                    removeInterfaceMethods(methods);
        
                    if (methods.isEmpty()) {
                        methods = ClassUtil.getMethodsByAnnotationAlias(ownerClass, keyStr);
                        
                        /* If there still isn't any methods by this name,
                         * check the classes field members
                         */
                        if(methods.isEmpty()) {      
                            Field field = ClassUtil.getInheritedField(ownerClass, keyStr);
                            if(field != null) {
                                try {
                                    Object value = field.get(owner);
                                    func = LeoObject.valueOf(value);
                                    /* Do not cache this value, as it 
                                     * may change by calling methods
                                     * on this native object, so we 
                                     * must grab the latest value
                                     * every time
                                     */
                                    //nativeApi.put(key, func);
                                    
                                    return (func);
                                }
                                catch(Exception e) {
                                    throwAttributeAccessError(ownerClass, key);
                                }
                            }
                            
                            throwAttributeError(ownerClass, key);
                        }
                    }
        
                    func = new LeoNativeFunction(methods, owner);
                    nativeApi.put(key, func);
                }
            }
        }
        
        return func;
    }