move parameter assignment logic into separate function

This commit is contained in:
Michael Becker 2025-10-22 14:37:48 -04:00
parent 2bd8ad8b0e
commit d555ac984f

View File

@ -1305,32 +1305,7 @@ public abstract class Oms
*/
{
IEnumerable<InstanceHandle> parameterAssignments = GetRelatedInstances(methodOrMethodBinding, GetInstance(KnownRelationshipGuids.Method_Binding__has__Parameter_Assignment));
foreach (InstanceHandle parm in parameterAssignments)
{
InstanceHandle assignsToParm = GetRelatedInstance(parm, GetInstance(KnownRelationshipGuids.Parameter_Assignment__assigns_to__Work_Data));
IInstanceReference assignsFromWorkData = GetRelatedInstance(parm, GetInstance(KnownRelationshipGuids.Parameter_Assignment__assigns_from__Executable_returning_Work_Data));
if (assignsFromWorkData == null)
{
Console.Error.WriteLine("oms: error: assigns from work data not set for parameter assignment '{0}'", parm.GlobalIdentifier);
continue;
}
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.Class)))
{
assignsFromWorkData = context.GetWorkData<IInstanceReference>(assignsFromWorkData);
}
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.WorkSet)))
{
bool evaluateWorkSet = GetAttributeValue<bool>(parm, GetInstance(KnownAttributeGuids.Boolean.EvaluateWorkSet));
if (evaluateWorkSet)
{
assignsFromWorkData = context.GetWorkData<InstanceHandle>(assignsFromWorkData);
}
}
context.SetWorkData(assignsToParm, assignsFromWorkData);
}
AssignParameters(context, parameterAssignments);
InstanceHandle relatedMethod = GetRelatedInstance(methodOrMethodBinding, GetInstance<Relationship>(KnownRelationshipGuids.Method_Binding__executes__Method));
InstanceHandle relatedMethod_for_Class = GetRelatedInstance(relatedMethod, GetInstance<Relationship>(KnownRelationshipGuids.Method__for__Class));
@ -1451,6 +1426,57 @@ public abstract class Oms
}
}
private void AssignParameters(OmsContext context, IEnumerable<InstanceHandle> parameterAssignments)
{
foreach (InstanceHandle parm in parameterAssignments)
{
InstanceHandle assignsToParm = GetRelatedInstance(parm, GetInstance(KnownRelationshipGuids.Parameter_Assignment__assigns_to__Work_Data));
IInstanceReference assignsFromWorkData = GetRelatedInstance(parm, GetInstance(KnownRelationshipGuids.Parameter_Assignment__assigns_from__Executable_returning_Work_Data));
if (assignsFromWorkData == null)
{
Console.Error.WriteLine("oms: error: assigns from work data not set for parameter assignment '{0}'", parm.GlobalIdentifier);
continue;
}
// there are several possibilities:
// `assigns to Parm` is a Class which is an Attribute. `assigns from Work Data` is an Attribute.
// in this case, we should set the work data to the value of the work data pointed to by `assigns from`
// `Token` := `User Name` -> `Token` = "testinguser"
//
// `assigns to Parm` is a Class. `assigns from Work Data` is a Class which is NOT an Attribute.
// just use the ref as-is
// `System User` := `User` -> `System User` = `User`
//
// `Worker who can Resign` := `Current Signed In Worker` -> `Worker who can Resign` = `Steve`
if (IsInstanceOf(assignsToParm, GetInstance(KnownInstanceGuids.Classes.Attribute)) && IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.Attribute)))
{
// if `assigns to Parm` is a Class which inherits from Attribute, and `assigns from Work Data` is an Attribute, then assign the underlying work data
context.SetWorkData(assignsToParm, context.GetWorkData(assignsFromWorkData));
}
else
{
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.Class)))
{
assignsFromWorkData = context.GetWorkData<IInstanceReference>(assignsFromWorkData);
}
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.WorkSet)))
{
bool evaluateWorkSet = GetAttributeValue<bool>(parm, GetInstance(KnownAttributeGuids.Boolean.EvaluateWorkSet));
if (evaluateWorkSet)
{
assignsFromWorkData = context.GetWorkData<InstanceHandle>(assignsFromWorkData);
}
}
context.SetWorkData(assignsToParm, assignsFromWorkData);
}
}
}
private InstanceHandle ExecuteMethodBinding(OmsContext context, InstanceHandle methodBinding, IInstanceReference? targetInstance = null)
{
InstanceHandle method = GetRelatedInstance(methodBinding, GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method));