Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions api/src/main/kotlin/org/modelix/mps/api/IModelixMpsApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -41,4 +42,6 @@ interface IModelixMpsApi {
ContextProject.runWith(project, body)
fun <R> runWithProject(project: com.intellij.openapi.project.Project, body: () -> R): R = runWithProject(getMPSProject(project), body)
fun <R> runWithRepository(repository: SRepository, body: () -> R): R = ContextRepository.runWith(repository, body)

fun loadIcon(resourceName: String, contextClass: Class<*>): Icon
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<Project> {
Expand Down Expand Up @@ -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)
}
}
Original file line number Diff line number Diff line change
@@ -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)
}
}
1 change: 1 addition & 0 deletions lib/api/lib.api
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
12 changes: 9 additions & 3 deletions lib/src/main/kotlin/org/modelix/mps/api/ModelixMpsApi.kt
Original file line number Diff line number Diff line change
@@ -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()
Expand All @@ -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()
Loading