Skip to content

Commit

Permalink
feat(core): add ToolchainProvider extension point
Browse files Browse the repository at this point in the history
Add ToolchainProvider extension point for providing toolchain functionality in the core module.
  • Loading branch information
phodal committed Jun 7, 2024
1 parent dd24bd0 commit 6a6d1d8
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.phodal.shirecore.provider

import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import kotlin.reflect.KClass

class ToolchainContextItem(
val clazz: KClass<*>,
var text: String
)

data class ToolchainPrepareContext(
val sourceFile: PsiFile?,
val extraItems: List<ToolchainContextItem> = emptyList(),
val element: PsiElement?
)

interface ToolchainProvider {
fun isApplicable(project: Project, creationContext: ToolchainPrepareContext): Boolean

@RequiresBackgroundThread
suspend fun collect(project: Project, creationContext: ToolchainPrepareContext): List<ToolchainContextItem>

companion object {
private val EP_NAME = ExtensionPointName<ToolchainProvider>("com.phodal.shireToolchainProvider")

suspend fun gatherToolchainContextItems(
project: Project,
toolchainPrepareContext: ToolchainPrepareContext,
): List<ToolchainContextItem> {
val elements = mutableListOf<ToolchainContextItem>()

val chatContextProviders = EP_NAME.extensionList
for (provider in chatContextProviders) {
try {
val applicable = provider.isApplicable(project, toolchainPrepareContext)
if (applicable) {
elements.addAll(provider.collect(project, toolchainPrepareContext))
}
} catch (e: Exception) {
e.printStackTrace()
}
}

elements.addAll(toolchainPrepareContext.extraItems)
return elements.distinctBy { it.text }
}
}
}
7 changes: 7 additions & 0 deletions core/src/main/resources/com.phodal.shirecore.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@
<with attribute="implementationClass" implements="com.phodal.shirecore.provider.AutoTesting"/>
</extensionPoint>

<!-- Toolchain Provider -->
<extensionPoint qualifiedName="com.phodal.shireToolchainProvider"
beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
<with attribute="implementationClass"
implements="com.phodal.shirecore.provider.ToolchainProvider"/>
</extensionPoint>

<!-- Code Editor -->
<extensionPoint qualifiedName="com.phodal.shireCodeModifier"
beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
Expand Down

0 comments on commit 6a6d1d8

Please sign in to comment.