/*
 * Copyright (C) 2013 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.
 */
package icons;

import com.intellij.openapi.util.IconLoader;

import javax.swing.*;

/**
 * Note: This file should be auto generated once build/scripts/icons.gant is part of CE.
 * http://youtrack.jetbrains.com/issue/IDEA-103558
 */
public class GoogleCloudToolsIcons {
  private static Icon load(String path) {
    return IconLoader.getIcon(path, GoogleCloudToolsIcons.class);
  }

  public static final Icon AppEngine = load("/icons/appEngine.png"); // 16x16

  public static final Icon Cloud = load("/icons/cloudPlatform.png"); // 16x16
}
