diff --git a/api/src/main/kotlin/org/modelix/mps/api/IModelixMpsApi.kt b/api/src/main/kotlin/org/modelix/mps/api/IModelixMpsApi.kt index 9b3c187..2eb06df 100644 --- a/api/src/main/kotlin/org/modelix/mps/api/IModelixMpsApi.kt +++ b/api/src/main/kotlin/org/modelix/mps/api/IModelixMpsApi.kt @@ -9,6 +9,7 @@ import org.jetbrains.mps.openapi.module.SModule import org.jetbrains.mps.openapi.module.SRepository import org.jetbrains.mps.openapi.project.Project import java.awt.Component +import javax.swing.Icon interface IModelixMpsApi { fun getRepository(): SRepository = ContextRepository.getRepository() ?: getProjectRepository() ?: getGlobalRepository() @@ -41,4 +42,6 @@ interface IModelixMpsApi { ContextProject.runWith(project, body) fun runWithProject(project: com.intellij.openapi.project.Project, body: () -> R): R = runWithProject(getMPSProject(project), body) fun runWithRepository(repository: SRepository, body: () -> R): R = ContextRepository.runWith(repository, body) + + fun loadIcon(resourceName: String, contextClass: Class<*>): Icon } diff --git a/impl203/src/main/kotlin/org/modelix/mps/api/ModelixMpsApiImpl203.kt b/impl203/src/main/kotlin/org/modelix/mps/api/ModelixMpsApiImpl203.kt index d4c53bb..7db1a0f 100644 --- a/impl203/src/main/kotlin/org/modelix/mps/api/ModelixMpsApiImpl203.kt +++ b/impl203/src/main/kotlin/org/modelix/mps/api/ModelixMpsApiImpl203.kt @@ -2,6 +2,7 @@ package org.modelix.mps.api import com.intellij.openapi.wm.IdeFrame import com.intellij.ui.ComponentUtil +import com.intellij.ui.IconManager import jetbrains.mps.ide.MPSCoreComponents import jetbrains.mps.ide.project.ProjectHelper import jetbrains.mps.lang.migration.runtime.base.VersionFixer @@ -20,6 +21,7 @@ import org.jetbrains.mps.openapi.module.SModule import org.jetbrains.mps.openapi.module.SRepository import org.jetbrains.mps.openapi.project.Project import java.awt.Component +import javax.swing.Icon open class ModelixMpsApiImpl203 : IModelixMpsApi { override fun getMPSProjects(): List { @@ -94,4 +96,8 @@ open class ModelixMpsApiImpl203 : IModelixMpsApi { "No MPS project found in $project" } } + + override fun loadIcon(resourceName: String, contextClass: Class<*>): Icon { + return IconManager.getInstance().getIcon(resourceName, contextClass) + } } diff --git a/impl232/src/main/kotlin/org/modelix/mps/api/ModelixMpsApiImpl232.kt b/impl232/src/main/kotlin/org/modelix/mps/api/ModelixMpsApiImpl232.kt index a8dc1f6..27b2cd0 100644 --- a/impl232/src/main/kotlin/org/modelix/mps/api/ModelixMpsApiImpl232.kt +++ b/impl232/src/main/kotlin/org/modelix/mps/api/ModelixMpsApiImpl232.kt @@ -1,3 +1,10 @@ package org.modelix.mps.api -open class ModelixMpsApiImpl232 : ModelixMpsApiImpl223() +import com.intellij.ui.IconManager +import javax.swing.Icon + +open class ModelixMpsApiImpl232 : ModelixMpsApiImpl223() { + override fun loadIcon(resourceName: String, contextClass: Class<*>): Icon { + return IconManager.getInstance().getIcon(resourceName, contextClass) + } +} diff --git a/lib/api/lib.api b/lib/api/lib.api index 3ce804f..06cfbd9 100644 --- a/lib/api/lib.api +++ b/lib/api/lib.api @@ -16,6 +16,7 @@ public final class org/modelix/mps/api/ModelixMpsApi : org/modelix/mps/api/IMode public fun getVirtualFolder (Lorg/jetbrains/mps/openapi/module/SModule;)Ljava/lang/String; public fun getVirtualFolder (Lorg/jetbrains/mps/openapi/project/Project;Lorg/jetbrains/mps/openapi/module/SModule;)Ljava/lang/String; public fun getVirtualFolders (Lorg/jetbrains/mps/openapi/module/SModule;)Ljava/util/List; + public fun loadIcon (Ljava/lang/String;Ljava/lang/Class;)Ljavax/swing/Icon; public fun runWithProject (Lcom/intellij/openapi/project/Project;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; public fun runWithProject (Lorg/jetbrains/mps/openapi/project/Project;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; public fun runWithRepository (Lorg/jetbrains/mps/openapi/module/SRepository;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; diff --git a/lib/src/main/kotlin/org/modelix/mps/api/ModelixMpsApi.kt b/lib/src/main/kotlin/org/modelix/mps/api/ModelixMpsApi.kt index c34e9d7..90cd7f2 100644 --- a/lib/src/main/kotlin/org/modelix/mps/api/ModelixMpsApi.kt +++ b/lib/src/main/kotlin/org/modelix/mps/api/ModelixMpsApi.kt @@ -1,15 +1,23 @@ package org.modelix.mps.api +import com.intellij.ide.plugins.PluginManagerCore import com.intellij.openapi.application.ApplicationInfo +import com.intellij.openapi.extensions.PluginId private fun detectMpsVersion(): Int { + PluginManagerCore.getPlugin(PluginId.getId("jetbrains.mps.core")) + ?.version + ?.substringBefore(".") + ?.toInt() + ?.let { return it } + val info = ApplicationInfo.getInstance() return (info.majorVersion.toInt() - 2000) * 10 + info.minorVersionMainPart.toInt() } private fun resolveInstance(): IModelixMpsApi { val mpsVersion = detectMpsVersion() - when (mpsVersion) { + return when (mpsVersion) { 203 -> ModelixMpsApiImpl203() 211 -> ModelixMpsApiImpl211() 212 -> ModelixMpsApiImpl212() @@ -22,8 +30,6 @@ private fun resolveInstance(): IModelixMpsApi { 243 -> ModelixMpsApiImpl243() else -> throw UnsupportedOperationException("Unsupported MPS version: $mpsVersion") } - return Class.forName("org.modelix.mps.api.ModelixMpsApiImpl${detectMpsVersion()}") - .constructors.single().newInstance() as IModelixMpsApi } object ModelixMpsApi : IModelixMpsApi by resolveInstance()