Пример #1
0
        public void Store(
            ITypeInfoContainer typeInfoContainer,
            ProjectBindContainerXml projectXml
            )
        {
            if (typeInfoContainer is null)
            {
                throw new ArgumentNullException(nameof(typeInfoContainer));
            }

            if (projectXml is null)
            {
                throw new ArgumentNullException(nameof(projectXml));
            }

            var sb = new StringBuilder();

            foreach (var line in projectXml.GetXml().Split(new [] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
            {
                sb.Append(SingleLineComment);
                sb.AppendLine(line);
            }

            var xml = sb.ToString();

            typeInfoContainer.AddAdditionalFile(xml);
        }
Пример #2
0
        private void DoGenerateXml(
            ITypeInfoContainer typeInfoContainer,
            IReadOnlyList <ClusterMethodBindings> clusterMethodBindings
            )
        {
            if (typeInfoContainer is null)
            {
                throw new ArgumentNullException(nameof(typeInfoContainer));
            }

            if (clusterMethodBindings is null)
            {
                throw new ArgumentNullException(nameof(clusterMethodBindings));
            }

            #region create xml representation

            var clusterXmls = new List <ClusterBindContainerXml>();
            foreach (var clusterMethodBinding in clusterMethodBindings)
            {
                var clusterType    = clusterMethodBinding.ClusterType;
                var clusterTypeXml = clusterType.ToXml();

                var methodBindXmls = new List <MethodBindContainerXml>();
                foreach (var methodBinding in clusterMethodBinding.MethodBindings)
                {
                    var methodDeclaration = methodBinding.Item1;

                    var methodDeclarationXml = new MethodDeclarationInfoXml(
                        methodDeclaration.ToXml(),
                        methodDeclaration.Identifier.Text
                        );

                    var methodBindXml = new MethodBindContainerXml(
                        clusterTypeXml,
                        methodDeclarationXml,
                        methodBinding.Item2.ConvertAll(
                            bc => new BindingXml(
                                bc.UniqueUnstableIdentifier.ToString(),
                                bc.TargetRepresentation,
                                bc.BindFromTypes.ConvertAll(s => s.ToXml()).ToArray(),
                                bc.BindToType.ToXml(),
                                bc.ConstructorArguments.ToXml(),
                                bc.Scope.ToString(),
                                (int)bc.Scope,
                                bc.IsConditional,
                                bc.IsConventional,
                                bc.ExpressionNode.ToXml()
                                )
                            ).ToArray()
                        );
                    methodBindXmls.Add(methodBindXml);
                }

                var clusterXml = new ClusterBindContainerXml(
                    clusterTypeXml,
                    methodBindXmls.ToArray()
                    );
                clusterXmls.Add(clusterXml);
            }

            var projectXml = new ProjectBindContainerXml(
                clusterXmls.ToArray()
                );

            #endregion

            var meta = new BuiltinMeta();
            meta.Store(
                typeInfoContainer,
                projectXml
                );
        }