Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ST6RI-751 References to result parameters, subject parameters and objectives do not always resolve correctly #552

Merged
merged 5 commits into from
Mar 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import org.omg.sysml.lang.sysml.util.ISysMLScope
import com.google.inject.Inject
import org.eclipse.xtext.naming.IQualifiedNameConverter
import org.eclipse.emf.ecore.util.EcoreUtil
import org.omg.sysml.util.NamespaceUtil

class KerMLScope extends AbstractScope implements ISysMLScope {

Expand Down Expand Up @@ -250,6 +251,7 @@ class KerMLScope extends AbstractScope implements ISysMLScope {
ownedvisited.add(ns)
}

NamespaceUtil.addAdditionalMembersTo(ns)
for (mem: ns.ownedMembership.clone) { // Clone to avoid any possible ConcurrentModificationException.
if (!scopeProvider.visited.contains(mem)) {
if (includeAll || isInsideScope || mem.visibility == VisibilityKind.PUBLIC ||
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*******************************************************************************
* SysML 2 Pilot Implementation
* Copyright (c) 2021 Model Driven Solutions, Inc.
* Copyright (c) 2021, 2024 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -22,6 +22,7 @@
package org.omg.sysml.adapter;

import org.omg.sysml.lang.sysml.CalculationDefinition;
import org.omg.sysml.util.UsageUtil;

public class CalculationDefinitionAdapter extends ActionDefinitionAdapter {

Expand All @@ -33,10 +34,16 @@ public CalculationDefinition getTarget() {
return (CalculationDefinition)super.getTarget();
}

@Override
public void addAdditionalMembers() {
CalculationDefinition target = getTarget();
UsageUtil.addResultParameterTo(target);
}

@Override
public void doTransform() {
super.doTransform();
addResultParameter();
createResultConnector(getTarget().getResult());
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*******************************************************************************
* SysML 2 Pilot Implementation
* Copyright (c) 2021, 2023 Model Driven Solutions, Inc.
* Copyright (c) 2021, 2023-2024 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -25,6 +25,7 @@
import org.omg.sysml.lang.sysml.CalculationDefinition;
import org.omg.sysml.lang.sysml.CalculationUsage;
import org.omg.sysml.lang.sysml.Type;
import org.omg.sysml.util.UsageUtil;

public class CalculationUsageAdapter extends ActionUsageAdapter {

Expand All @@ -50,10 +51,15 @@ public boolean isSubcalculation() {
owningType instanceof CalculationDefinition || owningType instanceof CalculationUsage;
}

@Override
public void addAdditionalMembers() {
UsageUtil.addResultParameterTo(getTarget());
}

@Override
public void doTransform() {
super.doTransform();
addResultParameter();
createResultConnector(getTarget().getResult());
createResultConnector(getTarget().getResult());
}

}
37 changes: 8 additions & 29 deletions org.omg.sysml/src/org/omg/sysml/adapter/CaseDefinitionAdapter.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*******************************************************************************
* SysML 2 Pilot Implementation
* Copyright (c) 2021 Model Driven Solutions, Inc.
* Copyright (c) 2021, 2024 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -22,11 +22,7 @@
package org.omg.sysml.adapter;

import org.omg.sysml.lang.sysml.CaseDefinition;
import org.omg.sysml.lang.sysml.ObjectiveMembership;
import org.omg.sysml.lang.sysml.RequirementUsage;
import org.omg.sysml.lang.sysml.SysMLFactory;
import org.omg.sysml.lang.sysml.Type;
import org.omg.sysml.lang.sysml.Usage;
import org.omg.sysml.util.UsageUtil;

public class CaseDefinitionAdapter extends CalculationDefinitionAdapter {

Expand All @@ -39,31 +35,14 @@ public CaseDefinition getTarget() {
return (CaseDefinition)super.getTarget();
}

// Utility

@Override
public Usage getSubjectParameter() {
return getTarget().getSubjectParameter();
}

// Transformation

public static RequirementUsage addObjectiveRequirementTo(Type type) {
RequirementUsage objective = SysMLFactory.eINSTANCE.createRequirementUsage();
ObjectiveMembership membership = SysMLFactory.eINSTANCE.createObjectiveMembership();
membership.setOwnedObjectiveRequirement(objective);
type.getOwnedRelationship().add(membership);
return objective;
}

@Override
public void doTransform() {
CaseDefinition definition = getTarget();
super.doTransform();
UsageAdapter.computeSubjectParameterOf(definition);
if (definition.getObjectiveRequirement() == null) {
addObjectiveRequirementTo(definition);
}
@Override
public void addAdditionalMembers() {
CaseDefinition target = getTarget();
UsageUtil.addSubjectParameterTo(target);
UsageUtil.addObjectiveRequirementTo(target);
super.addAdditionalMembers();
}

}
23 changes: 8 additions & 15 deletions org.omg.sysml/src/org/omg/sysml/adapter/CaseUsageAdapter.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*******************************************************************************
* SysML 2 Pilot Implementation
* Copyright (c) 2021, 2023 Model Driven Solutions, Inc.
* Copyright (c) 2021, 2023-2024 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -24,7 +24,7 @@
import org.omg.sysml.lang.sysml.CaseDefinition;
import org.omg.sysml.lang.sysml.CaseUsage;
import org.omg.sysml.lang.sysml.Type;
import org.omg.sysml.lang.sysml.Usage;
import org.omg.sysml.util.UsageUtil;

public class CaseUsageAdapter extends CalculationUsageAdapter {

Expand All @@ -39,11 +39,6 @@ public CaseUsage getTarget() {

// Utility

@Override
public Usage getSubjectParameter() {
return getTarget().getSubjectParameter();
}

@Override
public boolean hasRelevantSubjectParameter() {
Type owningType = getTarget().getOwningType();
Expand All @@ -65,15 +60,13 @@ public boolean isSubcase() {
}

// Transformation

@Override
public void doTransform() {
@Override
public void addAdditionalMembers() {
CaseUsage usage = getTarget();
super.doTransform();
UsageAdapter.computeSubjectParameterOf(usage);
if (usage.getObjectiveRequirement() == null) {
CaseDefinitionAdapter.addObjectiveRequirementTo(usage);
}
UsageUtil.addSubjectParameterTo(usage);
UsageUtil.addObjectiveRequirementTo(usage);
super.addAdditionalMembers();
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*******************************************************************************
* SysML 2 Pilot Implementation
* Copyright (c) 2021 Model Driven Solutions, Inc.
* Copyright (c) 2021, 2024 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -22,6 +22,7 @@
package org.omg.sysml.adapter;

import org.omg.sysml.lang.sysml.ConstraintDefinition;
import org.omg.sysml.util.UsageUtil;

public class ConstraintDefinitionAdapter extends OccurrenceDefinitionAdapter {

Expand All @@ -34,12 +35,15 @@ public ConstraintDefinition getTarget() {
return (ConstraintDefinition)super.getTarget();
}

@Override
public void addAdditionalMembers() {
UsageUtil.addResultParameterTo(getTarget());
}

@Override
public void doTransform() {
ConstraintDefinition definition = getTarget();
super.doTransform();
addResultParameter();
createResultConnector(definition.getResult());
createResultConnector(getTarget().getResult());
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*******************************************************************************
* SysML 2 Pilot Implementation
* Copyright (c) 2021-2023 Model Driven Solutions, Inc.
* Copyright (c) 2021-2024 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand Down Expand Up @@ -78,16 +78,18 @@ protected boolean isCheckedConstraint() {
ConstraintUsage target = getTarget();
Type owningType = target.getOwningType();
return target.isComposite() &&
(owningType instanceof ItemDefinition || owningType instanceof ItemUsage);

(owningType instanceof ItemDefinition || owningType instanceof ItemUsage);
}

@Override
public void addAdditionalMembers() {
UsageUtil.addResultParameterTo(getTarget());
}

@Override
public void doTransform() {
ConstraintUsage constraint = getTarget();
super.doTransform();
addResultParameter();
createResultConnector(constraint.getResult());
}
createResultConnector(getTarget().getResult());
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*******************************************************************************
* SysML 2 Pilot Implementation
* Copyright (c) 2021 Model Driven Solutions, Inc.
* Copyright (c) 2021, 2024 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -22,7 +22,6 @@
package org.omg.sysml.adapter;

import org.omg.sysml.lang.sysml.Definition;
import org.omg.sysml.lang.sysml.Usage;

public class DefinitionAdapter extends ClassifierAdapter {

Expand All @@ -35,10 +34,4 @@ public Definition getTarget() {
return (Definition)super.getTarget();
}

// Utility

public Usage getSubjectParameter() {
return null;
}

}
18 changes: 6 additions & 12 deletions org.omg.sysml/src/org/omg/sysml/adapter/ExpressionAdapter.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*******************************************************************************
* SysML 2 Pilot Implementation
* Copyright (c) 2021-2022 Model Driven Solutions, Inc.
* Copyright (c) 2021-2022, 2024 Model Driven Solutions, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand Down Expand Up @@ -31,12 +31,12 @@
import org.omg.sysml.lang.sysml.FeatureMembership;
import org.omg.sysml.lang.sysml.FeatureValue;
import org.omg.sysml.lang.sysml.Multiplicity;
import org.omg.sysml.lang.sysml.ParameterMembership;
import org.omg.sysml.lang.sysml.SysMLFactory;
import org.omg.sysml.lang.sysml.Type;
import org.omg.sysml.util.ExpressionUtil;
import org.omg.sysml.util.FeatureUtil;
import org.omg.sysml.util.ImplicitGeneralizationMap;
import org.omg.sysml.util.TypeUtil;

public class ExpressionAdapter extends StepAdapter {

Expand Down Expand Up @@ -129,16 +129,11 @@ protected Feature createFeatureForParameter(Feature parameter) {
}
}

protected void computeOutput() {
Expression expression = getTarget();
if (expression.getOutput().isEmpty()) {
Feature parameter = SysMLFactory.eINSTANCE.createFeature();
ParameterMembership membership = SysMLFactory.eINSTANCE.createReturnParameterMembership();
membership.setOwnedMemberParameter(parameter);
expression.getOwnedRelationship().add(membership);
}
@Override
public void addAdditionalMembers() {
TypeUtil.addResultParameterTo(getTarget());
}

@Override
public void doTransform() {
Expression expression = getTarget();
Expand All @@ -147,7 +142,6 @@ public void doTransform() {
expression.getOwningMembership() instanceof FeatureValue) {
addImplicitFeaturingTypesIfNecessary();
}
computeOutput();
createResultConnector(expression.getResult());
}

Expand Down
8 changes: 7 additions & 1 deletion org.omg.sysml/src/org/omg/sysml/adapter/FunctionAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
package org.omg.sysml.adapter;

import org.omg.sysml.lang.sysml.Function;
import org.omg.sysml.util.TypeUtil;

public class FunctionAdapter extends BehaviorAdapter {

Expand All @@ -34,10 +35,15 @@ public Function getTarget() {
return (Function)super.getTarget();
}

@Override
public void addAdditionalMembers() {
TypeUtil.addResultParameterTo(getTarget());
}

@Override
public void doTransform() {
super.doTransform();
createResultConnector(getTarget().getResult());
createResultConnector(getTarget().getResult());
}

}
9 changes: 9 additions & 0 deletions org.omg.sysml/src/org/omg/sysml/adapter/NamespaceAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,13 @@ public void clearCaches() {
importedMembership = null;
}

public void addAdditionalMembers() {
}

@Override
public void doTransform() {
addAdditionalMembers();
super.doTransform();
}

}
Loading