Skip to content

Commit def8e1d

Browse files
committedAug 5, 2024·
1.16.0: modelcheck: use IdeaPlatformTaskScheduler
1 parent 6dc5930 commit def8e1d

File tree

4 files changed

+37
-10
lines changed

4 files changed

+37
-10
lines changed
 

‎CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres
66
to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## 1.16.0
9+
10+
### Fixed
11+
12+
- `modelcheck`: use `IdeaPlatformTaskScheduler` for parallel model checking when available, so that IDEA read action is
13+
started during model checks. This makes it possible to use 'find usages' without having an error about 'Read access is
14+
allowed from inside read-action (or EDT) only' logged.
15+
816
## 1.15.1
917

1018
### Changed

‎execute/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ mpsZips {
1414
include("lib/mps-logging.jar")
1515
include("lib/platform-api.jar")
1616
include("lib/util.jar")
17+
include("lib/app.jar")
1718

1819
include("lib/mpsant/mps-tool.jar")
1920
}

‎gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
version.backend=1.15.1
1+
version.backend=1.16.0
22
version.project-loader=2.3.0

‎modelcheck/src/main/kotlin/de/itemis/mps/gradle/modelcheck/ModelCheck.kt

+27-9
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,26 @@ import jetbrains.mps.errors.CheckerRegistry
1212
import jetbrains.mps.errors.MessageStatus
1313
import jetbrains.mps.errors.item.IssueKindReportItem
1414
import jetbrains.mps.ide.httpsupport.runtime.base.HttpSupportUtil
15+
import jetbrains.mps.ide.modelchecker.platform.actions.IdeaPlatformReadExecutor
1516
import jetbrains.mps.ide.modelchecker.platform.actions.UnresolvedReferencesChecker
1617
import jetbrains.mps.progress.EmptyProgressMonitor
1718
import jetbrains.mps.project.Project
1819
import jetbrains.mps.smodel.ModelAccessBase
1920
import jetbrains.mps.smodel.SModelStereotype
2021
import jetbrains.mps.tool.environment.Environment
2122
import jetbrains.mps.util.CollectConsumer
23+
import jetbrains.mps.workbench.progress.IdeaPlatformTaskScheduler
2224
import jetbrains.mps.workbench.progress.SystemBackgroundTaskScheduler
2325
import org.jetbrains.mps.openapi.model.SModel
2426
import org.jetbrains.mps.openapi.model.SNode
2527
import org.jetbrains.mps.openapi.module.SModule
2628
import java.io.File
27-
import java.lang.IllegalArgumentException
28-
import java.lang.UnsupportedOperationException
2929
import java.text.SimpleDateFormat
30-
import java.util.Date
30+
import java.util.*
3131
import kotlin.math.min
3232
import kotlin.test.fail
3333

34+
3435
val logging = detectLogging()
3536
val logger = logging.getLogger("de.itemis.mps.gradle.modelcheck")
3637

@@ -284,17 +285,34 @@ private fun oneTestCasePerModule(modules: Iterable<SModule>, errorsPerModule: Ma
284285

285286
private fun ModelCheckerBuilder.setParallelTaskScheduler(project: Project) {
286287
try {
288+
setParallelTaskSchedulerV3(project)
289+
} catch (e: LinkageError) {
287290
try {
288-
val executor = (project.repository.modelAccess as ModelAccessBase).shareRead()
289-
withTaskScheduler(SystemBackgroundTaskScheduler(project, executor))
290-
} catch (e: NoSuchMethodError) {
291-
withTaskScheduler(SystemBackgroundTaskScheduler(project))
291+
setParallelTaskSchedulerV2(project)
292+
} catch (e: LinkageError) {
293+
try {
294+
setParallelTaskSchedulerV1(project)
295+
} catch (e: LinkageError) {
296+
logger.warn("Parallel model checking is not supported in this version of MPS", e)
297+
}
292298
}
293-
} catch (e: NoClassDefFoundError) {
294-
logger.warn("Parallel model checking is not supported in this version of MPS", e)
295299
}
296300
}
297301

302+
private fun ModelCheckerBuilder.setParallelTaskSchedulerV3(project: Project) {
303+
val executor = IdeaPlatformReadExecutor(project.repository.modelAccess)
304+
withTaskScheduler(IdeaPlatformTaskScheduler(project, executor))
305+
}
306+
307+
private fun ModelCheckerBuilder.setParallelTaskSchedulerV2(project: Project) {
308+
val executor = (project.repository.modelAccess as ModelAccessBase).shareRead()
309+
withTaskScheduler(SystemBackgroundTaskScheduler(project, executor))
310+
}
311+
312+
private fun ModelCheckerBuilder.setParallelTaskSchedulerV1(project: Project) {
313+
withTaskScheduler(SystemBackgroundTaskScheduler(project))
314+
}
315+
298316
fun modelCheckProject(args: ModelCheckArgs, environment: Environment, project: Project): Boolean {
299317
val checkers = environment.platform.findComponent(CheckerRegistry::class.java)!!.checkers
300318
if (checkers.all { it !is UnresolvedReferencesChecker }) {

0 commit comments

Comments
 (0)
Please sign in to comment.