<!--
  ~ 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>
  <depends>com.intellij.modules.java</depends>

  <actions>
    <action class="com.google.idea.blaze.java.libraries.ExcludeLibraryAction"
      id="Blaze.ExcludeLibraryAction"
      text="Exclude Library and Resync">
    </action>
    <action class="com.google.idea.blaze.java.libraries.AttachSourceJarAction"
      id="Blaze.AttachSourceJarAction"
      text="Attach Source Jar">
    </action>
    <action class="com.google.idea.blaze.java.libraries.AddLibraryTargetDirectoryToProjectViewAction"
      id="Blaze.AddLibraryTargetDirectoryToProjectView"
      text="Add Library Target Directory to Project View">
    </action>
    <action class="com.google.idea.blaze.java.libraries.DetachAllSourceJarsAction"
      id="Blaze.DetachAllSourceJars"
      text="Detach All Blaze Source Jars">
    </action>

    <group id="Blaze.Java.ProjectViewPopupMenu">
      <add-to-group group-id="Blaze.PerFileContextMenu"/>
      <reference id="Blaze.ExcludeLibraryAction"/>
      <reference id="Blaze.AttachSourceJarAction"/>
      <reference id="Blaze.AddLibraryTargetDirectoryToProjectView"/>
    </group>

    <group id="Blaze.JavaMenuGroup.Outer">
      <add-to-group group-id="Blaze.MainMenuActionGroup" relative-to-action="Blaze.MenuFooter" anchor="after"/>
      <group id="Blaze.JavaMenuGroup" text="Java">
        <reference id="Blaze.DetachAllSourceJars"/>
      </group>
    </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"/>
    <BlazeTestEventsHandler implementation="com.google.idea.blaze.java.run.BlazeJavaTestEventsHandler"/>
    <AttributeSpecificStringLiteralReferenceProvider implementation="com.google.idea.blaze.java.lang.build.references.JavaClassQualifiedNameReference"/>
    <JavaLikeLanguage implementation="com.google.idea.blaze.java.sync.source.JavaLikeLanguage$Java"/>
    <TestTargetHeuristic implementation="com.google.idea.blaze.java.run.JUnitTestHeuristic" order="before TestSizeHeuristic"/>
  </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"/>
    <runConfigurationProducer
        implementation="com.google.idea.blaze.java.run.producers.BlazeJavaAbstractTestCaseConfigurationProducer"
        order="first"/>
    <runConfigurationProducer
        implementation="com.google.idea.blaze.java.run.producers.MultipleJavaClassesTestConfigurationProducer"
        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"/>
    <!--duplicated here in case the Kotlin plugin is present, as it also tries to replace javaProcessor-->
    <refactoring.safeDeleteProcessor id="build_file_safe_delete_copy" order="before kotlinProcessor"
                                     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.AddLibraryTargetDirectoryToProjectViewAttachSourcesProvider"/>
    <attachSourcesProvider implementation="com.google.idea.blaze.java.libraries.BlazeAttachSourceProvider"/>
    <applicationService serviceImplementation="com.google.idea.blaze.java.settings.BlazeJavaUserSettings"/>
    <psi.referenceContributor language="BUILD" implementation="com.google.idea.blaze.java.lang.build.references.JavaClassReferenceContributor"/>
  </extensions>

  <project-components>
    <component>
      <implementation-class>com.google.idea.blaze.java.run.producers.NonBlazeProducerSuppressor</implementation-class>
    </component>
  </project-components>

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