blob: e15f91dc61de0d85f886913521438f8bfe1b6a34 [file] [log] [blame]
/*
* 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() {
}
}