Skip to content

Commit 3f1ab30

Browse files
committed
fix(model-api-gen): also propagate deprecations to node wrapper interfaces
fixes MODELIX-463
1 parent 0497b22 commit 3f1ab30

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import jetbrains.mps.baseLanguage.C_ClassConcept
2+
import jetbrains.mps.baseLanguage.ClassConcept
23
import jetbrains.mps.baseLanguage.jdk8.C_SuperInterfaceMethodCall_old
4+
import jetbrains.mps.baseLanguage.jdk8.SuperInterfaceMethodCall_old
35
import jetbrains.mps.lang.behavior.C_ConceptMethodDeclaration
6+
import jetbrains.mps.lang.behavior.ConceptMethodDeclaration
47
import jetbrains.mps.lang.core.L_jetbrains_mps_lang_core
58
import jetbrains.mps.lang.editor.*
69
import jetbrains.mps.lang.smodel.query.CustomScope_old
@@ -45,10 +48,21 @@ class GeneratedApiTest {
4548
val foundDeprecatedProperty = C_ConceptMethodDeclaration::class.members.any { it.hasDeprecationWithMessage() }
4649
val foundDeprecatedChildLink = C_ClassConcept::class.members.any { it.hasDeprecationWithMessage() }
4750
val foundDeprecatedReference = C_SuperInterfaceMethodCall_old::class.members.any { it.hasDeprecationWithMessage() }
51+
52+
val foundDeprecatedNodeWrapper = SuperInterfaceMethodCall_old::class.hasDeprecationWithMessage()
53+
val foundDeprecatedNodeProperty = ConceptMethodDeclaration::class.members.any { it.hasDeprecationWithMessage() }
54+
val foundDeprecatedNodeChildLink = ClassConcept::class.members.any { it.hasDeprecationWithMessage() }
55+
val foundDeprecatedNodeReference = SuperInterfaceMethodCall_old::class.members.any { it.hasDeprecationWithMessage() }
56+
4857
assert(foundDeprecatedConcept)
4958
assert(foundDeprecatedProperty)
5059
assert(foundDeprecatedChildLink)
5160
assert(foundDeprecatedReference)
61+
62+
assert(foundDeprecatedNodeWrapper)
63+
assert(foundDeprecatedNodeProperty)
64+
assert(foundDeprecatedNodeChildLink)
65+
assert(foundDeprecatedNodeReference)
5266
}
5367

5468
private fun KAnnotatedElement.hasDeprecationWithMessage() =

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/MetaModelGenerator.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
619619

620620
private fun generateNodeWrapperInterface(concept: ProcessedConcept): TypeSpec {
621621
return TypeSpec.interfaceBuilder(concept.nodeWrapperInterfaceType()).apply {
622+
addDeprecationIfNecessary(concept)
622623
if (concept.extends.isEmpty()) addSuperinterface(ITypedNode::class.asTypeName())
623624
for (extended in concept.extends) {
624625
addSuperinterface(extended.resolved.nodeWrapperInterfaceType())
@@ -628,6 +629,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
628629
is ProcessedProperty -> {
629630
addProperty(
630631
PropertySpec.builder(feature.generatedName, feature.asKotlinType())
632+
.addDeprecationIfNecessary(feature)
631633
.mutable(true)
632634
.build()
633635
)
@@ -636,6 +638,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
636638
"raw_" + feature.generatedName,
637639
String::class.asTypeName().copy(nullable = true)
638640
)
641+
.addDeprecationIfNecessary(feature)
639642
.mutable(true)
640643
.build()
641644
)
@@ -651,6 +654,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
651654
)
652655
addProperty(
653656
PropertySpec.builder(feature.generatedName, type)
657+
.addDeprecationIfNecessary(feature)
654658
.build()
655659
)
656660
}
@@ -661,6 +665,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
661665
feature.generatedName,
662666
feature.type.resolved.nodeWrapperInterfaceType().copy(nullable = feature.optional)
663667
)
668+
.addDeprecationIfNecessary(feature)
664669
.mutable(true)
665670
.build()
666671
)
@@ -669,6 +674,7 @@ class MetaModelGenerator(val outputDir: Path, val nameConfig: NameConfig = NameC
669674
"raw_" + feature.generatedName,
670675
INode::class.asTypeName().copy(nullable = true)
671676
)
677+
.addDeprecationIfNecessary(feature)
672678
.mutable(true)
673679
.build()
674680
)

0 commit comments

Comments
 (0)