/*
 * Copyright 2013 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.core.client.impl;

import com.google.gwt.core.client.RunAsyncCallback;

/**
 * An synchronous {@link RunAsyncCallback#onSuccess()} executor that immediately calls onSuccess.
 */
class SynchronousOnSuccessExecutor extends OnSuccessExecutor {

  /**
   * Executes onSuccess synchronously.
   */
  void execute(final AsyncFragmentLoader fragmentLoader, final RunAsyncCallback callback) {
    fragmentLoader.executeOnSuccess0(callback);
  }
}
