Skip to content

Commit 87eb972

Browse files
authored
Merge pull request #744 from Systems-Modeling/ST6RI-923
ST6RI-923 Problem with name resolution when using Semantic metadata
2 parents d422e10 + 1739812 commit 87eb972

2 files changed

Lines changed: 59 additions & 5 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//* XPECT_SETUP org.omg.kerml.xpect.tests.parsing.KerMLParsingTest
2+
ResourceSet {
3+
ThisFile {}
4+
File {from ="/library/Base.kerml"}
5+
File {from ="/library/Links.kerml"}
6+
File {from ="/library/Occurrences.kerml"}
7+
File {from ="/library/Objects.kerml"}
8+
File {from ="/library/Performances.kerml"}
9+
File {from ="/library/Metaobjects.kerml"}
10+
File {from ="/library/KerML.kerml"}
11+
File {from ="/library/BaseFunctions.kerml"}
12+
}
13+
Workspace {
14+
JavaProject {
15+
SrcFolder {
16+
ThisFile {}
17+
File {from ="/library/Base.kerml"}
18+
File {from ="/library/Links.kerml"}
19+
File {from ="/library/Occurrences.kerml"}
20+
File {from ="/library/Objects.kerml"}
21+
File {from ="/library/Performances.kerml"}
22+
File {from ="/library/Metaobjects.kerml"}
23+
File {from ="/library/KerML.kerml"}
24+
File {from ="/library/BaseFunctions.kerml"}
25+
}
26+
}
27+
}
28+
END_SETUP
29+
*/
30+
31+
// XPECT noErrors ---> ""
32+
package SemanticMetadataTest {
33+
private import Metaobjects::SemanticMetadata;
34+
35+
classifier P {
36+
feature a;
37+
}
38+
feature p : P;
39+
40+
metaclass M :> SemanticMetadata {
41+
:>> baseType = p meta KerML::Feature;
42+
}
43+
44+
classifier Q {
45+
feature a = 1;
46+
#M feature p1 {
47+
// This feature should redefine P::a, not Q::a.
48+
// Redefining Q::a will causes a feature value override error.
49+
feature :>> a = 2;
50+
}
51+
}
52+
}

org.omg.sysml/src/org/omg/sysml/adapter/TypeAdapter.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*******************************************************************************
22
* SysML 2 Pilot Implementation
3-
* Copyright (c) 2021-2025 Model Driven Solutions, Inc.
3+
* Copyright (c) 2021-2026 Model Driven Solutions, Inc.
44
*
55
* This program is free software: you can redistribute it and/or modify
66
* it under the terms of the GNU Lesser General Public License as published by
@@ -436,23 +436,25 @@ public Type getLibraryType(String... defaultNames) {
436436
protected List<Type> getBaseTypes() {
437437
List<Type> baseTypes = new ArrayList<>();
438438
if (isGetBaseTypes) {
439-
isGetBaseTypes = false;
440439
Type target = getTarget();
441440
for (MetadataFeature metadataFeature : ElementUtil.getAllMetadataFeaturesOf(target)) {
441+
// Resolve metaclass proxy before getting base type, to avoid problems
442+
// with name resolution when applying semantic metadata.
443+
metadataFeature.getMetaclass();
444+
isGetBaseTypes = false;
442445
metadataFeature.getFeature().stream().
443446
filter(f->TypeUtil.specializes(f, getBaseTypeFeature(metadataFeature))).
444447
map(FeatureUtil::getValueExpressionFor).
445448
filter(expr->expr != null).
446-
map(expr->
447-
expr.evaluate(metadataFeature)).
449+
map(expr->expr.evaluate(metadataFeature)).
448450
filter(results->results != null && !results.isEmpty()).
449451
map(results->results.get(0)).
450452
map(EvaluationUtil::getMetaclassReferenceOf).
451453
filter(Type.class::isInstance).
452454
map(Type.class::cast).
453455
forEachOrdered(baseTypes::add);
456+
isGetBaseTypes = true;
454457
}
455-
isGetBaseTypes = true;
456458
}
457459
return baseTypes;
458460
}

0 commit comments

Comments
 (0)