Skip to content

Commit 6a9f4e2

Browse files
feat(execute,project-loader): use indexing workaround
* Move forceIndexing flag from ModelCheckArgs and GenerateArgs to Args. * Represent the flag in ProjectLoader and ProjectLoaderBuilder. * Call the indexing workaround in ProjectLoader after opening a project.
1 parent f3551e4 commit 6a9f4e2

File tree

12 files changed

+75
-83
lines changed

12 files changed

+75
-83
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ 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.24.2
9+
10+
- `execute` now applies the indexing workaround like `modelcheck` and `generate`.
11+
- `project-loader` dependency bumped to 4.0.0.
12+
813
## 1.24.1
914

1015
- `execute-generators`: return generation failed status in case of any reported errors during the generation,

execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/GenerateArgs.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package de.itemis.mps.gradle.generate
22

33
import com.xenomachina.argparser.ArgParser
4-
import com.xenomachina.argparser.InvalidArgumentException
54
import com.xenomachina.argparser.default
65
import de.itemis.mps.gradle.project.loader.Args
76
import de.itemis.mps.gradle.project.loader.checkArgument
@@ -25,14 +24,4 @@ class GenerateArgs(parser: ArgParser) : Args(parser) {
2524
.addValidator {
2625
checkArgument(!noStrictMode || value == 0) { "strict mode is required for parallel generation" }
2726
}
28-
val forceIndexing by parser.storing(
29-
"--force-indexing", help = "whether to force full indexing at startup to work around MPS-37926." +
30-
" Supported values: always, never, auto. Default: auto.") {
31-
when (this) {
32-
"always" -> true
33-
"never" -> false
34-
"auto" -> null
35-
else -> throw InvalidArgumentException("Unsupported value '$this'. Supported values are always, never, auto")
36-
}
37-
}.default(null)
3827
}

execute-generators/src/main/kotlin/de/itemis/mps/gradle/generate/Helper.kt

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
package de.itemis.mps.gradle.generate
22

33

