예제 #1
0
 private Dom.ICompilationUnit ConvertCompilationUnit(NRefactory.Ast.CompilationUnit cu)
 {
     Dom.NRefactoryResolver.NRefactoryASTConvertVisitor converter;
     converter = new Dom.NRefactoryResolver.NRefactoryASTConvertVisitor(Global.Projects.CSProjectContent);
     cu.AcceptVisitor(converter, null);
     return(converter.Cu);
 }
		public override ParsedDocument Parse (ProjectDom dom, string fileName, string content)
		{
			using (ICSharpCode.NRefactory.IParser parser = ICSharpCode.NRefactory.ParserFactory.CreateParser (ICSharpCode.NRefactory.SupportedLanguage.CSharp, new StringReader (content))) {

				ParsedDocument result = new ParsedDocument (fileName);
				result.CompilationUnit = new MonoDevelop.Projects.Dom.CompilationUnit (fileName);
				
				parser.Errors.Error += delegate(int line, int col, string message) { result.Add (new Error (ErrorType.Error, line, col, message)); };
				parser.Lexer.SpecialCommentTags = LexerTags;
				parser.Lexer.EvaluateConditionalCompilation = true;
				if (dom != null && dom.Project != null) {
					DotNetProjectConfiguration conf = dom.Project.DefaultConfiguration as DotNetProjectConfiguration;
					CSharpCompilerParameters par = conf != null ? conf.CompilationParameters as CSharpCompilerParameters : null;
					if (par != null)
						parser.Lexer.SetConditionalCompilationSymbols (par.DefineSymbols);
				}
				parser.Parse ();
				
				SpecialTracker tracker = new SpecialTracker (result);
				foreach (ICSharpCode.NRefactory.ISpecial special in parser.Lexer.SpecialTracker.CurrentSpecials) {
					special.AcceptVisitor (tracker, null);
				}

				foreach (ICSharpCode.NRefactory.Parser.TagComment tagComment in parser.Lexer.TagComments) {
					result.Add (new Tag (tagComment.Tag, tagComment.CommentText, new DomRegion (tagComment.StartPosition.Y, tagComment.StartPosition.X, tagComment.EndPosition.Y, tagComment.EndPosition.X)));
				}
				ConversionVisitior visitor = new ConversionVisitior (result, parser.Lexer.SpecialTracker.CurrentSpecials);
				visitor.VisitCompilationUnit (parser.CompilationUnit, null);
				result.CompilationUnit.Tag = parser.CompilationUnit;
				LastUnit = parser.CompilationUnit;
				return result;
			}
		}
예제 #3
0
        List <MonoDevelop.Projects.CodeGeneration.MemberReference> GetReferences(ResolveResult resolveResult)
        {
            INode member = null;

            if (resolveResult is MemberResolveResult)
            {
                member = ((MemberResolveResult)resolveResult).ResolvedMember;
                if (member == null)
                {
                    member = dom.GetType(resolveResult.ResolvedType);
                }
            }
            if (resolveResult is ParameterResolveResult)
            {
                member = ((ParameterResolveResult)resolveResult).Parameter;
            }
            if (resolveResult is LocalVariableResolveResult)
            {
                member = ((LocalVariableResolveResult)resolveResult).LocalVariable;
            }

            if (member != null)
            {
                try {
                    NRefactoryResolver   resolver = new NRefactoryResolver(dom, Document.CompilationUnit, ICSharpCode.NRefactory.SupportedLanguage.CSharp, Document.TextEditor, Document.FileName);
                    FindMemberAstVisitor visitor  = new FindMemberAstVisitor(textEditorData.Document, resolver, member);
                    visitor.IncludeXmlDocumentation = true;
                    ICSharpCode.NRefactory.Ast.CompilationUnit unit = Document.CompilationUnit.Tag as ICSharpCode.NRefactory.Ast.CompilationUnit;
                    if (unit == null)
                    {
                        return(null);
                    }
                    visitor.RunVisitor(unit);
                    return(visitor.FoundReferences);
                } catch (Exception e) {
                    LoggingService.LogError("Error in highlight usages extension.", e);
                }
            }
            return(null);
        }
