diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2011-11-15 02:10:25 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2011-11-15 02:10:25 +0400 |
commit | b972d73fce7887ec03006527ca46eb5fbd574b6f (patch) | |
tree | 95cfb1620b7a86ddc90e45c454eae698b86e7b85 /main/contrib | |
parent | 3a218a784bb512283cb3427f613b2b78a8261a77 (diff) |
[NRefactory] Merged with new nrefactory.
Diffstat (limited to 'main/contrib')
3 files changed, 62 insertions, 55 deletions
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 8c168f3c81..3e3b18150e 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -91,7 +91,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion { if (type is PrimitiveType) { var pt = (PrimitiveType)type; - Console.WriteLine (pt.Keyword); switch (pt.Keyword) { case "object": yield return "o"; @@ -413,7 +412,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } var contextList = new CompletionDataWrapper (this); - var identifierStart = GetExpressionAtCursor (); if (identifierStart != null && identifierStart.Item2 is VariableInitializer && location <= ((VariableInitializer)identifierStart.Item2).NameToken.EndLocation) { return controlSpace ? HandleAccessorContext () ?? DefaultControlSpaceItems () : null; @@ -421,8 +419,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion if (!(char.IsLetter (completionChar) || completionChar == '_') && (!controlSpace || identifierStart == null || !(identifierStart.Item2 is ArrayInitializerExpression))) { return controlSpace ? HandleAccessorContext () ?? DefaultControlSpaceItems () : null; } - - char prevCh = offset > 2 ? document.GetCharAt (offset - 2) : '\0'; + char prevCh = offset > 2 ? document.GetCharAt (offset - 2) : ';'; char nextCh = offset < document.TextLength ? document.GetCharAt (offset) : ' '; const string allowedChars = ";,[](){}+-*/%^?:&|~!<>="; if (!Char.IsWhiteSpace (nextCh) && allowedChars.IndexOf (nextCh) < 0) @@ -435,7 +432,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion if (identifierStart == null && !string.IsNullOrEmpty (token) && !(IsInsideComment (tokenIndex) || IsInsideString (tokenIndex))) { char last = token [token.Length - 1]; if (char.IsLetterOrDigit (last) || last == '_' || token == ">") { - return null; + return controlSpace ? DefaultControlSpaceItems () : null; } } if (identifierStart == null) @@ -607,7 +604,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion IEnumerable<ICompletionData> DefaultControlSpaceItems () { var wrapper = new CompletionDataWrapper (this); - while (offset > 0 && char.IsWhiteSpace (document.GetCharAt (offset))) { + while (offset > 1 && char.IsWhiteSpace (document.GetCharAt (offset))) { offset--; } location = document.GetLocation (offset); @@ -630,10 +627,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion void AddContextCompletion (CompletionDataWrapper wrapper, CSharpResolver state, AstNode node) { - if (state == null) - return; - foreach (var variable in state.LocalVariables) { - wrapper.AddVariable (variable); + if (state != null) { + foreach (var variable in state.LocalVariables) { + wrapper.AddVariable (variable); + } } if (currentMember is IParameterizedMember) { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs index 0f268ccc0a..b9570aca58 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs @@ -293,7 +293,14 @@ namespace ICSharpCode.NRefactory.CSharp.Completion bool wrapInClass = mt.Item2; var wrapper = new StringBuilder (); + if (wrapInClass) { +/* foreach (var child in Unit.Children) { + if (child is UsingDeclaration) { + var offset = document.GetOffset (child.StartLocation); + wrapper.Append (document.GetText (offset, document.GetOffset (child.EndLocation) - offset)); + } + }*/ wrapper.Append ("class Stub {"); wrapper.AppendLine (); } @@ -313,7 +320,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } else { memberLocation = new TextLocation (1, 1); } - using (var stream = new System.IO.StringReader (wrapper.ToString ())) { var parser = new CSharpParser (); return parser.Parse (stream, wrapInClass ? memberLocation.Line - 2 : 0); @@ -337,6 +343,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } else { startOffset = 0; } + while (startOffset > 0) { + char ch = document.GetCharAt (startOffset - 1); + if (ch != ' ' && ch != '\t') + break; + --startOffset; + } if (cachedText == null) cachedText = document.GetText (startOffset, offset - startOffset); @@ -374,7 +386,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } else { return null; } - +// Print (baseUnit); /* var member = Unit.GetNodeAt<AttributedNode> (memberLocation); var member2 = baseUnit.GetNodeAt<AttributedNode> (memberLocation); member2.Remove (); @@ -450,7 +462,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion var visitor = new ResolveVisitor (csResolver, file, navigator); visitor.Scan (unit); -// Print (unit); var state = visitor.GetResolverStateBefore (resolveNode); var result = visitor.GetResolveResult (resolveNode); if (ProjectContent is SimpleProjectContent) diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs index fdb57190a7..4722cf9b15 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs @@ -98,22 +98,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; return factory.CreateConstructorProvider (attribute.Item1.Type); } - var invocationExpression = ResolveExpression (invoke.Item1, invoke.Item2, invoke.Item3); - if (invocationExpression == null || invocationExpression.Item1 == null || invocationExpression.Item1.IsError) return null; resolveResult = invocationExpression.Item1; if (resolveResult is MethodGroupResolveResult) return factory.CreateMethodDataProvider (resolveResult as MethodGroupResolveResult); if (resolveResult is MemberResolveResult) { - if (resolveResult.Type.Kind == TypeKind.Delegate) - return factory.CreateDelegateDataProvider (resolveResult.Type); var mr = resolveResult as MemberResolveResult; if (mr.Member is IMethod) return factory.CreateMethodDataProvider ((IMethod)mr.Member); } + if (resolveResult.Type.Kind == TypeKind.Delegate) + return factory.CreateDelegateDataProvider (resolveResult.Type); + // // if (result.ExpressionContext == ExpressionContext.BaseConstructorCall) { // if (resolveResult is ThisResolveResult) @@ -188,44 +187,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } return result; } - /* - public override bool GetParameterCompletionCommandOffset (out int cpos) - { - // Start calculating the parameter offset from the beginning of the - // current member, instead of the beginning of the file. - cpos = textEditorData.Caret.Offset - 1; - var parsedDocument = Document.ParsedDocument; - if (parsedDocument == null) - return false; - IMember mem = currentMember; - if (mem == null || (mem is IType)) - return false; - int startPos = textEditorData.LocationToOffset (mem.Region.BeginLine, mem.Region.BeginColumn); - int parenDepth = 0; - int chevronDepth = 0; - while (cpos > startPos) { - char c = textEditorData.GetCharAt (cpos); - if (c == ')') - parenDepth++; - if (c == '>') - chevronDepth++; - if (parenDepth == 0 && c == '(' || chevronDepth == 0 && c == '<') { - int p = MethodParameterDataProvider.GetCurrentParameterIndex (CompletionWidget, cpos + 1, startPos); - if (p != -1) { - cpos++; - return true; - } else { - return false; - } - } - if (c == '(') - parenDepth--; - if (c == '<') - chevronDepth--; - cpos--; - } - return false; - }*/ public int GetCurrentParameterIndex (int triggerOffset) { @@ -320,6 +281,44 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return parameter.Pop () + 1; } + /* + public override bool GetParameterCompletionCommandOffset (out int cpos) + { + // Start calculating the parameter offset from the beginning of the + // current member, instead of the beginning of the file. + cpos = textEditorData.Caret.Offset - 1; + var parsedDocument = Document.ParsedDocument; + if (parsedDocument == null) + return false; + IMember mem = currentMember; + if (mem == null || (mem is IType)) + return false; + int startPos = textEditorData.LocationToOffset (mem.Region.BeginLine, mem.Region.BeginColumn); + int parenDepth = 0; + int chevronDepth = 0; + while (cpos > startPos) { + char c = textEditorData.GetCharAt (cpos); + if (c == ')') + parenDepth++; + if (c == '>') + chevronDepth++; + if (parenDepth == 0 && c == '(' || chevronDepth == 0 && c == '<') { + int p = MethodParameterDataProvider.GetCurrentParameterIndex (CompletionWidget, cpos + 1, startPos); + if (p != -1) { + cpos++; + return true; + } else { + return false; + } + } + if (c == '(') + parenDepth--; + if (c == '<') + chevronDepth--; + cpos--; + } + return false; + }*/ } } |