public virtual INode Visit(ICompilationUnit unit, T data) { CompilationUnit newUnit = CreateInstance(unit, data); foreach (IUsing u in unit.Usings) { newUnit.Add((IUsing)u.AcceptVisitor(this, data)); } foreach (IAttribute a in unit.Attributes) { newUnit.Add((IAttribute)a.AcceptVisitor(this, data)); } foreach (IType t in unit.Types) { newUnit.Add((IType)t.AcceptVisitor(this, data)); } return(newUnit); }
public override ParsedDocument Parse (ProjectDom dom, string fileName, string content) { var result = new ParsedDocument (fileName); var unit = new MonoDevelop.Projects.Dom.CompilationUnit (fileName); result.CompilationUnit = unit; if (string.IsNullOrEmpty (content)) return result; lock (CompilerCallableEntryPoint.parseLock) { var tagComments = ProjectDomService.SpecialCommentTags.GetNames (); List<string > compilerArguments = new List<string> (); if (dom != null && dom.Project != null && MonoDevelop.Ide.IdeApp.Workspace != null) { DotNetProjectConfiguration configuration = dom.Project.GetConfiguration (MonoDevelop.Ide.IdeApp.Workspace.ActiveConfiguration) as DotNetProjectConfiguration; CSharpCompilerParameters par = configuration != null ? configuration.CompilationParameters as CSharpCompilerParameters : null; if (par != null) { if (!string.IsNullOrEmpty (par.DefineSymbols)) { compilerArguments.Add ("-define:" + string.Join (";", par.DefineSymbols.Split (';', ',', ' ', '\t').Where (s => !string.IsNullOrWhiteSpace (s)))); } if (par.UnsafeCode) compilerArguments.Add ("-unsafe"); if (par.TreatWarningsAsErrors) compilerArguments.Add ("-warnaserror"); if (!string.IsNullOrEmpty (par.NoWarnings)) compilerArguments.Add ("-nowarn:" + string.Join (",", par.NoWarnings.Split (';', ',', ' ', '\t'))); compilerArguments.Add ("-warn:" + par.WarningLevel); compilerArguments.Add ("-langversion:" + GetLangString (par.LangVersion)); if (par.GenerateOverflowChecks) compilerArguments.Add ("-checked"); } } CompilerCompilationUnit top; ErrorReportPrinter errorReportPrinter = new ErrorReportPrinter (); using (var stream = new MemoryStream (Encoding.UTF8.GetBytes (content))) { top = CompilerCallableEntryPoint.ParseFile (compilerArguments.ToArray (), stream, fileName, errorReportPrinter); } if (top == null) return null; foreach (var special in top.SpecialsBag.Specials) { var comment = special as SpecialsBag.Comment; if (comment != null) { VisitComment (result, comment, tagComments); } else { VisitPreprocessorDirective (result, special as SpecialsBag.PreProcessorDirective); } } // convert DOM var conversionVisitor = new ConversionVisitor (top.LocationsBag); try { conversionVisitor.Dom = dom; conversionVisitor.ParsedDocument = result; conversionVisitor.Unit = unit; top.UsingsBag.Global.Accept (conversionVisitor); top.ModuleCompiled.Accept (conversionVisitor); } catch (Exception ex) { System.Console.WriteLine (ex); } result.LanguageAST = new ICSharpCode.NRefactory.CSharp.CSharpParser().Parse (top, 0); // parser errorse errorReportPrinter.Errors.ForEach (e => conversionVisitor.ParsedDocument.Add (e)); return result; } }
// static ICSharpCode.NRefactory.Visitors.CodeDomVisitor domVisitor = new ICSharpCode.NRefactory.Visitors.CodeDomVisitor (); public DomConverter (string fileName) { cu = new MonoDevelop.Projects.Dom.CompilationUnit (fileName); }
// static ICSharpCode.NRefactory.Visitors.CodeDomVisitor domVisitor = new ICSharpCode.NRefactory.Visitors.CodeDomVisitor (); public DomConverter (string fileName) { cu = new CompilationUnit (fileName); }
// static ICSharpCode.OldNRefactory.Visitors.CodeDomVisitor domVisitor = new ICSharpCode.OldNRefactory.Visitors.CodeDomVisitor (); public DomConverter(string fileName) { cu = new CompilationUnit(fileName); }
// static ICSharpCode.NRefactory.Visitors.CodeDomVisitor domVisitor = new ICSharpCode.NRefactory.Visitors.CodeDomVisitor (); public DomConverter(string fileName) { cu = new MonoDevelop.Projects.Dom.CompilationUnit(fileName); }
public override ParsedDocument Parse (ProjectDom dom, string fileName, string content) { lock (CompilerCallableEntryPoint.parseLock) { if (string.IsNullOrEmpty (content)) return null; List<string> compilerArguments = new List<string> (); var unit = new MonoDevelop.Projects.Dom.CompilationUnit (fileName);; var result = new ParsedDocument (fileName); result.CompilationUnit = unit; ICSharpCode.NRefactory.Parser.CSharp.Lexer lexer = new ICSharpCode.NRefactory.Parser.CSharp.Lexer (new StringReader (content)); lexer.SpecialCommentTags = ProjectDomService.SpecialCommentTags.GetNames (); lexer.EvaluateConditionalCompilation = true; if (dom != null && dom.Project != null && MonoDevelop.Ide.IdeApp.Workspace != null) { DotNetProjectConfiguration configuration = dom.Project.GetConfiguration (MonoDevelop.Ide.IdeApp.Workspace.ActiveConfiguration) as DotNetProjectConfiguration; CSharpCompilerParameters par = configuration != null ? configuration.CompilationParameters as CSharpCompilerParameters : null; if (par != null) { lexer.SetConditionalCompilationSymbols (par.DefineSymbols); if (!string.IsNullOrEmpty (par.DefineSymbols)) { compilerArguments.Add ("-define:" + string.Join (";", par.DefineSymbols.Split (';', ',', ' ', '\t'))); } if (par.UnsafeCode) compilerArguments.Add ("-unsafe"); if (par.TreatWarningsAsErrors) compilerArguments.Add ("-warnaserror"); if (!string.IsNullOrEmpty (par.NoWarnings)) compilerArguments.Add ("-nowarn:"+ string.Join (",", par.NoWarnings.Split (';', ',', ' ', '\t'))); compilerArguments.Add ("-warn:" + par.WarningLevel); compilerArguments.Add ("-langversion:" + GetLangString (par.LangVersion)); if (par.GenerateOverflowChecks) compilerArguments.Add ("-checked"); } } // compilerArguments.ForEach (arg => Console.WriteLine (arg)); while (lexer.NextToken ().Kind != ICSharpCode.NRefactory.Parser.CSharp.Tokens.EOF) ; CompilerCompilationUnit top; ErrorReportPrinter errorReportPrinter = new ErrorReportPrinter (); using (var stream = new MemoryStream (Encoding.Default.GetBytes (content))) { top = CompilerCallableEntryPoint.ParseFile (compilerArguments.ToArray (), stream, fileName, errorReportPrinter); } if (top == null) return null; SpecialTracker tracker = new SpecialTracker (result); foreach (ICSharpCode.NRefactory.ISpecial special in lexer.SpecialTracker.CurrentSpecials) { special.AcceptVisitor (tracker, null); } // convert DOM var conversionVisitor = new ConversionVisitor (top.LocationsBag, lexer.SpecialTracker.CurrentSpecials); conversionVisitor.Dom = dom; conversionVisitor.Unit = unit; conversionVisitor.ParsedDocument = result; top.UsingsBag.Global.Accept (conversionVisitor); unit.Tag = top; // parser errors errorReportPrinter.Errors.ForEach (e => conversionVisitor.ParsedDocument.Add (e)); return result; } }