Пример #1
0
        private PropertyDeclarationSyntax CreateStringProperty(string propertyIdentifierName, string targetFieldName, string startType, SyntaxList<MemberDeclarationSyntax> syntaxList, DynamicPlugin dp)
        {
            List<string> path = dp.FindStringPath(targetFieldName, startType);
            string name = "";
            if (path.Count == 1)
            {
                name = path.First();
            }
            else if (path.Count > 1)
            {
                foreach (string obj in path.Skip(1).Take(path.Count - 1))
                {
                    string val = "";
                    foreach (ClassDeclarationSyntax classes in syntaxList.Where(m => m is ClassDeclarationSyntax))
                    {
                        foreach (PropertyDeclarationSyntax prop in classes.Members.Where(m => m is PropertyDeclarationSyntax))
                        {
                            if (prop.Type.ToString().Contains(obj + "[]"))
                            {
                                val = prop.Identifier.ToString();
                                break;
                            }
                        }
                        if (val != "")
                            break;
                    }
                    if (val != "")
                        name += val + "[0].";
                }
                name += path.Last();
            }
            ExpressionSyntax expr;
            if (name != "")
                expr = Syntax.MemberAccessExpression(SyntaxKind.MemberAccessExpression, Syntax.ThisExpression(), Syntax.IdentifierName(name));
            else
                expr = Syntax.BaseExpression(Syntax.Token(SyntaxKind.NullKeyword));
            ReturnStatementSyntax rs = Syntax.ReturnStatement(expr);
            SyntaxList<ReturnStatementSyntax> list = Syntax.List(rs);
            BlockSyntax block = Syntax.Block(list);
            AccessorDeclarationSyntax acc = Syntax.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration, block);
            PropertyDeclarationSyntax pd2 = Syntax.PropertyDeclaration(null,
                Syntax.TokenList(new SyntaxToken[] { Syntax.Token(SyntaxKind.PublicKeyword), Syntax.Token(SyntaxKind.OverrideKeyword) }),
                Syntax.ParseTypeName("string"),
                null,
                Syntax.Identifier(propertyIdentifierName),
                Syntax.AccessorList(Syntax.List(acc)));

            return pd2;
        }
Пример #2
0
        private void RecurseStructure(ref StringBuilder sb, DynamicPlugin dp, string tabs)
        {
            //print current level
            if (dp.parent != null)
                sb.AppendLine(tabs + dp.name.Replace(dp.parent.name, ""));
            else
                sb.AppendLine(tabs + dp.name);
            //indent subfields
            tabs = tabs + "\t";

            if (dp.stringFields.Count > 0)
            {
                foreach (string stringField in dp.stringFields)
                {
                    sb.AppendLine(tabs + stringField);
                }
            }
            if (dp.nestedObjects.Count > 0)
            {
                foreach (DynamicPlugin dyn in dp.nestedObjects)
                {
                    RecurseStructure(ref sb, dyn, tabs);
                }
            }
        }
Пример #3
0
        private DynamicPlugin CreateDynamicPluginObject(string csFile)
        {
            bool debugging = true;
            SyntaxTree tr = SyntaxTree.ParseFile(csFile);

            StringBuilder sb = new StringBuilder();
            DynamicPlugin plugin = new DynamicPlugin(((ClassDeclarationSyntax)tr.GetRoot().Members.First(m => m is ClassDeclarationSyntax)).Identifier.ToString());
            int count = 0;
            foreach (ClassDeclarationSyntax classes in tr.GetRoot().Members.Where(m => m is ClassDeclarationSyntax))
            {
                if (classes.Identifier.ToString() == "NewDataSet")
                    continue;

                DynamicPlugin p = null;
                if (count != 0)
                {
                    p = plugin.ObjectExists(classes.Identifier.ToString());
                }
                else
                {
                    p = plugin;
                    count++;
                }
                if (debugging)
                    sb.AppendLine(classes.Identifier.ToString());
                foreach (FieldDeclarationSyntax field in classes.Members.Where(cl => cl is FieldDeclarationSyntax))
                {
                    if (field.ToString().Contains(" string "))
                    {
                        //gets the semicolon token, then the actual identifier
                        string fieldName = field.GetLastToken().GetPreviousToken().ToString().Replace("Field", "");
                        p.AddStringField(fieldName);
                        if (debugging)
                            sb.AppendLine(fieldName);
                    }
                    else
                    {
                        string typeName = field.Declaration.Type.ToString().Replace("[]", "");
                        p.AddObject(typeName);
                        if (debugging)
                            sb.AppendLine(typeName);
                    }
                }
            }
            if (debugging)
            {
                sb.AppendLine(plugin.PrintStructure());
                string text = sb.ToString();

                //output here
                System.IO.FileStream output = System.IO.File.Create(Path.GetDirectoryName(csFile) + "\\test.txt");
                byte[] bytes = UTF8Encoding.UTF8.GetBytes(text);
                output.Write(bytes, 0, bytes.Length);
                output.Close();
            }

            return plugin;
        }