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