Skip to content

Commit c9d8f6f

Browse files
authored
Merge pull request #625 from modelix/MODELIX-641-Replace-GenerateAntScriptForMpsMetaModelExport
MODELIX-641 Replace GenerateAntScriptForMpsMetaModelExport
2 parents 1a70d38 + 78df1dd commit c9d8f6f

File tree

7 files changed

+606
-93
lines changed

7 files changed

+606
-93
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ kotlinSerialization="1.6.3"
3434
ignite="2.16.0"
3535
apacheCxf="3.6.3"
3636
node="18.17.1"
37-
modelixBuildtools="1.4.0"
37+
modelixBuildtools="1.4.1"
3838
openapi = "7.4.0"
3939
micrometer = "1.12.4"
4040
dokka = "1.9.20"

metamodel-export/build.gradle.kts

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,35 @@
1-
import org.gradle.internal.jvm.Jvm
2-
import org.modelix.gradle.mpsbuild.MPSBuildSettings
31
import org.modelix.mpsHomeDir
42

53
plugins {
64
base
7-
alias(libs.plugins.modelix.mps.buildtools)
5+
kotlin("jvm")
86
}
97

108
group = "org.modelix.mps"
119

12-
val generatorLibs by configurations.creating
13-
1410
dependencies {
15-
generatorLibs(project(":model-api-gen-runtime"))
16-
generatorLibs(project(":model-api-gen"))
11+
implementation(project(":model-api-gen-runtime"))
12+
implementation(project(":model-api-gen"))
13+
compileOnly(fileTree(mpsHomeDir.map { it.dir("lib") }))
14+
compileOnly(
15+
mpsHomeDir.map {
16+
it.files(
17+
"languages/languageDesign/jetbrains.mps.lang.structure.jar",
18+
"languages/languageDesign/jetbrains.mps.lang.core.jar",
19+
)
20+
},
21+
)
22+
implementation(project(":model-api"))
1723
}
1824

19-
val copyLibs by tasks.registering(Sync::class) {
20-
from(generatorLibs)
21-
into(projectDir.resolve("org.modelix.metamodel.export/lib"))
22-
rename { fileName ->
23-
generatorLibs.resolvedConfiguration.resolvedArtifacts
24-
.find { it.file.name == fileName }?.let {
25-
if (it.classifier == null) {
26-
"${it.name}.${it.extension}"
27-
} else {
28-
"${it.name}-${it.classifier}.${it.extension}"
29-
}
30-
}
31-
?: fileName
32-
}
25+
java {
26+
withSourcesJar()
3327
}
3428

35-
extensions.configure<MPSBuildSettings> {
36-
javaHome = Jvm.current().javaHome
37-
mpsHome(mpsHomeDir.get().asFile.absolutePath)
38-
dependsOn(copyLibs)
39-
search(".")
40-
disableParentPublication()
41-
42-
publication("metamodel-export") {
43-
module("org.modelix.metamodel.export")
29+
publishing {
30+
publications {
31+
create<MavenPublication>("maven") {
32+
from(components["java"])
33+
}
4434
}
4535
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.modelix.metamodel.export
2+
3+
import jetbrains.mps.smodel.Language
4+
import jetbrains.mps.smodel.MPSModuleRepository
5+
import jetbrains.mps.tool.environment.Environment
6+
import java.io.File
7+
8+
object CommandlineExporter {
9+
@JvmStatic
10+
fun exportLanguages(ideaEnvironment: Environment?) {
11+
println("exportLanguages")
12+
val repo = MPSModuleRepository.getInstance()
13+
repo.modelAccess.runReadAction {
14+
val modules = repo.modules
15+
val languages = modules.filterIsInstance<Language>()
16+
val outputDir = File("exported-languages")
17+
outputDir.mkdirs()
18+
println("Exporting ${languages.count()} languages into ${outputDir.absolutePath}")
19+
val exporter = MPSMetaModelExporter(outputDir)
20+
for (language in languages) {
21+
exporter.exportLanguage(language)
22+
}
23+
}
24+
}
25+
26+
@JvmStatic
27+
fun exportBoth(ideaEnvironment: Environment?) {
28+
println("exportBoth")
29+
exportLanguages(ideaEnvironment)
30+
exportModules(ideaEnvironment)
31+
}
32+
33+
@JvmStatic
34+
fun exportModules(ideaEnvironment: Environment?) {
35+
println("exportModules")
36+
val filter = System.getProperty("modelix.export.includedModules")
37+
println("modules filter: $filter")
38+
if (filter == null) {
39+
return
40+
}
41+
val filters = filter.split(',').filter { it.isNotEmpty() }
42+
if (filters.isEmpty()) {
43+
return
44+
}
45+
46+
val repo = MPSModuleRepository.getInstance()
47+
repo.modelAccess.runReadAction {
48+
val modules = repo.modules
49+
val outputDir = File("exported-modules")
50+
outputDir.mkdirs()
51+
val exporter = MPSModelExporter(outputDir)
52+
for (module in modules) {
53+
val moduleName = module.moduleName ?: continue
54+
if (filters.any { moduleName == it || moduleName.startsWith((if (it.endsWith(".")) it else "$it.")) }) {
55+
exporter.exportModule(module)
56+
}
57+
}
58+
}
59+
}
60+
}

0 commit comments

Comments
 (0)