/**
 * @license
 * Copyright (C) 2019 The Android Open Source Project
 *
 * 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.
 */

/**
 * For the purposes of template type checking, externs should be added for
 * anything set on the window object. Note that sub-properties of these
 * declared properties are considered something separate.
 *
 * This file is only for template type checking, not used in Gerrit code.
 */

/* eslint-disable no-var */
/* eslint-disable no-unused-vars */
/** @externs */
// @unused

var Gerrit;
var GrAnnotation;
var GrAttributeHelper;
var GrChangeActionsInterface;
var GrChangeReplyInterface;
var GrDiffBuilder;
var GrDiffBuilderImage;
var GrDiffBuilderSideBySide;
var GrDiffBuilderUnified;
var GrDiffGroup;
var GrDiffLine;
var GrDomHooks;
var GrEditConstants;
var GrEtagDecorator;
var GrFileListConstants;
var GrGapiAuth;
var GrGerritAuth;
var GrLinkTextParser;
var GrPluginEndpoints;
var GrPopupInterface;
var GrRangeNormalizer;
var GrReporting;
var GrReviewerUpdatesParser;
var GrCountStringFormatter;
var GrThemeApi;
var SiteBasedCache;
var FetchPromisesCache;
var GrRestApiHelper;
var GrDisplayNameUtils;
var GrReviewerSuggestionsProvider;
var moment;
var page;
var util;