diff --git a/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/parsing/ParsingTests_Metadata.kerml.xt b/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/parsing/ParsingTests_Metadata.kerml.xt index 81e882f04e..83f8a6783e 100644 --- a/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/parsing/ParsingTests_Metadata.kerml.xt +++ b/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/parsing/ParsingTests_Metadata.kerml.xt @@ -74,4 +74,8 @@ package Metadata { #M struct T { feature :>> cc; } + + metaclass M1 { + metadata M1; + } } diff --git a/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.63.0-SNAPSHOT.jar b/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.63.0-SNAPSHOT.jar index 9f62f5b33a..202bc9af99 100644 Binary files a/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.63.0-SNAPSHOT.jar and b/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.63.0-SNAPSHOT.jar differ diff --git a/org.omg.sysml.logic/src/main/java/org/omg/sysml/adapter/TypeAdapter.java b/org.omg.sysml.logic/src/main/java/org/omg/sysml/adapter/TypeAdapter.java index 45a5e4bcca..8501a829f7 100644 --- a/org.omg.sysml.logic/src/main/java/org/omg/sysml/adapter/TypeAdapter.java +++ b/org.omg.sysml.logic/src/main/java/org/omg/sysml/adapter/TypeAdapter.java @@ -482,11 +482,13 @@ public Type getLibraryType(String... defaultNames) { protected List getBaseTypes() { List baseTypes = new ArrayList<>(); if (isGetBaseTypes) { + Set visited = new HashSet<>(); Type target = getTarget(); for (MetadataFeature metadataFeature : ElementUtil.getAllMetadataFeaturesOf(target)) { // Resolve metaclass proxy before getting base type, to avoid problems - // with name resolution when applying semantic metadata. - metadataFeature.getMetaclass(); + // with name resolution when applying semantic metadata. (ST6RI-923) + // Call getTypesOf rather than getMetaclass to avoid possible stack overflow. (ST6RI-976) + FeatureUtil.getTypesOf(metadataFeature, new ArrayList<>(), visited); isGetBaseTypes = false; TypeUtil.getFeatureOf(metadataFeature).stream(). filter(f->TypeUtil.specializes(f, getBaseTypeFeature(metadataFeature))). diff --git a/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.63.0-SNAPSHOT.jar b/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.63.0-SNAPSHOT.jar index 14d2eb57e4..e16b22f8e1 100644 Binary files a/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.63.0-SNAPSHOT.jar and b/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.63.0-SNAPSHOT.jar differ diff --git a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/MetadataTest.sysml.xt b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/MetadataTest.sysml.xt index 1cf9aac311..e0b9f21e93 100644 --- a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/MetadataTest.sysml.xt +++ b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/MetadataTest.sysml.xt @@ -72,6 +72,10 @@ package MetadataTest { #Security #Classified metadata Classified { classificationLevel = ClassificationLevel::secret; } - } + } + + metadata def M { + metadata M; + } } \ No newline at end of file