/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.dev.shell; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.dev.javac.JsniMethod; import java.util.List; /** * This interface contains all of the methods that must be exposed to a hosted * mode application via its JavaScriptHost class. JavaScriptHost contains a * method called setHost() that must be called when a new application is * initialized. * * This interface works with JavaScriptHost to keep running applications at * arms-length via an isolated class loader (this requires that there be no * explicit dependencies between the shell and any client-side classes). */ public interface ShellJavaScriptHost { /** * Define one or more JSNI methods. * * @param logger * @param compiledClass * @param jsniMethods * @param dispatchIdOracle */ void createNativeMethods(TreeLogger logger, List<JsniMethod> jsniMethods, DispatchIdOracle dispatchIdOracle); /** * Call this when a JavaScript exception is caught. */ void exceptionCaught(Object exception); /** * Invoke a native JavaScript function that returns a boolean value. */ boolean invokeNativeBoolean(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns a byte value. */ byte invokeNativeByte(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns a character value. */ char invokeNativeChar(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns a double value. */ double invokeNativeDouble(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns a float value. */ float invokeNativeFloat(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns an integer value. */ int invokeNativeInt(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns a long value. */ long invokeNativeLong(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns an object value. */ Object invokeNativeObject(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns a short value. */ short invokeNativeShort(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Invoke a native JavaScript function that returns no value. */ void invokeNativeVoid(String name, Object jthis, Class<?>[] types, Object[] args) throws Throwable; /** * Logs to the dev shell logger. */ void log(String message, Throwable e); /** * Resolves a deferred binding request and create the requested object. */ <T> T rebindAndCreate(String requestedTypeName) throws UnableToCompleteException; }