4-
import com.intellij.openapi.application.ApplicationInfo
5-
import com.intellij.openapi.util.BuildNumber
64
import com.intellij.openapi.util.IconLoader
75
import de.itemis.mps.gradle.logging.detectLogging
86
import de.itemis.mps.gradle.project.loader.EnvironmentKind
97
import de.itemis.mps.gradle.project.loader.ModuleAndModelMatcher
10-
import de.itemis.mps.gradle.project.loader.forceIndexing
11-
import de.itemis.mps.gradle.project.loader.hasIndexingBug
128
import jetbrains.mps.generator.GenerationSettingsProvider
139
import jetbrains.mps.generator.runtime.TemplateModule
1410
import jetbrains.mps.make.MakeSession
@@ -20,7 +16,6 @@ import jetbrains.mps.make.script.ScriptBuilder
2016
import jetbrains.mps.messages.IMessage
2117
import jetbrains.mps.messages.IMessageHandler
2218
import jetbrains.mps.messages.MessageKind
23-
import jetbrains.mps.project.MPSProject
2419
import jetbrains.mps.project.Project
2520
import jetbrains.mps.smodel.ModelAccessHelper
2621
import jetbrains.mps.smodel.SLanguageHierarchy
@@ -210,17 +205,6 @@ private fun makeModels(proj: Project, models: List<SModel>): GenerationResult {
210205

211206

212207
fun generateProject(parsed: GenerateArgs, project: Project): GenerationResult {
213-
214-
// Workaround for https://youtrack.jetbrains.com/issue/MPS-37926/Indices-not-built-properly-in-IdeaEnvironment
215-
if (project is MPSProject) {
216-
val buildNumber = ApplicationInfo.getInstance().build
217-
if (shouldForceIndexing(parsed, buildNumber)) {
218-
logger.info("Forcing full indexing to work around MPS-37926. Can be disabled with --force-indexing=never.")
219-
forceIndexing(project, buildNumber)
220-
logger.info("Full indexing complete")
221-
}
222-
}
223-
224208
val generationSettings = project.getComponent(GenerationSettingsProvider::class.java).generationSettings
225209
parsed.parallelGenerationThreads.let {
226210
when {
@@ -262,7 +246,3 @@ fun generateProject(parsed: GenerateArgs, project: Project): GenerationResult {
262246

263247
return makeModels(project, modelsToGenerate)
264248
}
265-
266-
private fun shouldForceIndexing(args: GenerateArgs, buildNumber: BuildNumber): Boolean {
267-
return args.forceIndexing ?: hasIndexingBug(buildNumber)
268-
}

execute/README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ read and write locks itself, for example with `jetbrains.mps.lang.access`.
1616
usage: execute [-h] [--plugin PLUGIN]... [--macro MACRO]... [--plugin-location PLUGIN_LOCATION]
1717
[--plugin-root PLUGIN_ROOT]... [--build-number BUILD_NUMBER] [--test-mode]
1818
[--environment ENVIRONMENT] [--log-level LOG_LEVEL] [--no-libraries]
19-
--project PROJECT --module MODULE --class CLASS --method METHOD [--arg ARG]...
19+
--project PROJECT [--force-indexing FORCE_INDEXING] --module MODULE --class CLASS
20+
--method METHOD [--arg ARG]...
2021
2122
required arguments:
2223
--project PROJECT project to generate from
@@ -54,6 +55,10 @@ optional arguments:
5455
5556
--no-libraries do not load project libraries under MPS environment
5657
58+
--force-indexing FORCE_INDEXING whether to force full indexing at startup to work around
59+
MPS-37926. Supported values: always, never, auto. Default:
60+
auto.
61+
5762
--arg ARG list of strings to pass to the method. Allowed only if the
5863
method signature is (Project, String[])
5964
```

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
org.gradle.parallel=true
22

3-
version.backend=1.24.1
4-
version.project-loader=3.0.2
3+
version.backend=1.24.2
4+
version.project-loader=4.0.0
55

66
# A comma-separated list of MPS releases or prereleases to test against.
77
supportedMpsVersions=2022.3.3,2023.2.2,2024.1.2,2024.3.1,251.23774.10091

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

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,17 @@
11
package de.itemis.mps.gradle.modelcheck
22

3-
import com.intellij.openapi.application.ApplicationInfo
43
import com.intellij.openapi.application.ApplicationManager
54
import com.intellij.openapi.application.ModalityState
6-
import com.intellij.openapi.util.BuildNumber
7-
import de.itemis.mps.gradle.junit.Failure
8-
import de.itemis.mps.gradle.junit.JUnitXmlSerializer
9-
import de.itemis.mps.gradle.junit.Testcase
10-
import de.itemis.mps.gradle.junit.Testsuite
11-
import de.itemis.mps.gradle.junit.Testsuites
5+
import de.itemis.mps.gradle.junit.*
126
import de.itemis.mps.gradle.logging.detectLogging
137
import de.itemis.mps.gradle.project.loader.ModuleAndModelMatcher
14-
import de.itemis.mps.gradle.project.loader.forceIndexing
15-
import de.itemis.mps.gradle.project.loader.hasIndexingBug
168
import jetbrains.mps.checkers.ModelCheckerBuilder
179
import jetbrains.mps.errors.CheckerRegistry
1810
import jetbrains.mps.errors.MessageStatus
1911
import jetbrains.mps.errors.item.IssueKindReportItem
2012
import jetbrains.mps.ide.httpsupport.runtime.base.HttpSupportUtil
2113
import jetbrains.mps.ide.modelchecker.platform.actions.IdeaPlatformReadExecutor
2214
import jetbrains.mps.progress.EmptyProgressMonitor
23-
import jetbrains.mps.project.MPSProject
2415
import jetbrains.mps.project.Project
2516
import jetbrains.mps.smodel.ModelAccessBase
2617
import jetbrains.mps.smodel.SModelStereotype
@@ -337,16 +328,6 @@ fun modelCheckProject(args: ModelCheckArgs, environment: Environment, project: P
337328
modelExtractor.includeStubs(false)
338329
val itemsToCheck = ModelCheckerBuilder.ItemsToCheck()
339330

340-
// Workaround for https://youtrack.jetbrains.com/issue/MPS-37926/Indices-not-built-properly-in-IdeaEnvironment
341-
if (environment is IdeaEnvironment) {
342-
val buildNumber = ApplicationInfo.getInstance().build
343-
if (shouldForceIndexing(args, buildNumber)) {
344-
logger.info("Forcing full indexing. Can be disabled with --force-indexing=never.")
345-
forceIndexing(project as MPSProject, buildNumber)
346-
logger.info("Full indexing complete")
347-
}
348-
}
349-
350331
// In the IDEA environment run the model check in EDT to avoid interference from other code that may want to run
351332
// a write or read action, such as 'run in smart mode' callbacks triggered by completed indexing, context assistant
352333
// updates, etc.
@@ -406,7 +387,3 @@ fun modelCheckProject(args: ModelCheckArgs, environment: Environment, project: P
406387
val minSeverity = if (args.warningAsError) MessageStatus.WARNING else MessageStatus.ERROR
407388
return errorCollector.result.any { it.severity >= minSeverity }
408389
}
409-
410-
fun shouldForceIndexing(args: ModelCheckArgs, buildNumber: BuildNumber): Boolean {
411-
return args.forceIndexing ?: hasIndexingBug(buildNumber)
412-
}

modelcheck/src/main/kotlin/de/itemis/mps/gradle/modelcheck/ModelCheckArgs.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,6 @@ class ModelCheckArgs(parser: ArgParser) : Args(parser) {
2727
}
2828
}.default(ReportFormat.ONE_TEST_PER_MODEL)
2929

30-
val forceIndexing by parser.storing(
31-
"--force-indexing", help = "whether to force full indexing at startup to work around MPS-37926." +
32-
" Supported values: always, never, auto. Default: auto.") {
33-
when (this) {
34-
"always" -> true
35-
"never" -> false
36-
"auto" -> null
37-
else -> throw IllegalArgumentException("Unsupported value '$this'. Supported values are always, never, auto")
38-
}
39-
}.default(null)
40-
4130
override fun configureProjectLoader(builder: ProjectLoader.Builder) {
4231
super.configureProjectLoader(builder)
4332
builder.environmentConfig {

project-loader/CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
Changes in versions before 2.0.0 are documented in the [root changelog](../CHANGELOG.md).
99

10+
## 4.0.0
11+
12+
### Added
13+
14+
- `Args#forceIndexing` added to control the application of the indexing workaround. This unifies the behavior of all
15+
backends and extends the functionality to the `execute` backend that didn't have it before.
16+
17+
### Removed
18+
19+
- Methods in `IndexingWorkaround.kt` related to the indexing workaround logic are no longer public.
20+
1021
## 3.0.2
1122

1223
### Fixed

project-loader/api/project-loader.api

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public final class de/itemis/mps/gradle/logging/LoggingFactoryKt {
2020
public class de/itemis/mps/gradle/project/loader/Args : de/itemis/mps/gradle/project/loader/EnvironmentArgs {
2121
public fun <init> (Lcom/xenomachina/argparser/ArgParser;)V
2222
public fun configureProjectLoader (Lde/itemis/mps/gradle/project/loader/ProjectLoader$Builder;)V
23+
public final fun getForceIndexing ()Ljava/lang/Boolean;
2324
public final fun getProject ()Ljava/io/File;
2425
}
2526

@@ -64,11 +65,6 @@ public final class de/itemis/mps/gradle/project/loader/EnvironmentKind : java/la
6465
public static fun values ()[Lde/itemis/mps/gradle/project/loader/EnvironmentKind;
6566
}
6667

67-
public final class de/itemis/mps/gradle/project/loader/IndexingWorkaroundKt {
68-
public static final fun forceIndexing (Ljetbrains/mps/project/MPSProject;Lcom/intellij/openapi/util/BuildNumber;)V
69-
public static final fun hasIndexingBug (Lcom/intellij/openapi/util/BuildNumber;)Z
70-
}
71-
7268
public final class de/itemis/mps/gradle/project/loader/LoaderKt {
7369
public static final fun buildEnvironmentConfig (Ljava/util/List;Ljava/io/File;Ljava/util/List;Z)Ljetbrains/mps/tool/environment/EnvironmentConfig;
7470
public static synthetic fun buildEnvironmentConfig$default (Ljava/util/List;Ljava/io/File;Ljava/util/List;ZILjava/lang/Object;)Ljetbrains/mps/tool/environment/EnvironmentConfig;
@@ -122,7 +118,7 @@ public final class de/itemis/mps/gradle/project/loader/Plugin {
122118

123119
public final class de/itemis/mps/gradle/project/loader/ProjectLoader {
124120
public static final field Companion Lde/itemis/mps/gradle/project/loader/ProjectLoader$Companion;
125-
public synthetic fun <init> (Ljetbrains/mps/tool/environment/EnvironmentConfig;Lde/itemis/mps/gradle/project/loader/EnvironmentKind;Ljava/io/File;Ljava/lang/String;Lde/itemis/mps/gradle/logging/LogLevel;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
121+
public synthetic fun <init> (Ljetbrains/mps/tool/environment/EnvironmentConfig;Lde/itemis/mps/gradle/project/loader/EnvironmentKind;Ljava/io/File;Ljava/lang/String;Lde/itemis/mps/gradle/logging/LogLevel;Ljava/lang/Boolean;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
126122
public final fun execute (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
127123
public final fun executeWithProject (Ljava/io/File;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
128124
}
@@ -134,9 +130,11 @@ public final class de/itemis/mps/gradle/project/loader/ProjectLoader$Builder {
134130
public final fun getBuildNumber ()Ljava/lang/String;
135131
public final fun getEnvironmentConfigBuilder ()Lde/itemis/mps/gradle/project/loader/EnvironmentConfigBuilder;
136132
public final fun getEnvironmentKind ()Lde/itemis/mps/gradle/project/loader/EnvironmentKind;
133+
public final fun getForceIndexing ()Ljava/lang/Boolean;
137134
public final fun getLogLevel ()Lde/itemis/mps/gradle/logging/LogLevel;
138135
public final fun setBuildNumber (Ljava/lang/String;)V
139136
public final fun setEnvironmentKind (Lde/itemis/mps/gradle/project/loader/EnvironmentKind;)V
137+
public final fun setForceIndexing (Ljava/lang/Boolean;)V
140138
public final fun setLogLevel (Lde/itemis/mps/gradle/logging/LogLevel;)V
141139
}
142140

project-loader/src/main/kotlin/de/itemis/mps/gradle/project/loader/Args.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.xenomachina.argparser.ArgParser
44
import com.xenomachina.argparser.InvalidArgumentException
55
import com.xenomachina.argparser.default
66
import de.itemis.mps.gradle.logging.LogLevel
7-
import de.itemis.mps.gradle.logging.detectLogging
87
import java.io.File
98
import java.nio.file.Path
109

@@ -85,9 +84,22 @@ public open class Args(parser: ArgParser) : EnvironmentArgs(parser) {
8584
public val project: File by parser.storing("--project",
8685
help = "project to generate from") { File(this) }
8786

87+
public val forceIndexing: Boolean? by parser.storing(
88+
"--force-indexing", help = "whether to force full indexing at startup to work around MPS-37926." +
89+
" Supported values: always, never, auto. Default: auto.") {
90+
when (this) {
91+
"always" -> true
92+
"never" -> false
93+
"auto" -> null
94+
else -> throw InvalidArgumentException("Unsupported value '$this'. Supported values are always, never, auto")
95+
}
96+
}.default(null)
97+
8898
override fun configureProjectLoader(builder: ProjectLoader.Builder) {
8999
super.configureProjectLoader(builder)
90100

101+
builder.forceIndexing = forceIndexing
102+
91103
if (!skipLibraries && environmentKind == EnvironmentKind.MPS) {
92104
builder.environmentConfig {
93105
findProjectLibraries(project, macros, libraries::addAll)

0 commit comments

Comments
 (0)