class Console {
        private final Logger logger;

        public void trace(String text, Object... args) {
            logger.trace(text, args);
        }

        public void warn(String text, Object... args) {
            logger.warn(text, args);
        }

        public void log(String text, Object... args) {
            logger.debug(text, args);
        }

        public void error(String text, Object... args) {
            logger.error(text, args);
        }
    }

    @Override
    @SuppressWarnings("all")
    public final <T> T bind(Script script, Class<T> interfaceType,ExecutionContext context) {<FILL_FUNCTION_BODY>

        String returns = createFunctionMapping(interfaceType.getDeclaredMethods());
        String content = script.getContent() + "\n return " + returns + ";";

        CompiledScript compiledScript = compile(script.content(content), false);
        Object source = compiledScript.call(context);
        Set<Method> ignoreMethods = new HashSet<>();

        return (T) Proxy.newProxyInstance(
            interfaceType.getClassLoader(),
            new Class[]{interfaceType},
            (proxy, method, args) -> {
                //方法已经被忽略执行
                if (ignoreMethods.contains(method)) {
                    return convertValue(method, null);
                }
                try {
                    return this.convertValue(method,
                                             ((Invocable) engine).invokeMethod(source, method.getName(), args));
                } catch (Throwable e) {
                    if (e instanceof NoSuchMethodException) {
                        log.info("method [{}] undefined in script", method, e);
                        //脚本未定义方法
                        ignoreMethods.add(method);
                    }
                }
                return convertValue(method, null);
            });
    
<methods>public void <init>() ,public final void allows(Collection<Class<?>>) ,public final transient void allows(Class<?>[]) ,public transient void allowsPattern(java.lang.String[]) ,public void allowsPattern(Collection<java.lang.String>) ,public final void denies(Collection<Class<?>>) ,public final transient void denies(Class<?>[]) ,public transient void deniesPattern(java.lang.String[]) ,public void deniesPattern(Collection<java.lang.String>) ,public org.jetlinks.community.script.AbstractScriptFactory.Utils getUtils() ,public final boolean isDenied(Class<?>) ,public final boolean isDenied(java.lang.String) <variables>static Class<?>[] DEFAULT_ALLOWS,static Class<?>[] DEFAULT_DENIES,private final Set<java.lang.String> allows,private final Set<java.lang.String> denies,private final org.jetlinks.community.script.AbstractScriptFactory.Utils utils