<!--
  ~ 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>
  <vendor>Google</vendor>

  <depends>com.intellij.modules.clion</depends>

  <extensions defaultExtensionNs="com.intellij">
    <applicationService serviceInterface="com.google.idea.blaze.base.plugin.BlazePluginId"
                        serviceImplementation="com.google.idea.blaze.plugin.ClwbPluginId"/>
    <projectService serviceInterface="com.google.idea.blaze.base.ui.BlazeProblemsView"
                    serviceImplementation="com.google.idea.blaze.clwb.problemsview.BlazeProblemsViewConsole"/>
    <toolWindow id="Blaze Problems"
                anchor="bottom"
                secondary="false"
                conditionClass="com.google.idea.blaze.base.settings.IsBlazeProjectCondition"
                icon="BlazeIcons.BlazeToolWindow"
                factoryClass="com.google.idea.blaze.clwb.problemsview.BlazeProblemsViewConsoleToolWindowFactory"/>
    <projectService serviceInterface="com.jetbrains.cidr.lang.workspace.OCWorkspaceManager"
                    serviceImplementation="com.google.idea.blaze.clwb.cworkspace.BlazeCWorkspaceManager"
                    overrides="true"/>

    <!-- run configurations -->
    <programRunner implementation="com.google.idea.blaze.clwb.run.BlazeCppRunner"/>

    <runConfigurationProducer
        implementation="com.google.idea.blaze.clwb.run.producers.BlazeCidrTestConfigurationProducer"
        order="first"/>
    <!-- end run configurations -->
  </extensions>

  <extensions defaultExtensionNs="cidr.debugger">
    <languageSupportFactory implementation="com.google.idea.blaze.clwb.run.BlazeCidrDebuggerSupportFactory"/>
  </extensions>

  <extensions defaultExtensionNs="com.google.idea.blaze">
    <SyncPlugin implementation="com.google.idea.blaze.clwb.sync.BlazeCLionSyncPlugin"/>
    <BlazeCommandRunConfigurationHandlerProvider implementation="com.google.idea.blaze.clwb.run.BlazeCidrRunConfigurationHandlerProvider" order="first"/>
    <RunConfigurationFactory implementation="com.google.idea.blaze.clwb.run.BlazeCidrDebuggableConfigurationFactory"/>
    <BlazeTestEventsHandler implementation="com.google.idea.blaze.clwb.run.test.BlazeCidrTestEventsHandler"/>
  </extensions>

  <actions>
    <action id="Blaze.ImportProject2" class="com.google.idea.blaze.clwb.wizard2.BlazeImportProjectAction" icon="BlazeIcons.Blaze">
      <add-to-group group-id="WelcomeScreen.QuickStart"/>
      <add-to-group group-id="FileOpenGroup" anchor="first"/>
    </action>
  </actions>

  <application-components>
    <component>
      <implementation-class>com.google.idea.blaze.plugin.ClwbSpecificInitializer</implementation-class>
    </component>
  </application-components>

  <project-components>
    <component>
      <implementation-class>com.google.idea.blaze.plugin.ClwbProjectSpecificInitializer</implementation-class>
    </component>
    <component>
      <implementation-class>com.google.idea.blaze.clwb.run.producers.NonBlazeProducerSuppressor</implementation-class>
    </component>
    <component>
      <interface-class>com.jetbrains.cidr.cpp.cmake.workspace.CMakeWorkspace</interface-class>
      <implementation-class>com.google.idea.blaze.plugin.CMakeWorkspaceOverride</implementation-class>
      <option name="overrides" value="true"/>
    </component>
  </project-components>

</idea-plugin>
