public override CstNode GenerateTreeFromCode( FileInfo codeFile, Encoding encoding = null, bool throwingParseError = DefaultThrowingParseError) { var time = codeFile.LastWriteTime.ToString(); foreach (var invalidChar in Path.GetInvalidFileNameChars()) { time = time.Replace(invalidChar, '_'); } var cacheFileInfo = new FileInfo( codeFile.FullName + time + Code2XmlConstants.SyntaxTreeCacheExtension); if (cacheFileInfo.Exists) { Console.WriteLine("Cached"); return(CstNode.Deserialize(cacheFileInfo)); } var tree = DelegatingCstGenerator.GenerateTreeFromCode( codeFile, encoding, throwingParseError); tree.Serialize(cacheFileInfo); Console.WriteLine("Saved"); return(tree); }
public override CstNode GenerateTreeFromCodeText( string code, bool throwingParseError = DefaultThrowingParseError) { // TODO: Support throwingParseError and enablePosition using (var p = StartProcess(code)) { var tree = CstNode.Deserialize(p.StandardOutput); SetLocationInformation(tree, code); return(tree); // for debug //try { // var tree = CstNode.Deserialize(p.StandardOutput); // SetLocationInformation(tree, code); // return tree; //} catch (Exception e) { // Debug.WriteLine(p.StandardError.ReadToEnd()); // throw new ParseException(e); //} } }
public void SerializeAndDeserialize() { var proc = new JavaCstGeneratorUsingAntlr3(); var fileInfo = new FileInfo("temp.txt"); var code = @" class Main { void test() { obj.method().<Object>method2(); } } "; var tree = proc.GenerateTreeFromCodeText(code); tree.Serialize(fileInfo); var tree2 = CstNode.Deserialize(fileInfo); Assert.That(tree.Code, Is.EqualTo(code)); Assert.That(tree2.Code, Is.EqualTo(code)); Assert.That(tree2.ToXml().ToCst().Code, Is.EqualTo(code)); fileInfo.Delete(); }
public void SerializeCst() { const string originalCode = @"class Klass {}"; var gen = CstGenerators.JavaUsingAntlr3; var cst = gen.GenerateTreeFromCodeText(originalCode); var stringWriter = new StringWriter(); cst.Serialize(stringWriter); Assert.That( CstNode.Deserialize(new StringReader(stringWriter.ToString())).Code, Is.EqualTo(originalCode)); var memoryStream = new MemoryStream(); var binaryWritr = new BinaryWriter(memoryStream); cst.Serialize(binaryWritr); memoryStream.Seek(0, SeekOrigin.Begin); Assert.That( CstNode.Deserialize(new BinaryReader(memoryStream)).Code, Is.EqualTo(originalCode)); }