/// <summary> /// Given an object name context, extract a FSO. /// </summary> /// <param name="objNameContext"></param> private FinalStateObject Convert(FinalStatePatternParser.Object_nameContext objNameContext, AllowedFSODefinitionReference refType = AllowedFSODefinitionReference.kAsDefinitionOnly) { var fso_name = objNameContext.NAME().GetText(); string fso_base_definition = null; if (objNameContext.base_definition() != null) { fso_base_definition = objNameContext.base_definition().GetText(); } var oldFSO = FSOs.Where(f => f.Name == fso_name).FirstOrDefault(); if (oldFSO != null) { if (refType == AllowedFSODefinitionReference.kAsDefinitionOnly && oldFSO.BaseDefinition != fso_base_definition) { throw new ArgumentOutOfRangeException(string.Format("Object {0} was defined with two base definitions ({1} and {2})", fso_name, fso_base_definition, oldFSO.BaseDefinition)); } return(oldFSO); } else { var new_fso = new FinalStateObject() { Name = fso_name, BaseDefinition = fso_base_definition }; FSOs.Add(new_fso); return(new_fso); } }
/// <summary> /// Given an object name context, extract a FSO. /// </summary> /// <param name="objNameContext"></param> private FinalStateObject Convert(FinalStatePatternParser.Object_nameContext objNameContext, AllowedFSODefinitionReference refType = AllowedFSODefinitionReference.kAsDefinitionOnly) { var fso_name = objNameContext.NAME().GetText(); string fso_base_definition = null; if (objNameContext.base_definition() != null) { fso_base_definition = objNameContext.base_definition().GetText(); } var oldFSO = FSOs.Where(f => f.Name == fso_name).FirstOrDefault(); if (oldFSO != null) { if (refType == AllowedFSODefinitionReference.kAsDefinitionOnly && oldFSO.BaseDefinition != fso_base_definition) { throw new ArgumentOutOfRangeException(string.Format("Object {0} was defined with two base definitions ({1} and {2})", fso_name, fso_base_definition, oldFSO.BaseDefinition)); } return oldFSO; } else { var new_fso = new FinalStateObject() { Name = fso_name, BaseDefinition = fso_base_definition }; FSOs.Add(new_fso); return new_fso; } }