亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? csharpcompletionbinding.cs

?? SharpDevelop2.0.0 c#開發(fā)免費工具
?? CS
字號:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
//     <version>$Revision: 915 $</version>
// </file>

using System;
using System.Collections;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.NRefactory.Parser;
using CSTokens = ICSharpCode.NRefactory.Parser.CSharp.Tokens;

namespace CSharpBinding
{
	public class CSharpCompletionBinding : DefaultCodeCompletionBinding
	{
		public override bool HandleKeyPress(SharpDevelopTextAreaControl editor, char ch)
		{
			Parser.ExpressionFinder ef = new Parser.ExpressionFinder(editor.FileName);
			int cursor = editor.ActiveTextAreaControl.Caret.Offset;
			ExpressionContext context = null;
			if (ch == '(') {
				if (CodeCompletionOptions.KeywordCompletionEnabled) {
					switch (editor.GetWordBeforeCaret().Trim()) {
						case "for":
						case "lock":
							context = ExpressionContext.Default;
							break;
						case "using":
							context = ExpressionContext.TypeDerivingFrom(ReflectionReturnType.Disposable.GetUnderlyingClass(), false);
							break;
						case "catch":
							context = ExpressionContext.TypeDerivingFrom(ReflectionReturnType.Exception.GetUnderlyingClass(), false);
							break;
						case "foreach":
						case "typeof":
						case "sizeof":
						case "default":
							context = ExpressionContext.Type;
							break;
					}
				}
				if (context != null) {
					if (IsInComment(editor)) return false;
					editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(context), ch);
					return true;
				} else if (EnableMethodInsight && CodeCompletionOptions.InsightEnabled) {
					editor.ShowInsightWindow(new MethodInsightDataProvider());
					return true;
				}
				return false;
			} else if (ch == '[') {
				LineSegment line = editor.Document.GetLineSegmentForOffset(cursor);
				if (TextUtilities.FindPrevWordStart(editor.Document, cursor) <= line.Offset) {
					// [ is first character on the line
					// -> Attribute completion
					editor.ShowCompletionWindow(new AttributesDataProvider(), ch);
					return true;
				}
			} else if (ch == ',' && CodeCompletionOptions.InsightRefreshOnComma && CodeCompletionOptions.InsightEnabled) {
				// Show MethodInsightWindow or IndexerInsightWindow
				string documentText = editor.Text;
				int oldCursor = cursor;
				string textWithoutComments = ef.FilterComments(documentText, ref cursor);
				int commentLength = oldCursor - cursor;
				if (textWithoutComments != null) {
					Stack<ResolveResult> parameters = new Stack<ResolveResult>();
					char c = '\0';
					while (cursor > 0) {
						while (--cursor > 0 &&
						       ((c = textWithoutComments[cursor]) == ',' ||
						        char.IsWhiteSpace(c)));
						if (c == '(') {
							ShowInsight(editor, new MethodInsightDataProvider(cursor + commentLength, true), parameters, ch);
							return true;
						} else if (c == '[') {
							ShowInsight(editor, new IndexerInsightDataProvider(cursor + commentLength, true), parameters, ch);
							return true;
						}
						string expr = ef.FindExpressionInternal(textWithoutComments, cursor);
						if (expr == null || expr.Length == 0)
							break;
						parameters.Push(ParserService.Resolve(new ExpressionResult(expr),
						                                      editor.ActiveTextAreaControl.Caret.Line,
						                                      editor.ActiveTextAreaControl.Caret.Column,
						                                      editor.FileName,
						                                      documentText));
						cursor = ef.LastExpressionStartPosition;
					}
				}
			} else if(ch == '=') {
				LineSegment curLine = editor.Document.GetLineSegmentForOffset(cursor);
				string documentText = editor.Text;
				int position = editor.ActiveTextAreaControl.Caret.Offset - 2;
				
				if (position > 0 && (documentText[position + 1] == '+')) {
					ExpressionResult result = ef.FindFullExpression(documentText, position);
					
					if(result.Expression != null) {
						ResolveResult resolveResult = ParserService.Resolve(result, editor.ActiveTextAreaControl.Caret.Line, editor.ActiveTextAreaControl.Caret.Column, editor.FileName, documentText);
						if (resolveResult != null && resolveResult.ResolvedType != null) {
							IClass underlyingClass = resolveResult.ResolvedType.GetUnderlyingClass();
							if (underlyingClass != null && underlyingClass.IsTypeInInheritanceTree(ProjectContentRegistry.Mscorlib.GetClass("System.MulticastDelegate"))) {
								EventHandlerCompletitionDataProvider eventHandlerProvider = new EventHandlerCompletitionDataProvider(result.Expression, resolveResult);
								eventHandlerProvider.InsertSpace = true;
								editor.ShowCompletionWindow(eventHandlerProvider, ch);
							}
						}
					}
				}
			} else if (ch == ';') {
				LineSegment curLine = editor.Document.GetLineSegmentForOffset(cursor);
				// don't return true when inference succeeds, otherwise the ';' won't be added to the document.
				TryDeclarationTypeInference(editor, curLine);
			}
			
