/* * Copyright 2014 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.lang; import com.google.gwt.core.client.JavaScriptObject; /** * This is an intrinsic class that contains helper methods for module startup. * <p> * This class should contain only static methods or fields. */ public final class ModuleUtils { /** * Module startup glue. * <p> * This function is responsible for calling the module entry points. * <p> * {@link ModuleUtils#gwtOnLoad} will have a global alias gwtOnLoad called * to startup the application. */ public static native void gwtOnLoad(JavaScriptObject errFn, JavaScriptObject modName, JavaScriptObject modBase, JavaScriptObject softPermutationId) /*-{ @ModuleUtils::ensureModuleInit()(); var initFnList = @ModuleUtils::initFnList; $moduleName = modName; $moduleBase = modBase; @CollapsedPropertyHolder::permutationId = softPermutationId; function initializeModules() { for (var i = 0; i < initFnList.length; i++) { initFnList[i](); } } if (errFn) { try { $entry(initializeModules)(); } catch(e) { errFn(modName, e); } } else { $entry(initializeModules)(); } }-*/; /** * Adds entry points to call during gwtOnLoad, uses JS arguments. */ public static native void addInitFunctions() /*-{ @ModuleUtils::ensureModuleInit()(); var initFnList = @ModuleUtils::initFnList; for (var i = 0; i < arguments.length; i++) { initFnList.push(arguments[i]); } }-*/; public static native JavaScriptObject registerEntry() /*-{ return @com.google.gwt.core.client.impl.Impl::registerEntry()(); }-*/; public static native void setGwtProperty(String propertyName, JavaScriptObject propertyValue) /*-{ // Access $gwt as a global object property so that it does not get optimized out when // using the closure backend. // The linker should create the $gwt variable. If not, do nothing. if (typeof(window) === "object" && typeof(window["$gwt"]) === "object") { window["$gwt"][propertyName] = propertyValue; } }-*/; private static native void ensureModuleInit() /*-{ if (@ModuleUtils::initFnList == null ) { @ModuleUtils::initFnList = []; } }-*/; private static JavaScriptObject initFnList; private ModuleUtils() { } }