<!--
  ~ 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"/>
    <extensionPoint qualifiedName="com.google.idea.blaze.AndroidBinaryLaunchMethodsProvider" interface="com.google.idea.blaze.android.run.binary.BlazeAndroidBinaryLaunchMethodsProvider"/>
    <extensionPoint qualifiedName="com.google.idea.blaze.AndroidTestLaunchMethodsProvider" interface="com.google.idea.blaze.android.run.test.BlazeAndroidTestLaunchMethodsProvider"/>
  </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.manifest.ManifestParser$ClearManifestParser"/>
    <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"/>
    <AndroidBinaryLaunchMethodsProvider implementation="com.google.idea.blaze.android.run.binary.BlazeAndroidBinaryLaunchMethodsProviderImpl"/>
    <AndroidTestLaunchMethodsProvider implementation="com.google.idea.blaze.android.run.test.BlazeAndroidTestLaunchMethodsProviderImpl"/>
  </extensions>

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

  <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>