			return base.HandleKeyPress(editor, ch);
		}
		
		bool TryDeclarationTypeInference(SharpDevelopTextAreaControl editor, LineSegment curLine)
		{
			string lineText = editor.Document.GetText(curLine.Offset, curLine.Length);
			ILexer lexer = ParserFactory.CreateLexer(SupportedLanguage.CSharp, new System.IO.StringReader(lineText));
			Token typeToken = lexer.NextToken();
			if (typeToken.kind == CSTokens.Question) {
				if (lexer.NextToken().kind == CSTokens.Identifier) {
					Token t = lexer.NextToken();
					if (t.kind == CSTokens.Assign) {
						string expr = lineText.Substring(t.col);
						LoggingService.Debug("DeclarationTypeInference: >" + expr + "<");
						ResolveResult rr = ParserService.Resolve(new ExpressionResult(expr),
						                                         editor.ActiveTextAreaControl.Caret.Line,
						                                         t.col, editor.FileName,
						                                         editor.Document.TextContent);
						if (rr != null && rr.ResolvedType != null) {
							ClassFinder context = new ClassFinder(editor.FileName, editor.ActiveTextAreaControl.Caret.Line, t.col);
							if (ICSharpCode.SharpDevelop.Refactoring.CodeGenerator.CanUseShortTypeName(rr.ResolvedType, context))
								CSharpAmbience.Instance.ConversionFlags = ConversionFlags.None;
							else
								CSharpAmbience.Instance.ConversionFlags = ConversionFlags.UseFullyQualifiedNames;
							string typeName = CSharpAmbience.Instance.Convert(rr.ResolvedType);
							editor.Document.Replace(curLine.Offset + typeToken.col - 1, 1, typeName);
							editor.ActiveTextAreaControl.Caret.Column += typeName.Length - 1;
							return true;
						}
					}
				}
			}
			return false;
		}
		
		void ShowInsight(SharpDevelopTextAreaControl editor, MethodInsightDataProvider dp, Stack<ResolveResult> parameters, char charTyped)
		{
			int paramCount = parameters.Count;
			dp.SetupDataProvider(editor.FileName, editor.ActiveTextAreaControl.TextArea);
			List<IMethodOrProperty> methods = dp.Methods;
			if (methods.Count == 0) return;
			bool overloadIsSure;
			if (methods.Count == 1) {
				overloadIsSure = true;
				dp.DefaultIndex = 0;
			} else {
				IReturnType[] parameterTypes = new IReturnType[paramCount + 1];
				for (int i = 0; i < paramCount; i++) {
					ResolveResult rr = parameters.Pop();
					if (rr != null) {
						parameterTypes[i] = rr.ResolvedType;
					}
				}
				IReturnType[][] tmp;
				int[] ranking = MemberLookupHelper.RankOverloads(methods, parameterTypes, true, out overloadIsSure, out tmp);
				bool multipleBest = false;
				int bestRanking = -1;
				int best = 0;
				for (int i = 0; i < ranking.Length; i++) {
					if (ranking[i] > bestRanking) {
						bestRanking = ranking[i];
						best = i;
						multipleBest = false;
					} else if (ranking[i] == bestRanking) {
						multipleBest = true;
					}
				}
				if (multipleBest) overloadIsSure = false;
				dp.DefaultIndex = best;
			}
			editor.ShowInsightWindow(dp);
			if (overloadIsSure) {
				IMethodOrProperty method = methods[dp.DefaultIndex];
				if (paramCount < method.Parameters.Count) {
					IParameter param = method.Parameters[paramCount];
					ProvideContextCompletion(editor, param.ReturnType, charTyped);
				}
			}
		}
		
