Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }