public static void ExtractVariables(AbstractTemplateElement element, IDictionary <string, ExtractedVariable> variables, VariableExtractionParms parms) { if (m_CommandSerializers == null) { m_CommandSerializers = InitCommandSerializers(); } if (!m_CommandSerializers.ContainsKey(element.GetType())) { throw new ArgumentOutOfRangeException(nameof(element), $"ElementType {element.GetType()} not serializable"); } var typeInfo = m_CommandSerializers[element.GetType()]; var ctor = typeInfo.VariableExtractor.GetConstructor(Type.EmptyTypes); var instance = (AbstractVariableExtractor)ctor?.Invoke(new object[0]); if (instance == null) { throw new ArgumentOutOfRangeException(nameof(element), $"Serializer for {element.GetType()} not instanciable"); } instance.Initialize(element, parms); instance.ExtractVariables(variables); }
public static IDictionary <string, ExtractedVariable> ExtractVariables(AbstractTemplateElement element, VariableExtractionParms parms = null) { var variables = new Dictionary <string, ExtractedVariable>(); var extractor = new VariableExtractor(); extractor.Initialize(element, parms ?? new VariableExtractionParms()); extractor.ExtractVariables(variables); return(variables.Where(x => !x.Value.IsLocal).ToDictionary(x => x.Key, x => x.Value)); }