Skip to content

Commit 5a07ea7

Browse files
committed
feat(model-api-gen): propagate deprecations to generated code
1 parent 9ad7a77 commit 5a07ea7

File tree

7 files changed

+194
-32
lines changed

7 files changed

+194
-32
lines changed

metamodel-export/org.modelix.metamodel.export/models/org.modelix.metamodel.export.mps

Lines changed: 97 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<use id="f3061a53-9226-4cc5-a443-f952ceaf5816" name="jetbrains.mps.baseLanguage" version="11" />
1010
<use id="fd392034-7849-419d-9071-12563d152375" name="jetbrains.mps.baseLanguage.closures" version="0" />
1111
<use id="774bf8a0-62e5-41e1-af63-f4812e60e48b" name="jetbrains.mps.baseLanguage.checkedDots" version="0" />
12+
<use id="c72da2b9-7cce-4447-8389-f407dc1158b7" name="jetbrains.mps.lang.structure" version="9" />
1213
</languages>
1314
<imports>
1415
<import index="guwi" ref="6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.io(JDK/)" />
@@ -28,6 +29,7 @@
2829
<import index="33ny" ref="6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.util(JDK/)" />
2930
<import index="mhfm" ref="3f233e7f-b8a6-46d2-a57f-795d56775243/java:org.jetbrains.annotations(Annotations/)" />
3031
<import index="wyt6" ref="6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.lang(JDK/)" />
32+
<import index="tpcu" ref="r:00000000-0000-4000-0000-011c89590282(jetbrains.mps.lang.core.behavior)" implicit="true" />
3133
</imports>
3234
<registry>
3335
<language id="f3061a53-9226-4cc5-a443-f952ceaf5816" name="jetbrains.mps.baseLanguage">
@@ -1274,7 +1276,7 @@
12741276
<node concept="3clFbF" id="3Fg0S50exts" role="3cqZAp">
12751277
<node concept="2ShNRf" id="3Fg0S50extt" role="3clFbG">
12761278
<node concept="1pGfFk" id="3Fg0S50extu" role="2ShVmc">
1277-
<ref role="37wK5l" to="sgfj:~PropertyData.&lt;init&gt;(java.lang.String,java.lang.String,org.modelix.model.data.PropertyType,boolean)" resolve="PropertyData" />
1279+
<ref role="37wK5l" to="sgfj:~PropertyData.&lt;init&gt;(java.lang.String,java.lang.String,org.modelix.model.data.PropertyType,boolean,java.lang.String)" resolve="PropertyData" />
12781280
<node concept="2OqwBi" id="sN$G5gkz6p" role="37wK5m">
12791281
<node concept="2YIFZM" id="sN$G5gkwjt" role="2Oq$k0">
12801282
<ref role="1Pybhc" to="e8bb:~MetaIdByDeclaration" resolve="MetaIdByDeclaration" />
@@ -1301,6 +1303,12 @@
13011303
<node concept="3clFbT" id="7jUShhooSid" role="37wK5m">
13021304
<property role="3clFbU" value="true" />
13031305
</node>
1306+
<node concept="1rXfSq" id="6leOzHDskSh" role="37wK5m">
1307+
<ref role="37wK5l" node="6leOzHDqtxp" resolve="deprecationMsg" />
1308+
<node concept="37vLTw" id="6leOzHDsn6Y" role="37wK5m">
1309+
<ref role="3cqZAo" node="3Fg0S50extz" resolve="it" />
1310+
</node>
1311+
</node>
13041312
</node>
13051313
</node>
13061314
</node>
@@ -1408,7 +1416,7 @@
14081416
<node concept="3clFbF" id="3Fg0S50eoNA" role="3cqZAp">
14091417
<node concept="2ShNRf" id="3Fg0S50eoNB" role="3clFbG">
14101418
<node concept="1pGfFk" id="3Fg0S50eoNC" role="2ShVmc">
1411-
<ref role="37wK5l" to="sgfj:~ChildLinkData.&lt;init&gt;(java.lang.String,java.lang.String,java.lang.String,boolean,boolean)" resolve="ChildLinkData" />
1419+
<ref role="37wK5l" to="sgfj:~ChildLinkData.&lt;init&gt;(java.lang.String,java.lang.String,java.lang.String,boolean,boolean,java.lang.String)" resolve="ChildLinkData" />
14121420
<node concept="2OqwBi" id="sN$G5gkB5e" role="37wK5m">
14131421
<node concept="2YIFZM" id="sN$G5gkCu1" role="2Oq$k0">
14141422
<ref role="1Pybhc" to="e8bb:~MetaIdByDeclaration" resolve="MetaIdByDeclaration" />
@@ -1455,6 +1463,12 @@
14551463
</node>
14561464
</node>
14571465
</node>
1466+
<node concept="1rXfSq" id="6leOzHDspCB" role="37wK5m">
1467+
<ref role="37wK5l" node="6leOzHDqtxp" resolve="deprecationMsg" />
1468+
<node concept="37vLTw" id="6leOzHDss7R" role="37wK5m">
1469+
<ref role="3cqZAo" node="3Fg0S50eoNT" resolve="it" />
1470+
</node>
1471+
</node>
14581472
</node>
14591473
</node>
14601474
</node>
@@ -1561,7 +1575,7 @@
15611575
<node concept="3clFbF" id="3Fg0S50e_EG" role="3cqZAp">
15621576
<node concept="2ShNRf" id="3Fg0S50e_EH" role="3clFbG">
15631577
<node concept="1pGfFk" id="3Fg0S50e_EI" role="2ShVmc">
1564-
<ref role="37wK5l" to="sgfj:~ReferenceLinkData.&lt;init&gt;(java.lang.String,java.lang.String,java.lang.String,boolean)" resolve="ReferenceLinkData" />
1578+
<ref role="37wK5l" to="sgfj:~ReferenceLinkData.&lt;init&gt;(java.lang.String,java.lang.String,java.lang.String,boolean,java.lang.String)" resolve="ReferenceLinkData" />
15651579
<node concept="2OqwBi" id="sN$G5gkFrP" role="37wK5m">
15661580
<node concept="2YIFZM" id="sN$G5gkGsm" role="2Oq$k0">
15671581
<ref role="37wK5l" to="e8bb:~MetaIdByDeclaration.getLinkId(org.jetbrains.mps.openapi.model.SNode)" resolve="getLinkId" />
@@ -1598,6 +1612,12 @@
15981612
</node>
15991613
</node>
16001614
</node>
1615+
<node concept="1rXfSq" id="6leOzHDsvk5" role="37wK5m">
1616+
<ref role="37wK5l" node="6leOzHDqtxp" resolve="deprecationMsg" />
1617+
<node concept="37vLTw" id="6leOzHDsx8H" role="37wK5m">
1618+
<ref role="3cqZAo" node="3Fg0S50e_EZ" resolve="it" />
1619+
</node>
1620+
</node>
16011621
</node>
16021622
</node>
16031623
</node>
@@ -1732,7 +1752,7 @@
17321752
<node concept="3clFbF" id="3Fg0S50cWJn" role="3cqZAp">
17331753
<node concept="2ShNRf" id="3Fg0S50cWJj" role="3clFbG">
17341754
<node concept="1pGfFk" id="3Fg0S50cX7i" role="2ShVmc">
1735-
<ref role="37wK5l" to="sgfj:~ConceptData.&lt;init&gt;(java.lang.String,java.lang.String,boolean,java.util.List,java.util.List,java.util.List,java.util.List)" resolve="ConceptData" />
1755+
<ref role="37wK5l" to="sgfj:~ConceptData.&lt;init&gt;(java.lang.String,java.lang.String,boolean,java.util.List,java.util.List,java.util.List,java.util.List,java.lang.String)" resolve="ConceptData" />
17361756
<node concept="3cpWs3" id="2sGJABKvA1m" role="37wK5m">
17371757
<node concept="Xl_RD" id="2sGJABKvBm5" role="3uHU7B">
17381758
<property role="Xl_RC" value="mps:" />
@@ -1773,6 +1793,12 @@
17731793
<node concept="37vLTw" id="3Fg0S50fMQv" role="37wK5m">
17741794
<ref role="3cqZAo" node="3Fg0S50fId_" resolve="superConcepts" />
17751795
</node>
1796+
<node concept="1rXfSq" id="6leOzHDs$KP" role="37wK5m">
1797+
<ref role="37wK5l" node="6leOzHDqtxp" resolve="deprecationMsg" />
1798+
<node concept="37vLTw" id="6leOzHDsAcV" role="37wK5m">
1799+
<ref role="3cqZAo" node="3Fg0S50cWmY" resolve="concept" />
1800+
</node>
1801+
</node>
17761802
</node>
17771803
</node>
17781804
</node>
@@ -1926,7 +1952,7 @@
19261952
<node concept="3clFbF" id="4zSRxm70TNt" role="3cqZAp">
19271953
<node concept="2ShNRf" id="4zSRxm70TNp" role="3clFbG">
19281954
<node concept="1pGfFk" id="4zSRxm70V1b" role="2ShVmc">
1929-
<ref role="37wK5l" to="sgfj:~EnumData.&lt;init&gt;(java.lang.String,java.lang.String,java.util.List,int)" resolve="EnumData" />
1955+
<ref role="37wK5l" to="sgfj:~EnumData.&lt;init&gt;(java.lang.String,java.lang.String,java.util.List,int,java.lang.String)" resolve="EnumData" />
19301956
<node concept="3cpWs3" id="5pDpbLMqabe" role="37wK5m">
19311957
<node concept="Xl_RD" id="5pDpbLMqceA" role="3uHU7B">
19321958
<property role="Xl_RC" value="mps:" />
@@ -1958,6 +1984,12 @@
19581984
<node concept="37vLTw" id="3lhG7y_rl7q" role="37wK5m">
19591985
<ref role="3cqZAo" node="5IyBvLCgrR0" resolve="defaultIndex" />
19601986
</node>
1987+
<node concept="1rXfSq" id="6leOzHDsENP" role="37wK5m">
1988+
<ref role="37wK5l" node="6leOzHDqtxp" resolve="deprecationMsg" />
1989+
<node concept="37vLTw" id="6leOzHDsGa8" role="37wK5m">
1990+
<ref role="3cqZAo" node="4zSRxm6ZEdl" resolve="it" />
1991+
</node>
1992+
</node>
19611993
</node>
19621994
</node>
19631995
</node>
@@ -2286,6 +2318,66 @@
22862318
</node>
22872319
</node>
22882320
</node>
2321+
<node concept="3clFb_" id="6leOzHDqtxp" role="jymVt">
2322+
<property role="TrG5h" value="deprecationMsg" />
2323+
<node concept="3clFbS" id="6leOzHDqtxs" role="3clF47">
2324+
<node concept="3clFbJ" id="6leOzHDqC9S" role="3cqZAp">
2325+
<node concept="3fqX7Q" id="6leOzHDr_RD" role="3clFbw">
2326+
<node concept="2OqwBi" id="6leOzHDr_RF" role="3fr31v">
2327+
<node concept="37vLTw" id="6leOzHDr_RG" role="2Oq$k0">
2328+
<ref role="3cqZAo" node="6leOzHDq_Eo" resolve="node" />
2329+
</node>
2330+
<node concept="2qgKlT" id="6leOzHDr_RH" role="2OqNvi">
2331+
<ref role="37wK5l" to="tpcu:hOwoPtR" resolve="isDeprecated" />
2332+
</node>
2333+
</node>
2334+
</node>
2335+
<node concept="3clFbS" id="6leOzHDqC9U" role="3clFbx">
2336+
<node concept="3cpWs6" id="6leOzHDrBbR" role="3cqZAp">
2337+
<node concept="10Nm6u" id="6leOzHDrDBv" role="3cqZAk" />
2338+
</node>
2339+
</node>
2340+
</node>
2341+
<node concept="3cpWs8" id="6leOzHDrI5Q" role="3cqZAp">
2342+
<node concept="3cpWsn" id="6leOzHDrI5T" role="3cpWs9">
2343+
<property role="TrG5h" value="msg" />
2344+
<node concept="17QB3L" id="6leOzHDrI5O" role="1tU5fm" />
2345+
<node concept="2OqwBi" id="6leOzHDrS2E" role="33vP2m">
2346+
<node concept="37vLTw" id="6leOzHDrQxZ" role="2Oq$k0">
2347+
<ref role="3cqZAo" node="6leOzHDq_Eo" resolve="node" />
2348+
</node>
2349+
<node concept="2qgKlT" id="6leOzHDrToO" role="2OqNvi">
2350+
<ref role="37wK5l" to="tpcu:hP43_8K" resolve="getMessage" />
2351+
</node>
2352+
</node>
2353+
</node>
2354+
</node>
2355+
<node concept="3cpWs6" id="6leOzHDrWAo" role="3cqZAp">
2356+
<node concept="3K4zz7" id="6leOzHDs4b0" role="3cqZAk">
2357+
<node concept="37vLTw" id="6leOzHDs5vt" role="3K4E3e">
2358+
<ref role="3cqZAo" node="6leOzHDrI5T" resolve="msg" />
2359+
</node>
2360+
<node concept="Xl_RD" id="6leOzHDs7Ht" role="3K4GZi">
2361+
<property role="Xl_RC" value="" />
2362+
</node>
2363+
<node concept="3y3z36" id="6leOzHDs0lI" role="3K4Cdx">
2364+
<node concept="10Nm6u" id="6leOzHDs2_M" role="3uHU7w" />
2365+
<node concept="37vLTw" id="6leOzHDrYOq" role="3uHU7B">
2366+
<ref role="3cqZAo" node="6leOzHDrI5T" resolve="msg" />
2367+
</node>
2368+
</node>
2369+
</node>
2370+
</node>
2371+
</node>
2372+
<node concept="3Tm6S6" id="6leOzHDqs7t" role="1B3o_S" />
2373+
<node concept="17QB3L" id="6leOzHDqtlk" role="3clF45" />
2374+
<node concept="37vLTG" id="6leOzHDq_Eo" role="3clF46">
2375+
<property role="TrG5h" value="node" />
2376+
<node concept="3Tqbb2" id="6leOzHDq_En" role="1tU5fm">
2377+
<ref role="ehGHo" to="tpck:hOwnYed" resolve="IDeprecatable" />
2378+
</node>
2379+
</node>
2380+
</node>
22892381
<node concept="3Tm1VV" id="3Fg0S50gerG" role="1B3o_S" />
22902382
</node>
22912383
<node concept="312cEu" id="6bQHiZUll2y">

