资源描述:
《SharpDevelop浅析extEditor自动完成、代码折叠》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、SharpDevelop浅析_4_TextEditor_自动完成、代码折叠……Parser及其应用:CodeCompletion,MethodInsight,ClassScout...1、Demo界面及功能解释2、Parser实现概述3、Parser应用:MouseHoverTooltip4、Parser应用:CodeCompletion&MethodInsight5、Parser应用:QuickClassBrowserPanel6、Parser应用:Folding7、总结Demo下载1、Demo界面及功能解释启动并打开任一.cs文件后,界面如下:自动
2、完成界面如下:可见新增功能如下(仅支持.cs文件):a,鼠标停留在方法、属性等位置时,会显示出相关的文档描述tooltipb,输入时支持自动完成c,编辑窗口顶部有类列表和成员(方法、变量等)列表下拉框用以快速浏览、定位d,编辑窗口左侧有折叠线用以方法、类等的代码折叠相应的Demo工程中新增项目如下:a,SharpEditor: 包含扩展TextEditor的控件,Dom结构,ParserService,自动完成功能代码等b,NRefactor: 代码解析功能c,CSharpBinding:对应.cs文件的具体实现支持[题外话]: 关于代码解析(P
3、arser)相关的代码,我没看懂,所以在这里只说个大概,更多地谈谈Parser的使用;抛砖引玉,希望有相关经验的网友提供详尽的分析。前两周工作上的项目实施,每天都搞得比较累,所以这篇文章到现在才写了出来,明天是大年三十了,这个系列的文章也只剩下一篇WindowsFormDesigner,只能等过了年再放上来喽。另外,这个系列写完后,暂不打算深究一些没明白的细节,接下来想看下osworkflow或CommunityServer...2、Parser实现概述(1)首先,SharpEditor项目中的Dom下定义了以下重要类:a,IDecoration及其子
4、类: 代码表现的辅助对象,如IClass,IMethod,IProperty等b,ResolveResult及其子类:分析结果对象,如MethodResolveResult,TypeResolveResult等c,其它重要类: IExpressionFinder,IParser,IResolve,ICompilationUnit等(2)重要服务类:ParserService: 提供GetExpressionFinder(),Resolve(),ParseFile()等重要方法,相关重要类:ProjectContentRegistr
5、y,DefaultProjectContent,ReflectionProjectContent等AmbienceService:提供IAmbience的实现类用以将分析结果转换为相应的字符描述(3)Parser分析步骤:以鼠标悬浮的Tooltip显示为例:DebuggerService根据文件类型返回对应的IExpressionFinder实现类,再根据鼠标位置找到并返回ExpressionResult对象,然后找到适当的IResolver实现类调用Resolve()方法返回结果ResolveResult对象,最后由相应的IAmbience实现类转换
6、成结果字符,并调用e.ShowToolTip(toolTipText);显示。(4)对于.NET默认类库的分析转换:默认引进的命名空间的类结构和文档说明一般可以在"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727"目录下找到(如System.dll和System.xml),但是如果每次都要重新分析dll代码结构和xml注释显然是比较花费时间的,于是SharpDevelop采用的方式是将分析过的数据(Dom下的类结构表示数据?,二进制的.dat文件)存储到"C:DocumentsandSettingsmic
7、haelLocalSettingsTempSharpDevelop"下,代码结构存储到DomCacheDebug目录下,文档注释存储到DocumentationCacheDebug目录下。首先在ParserService的CreateDefaultProjectContent()中加载默认命名空间的引用:CreateDefaultProjectContent()其中ProjectContentRegistry的GetProjectContentForReference()方法如下:GetProjectContentForReference()可以
8、看到DomPersistence类的作用即在加载或保存dll的代码结构数据,如果尚未有分析过的