public List <VariableSave> GetExposedVariablesForThisInstance(DataTypes.InstanceSave instance, string parentInstanceName, List <ElementWithState> elementStack, string requiredName) { List <VariableSave> exposedVariables = new List <VariableSave>(); if (elementStack.Count > 1) { ElementWithState containerOfVariables = elementStack[elementStack.Count - 2]; ElementWithState definerOfVariables = elementStack[elementStack.Count - 1]; foreach (VariableSave variable in definerOfVariables.Element.DefaultState.Variables.Where( item => !string.IsNullOrEmpty(item.ExposedAsName) && item.GetRootName() == requiredName)) { if (variable.SourceObject == instance.Name) { // This variable is exposed, let's see if the container does anything with it VariableSave foundVariable = containerOfVariables.StateSave.GetVariableRecursive( parentInstanceName + "." + variable.ExposedAsName); if (foundVariable != null) { if (!string.IsNullOrEmpty(foundVariable.ExposedAsName)) { // This variable is itself exposed, so we should go up one level to see // what's going on. var instanceInParent = containerOfVariables.Element.GetInstance(parentInstanceName); var parentparentInstanceName = containerOfVariables.InstanceName; List <ElementWithState> stackWithLastRemoved = new List <ElementWithState>(); stackWithLastRemoved.AddRange(elementStack); stackWithLastRemoved.RemoveAt(stackWithLastRemoved.Count - 1); var exposedExposed = GetExposedVariablesForThisInstance(instanceInParent, parentparentInstanceName, stackWithLastRemoved, // This used to be this: //foundVariable.ExposedAsName // But it should be this: variable.ExposedAsName ); if (exposedExposed.Count != 0) { foundVariable = exposedExposed.First(); } } VariableSave variableToAdd = new VariableSave(); variableToAdd.Type = variable.Type; variableToAdd.Value = foundVariable.Value; variableToAdd.SetsValue = foundVariable.SetsValue; variableToAdd.Name = variable.Name.Substring(variable.Name.IndexOf('.') + 1); exposedVariables.Add(variableToAdd); } } } } return(exposedVariables); }
public List <VariableSave> GetExposedVariablesForThisInstance(DataTypes.InstanceSave instance, string parentInstanceName, List <ElementWithState> elementStack) { return(GetExposedVariablesForThisInstance(instance, parentInstanceName, elementStack, null)); }