<!--
  ~ Copyright 2016 The Bazel Authors. All rights reserved.
  ~
  ~ 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.
  -->
<idea-plugin>
  <depends>JUnit</depends>

  <actions>
    <action class="com.google.idea.blaze.java.libraries.ExcludeLibraryAction"
            id="Blaze.ExcludeLibraryAction"
            icon="BlazeIcons.Blaze"
            text="Exclude Library and Resync">
      <add-to-group group-id="Blaze.ProjectViewPopupMenu"/>
    </action>
    <action class="com.google.idea.blaze.java.libraries.AttachSourceJarAction"
            id="Blaze.AttachSourceJarAction"
            icon="BlazeIcons.Blaze"
            text="Attach Source Jar">
      <add-to-group group-id="Blaze.ProjectViewPopupMenu"/>
    </action>
    <action class="com.google.idea.blaze.java.libraries.AddLibraryRuleDirectoryToProjectViewAction"
            id="Blaze.AddLibraryRuleDirectoryToProjectView"
            icon="BlazeIcons.Blaze"
            text="Add Library Rule Directory To Project View">
      <add-to-group group-id="Blaze.ProjectViewPopupMenu"/>
    </action>

    <group>
      <action class="com.google.idea.blaze.java.libraries.DetachAllSourceJarsAction"
        id="Blaze.DetachAllSourceJars"
        text="Detach All Blaze Source Jars">
      </action>
      <separator/>
      <add-to-group group-id="Blaze.MainMenuActionGroup" relative-to-action="Blaze.EditProjectView" anchor="before"/>
    </group>

    <!-- IntelliJ specific actions -->

    <action id="Blaze.ImportProject2" class="com.google.idea.blaze.java.wizard2.BlazeImportProjectAction" icon="BlazeIcons.Blaze">
      <add-to-group group-id="WelcomeScreen.QuickStart" />
      <add-to-group group-id="OpenProjectGroup" relative-to-action="ImportProject" anchor="after"/>
    </action>

    <!-- End IntelliJ specific actions -->

  </actions>

  <extensions defaultExtensionNs="com.google.idea.blaze">
    <SyncPlugin implementation="com.google.idea.blaze.java.sync.BlazeJavaSyncPlugin"/>
    <PsiFileProvider implementation="com.google.idea.blaze.java.psi.JavaPsiFileProvider" />
    <BlazeCommandRunConfigurationHandlerProvider implementation="com.google.idea.blaze.java.run.BlazeJavaRunConfigurationHandlerProvider"/>
    <RunConfigurationFactory implementation="com.google.idea.blaze.java.run.BlazeJavaRunConfigurationFactory"/>
    <RunConfigurationFactory implementation="com.google.idea.blaze.java.run.BlazeJavaTestRunConfigurationFactory"/>
    <BlazeUserSettingsContributor implementation="com.google.idea.blaze.java.settings.BlazeJavaUserSettingsContributor$BlazeJavaUserSettingsProvider"/>
    <FileCache implementation="com.google.idea.blaze.java.libraries.JarCache$FileCacheAdapter"/>
    <PrefetchFileSource implementation="com.google.idea.blaze.java.sync.JavaPrefetchFileSource"/>
    <SyncListener implementation="com.google.idea.blaze.java.syncstatus.SyncStatusHelper$UpdateSyncStatusMap"/>
  </extensions>

  <extensions defaultExtensionNs="com.intellij">
    <runConfigurationProducer
        implementation="com.google.idea.blaze.java.run.producers.BlazeJavaMainClassRunConfigurationProducer"
        order="first"/>
    <runConfigurationProducer
        implementation="com.google.idea.blaze.java.run.producers.BlazeJavaTestClassConfigurationProducer"
        order="first"/>
    <runConfigurationProducer
        implementation="com.google.idea.blaze.java.run.producers.BlazeJavaTestMethodConfigurationProducer"
        order="first"/>
    <projectViewNodeDecorator implementation="com.google.idea.blaze.java.syncstatus.BlazeJavaSyncStatusClassNodeDecorator"/>
    <editorTabColorProvider implementation="com.google.idea.blaze.java.syncstatus.BlazeJavaSyncStatusEditorTabColorProvider"/>
    <editorTabTitleProvider implementation="com.google.idea.blaze.java.syncstatus.BlazeJavaSyncStatusEditorTabTitleProvider"/>
    <applicationService serviceInterface="com.google.idea.blaze.java.sync.source.JavaSourcePackageReader"
                        serviceImplementation="com.google.idea.blaze.java.sync.source.JavaSourcePackageReader"/>
    <applicationService serviceInterface="com.google.idea.blaze.java.sync.source.PackageManifestReader"
                        serviceImplementation="com.google.idea.blaze.java.sync.source.PackageManifestReader"/>
    <programRunner implementation="com.google.idea.blaze.java.run.BlazeJavaDebuggerRunner"/>
    <projectService serviceInterface="com.google.idea.blaze.base.ui.BlazeProblemsView"
                    serviceImplementation="com.google.idea.blaze.java.ui.BlazeIntelliJProblemsView"/>
    <projectService serviceImplementation="com.google.idea.blaze.java.libraries.SourceJarManager"/>
    <refactoring.safeDeleteProcessor id="build_file_safe_delete" order="before javaProcessor"
                                     implementation="com.google.idea.blaze.java.lang.build.BuildFileSafeDeleteProcessor"/>
    <projectService serviceImplementation="com.google.idea.blaze.java.libraries.JarCache"/>

    <attachSourcesProvider implementation="com.google.idea.blaze.java.libraries.AddLibraryRuleDirectoryToProjectViewAttachSourcesProvider"/>
    <attachSourcesProvider implementation="com.google.idea.blaze.java.libraries.BlazeAttachSourceProvider"/>
    <applicationService serviceImplementation="com.google.idea.blaze.java.settings.BlazeJavaUserSettings"/>
    <projectService serviceImplementation="com.google.idea.blaze.java.syncstatus.SyncStatusHelper"/>
  </extensions>

  <extensionPoints>
    <extensionPoint qualifiedName="com.google.idea.blaze.java.JavaSyncAugmenter"
                    interface="com.google.idea.blaze.java.sync.BlazeJavaSyncAugmenter"/>
  </extensionPoints>
</idea-plugin>