metamodel-export/org.modelix.metamodel.export/org.modelix.metamodel.export.msd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<language slang="l:ceab5195-25ea-4f22-9b92-103b95ca8c0c:jetbrains.mps.lang.core" version="2" />
6666
<language slang="l:446c26eb-2b7b-4bf0-9b35-f83fa582753e:jetbrains.mps.lang.modelapi" version="0" />
6767
<language slang="l:7866978e-a0f0-4cc7-81bc-4d213d9375e1:jetbrains.mps.lang.smodel" version="18" />
68+
<language slang="l:c72da2b9-7cce-4447-8389-f407dc1158b7:jetbrains.mps.lang.structure" version="9" />
6869
<language slang="l:9ded098b-ad6a-4657-bfd9-48636cfe8bc3:jetbrains.mps.lang.traceable" version="0" />
6970
</languageVersions>
7071
<dependencyVersions>

model-api-gen-gradle-test/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ dependencies {
4545
testImplementation(files("$buildDir/metamodel/kotlin_gen") {
4646
builtBy("generateMetaModelSources")
4747
})
48+
testImplementation(kotlin("reflect"))
4849
}
4950

5051
tasks.test {

model-api-gen-gradle-test/src/test/kotlin/GeneratedApiTest.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
import jetbrains.mps.baseLanguage.C_ClassConcept
2+
import jetbrains.mps.baseLanguage.jdk8.C_SuperInterfaceMethodCall_old
3+
import jetbrains.mps.lang.behavior.C_ConceptMethodDeclaration
14
import jetbrains.mps.lang.core.L_jetbrains_mps_lang_core
25
import jetbrains.mps.lang.editor.*
6+
import jetbrains.mps.lang.smodel.query.CustomScope_old
7+
import org.junit.jupiter.api.BeforeAll
38
import org.modelix.metamodel.TypedLanguagesRegistry
49
import org.modelix.metamodel.typed
510
import org.modelix.metamodel.untyped
@@ -8,6 +13,10 @@ import org.modelix.model.api.INode
813
import org.modelix.model.api.getRootNode
914
import org.modelix.model.data.ModelData
1015
import java.io.File
16+
import kotlin.reflect.KAnnotatedElement
17+
import kotlin.reflect.KClass
18+
import kotlin.reflect.full.findAnnotation
19+
import kotlin.reflect.full.hasAnnotation
1120
import kotlin.test.Test
1221
import kotlin.test.assertContains
1322
import kotlin.test.assertEquals
@@ -30,6 +39,21 @@ class GeneratedApiTest {
3039
}
3140
}
3241

42+
@Test
43+
fun `propagates deprecations`() {
44+
val foundDeprecatedConcept = C_SuperInterfaceMethodCall_old::class.hasDeprecationWithMessage()
45+
val foundDeprecatedProperty = C_ConceptMethodDeclaration::class.members.any { it.hasDeprecationWithMessage() }
46+
val foundDeprecatedChildLink = C_ClassConcept::class.members.any { it.hasDeprecationWithMessage() }
47+
val foundDeprecatedReference = C_SuperInterfaceMethodCall_old::class.members.any { it.hasDeprecationWithMessage() }
48+
assert(foundDeprecatedConcept)
49+
assert(foundDeprecatedProperty)
50+
assert(foundDeprecatedChildLink)
51+
assert(foundDeprecatedReference)
52+
}
53+
54+
private fun KAnnotatedElement.hasDeprecationWithMessage() =
55+
findAnnotation<Deprecated>()?.message?.isNotEmpty() ?: false
56+
3357
private fun findNodeWithStyleAttribute(node: INode) : INode? {
3458
var found = node.allChildren.find { it.getPropertyRoles().contains("style") }
3559
if (found != null) return found

0 commit comments

Comments
 (0)