/** * Creates the loader stored as {@link #BROWSER_LOADER}. * * @returns {@code null} if not in GWT client code, where * {@link GWT#create(Class)} cannot be used, or a fragment loader for * the user's application otherwise. */ private static AsyncFragmentLoader makeBrowserLoader(int numFragments, int initialLoad[]) { if (GWT.isClient()) { return new AsyncFragmentLoader(numFragments, initialLoad, (LoadingStrategy) GWT.create(LoadingStrategy.class), (Logger) GWT.create(Logger.class), (OnSuccessExecutor) GWT.create(OnSuccessExecutor.class)); } else { return null; } }
initializeRemainingInitialFragments(); clearRequestsAlreadyLoaded(); if (isEmpty(pendingDownloadErrorHandlers) && !anyPrefetchesRequested()) { startLoadingFragment(remainingInitialFragments.peek()); return; assert (haveInitialFragmentsLoaded()); startLoadingFragment(requestedExclusives.remove()); return; if (anyPrefetchesRequested()) { startLoadingFragment(prefetchQueue.remove()); return;
private void logFragmentLoaded(int fragment) { String logGroup = downloadGroup(fragment); logEventProgress(logGroup, LwmLabels.END, fragment, -1); }
private void onLoadImpl(int fragment) { fragmentHasLoaded(fragment); Object[] callbacks = allCallbacks[fragment]; if (callbacks != null) { logEventProgress("runCallbacks" + fragment, "begin"); allCallbacks[fragment] = null; for (Object callback : callbacks) { try { ((RunAsyncCallback) callback).onSuccess(); } catch (Throwable t) { GWT.reportUncaughtException(t); } } logEventProgress("runCallbacks" + fragment, "end"); } }
private void runAsyncImpl(final int fragment, RunAsyncCallback callback) { if (isLoaded[fragment]) { assert allCallbacks[fragment] == null; this.onSuccessExecutor.execute(this, callback); return; } Object[] callbacks = allCallbacks[fragment]; if (callbacks == null) { callbacks = allCallbacks[fragment] = new RunAsyncCallback[0]; } // Take advantage of no range checking in web mode. assert GWT.isScript(); callbacks[callbacks.length] = callback; if (!isLoading(fragment)) { inject(fragment, new AsyncFragmentLoader.LoadTerminatedHandler() { @Override public void loadTerminated(Throwable reason) { Object[] callbacks = allCallbacks[fragment]; if (callbacks != null) { allCallbacks[fragment] = null; for (Object callback : callbacks) { ((RunAsyncCallback) callback).onFailure(reason); } } } }); } }
@Override public void execute() { fragmentLoader.executeOnSuccess0(callback); } });
/** * Ask whether this code has already been loaded. */ public boolean isLoaded() { if (!GWT.isScript()) { return true; } return AsyncFragmentLoader.BROWSER_LOADER.isAlreadyLoaded(splitPoint); } }
private void onLoadImpl(int fragment) { fragmentHasLoaded(fragment); Object[] callbacks = allCallbacks[fragment]; if (callbacks != null) { logEventProgress("runCallbacks" + fragment, "begin"); allCallbacks[fragment] = null; for (Object callback : callbacks) { try { ((RunAsyncCallback) callback).onSuccess(); } catch (Throwable t) { GWT.reportUncaughtException(t); } } logEventProgress("runCallbacks" + fragment, "end"); } }
private void runAsyncImpl(final int fragment, RunAsyncCallback callback) { if (isLoaded[fragment]) { assert allCallbacks[fragment] == null; this.onSuccessExecutor.execute(this, callback); return; } Object[] callbacks = allCallbacks[fragment]; if (callbacks == null) { callbacks = allCallbacks[fragment] = new RunAsyncCallback[0]; } // Take advantage of no range checking in web mode. assert GWT.isScript(); callbacks[callbacks.length] = callback; if (!isLoading(fragment)) { inject(fragment, new AsyncFragmentLoader.LoadTerminatedHandler() { @Override public void loadTerminated(Throwable reason) { Object[] callbacks = allCallbacks[fragment]; if (callbacks != null) { allCallbacks[fragment] = null; for (Object callback : callbacks) { ((RunAsyncCallback) callback).onFailure(reason); } } } }); } }
/** * Executes onSuccess synchronously. */ void execute(final AsyncFragmentLoader fragmentLoader, final RunAsyncCallback callback) { fragmentLoader.executeOnSuccess0(callback); } }
/** * Ask whether this code has already been loaded. */ public boolean isLoaded() { if (!GWT.isScript()) { return true; } return AsyncFragmentLoader.BROWSER_LOADER.isAlreadyLoaded(splitPoint); } }
initializeRemainingInitialFragments(); clearRequestsAlreadyLoaded(); if (isEmpty(pendingDownloadErrorHandlers) && !anyPrefetchesRequested()) { startLoadingFragment(remainingInitialFragments.peek()); return; assert (haveInitialFragmentsLoaded()); startLoadingFragment(requestedExclusives.remove()); return; if (anyPrefetchesRequested()) { startLoadingFragment(prefetchQueue.remove()); return;
private void logDownloadStart(int fragment) { logEventProgress(downloadGroup(fragment), LwmLabels.BEGIN, fragment, -1); }
private void onLoadImpl(int fragment) { fragmentHasLoaded(fragment); Object[] callbacks = allCallbacks[fragment]; if (callbacks != null) { logEventProgress("runCallbacks" + fragment, "begin"); allCallbacks[fragment] = null; for (Object callback : callbacks) { try { ((RunAsyncCallback) callback).onSuccess(); } catch (Throwable t) { GWT.reportUncaughtException(t); } } logEventProgress("runCallbacks" + fragment, "end"); } }
private void runAsyncImpl(final int fragment, RunAsyncCallback callback) { if (isLoaded[fragment]) { assert allCallbacks[fragment] == null; this.onSuccessExecutor.execute(this, callback); return; } Object[] callbacks = allCallbacks[fragment]; if (callbacks == null) { callbacks = allCallbacks[fragment] = new RunAsyncCallback[0]; } // Take advantage of no range checking in web mode. assert GWT.isScript(); callbacks[callbacks.length] = callback; if (!isLoading(fragment)) { inject(fragment, new AsyncFragmentLoader.LoadTerminatedHandler() { @Override public void loadTerminated(Throwable reason) { Object[] callbacks = allCallbacks[fragment]; if (callbacks != null) { allCallbacks[fragment] = null; for (Object callback : callbacks) { ((RunAsyncCallback) callback).onFailure(reason); } } } }); } }
@Override public void execute() { fragmentLoader.executeOnSuccess0(callback); } });
/** * Ask whether this code has already been loaded. */ public boolean isLoaded() { if (!GWT.isScript()) { return true; } return AsyncFragmentLoader.BROWSER_LOADER.isAlreadyLoaded(splitPoint); } }
/** * Creates the loader stored as {@link #BROWSER_LOADER}. * * @returns {@code null} if not in GWT client code, where * {@link GWT#create(Class)} cannot be used, or a fragment loader for * the user's application otherwise. */ private static AsyncFragmentLoader makeBrowserLoader(int numFragments, int initialLoad[]) { if (GWT.isClient()) { return new AsyncFragmentLoader(numFragments, initialLoad, (LoadingStrategy) GWT.create(LoadingStrategy.class), (Logger) GWT.create(Logger.class), (OnSuccessExecutor) GWT.create(OnSuccessExecutor.class)); } else { return null; } }
initializeRemainingInitialFragments(); clearRequestsAlreadyLoaded(); if (isEmpty(pendingDownloadErrorHandlers) && !anyPrefetchesRequested()) { startLoadingFragment(remainingInitialFragments.peek()); return; assert (haveInitialFragmentsLoaded()); startLoadingFragment(requestedExclusives.remove()); return; if (anyPrefetchesRequested()) { startLoadingFragment(prefetchQueue.remove()); return;
private void logFragmentLoaded(int fragment) { String logGroup = downloadGroup(fragment); logEventProgress(logGroup, LwmLabels.END, fragment, -1); }