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); }
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); }
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); }
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); }