<!--
  ~ 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.androidstudio</depends>
  <depends>org.jetbrains.android</depends>
  <depends>com.google.gct.test.recorder</depends>

  <extensions defaultExtensionNs="com.intellij">
    <java.elementFinder implementation="com.google.idea.blaze.android.resources.AndroidResourceClassFinder"
        order="first, before java"/>
    <java.elementFinder implementation="com.google.idea.blaze.android.resources.AndroidResourcePackageFinder"/>
    <projectService serviceImplementation="com.google.idea.blaze.android.resources.LightResourceClassService"/>
    <runConfigurationProducer
        implementation="com.google.idea.blaze.android.run.test.BlazeAndroidTestClassRunConfigurationProducer"
        order="first"/>
    <runConfigurationProducer
        implementation="com.google.idea.blaze.android.run.test.BlazeAndroidTestMethodRunConfigurationProducer"
        order="first"/>
    <programRunner implementation="com.google.idea.blaze.android.run.binary.BlazeAndroidBinaryProgramRunner" order="first"/>
    <executor implementation="com.google.idea.blaze.android.run.binary.mobileinstall.IncrementalInstallRunExecutor" order="last"/>
    <executor implementation="com.google.idea.blaze.android.run.binary.mobileinstall.IncrementalInstallDebugExecutor" order="last"/>
    <applicationService serviceInterface="com.google.idea.blaze.base.plugin.BlazePluginId"
                        serviceImplementation="com.google.idea.blaze.android.plugin.AswbPlugin"/>
    <projectService serviceImplementation="com.google.idea.blaze.android.manifest.ManifestParser"/>
    <projectService serviceImplementation="com.google.idea.blaze.android.sync.model.AndroidResourceModuleRegistry"/>
    <applicationService serviceImplementation="com.google.idea.blaze.android.settings.BlazeAndroidUserSettings"/>
    <applicationService serviceInterface="com.google.idea.blaze.android.sdk.BlazeSdkProvider"
      serviceImplementation="com.google.idea.blaze.android.sdk.BlazeSdkProviderImpl"
      testServiceImplementation="com.google.idea.blaze.android.sdk.MockBlazeSdkProvider"/>
  </extensions>

  <extensions defaultExtensionNs="org.jetbrains.android.actions">
    <newResourceCreationHandler
        implementation="com.google.idea.blaze.android.resources.actions.BlazeNewResourceCreationHandler" />
  </extensions>

  <extensionPoints>
    <extensionPoint qualifiedName="com.google.idea.blaze.BuildSystemAndroidJdkProvider" interface="com.google.idea.blaze.android.sync.BuildSystemAndroidJdkProvider"/>
  </extensionPoints>

  <extensions defaultExtensionNs="com.google.idea.blaze">
    <SyncPlugin implementation="com.google.idea.blaze.android.sync.BlazeAndroidSyncPlugin"/>
    <SyncListener implementation="com.google.idea.blaze.android.sync.BlazeAndroidSyncListener"/>
    <SyncListener implementation="com.google.idea.blaze.android.cppimpl.BlazeNdkSupportEnabler"/>
    <SyncListener implementation="com.google.idea.blaze.android.manifest.ManifestParser$ClearManifestParser"/>
    <RunConfigurationFactory implementation="com.google.idea.blaze.android.run.BlazeAndroidRunConfigurationFactory"/>
    <JavaSyncAugmenter implementation="com.google.idea.blaze.android.sync.BlazeAndroidJavaSyncAugmenter"/>
    <PrefetchFileSource implementation="com.google.idea.blaze.android.sync.AndroidPrefetchFileSource"/>
    <BlazeCommandRunConfigurationHandlerProvider implementation="com.google.idea.blaze.android.run.binary.BlazeAndroidBinaryRunConfigurationHandlerProvider"/>
    <BlazeCommandRunConfigurationHandlerProvider implementation="com.google.idea.blaze.android.run.test.BlazeAndroidTestRunConfigurationHandlerProvider"/>
    <BuildSystemAndroidJdkProvider implementation="com.google.idea.blaze.android.sync.BazelAndroidJdkProvider"/>
    <BlazeTestEventsHandler implementation="com.google.idea.blaze.android.run.test.smrunner.BlazeAndroidTestEventsHandler"/>
    <ProjectViewDefaultValueProvider implementation="com.google.idea.blaze.android.projectview.AndroidSdkPlatformSection$AndroidSdkPlatformProjectViewDefaultValueProvider"/>
  </extensions>

  <extensions defaultExtensionNs="com.android.ide">
    <sdkEventListener implementation="com.google.idea.blaze.android.sdk.AndroidSdkListener"/>
  </extensions>

  <!-- BEGIN NDK SUPPORT -->
  <extensions defaultExtensionNs="com.intellij">
    <applicationService serviceInterface="com.google.idea.blaze.android.cppapi.BlazeNativeDebuggerIdProvider"
                        serviceImplementation="com.google.idea.blaze.android.cppimpl.debug.BlazeNativeAndroidDebuggerIdProviderImpl"/>
  </extensions>

  <extensions defaultExtensionNs="cidr.debugger">
    <languageSupportFactory implementation="com.google.idea.blaze.android.cppimpl.debug.BlazeAndroidNativeDebuggerLanguageSupportFactory"/>
  </extensions>

  <extensions defaultExtensionNs="com.android.run">
    <androidDebugger implementation="com.google.idea.blaze.android.cppimpl.debug.BlazeAutoAndroidDebugger"/>
  </extensions>
  <!-- END NDK SUPPORT -->

  <extensions defaultExtensionNs="com.google.idea.blaze">
    <BlazeUserSettingsContributor implementation="com.google.idea.blaze.android.settings.BlazeAndroidUserSettingsContributor$BlazeAndroidUserSettingsProvider"/>
  </extensions>

  <extensions defaultExtensionNs="com.android.project">
    <buildSystemService implementation="com.google.idea.blaze.android.project.BlazeBuildSystemService"/>
    <featureEnableService implementation="com.google.idea.blaze.android.project.BlazeFeatureEnableService"/>
  </extensions>

  <extensions defaultExtensionNs="com.android.rendering">
    <renderErrorContributor implementation="com.google.idea.blaze.android.rendering.BlazeRenderErrorContributor$BlazeProvider"/>
  </extensions>

  <extensions defaultExtensionNs="com.google.gct.testrecorder.run">
    <testRecorderRunConfigurationProxyProvider implementation="com.google.idea.blaze.android.run.testrecorder.TestRecorderBlazeCommandRunConfigurationProxyProvider" />
  </extensions>

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

</idea-plugin>