		void ProvideContextCompletion(SharpDevelopTextAreaControl editor, IReturnType expected, char charTyped)
		{
			IClass c = expected.GetUnderlyingClass();
			if (c == null) return;
			if (c.ClassType == ClassType.Enum) {
				CtrlSpaceCompletionDataProvider cdp = new CtrlSpaceCompletionDataProvider();
				cdp.ForceNewExpression = true;
				CachedCompletionDataProvider cache = new CachedCompletionDataProvider(cdp);
				cache.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, charTyped);
				ICompletionData[] completionData = cache.CompletionData;
				Array.Sort(completionData);
				for (int i = 0; i < completionData.Length; i++) {
					CodeCompletionData ccd = completionData[i] as CodeCompletionData;
					if (ccd != null && ccd.Class != null) {
						if (ccd.Class.FullyQualifiedName == expected.FullyQualifiedName) {
							cache.DefaultIndex = i;
							break;
						}
					}
				}
				if (cache.DefaultIndex >= 0) {
					cache.InsertSpace = true;
					editor.ShowCompletionWindow(cache, charTyped);
				}
			}
		}
		
		bool IsInComment(SharpDevelopTextAreaControl editor)
		{
			Parser.ExpressionFinder ef = new Parser.ExpressionFinder(editor.FileName);
			int cursor = editor.ActiveTextAreaControl.Caret.Offset - 1;
			return ef.FilterComments(editor.Document.GetText(0, cursor + 1), ref cursor) == null;
		}
		
		public override bool HandleKeyword(SharpDevelopTextAreaControl editor, string word)
		{
			// TODO: Assistance writing Methods/Fields/Properties/Events:
			// use public/static/etc. as keywords to display a list with other modifiers
			// and possible return types.
			switch (word) {
				case "using":
					if (IsInComment(editor)) return false;
					// TODO: check if we are inside class/namespace
					editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Namespace), ' ');
					return true;
				case "as":
				case "is":
					if (IsInComment(editor)) return false;
					editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Type), ' ');
					return true;
				case "override":
					if (IsInComment(editor)) return false;
					editor.ShowCompletionWindow(new OverrideCompletionDataProvider(), ' ');
					return true;
				case "new":
					return ShowNewCompletion(editor);
				default:
					return base.HandleKeyword(editor, word);
			}
		}
		
		bool ShowNewCompletion(SharpDevelopTextAreaControl editor)
		{
			Parser.ExpressionFinder ef = new Parser.ExpressionFinder(editor.FileName);
			int cursor = editor.ActiveTextAreaControl.Caret.Offset;
			ExpressionContext context = ef.FindExpression(editor.Document.GetText(0, cursor) + " T.", cursor + 2).Context;
			if (context.IsObjectCreation) {
				editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(context), ' ');
				return true;
			}
			return false;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品高潮呻吟| 国产精品12区| 国产福利一区二区三区视频在线| 91蝌蚪porny九色| 精品国产亚洲在线| 日韩电影一区二区三区| 99re免费视频精品全部| 久久精品亚洲精品国产欧美kt∨| 日韩高清一区二区| 色综合天天综合网国产成人综合天| 欧美精品一区二区三区四区| 亚洲va韩国va欧美va| 不卡视频一二三四| 日本一区二区三区电影| 国内精品嫩模私拍在线| 91精品欧美综合在线观看最新| 亚洲精品高清视频在线观看| 成人黄色一级视频| 国产色91在线| 国产大片一区二区| 久久精品一区二区| 国产米奇在线777精品观看| 88在线观看91蜜桃国自产| 一区二区三区中文在线| www.亚洲在线| 中文字幕在线观看一区| 高清成人在线观看| 国产色一区二区| 成人黄色片在线观看| 日本一区二区三区dvd视频在线 | 欧美成人a在线| 日韩国产精品久久久久久亚洲| 色999日韩国产欧美一区二区| 一区视频在线播放| 成人av动漫在线| 成人免费在线播放视频| 日本韩国一区二区三区| 亚洲另类在线视频| 欧美网站大全在线观看| 午夜精品成人在线视频| 亚洲欧洲国产专区| 91亚洲精品一区二区乱码| 亚洲欧美日本韩国| 欧洲激情一区二区| 日韩制服丝袜先锋影音| 日韩欧美在线一区二区三区| 极品尤物av久久免费看| 久久这里只有精品首页| 成人精品视频网站| 一区二区三区在线播放| 538在线一区二区精品国产| 久久成人综合网| 国产精品国产三级国产三级人妇| 91国产精品成人| 蜜臀a∨国产成人精品| 久久久精品人体av艺术| 色综合天天综合网天天狠天天| 亚洲国产欧美在线| 欧美精品一区二区三区在线播放 | 欧美激情综合五月色丁香小说| 成人av在线播放网址| 亚洲影院免费观看| 精品少妇一区二区三区在线播放| 成人午夜免费av| 同产精品九九九| 国产校园另类小说区| 欧洲中文字幕精品| 国产在线精品免费| 夜色激情一区二区| 26uuu色噜噜精品一区| 日本精品免费观看高清观看| 精品亚洲国内自在自线福利| 亚洲精品免费在线播放| 精品欧美一区二区久久| 色哟哟一区二区| 免费av网站大全久久| 亚洲精品少妇30p| 久久尤物电影视频在线观看| 色婷婷亚洲婷婷| 国产一区欧美一区| 午夜av区久久| 日韩一区在线免费观看| 欧美不卡视频一区| 欧美三级中文字幕| youjizz国产精品| 国产精品中文欧美| 麻豆精品一区二区三区| 亚洲成a人片在线观看中文| 中文字幕 久热精品 视频在线| 欧美刺激脚交jootjob| 欧美亚洲国产一卡| 91丨九色丨尤物| 成人精品一区二区三区四区 | 久久久777精品电影网影网| 欧美日韩国产大片| 日本高清不卡视频| 成人晚上爱看视频| 国产精品一区2区| 国产永久精品大片wwwapp| 日韩中文字幕区一区有砖一区| 一区二区三区中文字幕精品精品| 日本一区二区动态图| 26uuu久久天堂性欧美| 日韩欧美一区二区视频| 欧美性做爰猛烈叫床潮| kk眼镜猥琐国模调教系列一区二区| 国产一区二区三区免费在线观看| 美女视频免费一区| 久久精品国产秦先生| 日本亚洲天堂网| 奇米影视在线99精品| 日本va欧美va欧美va精品| 午夜精品免费在线观看| 天天综合日日夜夜精品| 午夜精品福利一区二区三区蜜桃| 亚洲精品国产视频| 亚洲综合在线观看视频| 亚洲伦在线观看| 亚洲一区二区偷拍精品| 午夜精品久久久久久久久久久 | 91精品国产综合久久久蜜臀粉嫩 | 亚洲色图色小说| 亚洲天堂精品在线观看| 亚洲国产精品久久人人爱| 日韩国产一二三区| 久久er精品视频| 粉嫩av一区二区三区粉嫩| thepron国产精品| 欧美午夜免费电影| 91精品国产综合久久精品性色| 欧美一三区三区四区免费在线看| 日韩精品专区在线影院重磅| 国产欧美视频在线观看| 最新欧美精品一区二区三区| 亚洲一区二区三区影院| 免费观看日韩av| 成人免费毛片嘿嘿连载视频| 91免费在线视频观看| 欧美高清视频在线高清观看mv色露露十八| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲欧洲av在线| 亚洲一区二区三区四区在线观看 | 国产欧美精品区一区二区三区| 亚洲天堂久久久久久久| 日韩黄色免费网站| 国产福利91精品| 欧美日韩国产小视频在线观看| 久久丝袜美腿综合| 亚洲色图欧美在线| 久久99精品国产麻豆不卡| av影院午夜一区| 日韩一区二区三区视频| 亚洲人123区| 久久精品999| 欧美性猛交xxxx黑人交| 久久精品亚洲乱码伦伦中文| 亚洲精品一二三区| 国产福利一区二区三区在线视频| 欧美三级蜜桃2在线观看| 日本一区二区高清| 久久99精品一区二区三区三区| 91丨国产丨九色丨pron| 久久综合av免费| 日韩精品一二三四| 99麻豆久久久国产精品免费优播| 欧美变态凌虐bdsm| 一区二区三区色| 国产成人99久久亚洲综合精品| 欧美日韩不卡视频| 亚洲激情一二三区| 成人av影院在线| 久久久久综合网| 久久国产精品99精品国产 | 久久福利视频一区二区| 在线观看免费视频综合| 国产欧美日韩综合| 一本色道久久加勒比精品 | 国产精品一区二区三区网站| 在线观看av不卡| 国产精品灌醉下药二区| 国产精品一区二区三区99| 欧美不卡一区二区三区四区| 午夜在线成人av| 色婷婷av一区二区三区大白胸 | 全部av―极品视觉盛宴亚洲| 91婷婷韩国欧美一区二区| 国产精品免费人成网站| 国产麻豆9l精品三级站| 精品成人一区二区| 美女性感视频久久| 日韩精品在线一区二区| 免费av成人在线| 欧美电影免费观看高清完整版在| 青青草精品视频| 欧美一区日韩一区| 日韩激情在线观看| 日韩精品一区在线观看| 久久电影网站中文字幕| 久久免费午夜影院| 国产精品一区二区免费不卡|