Browse Source

Fixed get current parameter index.

newNRvisualizers
mike 14 years ago committed by mike
parent
commit
b91ed7e2de
  1. 24
      ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs

24
ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs

@ -270,7 +270,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -270,7 +270,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
IEnumerable<IType> CollectAllTypes (IType baseType)
{
var state = GetState ();
for (var n = state.CurrentUsingScope; n != null; n = n.Parent) {
for( var n = state.CurrentUsingScope; n != null; n = n.Parent) {
foreach (var u in n.Usings) {
foreach (var type in u.Types) {
if (type.TypeParameterCount > 0 && type.Name == baseType.Name)
@ -304,20 +304,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -304,20 +304,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return result;
}
public int GetCurrentParameterIndex (int triggerOffset)
public int GetCurrentParameterIndex (int triggerOffset, int endOffset)
{
SetOffset (triggerOffset);
var text = GetMemberTextToCaret ();
if (text.Item1.EndsWith ("(") || text.Item1.EndsWith ("<"))
char lastChar = document.GetCharAt (endOffset - 1);
if (lastChar == '(' || lastChar == '<')
return 0;
var parameter = new Stack<int> ();
bool inSingleComment = false, inString = false, inVerbatimString = false, inChar = false, inMultiLineComment = false;
for (int i = 0; i < text.Item1.Length; i++) {
char ch = text.Item1 [i];
char nextCh = i + 1 < text.Item1.Length ? text.Item1 [i + 1] : '\0';
for( int i = triggerOffset; i < endOffset; i++) {
char ch = document.GetCharAt (i);
char nextCh = i + 1 < document.TextLength ? document.GetCharAt (i + 1) : '\0';
switch (ch) {
case '(':
if (inString || inChar || inVerbatimString || inSingleComment || inMultiLineComment)
@ -327,8 +323,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -327,8 +323,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
case ')':
if (inString || inChar || inVerbatimString || inSingleComment || inMultiLineComment)
break;
if (parameter.Count > 0)
if (parameter.Count > 0) {
parameter.Pop ();
} else {
return -1;
}
break;
case '<':
if (inString || inChar || inVerbatimString || inSingleComment || inMultiLineComment)
@ -407,6 +406,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -407,6 +406,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return -1;
return parameter.Pop () + 1;
}
/*
public override bool GetParameterCompletionCommandOffset (out int cpos)

Loading…
Cancel
Save