Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/NRefactory.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Grunwald <daniel@danielgrunwald.de>2014-11-29 21:01:01 +0300
committerDaniel Grunwald <daniel@danielgrunwald.de>2014-11-29 21:02:12 +0300
commitd06fd8c24552eb593cd5f602bc699b466e471838 (patch)
treeedffedf688e51d110ca6d2d87e02e9da21409d88 /ICSharpCode.NRefactory.CSharp
parentf337f4a0516ad2bdc5ea8796a8799462b7fd7ac5 (diff)
Merge NRefactory changes from SharpDevelop to NRefactory repository.
* Fix NRE in TypeGuessing after `yield return new` * Add message text to CS0618UsageOfObsoleteMemberIssue * Fix IndexOutOfRangeException in AddOptionalParameterToInvocationAction * Fix icsharpcode/SharpDevelop#580: EventHandler names suggested by code completion should include the variable name/expression. * Fix icsharpcode/SharpDevelop#574: Wrong error highlighting with interface implementation
Diffstat (limited to 'ICSharpCode.NRefactory.CSharp')
-rw-r--r--ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs45
-rw-r--r--ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs2
-rw-r--r--ICSharpCode.NRefactory.CSharp/Refactoring/TypeGuessing.cs17
3 files changed, 57 insertions, 7 deletions
diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
index e016692d..28c9ea02 100644
--- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
+++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
@@ -886,7 +886,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
string parameterDefinition = AddDelegateHandlers(
wrapper,
delegateType,
- optDelegateName: GuessEventHandlerMethodName(curTokenIndex)
+ optDelegateName: GuessEventHandlerMethodName(curTokenIndex, (currentType == null) ? null : currentType.Name)
);
}
@@ -2589,10 +2589,49 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
}
- public string GuessEventHandlerMethodName(int tokenIndex)
+ public string GuessEventHandlerMethodName(int tokenIndex, string surroundingTypeName)
{
+ var names = new List<string>();
+
+ string eventName = GetPreviousToken(ref tokenIndex, false);
string result = GetPreviousToken(ref tokenIndex, false);
- return "Handle" + result;
+ if (result != ".") {
+ if (surroundingTypeName == null) {
+ eventName = "Handle" + eventName;
+ } else {
+ names.Add(surroundingTypeName);
+ }
+ }
+ while (result == ".") {
+ result = GetPreviousToken(ref tokenIndex, false);
+ if (result == "this") {
+ if (names.Count == 0) {
+ if (surroundingTypeName == null) {
+ eventName = "Handle" + eventName;
+ } else {
+ names.Add(surroundingTypeName);
+ }
+ }
+ } else if (result != null) {
+ string trimmedName = result.Trim();
+ if (trimmedName.Length == 0) {
+ break;
+ }
+ names.Insert(0, trimmedName);
+ }
+ result = GetPreviousToken(ref tokenIndex, false);
+ }
+ if (!string.IsNullOrEmpty(eventName)) {
+ names.Add(eventName);
+ }
+ result = String.Join("_", names.ToArray());
+ foreach (char ch in result) {
+ if (!char.IsLetterOrDigit(ch) && ch != '_') {
+ result = "";
+ break;
+ }
+ }
+ return result;
}
bool MatchDelegate(IType delegateType, IMethod method)
diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs
index a82006a7..a69b5c92 100644
--- a/ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs
+++ b/ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs
@@ -624,7 +624,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}
}
- static class ExtMethods
+ public static class ExtMethods
{
public static void ContinueScript (this Task task, Action act)
{
diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/TypeGuessing.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/TypeGuessing.cs
index 3a7e886b..dd04185b 100644
--- a/ICSharpCode.NRefactory.CSharp/Refactoring/TypeGuessing.cs
+++ b/ICSharpCode.NRefactory.CSharp/Refactoring/TypeGuessing.cs
@@ -259,9 +259,20 @@ namespace ICSharpCode.NRefactory.CSharp
}
if (expr.Parent is YieldReturnStatement) {
- var state = resolver.GetResolverStateBefore(expr);
- if (state != null && (state.CurrentMember.ReturnType is ParameterizedType)) {
- var pt = (ParameterizedType)state.CurrentMember.ReturnType;
+ ParameterizedType pt = null;
+ var parent = expr.Ancestors.FirstOrDefault(n => n is EntityDeclaration || n is AnonymousMethodExpression|| n is LambdaExpression);
+ if (parent != null) {
+ var rr = resolver.Resolve(parent);
+ if (!rr.IsError)
+ pt = rr.Type as ParameterizedType;
+ }
+ var e = parent as EntityDeclaration;
+ if (e != null) {
+ var rt = resolver.Resolve(e.ReturnType);
+ if (!rt.IsError)
+ pt = rt.Type as ParameterizedType;
+ }
+ if (pt != null) {
if (pt.FullName == "System.Collections.Generic.IEnumerable") {
return new [] { pt.TypeArguments.First() };
}