static Expression GetFluentFromQuery(QueryExpression query, IEnumerable <string> underscoreIdentifiers) { var queryExpander = new QueryExpressionExpander(); var expandResult = queryExpander.ExpandQueryExpressions(query, underscoreIdentifiers); return((Expression)expandResult.AstNode); }
public static PreparedCompilation CreateCompilation(IEnumerable <ISourceFile> sourceFiles, IEnumerable <IAssemblyReference> references, IList <string> defineConstants) { IProjectContent project = new CSharpProjectContent(); var files = sourceFiles.Select(f => { using (var rdr = f.Open()) { var syntaxTree = CreateParser(defineConstants).Parse(rdr, f.Filename); var expandResult = new QueryExpressionExpander().ExpandQueryExpressions(syntaxTree); syntaxTree = (expandResult != null ? (SyntaxTree)expandResult.AstNode : syntaxTree); return(new ParsedSourceFile(syntaxTree, new CSharpUnresolvedFile { FileName = f.Filename })); } }).ToList(); foreach (var f in files) { var tcv = new TypeSystemConvertVisitor(f.ParsedFile); f.SyntaxTree.AcceptVisitor(tcv); project = project.AddOrUpdateFiles(f.ParsedFile); } project = project.AddAssemblyReferences(references); return(new PreparedCompilation(project.CreateCompilation(), files)); }
public static PreparedCompilation CreateCompilation(string assemblyName, IEnumerable<ISourceFile> sourceFiles, IEnumerable<IAssemblyReference> references, IList<string> defineConstants, IEnumerable<IAssemblyResource> resources) { IProjectContent project = new CSharpProjectContent().SetAssemblyName(assemblyName); var files = sourceFiles.Select(f => { using (var rdr = f.Open()) { var syntaxTree = CreateParser(defineConstants).Parse(rdr, f.Filename); var expandResult = new QueryExpressionExpander().ExpandQueryExpressions(syntaxTree); syntaxTree = (expandResult != null ? (SyntaxTree)expandResult.AstNode : syntaxTree); return new ParsedSourceFile(syntaxTree, new CSharpUnresolvedFile { FileName = f.Filename }); } }).ToList(); foreach (var f in files) { var tcv = new TypeSystemConvertVisitor(f.ParsedFile); f.SyntaxTree.AcceptVisitor(tcv); project = project.AddOrUpdateFiles(f.ParsedFile); } project = project.AddAssemblyReferences(references); if (resources != null) { var reslist = resources.ToList(); if (reslist.Count > 0) project = project.AddResources(reslist); } return new PreparedCompilation(project.CreateCompilation(), files); }
protected void BuildSyntaxTree() { for (int i = 0; i < this.SourceFiles.Count; i++) { var fileName = this.SourceFiles[i]; using (var reader = new StreamReader(fileName)) { var parser = new ICSharpCode.NRefactory.CSharp.CSharpParser(); if (!string.IsNullOrEmpty(Defines)) { string[] defs = Defines.Split(';'); foreach (string def in defs) { parser.CompilerSettings.ConditionalSymbols.Add(def); } } if (this.DefineConstants != null && this.DefineConstants.Count > 0) { foreach (var defineConstant in this.DefineConstants) { parser.CompilerSettings.ConditionalSymbols.Add(defineConstant); } } var syntaxTree = parser.Parse(reader, fileName); if (parser.HasErrors) { foreach (var error in parser.Errors) { throw new EmitterException(syntaxTree, string.Format("Parsing error in a file {0} {2}: {1}", fileName, error.Message, error.Region.Begin.ToString())); } } var expandResult = new QueryExpressionExpander().ExpandQueryExpressions(syntaxTree); syntaxTree = (expandResult != null ? (SyntaxTree)expandResult.AstNode : syntaxTree); var emptyLambdaDetecter = new EmptyLambdaDetecter(); syntaxTree.AcceptVisitor(emptyLambdaDetecter); if (emptyLambdaDetecter.Found) { var fixer = new EmptyLambdaFixer(); var astNode = syntaxTree.AcceptVisitor(fixer); syntaxTree = (astNode != null ? (SyntaxTree)astNode : syntaxTree); } var f = new ParsedSourceFile(syntaxTree, new CSharpUnresolvedFile { FileName = fileName }); this.ParsedSourceFiles.Add(f); var tcv = new TypeSystemConvertVisitor(f.ParsedFile); f.SyntaxTree.AcceptVisitor(tcv); } } }
private void ParseSkFile(NFile file) { using (var fs = File.OpenRead(file.Filename)) { file.SyntaxTree = CSharpParser.Parse(fs, file.Filename); fs.Close(); } var q = new QueryExpressionExpander().ExpandQueryExpressions(file.SyntaxTree); if (q != null) { file.SyntaxTree = (SyntaxTree)q.AstNode; } file.UnresolvedFile = file.SyntaxTree.ToMappedTypeSystem(); file.UnresolvedFile.Tag = file; file.SyntaxTree.AddAnnotation(file); }
protected void BuildSyntaxTree() { this.Log.Info("Building syntax tree..."); var rewriter = new SharpSixRewriter(this); for (int i = 0; i < this.SourceFiles.Count; i++) { var fileName = this.SourceFiles[i]; this.Log.Trace("Source file " + (fileName ?? string.Empty) + " ..."); var parser = new ICSharpCode.NRefactory.CSharp.CSharpParser(); if (this.DefineConstants != null && this.DefineConstants.Count > 0) { foreach (var defineConstant in this.DefineConstants) { parser.CompilerSettings.ConditionalSymbols.Add(defineConstant); } } var syntaxTree = parser.Parse(rewriter.Rewrite(i), fileName); syntaxTree.FileName = fileName; //var syntaxTree = parser.Parse(reader, fileName); this.Log.Trace("\tParsing syntax tree done"); if (parser.HasErrors) { foreach (var error in parser.Errors) { throw new EmitterException(syntaxTree, string.Format("Parsing error in a file {0} {2}: {1}", fileName, error.Message, error.Region.Begin.ToString())); } } var expandResult = new QueryExpressionExpander().ExpandQueryExpressions(syntaxTree); this.Log.Trace("\tExpanding query expressions done"); syntaxTree = (expandResult != null ? (SyntaxTree)expandResult.AstNode : syntaxTree); var emptyLambdaDetecter = new EmptyLambdaDetecter(); syntaxTree.AcceptVisitor(emptyLambdaDetecter); this.Log.Trace("\tAccepting lambda detector visitor done"); if (emptyLambdaDetecter.Found) { var fixer = new EmptyLambdaFixer(); var astNode = syntaxTree.AcceptVisitor(fixer); this.Log.Trace("\tAccepting lambda fixer visitor done"); syntaxTree = (astNode != null ? (SyntaxTree)astNode : syntaxTree); syntaxTree.FileName = fileName; } var f = new ParsedSourceFile(syntaxTree, new CSharpUnresolvedFile { FileName = fileName }); this.ParsedSourceFiles.Add(f); var tcv = new TypeSystemConvertVisitor(f.ParsedFile); f.SyntaxTree.AcceptVisitor(tcv); this.Log.Trace("\tAccepting type system convert visitor done"); this.Log.Trace("Source file " + (fileName ?? string.Empty) + " done"); } this.Log.Info("Building syntax tree done"); }
public PreparedCompilation CreateCompilation(IEnumerable<ISourceFile> sourceFiles, IEnumerable<IAssemblyReference> references, IList<string> defineConstants) { IProjectContent project = new CSharpProjectContent(); var files = sourceFiles.Select(f => { using (var rdr = f.Open()) { var syntaxTree = CreateParser(defineConstants).Parse(rdr, f.Filename); var expandResult = new QueryExpressionExpander().ExpandQueryExpressions(syntaxTree); syntaxTree = (expandResult != null ? (SyntaxTree)expandResult.AstNode : syntaxTree); var definedSymbols = DefinedSymbolsGatherer.Gather(syntaxTree, defineConstants); return new PreparedCompilation.ParsedSourceFile(syntaxTree, new CSharpUnresolvedFile(f.Filename, new UsingScope()), definedSymbols); } }).ToList(); foreach (var f in files) { var tcv = new TypeSystemConvertVisitor(f.ParsedFile); f.SyntaxTree.AcceptVisitor(tcv); project = project.AddOrUpdateFiles(f.ParsedFile); } project = project.AddAssemblyReferences(references); return new PreparedCompilation(project.CreateCompilation(), files); }
private void BuildSyntaxTreeForFile(int index, ref string[] rewriten) { var fileName = this.SourceFiles[index]; this.Log.Trace("Source file " + (fileName ?? string.Empty) + " ..."); var parser = new ICSharpCode.NRefactory.CSharp.CSharpParser(); if (this.DefineConstants != null && this.DefineConstants.Count > 0) { foreach (var defineConstant in this.DefineConstants) { parser.CompilerSettings.ConditionalSymbols.Add(defineConstant); } } var syntaxTree = parser.Parse(rewriten[index], fileName); syntaxTree.FileName = fileName; this.Log.Trace("\tParsing syntax tree done"); if (parser.HasErrors) { var errors = new List <string>(); foreach (var error in parser.Errors) { errors.Add(fileName + ":" + error.Region.BeginLine + "," + error.Region.BeginColumn + ": " + error.Message); } throw new EmitterException(syntaxTree, "Error parsing code." + Environment.NewLine + String.Join(Environment.NewLine, errors)); } var expandResult = new QueryExpressionExpander().ExpandQueryExpressions(syntaxTree); this.Log.Trace("\tExpanding query expressions done"); syntaxTree = (expandResult != null ? (SyntaxTree)expandResult.AstNode : syntaxTree); var emptyLambdaDetecter = new EmptyLambdaDetecter(); syntaxTree.AcceptVisitor(emptyLambdaDetecter); this.Log.Trace("\tAccepting lambda detector visitor done"); if (emptyLambdaDetecter.Found) { var fixer = new EmptyLambdaFixer(); var astNode = syntaxTree.AcceptVisitor(fixer); this.Log.Trace("\tAccepting lambda fixer visitor done"); syntaxTree = (astNode != null ? (SyntaxTree)astNode : syntaxTree); syntaxTree.FileName = fileName; } var f = new ParsedSourceFile(syntaxTree, new CSharpUnresolvedFile { FileName = fileName }); this.ParsedSourceFiles[index] = f; var tcv = new TypeSystemConvertVisitor(f.ParsedFile); f.SyntaxTree.AcceptVisitor(tcv); this.Log.Trace("\tAccepting type system convert visitor done"); this.Log.Trace("Source file " + (fileName ?? string.Empty) + " done"); }
protected void BuildSyntaxTree() { for (int i = 0; i < this.SourceFiles.Count; i++) { var fileName = this.SourceFiles[i]; using (var reader = new StreamReader(fileName)) { var parser = new ICSharpCode.NRefactory.CSharp.CSharpParser(); if (this.DefineConstants != null && this.DefineConstants.Count > 0) { foreach (var defineConstant in this.DefineConstants) { parser.CompilerSettings.ConditionalSymbols.Add(defineConstant); } } var syntaxTree = parser.Parse(reader, fileName); if (parser.HasErrors) { foreach (var error in parser.Errors) { throw new EmitterException(syntaxTree, string.Format("Parsing error in a file {0} {2}: {1}", fileName, error.Message, error.Region.Begin.ToString())); } } var expandResult = new QueryExpressionExpander().ExpandQueryExpressions(syntaxTree); syntaxTree = (expandResult != null ? (SyntaxTree)expandResult.AstNode : syntaxTree); var emptyLambdaDetecter = new EmptyLambdaDetecter(); syntaxTree.AcceptVisitor(emptyLambdaDetecter); if (emptyLambdaDetecter.Found) { var fixer = new EmptyLambdaFixer(); var astNode = syntaxTree.AcceptVisitor(fixer); syntaxTree = (astNode != null ? (SyntaxTree)astNode : syntaxTree); } var f = new ParsedSourceFile(syntaxTree, new CSharpUnresolvedFile { FileName = fileName }); this.ParsedSourceFiles.Add(f); var tcv = new TypeSystemConvertVisitor(f.ParsedFile); f.SyntaxTree.AcceptVisitor(tcv); } } }