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
19 changes: 19 additions & 0 deletions api/src/main/kotlin/org/modelix/mps/api/ContextRepository.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.modelix.mps.api

import org.jetbrains.mps.openapi.module.SRepository

object ContextRepository {
private val threadLocal = ThreadLocal<SRepository>()

fun <R> runWith(repository: SRepository, body: () -> R): R {
val oldValue = threadLocal.get()
try {
threadLocal.set(repository)
return body()
} finally {
threadLocal.set(oldValue)
}
}

fun getRepository(): SRepository? = threadLocal.get()
}
3 changes: 2 additions & 1 deletion api/src/main/kotlin/org/modelix/mps/api/IModelixMpsApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import org.jetbrains.mps.openapi.project.Project
import java.awt.Component

interface IModelixMpsApi {
fun getRepository(): SRepository = getProjectRepository() ?: getGlobalRepository()
fun getRepository(): SRepository = ContextRepository.getRepository() ?: getProjectRepository() ?: getGlobalRepository()
fun getGlobalRepository(): SRepository
fun getProjectRepository(): SRepository?
fun getRepository(project: Project): SRepository
Expand Down Expand Up @@ -40,4 +40,5 @@ interface IModelixMpsApi {
fun <R> runWithProject(project: Project, body: () -> R): R =
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)
}
1 change: 1 addition & 0 deletions lib/api/lib.api
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public final class org/modelix/mps/api/ModelixMpsApi : org/modelix/mps/api/IMode
public fun getVirtualFolders (Lorg/jetbrains/mps/openapi/module/SModule;)Ljava/util/List;
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;
public fun setReference (Lorg/jetbrains/mps/openapi/model/SNode;Lorg/jetbrains/mps/openapi/language/SReferenceLink;Lorg/jetbrains/mps/openapi/model/SNodeReference;)V
public fun setVirtualFolder (Lorg/jetbrains/mps/openapi/module/SModule;Ljava/lang/String;)V
public fun setVirtualFolder (Lorg/jetbrains/mps/openapi/project/Project;Lorg/jetbrains/mps/openapi/module/SModule;Ljava/lang/String;)V
Expand Down
Loading