Explorar o código

add extension point to enhance compatibility and support toolkit host extensions

windchargerj hai 1 ano
pai
achega
4e4fc846bc

+ 38 - 0
src/main/kotlin/io/xmake/utils/extension/ToolkitHostExtension.kt

@@ -0,0 +1,38 @@
+package io.xmake.utils.extension
+
+import com.intellij.execution.configurations.GeneralCommandLine
+import com.intellij.openapi.project.Project
+import io.xmake.project.directory.ui.DirectoryBrowser
+import io.xmake.project.toolkit.Toolkit
+import io.xmake.project.toolkit.ToolkitHost
+import io.xmake.utils.execute.SyncDirection
+import kotlinx.coroutines.CoroutineScope
+import java.awt.event.ActionListener
+
+interface ToolkitHostExtension {
+    val KEY: String
+
+    fun getHostType(): String
+
+    fun getToolkitHosts(project: Project? = null): List<ToolkitHost>
+
+    fun filterRegistered(): (Toolkit) -> Boolean
+
+    fun createToolkit(host: ToolkitHost, path: String, version: String): Toolkit
+
+    fun syncProject(
+        scope: CoroutineScope,
+        project: Project,
+        host: ToolkitHost,
+        direction: SyncDirection,
+        remoteDirectory: String,
+    )
+
+    fun getTargetId(target: Any? = null): String
+
+    suspend fun ToolkitHost.loadTargetX(project: Project? = null)
+
+    fun DirectoryBrowser.createBrowseListener(host: ToolkitHost): ActionListener
+
+    fun GeneralCommandLine.createProcess(target: ToolkitHost): Process
+}

+ 5 - 0
src/main/resources/META-INF/plugin.xml

@@ -4,6 +4,11 @@
     <name>XMake</name>
     <vendor email="[email protected]" url="https://xmake.io">xmake.io</vendor>
 
+    <extensionPoints>
+        <extensionPoint name="toolkitHostExtension" interface="io.xmake.utils.extension.ToolkitHostExtension"
+                        dynamic="true"/>
+    </extensionPoints>
+
     <!--all-->
     <depends>com.intellij.modules.platform</depends>
     <depends>com.intellij.modules.lang</depends>