public static void RecursiveBuildStack( CodegenProperty propertyNode, string name, CodegenClassMethods methods, CodegenClassProperties properties) { if (propertyNode.OptionalSymbolProvider == null) { throw new ArgumentException("Property node does not have symbol provider"); } var currentSymbols = new Dictionary<string, Type>(); propertyNode.OptionalSymbolProvider.Provide(currentSymbols); var property = new CodegenPropertyWGraph( name, propertyNode.ReturnType, propertyNode.ReturnTypeName, propertyNode.AdditionalDebugInfo, propertyNode.GetterBlock, propertyNode.SetterBlock, true, propertyNode.IsOverride); propertyNode.AssignedProperty = property; properties.PublicProperties.Add(property); foreach (var child in propertyNode.Children) { RecursiveAdd( child, currentSymbols, methods, properties, propertyNode.IsStatic); } }
private static void RecursiveAdd( CodegenProperty propertyNode, IDictionary<string, Type> currentSymbols, CodegenClassMethods classMethods, CodegenClassProperties classProperties, bool isStatic) { // add pass-thru for those methods that do not have their own scope if (propertyNode.OptionalSymbolProvider != null) { currentSymbols = new Dictionary<string, Type>(); propertyNode.OptionalSymbolProvider.Provide(currentSymbols); } var name = "AutoProp" + classProperties.PrivateProperties.Count; var propertyWGraph = new CodegenPropertyWGraph( name, propertyNode.ReturnType, propertyNode.ReturnTypeName, propertyNode.AdditionalDebugInfo, propertyNode.GetterBlock, propertyNode.SetterBlock, false, false); propertyNode.AssignedProperty = propertyWGraph; classProperties.PrivateProperties.Add(propertyWGraph); foreach (var child in propertyNode.Children) { RecursiveAdd( child, currentSymbols, classMethods, classProperties, isStatic); } }