예제 #4
0
		public override ParsedDocument Parse (ProjectDom dom, string fileName, string content)
		{
			using (ICSharpCode.NRefactory.IParser parser = ICSharpCode.NRefactory.ParserFactory.CreateParser (ICSharpCode.NRefactory.SupportedLanguage.CSharp, new StringReader (content))) {
				ParsedDocument result = new ParsedDocument (fileName);
				result.CompilationUnit = new MonoDevelop.Projects.Dom.CompilationUnit (fileName);
				
				parser.ParseMethodBodies = false;
				parser.Errors.Error += delegate(int line, int col, string message) { result.Add (new Error (ErrorType.Error, line, col, message)); };
				parser.Lexer.SpecialCommentTags = ProjectDomService.SpecialCommentTags.GetNames ();
				parser.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)
						parser.Lexer.SetConditionalCompilationSymbols (par.DefineSymbols);
				}
				parser.Parse ();
				
				SpecialTracker tracker = new SpecialTracker (result);
				foreach (ICSharpCode.NRefactory.ISpecial special in parser.Lexer.SpecialTracker.CurrentSpecials) {
					special.AcceptVisitor (tracker, null);
				}

				foreach (ICSharpCode.NRefactory.Parser.TagComment tagComment in parser.Lexer.TagComments) {
					result.Add (new Tag (tagComment.Tag, tagComment.CommentText, new DomRegion (tagComment.StartPosition.Y, tagComment.StartPosition.X, tagComment.EndPosition.Y, tagComment.EndPosition.X)));
				}
				ConversionVisitior visitor = new ConversionVisitior (dom, result, parser.Lexer.SpecialTracker.CurrentSpecials);
				visitor.VisitCompilationUnit (parser.CompilationUnit, null);
				result.CompilationUnit.Tag = parser.CompilationUnit;
				LastUnit = parser.CompilationUnit;
				return result;
			}
		}
예제 #5
0
 public override object VisitCompilationUnit(ICSharpCode.NRefactory.Ast.CompilationUnit compilationUnit, object data)
 {
     //TODO: Imports, Comments
     compilationUnit.AcceptChildren(this, data);
     return(cu);
 }
예제 #6
0
        public syntax_tree_node get_syntax_tree(ICSharpCode.NRefactory.Ast.CompilationUnit unit, string FileName)
        {
            unit_module   mod     = null;
            List <string> imports = new List <string>();

            foreach (ICSharpCode.NRefactory.Ast.INode cu in unit.Children)
            {
                if (cu is ICSharpCode.NRefactory.Ast.TypeDeclaration)
                {
                    ICSharpCode.NRefactory.Ast.TypeDeclaration td = cu as ICSharpCode.NRefactory.Ast.TypeDeclaration;
                    if (td.Type == ICSharpCode.NRefactory.Ast.ClassType.Module)
                    {
                        mod                       = new unit_module();
                        mod.Language              = LanguageId.VBNET;
                        mod.file_name             = FileName;
                        mod.unit_name             = new unit_name();
                        mod.unit_name.idunit_name = new ident(td.Name);
                        mod.compiler_directives   = new List <compiler_directive>();
                        mod.compiler_directives.Add(new compiler_directive(new token_info("reference"), new token_info("System.dll")));
                        mod.compiler_directives.Add(new compiler_directive(new token_info("reference"), new token_info("Microsoft.VisualBasic.dll")));
                        mod.compiler_directives.Add(new compiler_directive(new token_info("reference"), new token_info("System.Windows.Forms.dll")));
                        mod.compiler_directives.Add(new compiler_directive(new token_info("reference"), new token_info("System.Drawing.dll")));
                        mod.source_context = get_source_context(td);
                        mod.interface_part = new interface_node();
                        mod.interface_part.interface_definitions = new declarations();
                        //mod.interface_part.source_context = new SourceContext(td.StartLocation.Line,td.StartLocation.Column,td.EndLocation.Line,td.EndLocation.Column);
                        mod.interface_part.uses_modules = new uses_list();

                        foreach (string s in imports)
                        {
                            List <ident> id_name = new List <ident>();
                            id_name.Add(new ident(s));
                            mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(id_name)));
                        }
                        List <ident> ids = new List <ident>();
                        ids.Add(new ident("Microsoft.VisualBasic.Strings"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("System"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("System.Collections.Generic"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("Microsoft.VisualBasic.Constants"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("Microsoft.VisualBasic.VBMath"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("Microsoft.VisualBasic.Information"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("Microsoft.VisualBasic.Interaction"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("Microsoft.VisualBasic.FileSystem"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("Microsoft.VisualBasic.Financial"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));
                        ids = new List <ident>();
                        ids.Add(new ident("Microsoft.VisualBasic.DateAndTime"));
                        mod.interface_part.uses_modules.units.Add(new unit_or_namespace(new ident_list(ids)));

                        add_module_members(mod, td);
                    }
                }
                else if (cu is ICSharpCode.NRefactory.Ast.UsingDeclaration)
                {
                    ICSharpCode.NRefactory.Ast.UsingDeclaration usings = cu as ICSharpCode.NRefactory.Ast.UsingDeclaration;
                    for (int i = 0; i < usings.Usings.Count; i++)
                    {
                        imports.Add(usings.Usings[i].Name);
                    }
                }
            }
            return(mod);
        }