Skip to content

Commit dc186f1

Browse files
committed
ST6RI-894 Updated resolution of redefinition target names.
Skip the redefining feature entirely when resolving its redefined feature name.
1 parent 67d3e1a commit dc186f1

8 files changed

Lines changed: 20 additions & 18 deletions

File tree

org.omg.kerml.xtext/src/org/omg/kerml/xtext/scoping/KerMLScope.xtend

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import org.eclipse.xtext.naming.IQualifiedNameConverter
5757
import org.eclipse.emf.ecore.util.EcoreUtil
5858
import org.omg.sysml.util.NamespaceUtil
5959
import org.omg.kerml.xtext.naming.QualifiedNameUtil
60+
import org.omg.sysml.lang.sysml.Redefinition
6061

6162
class KerMLScope extends AbstractScope implements ISysMLScope {
6263

@@ -265,7 +266,9 @@ class KerMLScope extends AbstractScope implements ISysMLScope {
265266

266267
NamespaceUtil.addAdditionalMembersTo(ns)
267268
for (mem: ns.ownedMembership.clone) { // Clone to avoid any possible ConcurrentModificationException.
268-
if (!scopeProvider.visited.contains(mem)) {
269+
if (!(scopeProvider.visited.contains(mem) ||
270+
mem instanceof OwningMembership && skip instanceof Redefinition &&
271+
(skip as Redefinition).owningType == mem.memberElement)) {
269272
if (includeAll || isInsideScope || mem.visibility == VisibilityKind.PUBLIC ||
270273
mem.visibility == VisibilityKind.PROTECTED && isInheriting) {
271274

@@ -371,7 +374,7 @@ class KerMLScope extends AbstractScope implements ISysMLScope {
371374
val newRedefined = new HashSet()
372375
if (redefined !== null) {
373376
newRedefined.addAll(redefined)
374-
newRedefined.addAll(TypeUtil.getFeaturesRedefinedBy(ns, skip))
377+
newRedefined.addAll(TypeUtil.getFeaturesRedefinedBy(ns, if (skip instanceof Redefinition) skip.owningFeature else null))
375378
}
376379

377380
// Note: All specializations are traversed, even if a resolution is found, in order to check for possible redefinitions inherited

org.omg.kerml.xtext/src/org/omg/kerml/xtext/validation/KerMLValidator.xtend

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ class KerMLValidator extends AbstractKerMLValidator {
599599
val crossFeature = FeatureUtil.getCrossFeatureOf(f)
600600
val ownedCrossFeature = f.ownedCrossFeature()
601601
if (crossFeature !== null) {
602-
val redefinedFeatures = FeatureUtil.getRedefinedFeaturesWithComputedOf(f, null);
602+
val redefinedFeatures = FeatureUtil.getRedefinedFeaturesWithComputedOf(f);
603603
if (redefinedFeatures.map[rf | FeatureUtil.getCrossFeatureOf(rf)].
604604
exists[cf | cf !== null && !TypeUtil.specializes(crossFeature, cf)]) {
605605
if (f.ownedCrossSubsetting === null) {

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/ExpressionEvaluator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ protected InvocationExpression instantiateInvocation(InvocationExpression expres
9797
TypeUtil.addOwnedFeatureTo(instantiation, newParameter);
9898

9999
newParameter.setDirection(parameter.getDirection());
100-
for (Feature redefinedFeature: FeatureUtil.getRedefinedFeaturesWithComputedOf(parameter, null)) {
100+
for (Feature redefinedFeature: FeatureUtil.getRedefinedFeaturesWithComputedOf(parameter)) {
101101
Redefinition newRedefinition = SysMLFactory.eINSTANCE.createRedefinition();
102102
newRedefinition.setRedefinedFeature(redefinedFeature);
103103
newRedefinition.setRedefiningFeature(newParameter);

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
import org.omg.sysml.lang.sysml.Type;
5858
import org.omg.sysml.lang.sysml.TypeFeaturing;
5959
import org.omg.sysml.lang.sysml.VisibilityKind;
60-
import org.omg.sysml.lang.sysml.impl.RedefinitionImpl;
6160
import org.omg.sysml.util.ConnectorUtil;
6261
import org.omg.sysml.util.ElementUtil;
6362
import org.omg.sysml.util.ExpressionUtil;
@@ -302,7 +301,7 @@ protected void addOwnedCrossFeatureSpecialization() {
302301
addImplicitGeneralType(SysMLPackage.eINSTANCE.getFeatureTyping(), type);
303302
}
304303

305-
for (Feature redefinedFeature: FeatureUtil.getRedefinedFeaturesWithComputedOf((Feature)owner, null)) {
304+
for (Feature redefinedFeature: FeatureUtil.getRedefinedFeaturesWithComputedOf((Feature)owner)) {
306305
if (redefinedFeature.isEnd()) {
307306
Feature crossFeature = getCrossFeatureOf(redefinedFeature);
308307
if (crossFeature != null) {
@@ -500,7 +499,7 @@ public Set<Feature> getAllRedefinedFeatures() {
500499

501500
public void addAllRedefinedFeaturesTo(Set<Feature> redefinedFeatures) {
502501
redefinedFeatures.add(getTarget());
503-
getRedefinedFeaturesWithComputed(null).stream().forEach(redefinedFeature->{
502+
getRedefinedFeaturesWithComputed().stream().forEach(redefinedFeature->{
504503
if (redefinedFeature != null && !redefinedFeatures.contains(redefinedFeature)) {
505504
FeatureUtil.addAllRedefinedFeaturesTo(redefinedFeature, redefinedFeatures);
506505
}
@@ -509,15 +508,15 @@ public void addAllRedefinedFeaturesTo(Set<Feature> redefinedFeatures) {
509508

510509
// Computed Redefinition
511510

512-
public List<Feature> getRedefinedFeaturesWithComputed(Element skip) {
511+
public List<Feature> getRedefinedFeaturesWithComputed() {
513512
Feature target = getTarget();
514513

515-
addComputedRedefinitions(skip);
514+
addComputedRedefinitions(null);
516515
EList<Redefinition> redefinitions = target.getOwnedRedefinition();
517516

518517
List<Feature> redefinedFeatures = new ArrayList<>();
519518
redefinitions.stream().
520-
map(r->r == skip? ((RedefinitionImpl)r).basicGetRedefinedFeature(): r.getRedefinedFeature()).
519+
map(Redefinition::getRedefinedFeature).
521520
filter(f->f != null).
522521
forEachOrdered(redefinedFeatures::add);
523522

@@ -877,7 +876,7 @@ public void addOwnedCrossFeatureTypeFeaturing() {
877876

878877
addFeaturingType(cartesianProductFeature);
879878

880-
for (Feature redefinedFeature: FeatureUtil.getRedefinedFeaturesWithComputedOf(owningFeature, null)) {
879+
for (Feature redefinedFeature: FeatureUtil.getRedefinedFeaturesWithComputedOf(owningFeature)) {
881880
if (redefinedFeature.isEnd()) {
882881
Feature crossFeature = getCrossFeatureOf(redefinedFeature);
883882
if (crossFeature != null) {

org.omg.sysml/src/org/omg/sysml/delegate/invocation/Feature_namingFeature_InvocationDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public Feature_namingFeature_InvocationDelegate(EOperation operation) {
4040
public Object dynamicInvoke(InternalEObject target, EList<?> arguments) throws InvocationTargetException {
4141
Feature self = (Feature) target;
4242

43-
return FeatureUtil.getRedefinedFeaturesWithComputedOf(self, null).stream().
43+
return FeatureUtil.getRedefinedFeaturesWithComputedOf(self).stream().
4444
findFirst().orElse(null);
4545
}
4646

org.omg.sysml/src/org/omg/sysml/delegate/invocation/Feature_redefines_InvocationDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public Object dynamicInvoke(InternalEObject target, EList<?> arguments) throws I
4141
Feature self = (Feature) target;
4242
Feature redefinedFeature = (Feature) arguments.get(0);
4343

44-
return FeatureUtil.getRedefinedFeaturesWithComputedOf(self, null).
44+
return FeatureUtil.getRedefinedFeaturesWithComputedOf(self).
4545
contains(redefinedFeature);
4646
}
4747

org.omg.sysml/src/org/omg/sysml/util/FeatureUtil.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.omg.sysml.adapter.FeatureAdapter;
3838
import org.omg.sysml.lang.sysml.Behavior;
3939
import org.omg.sysml.lang.sysml.CrossSubsetting;
40-
import org.omg.sysml.lang.sysml.Element;
4140
import org.omg.sysml.lang.sysml.Expression;
4241
import org.omg.sysml.lang.sysml.Feature;
4342
import org.omg.sysml.lang.sysml.FeatureChaining;
@@ -195,8 +194,8 @@ public static List<Feature> getRedefinedFeaturesOf(Feature feature) {
195194
return getFeatureAdapter(feature).getRedefinedFeatures();
196195
}
197196

198-
public static List<Feature> getRedefinedFeaturesWithComputedOf(Feature feature, Element skip) {
199-
return getFeatureAdapter(feature).getRedefinedFeaturesWithComputed(skip);
197+
public static List<Feature> getRedefinedFeaturesWithComputedOf(Feature feature) {
198+
return getFeatureAdapter(feature).getRedefinedFeaturesWithComputed();
200199
}
201200

202201
public static void forceComputeRedefinitionsFor(Feature feature) {

org.omg.sysml/src/org/omg/sysml/util/TypeUtil.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,10 @@ public static Collection<Feature> getAllFeaturesRedefinedBy(Type type) {
9797
collect(Collectors.toSet());
9898
}
9999

100-
public static List<Feature> getFeaturesRedefinedBy(Type type, Element skip) {
100+
public static List<Feature> getFeaturesRedefinedBy(Type type, Feature skip) {
101101
return type.getOwnedFeature().stream().
102-
flatMap(feature->FeatureUtil.getRedefinedFeaturesWithComputedOf(feature, skip).stream()).
102+
filter(feature->feature != skip).
103+
flatMap(feature->FeatureUtil.getRedefinedFeaturesWithComputedOf(feature).stream()).
103104
toList();
104105
}
105106

0 commit comments

Comments
 (0)