<idea-plugin>
  <extensionPoints>
    <extensionPoint
        qualifiedName="org.jetbrains.kotlin.llFirSessionConfigurator"
        interface="org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionConfigurator"
        area="IDEA_PROJECT"
        dynamic="true"/>
  </extensionPoints>

  <extensions defaultExtensionNs="com.intellij">
    <registryKey
        defaultValue="false"
        description="Run resolve under a global lock."
        key="kotlin.parallel.resolve.under.global.lock"
        restartRequired="true"
    />

    <registryKey
        defaultValue="100"
        description="A frequency in milliseconds for re-acquiring a phase lock during parallel resolve to perform `checkCanceled()`."
        key="kotlin.analysis.ll.locking.interval"
        restartRequired="true"
    />


    <registryKey
        defaultValue="true"
        description="Perform partial body analysis in Kotlin. Speeds up occasional reference resolution, e.g. in Find Usages."
        key="kotlin.analysis.partialBodyAnalysis"
        restartRequired="true"
    />

    <registryKey
        defaultValue="5"
        description="Maximum number of partial body analysis attempts, after which the body is analyzed entirely."
        key="kotlin.analysis.partialBodyAnalysis.attemptCount"
        restartRequired="true"
    />

    <projectService
        serviceInterface="org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.LLFirElementByPsiElementChooser"
        serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLRealFirElementByPsiElementChooser"
    />

    <projectService serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.projectStructure.LLFirBuiltinsSessionFactory"/>
    <projectService serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionCache"/>
    <projectService serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidationService"/>
    <projectService
        serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidationEventPublisher"
    />
    <projectService serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents"/>
    <projectService serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.LLResolutionFacadeService"/>
    <projectService
        serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.LLFirDeclarationModificationService"
    />
    <projectService
        serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.LLFirInBlockModificationTracker"
    />
    <projectService
        serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.statistics.LLStatisticsService"
    />

    <applicationService
        serviceInterface="org.jetbrains.kotlin.analysis.api.platform.resolution.KaResolutionActivityTracker"
        serviceImplementation="org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirResolutionActivityTracker"
    />
  </extensions>

  <projectListeners>
    <listener
        class="org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidationService$LLKotlinModificationEventListener"
        topic="org.jetbrains.kotlin.analysis.api.platform.modification.KotlinModificationEventListener"
    />
    <listener
        class="org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidationService$LLPsiModificationTrackerListener"
        topic="com.intellij.psi.util.PsiModificationTracker$Listener"
    />
    <listener
        class="org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.LLFirInBlockModificationListenerForCodeFragments"
        topic="org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.LLFirInBlockModificationListener"
    />
    <listener
        class="org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.LLFirInBlockModificationTracker$Listener"
        topic="org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.LLFirInBlockModificationListener"
    />
  </projectListeners>
</idea-plugin>