示例#1
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
                                        JsonSerializer serializer)
        {
            if (reader.TokenType != JsonToken.Null)
            {
                JObject jObject = JObject.Load(reader);

                object target = null;
                if (objectType == typeof(UstNode) || objectType.IsSubclassOf(typeof(UstNode)))
                {
                    var obj      = jObject[nameof(NodeType)];
                    var nodeType = (NodeType)Enum.Parse(typeof(NodeType), obj.ToString());
                    target = Activator.CreateInstance(nodeTypes[nodeType]);

                    if (objectType == typeof(FileNode))
                    {
                        currentFileNode = (FileNode)target;
                    }
                    else
                    {
                        ((UstNode)target).FileNode = currentFileNode;
                    }
                }
                else if (objectType == typeof(Ust.Ust))
                {
                    var obj     = jObject[nameof(Type)];
                    var astType = (UstType)Enum.Parse(typeof(UstType), obj.ToString());
                    if (astType == UstType.Common)
                    {
                        target = new MostCommonUst();
                    }
                    else
                    {
                        target = new MostDetailUst();
                    }
                }
                else
                {
                    throw new FormatException("Invalid JSON");
                }

                serializer.Populate(jObject.CreateReader(), target);
                return(target);
            }

            return(null);
        }
示例#2
0
        public Ust Convert(ParseTree langParseTree)
        {
            Ust result = null;

            var aspxParseTree = (AspxParseTree)langParseTree;

            try
            {
                var converter = new AspxToCsConverter(aspxParseTree.FileName, aspxParseTree.FileData);
                result = new MostCommonUst((FileNode)aspxParseTree.Root.Accept(converter), ConvertedLanguages);
            }
            catch (Exception ex)
            {
                Logger.LogError(new ConversionException(aspxParseTree.FileName, ex));
                result = new MostCommonUst();
            }

            result.FileName = langParseTree.FileName;
            return(result);
        }
示例#3
0
        public Ust Convert(ParseTree langParseTree)
        {
            var antlrParseTree            = (AntlrParseTree)langParseTree;
            ParserRuleContext tree        = antlrParseTree.SyntaxTree;
            ICharStream       inputStream = tree.start.InputStream ?? tree.stop?.InputStream;
            string            filePath    = inputStream != null ? inputStream.SourceName : "";
            Ust      result   = null;
            FileNode fileNode = null;

            if (tree != null && inputStream != null)
            {
                try
                {
                    fileNode = CreateVisitorAndVisit(antlrParseTree.Tokens, tree, filePath, langParseTree.FileData, Logger);
                    result   = new MostCommonUst(fileNode, ConvertedLanguages);
                }
                catch (Exception ex)
                {
                    Logger.LogError(new ConversionException(filePath, ex));

                    if (result == null)
                    {
                        result          = new MostCommonUst();
                        result.Comments = ArrayUtils <CommentLiteral> .EmptyArray;
                    }
                }
            }
            else
            {
                fileNode = new FileNode(filePath, langParseTree.FileData);
                result   = new MostCommonUst()
                {
                    Root = fileNode
                };
                result.Comments = ArrayUtils <CommentLiteral> .EmptyArray;
            }
            result.FileName = langParseTree.FileName;
            result.Comments = antlrParseTree.Comments.Select(c => new CommentLiteral(c.Text, c.GetTextSpan(), fileNode)).ToArray();
            return(result);
        }
示例#4
0
        public Ust Convert(ParseTree langParseTree)
        {
            var        roslynParseTree = (CSharpRoslynParseTree)langParseTree;
            SyntaxTree syntaxTree      = roslynParseTree.SyntaxTree;
            Ust        result;

            if (syntaxTree != null)
            {
                string filePath = syntaxTree.FilePath;
                try
                {
                    var visitor = new RoslynUstCommonConverterVisitor(syntaxTree, filePath);
                    if (SemanticsInfo != null)
                    {
                        visitor.SemanticsInfo = (CSharpRoslynSemanticsInfo)SemanticsInfo;
                    }
                    visitor.Logger = Logger;
                    FileNode fileNode = visitor.Walk();

                    result          = new MostCommonUst(fileNode, ConvertedLanguages);
                    result.Comments = roslynParseTree.Comments.Select(c =>
                                                                      new Common.Nodes.Tokens.Literals.CommentLiteral(c.ToString(), c.GetTextSpan(), fileNode)).ToArray();
                }
                catch (Exception ex)
                {
                    Logger.LogError(new ConversionException(filePath, ex));
                    result = new MostCommonUst();
                }
            }
            else
            {
                result = new MostCommonUst();
            }
            result.FileName = langParseTree.FileName;

            return(result);
        }