Skip to content

Commit

Permalink
Fix drag/drop bug, refactor reordering calls
Browse files Browse the repository at this point in the history
  • Loading branch information
Hosch250 committed May 18, 2015
1 parent 55c6d44 commit 2e42d87
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@ private void MethodParametersGrid_DragDrop(object sender, DragEventArgs e)
}
}

SwapParameters(newRowIndex, rowIndexOfItemUnderMouse);
var tmp = Parameters.ElementAt(newRowIndex);
Parameters.RemoveAt(newRowIndex);
Parameters.Insert(rowIndexOfItemUnderMouse, tmp);
ReselectParameter();
}
}
Expand Down Expand Up @@ -183,22 +185,6 @@ private void MoveDownButtonClicked(object sender, EventArgs e)

private void SwapParameters(int index1, int index2)
{
/*if (index1 < 0)
{
index1 = 0;
}
if (index2 < 0)
{
index2 = 0;
}
if (index1 >= Parameters.Count)
{
index1 = Parameters.Count - 1;
}
if (index2 >= Parameters.Count)
{
index2 = Parameters.Count - 1;
}*/
var tmp = Parameters[index1];
Parameters[index1] = Parameters[index2];
Parameters[index2] = tmp;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ private void AdjustReferences()
foreach (var reference in _view.Target.References.Where(item => item.Context != _view.Target.Context))
{
var proc = (dynamic)reference.Context.Parent;
var module = reference.QualifiedModuleName.Component.CodeModule;

// This is to prevent throws when this statement fails:
// (VBAParser.ArgsCallContext)proc.argsCall();
Expand All @@ -114,46 +115,51 @@ private void AdjustReferences()
{
continue;
}
var paramNames = argList.argCall().Select(arg => arg.GetText()).ToList();

var module = reference.QualifiedModuleName.Component.CodeModule;
var lineCount = argList.Stop.Line - argList.Start.Line + 1; // adjust for total line count
RewriteCall(reference, argList, module);
}
}

var variableIndex = 0;
for (var line = argList.Start.Line; line < argList.Start.Line + lineCount; line++)
{
var newContent = module.Lines[line, 1].Replace(" , ", "");
private void RewriteCall(IdentifierReference reference, VBAParser.ArgsCallContext argList, Microsoft.Vbe.Interop.CodeModule module)
{
var paramNames = argList.argCall().Select(arg => arg.GetText()).ToList();

var currentStringIndex = line == argList.Start.Line ? reference.Declaration.IdentifierName.Length : 0;
var lineCount = argList.Stop.Line - argList.Start.Line + 1; // adjust for total line count

for (var i = 0; i < paramNames.Count && variableIndex < _view.Parameters.Count; i++)
{
var variableStringIndex = newContent.IndexOf(paramNames.ElementAt(i), currentStringIndex);

if (variableStringIndex > -1)
{
if (_view.Parameters.ElementAt(variableIndex).Index >= paramNames.Count)
{
newContent = newContent.Insert(variableStringIndex, " , ");
i--;
variableIndex++;
continue;
}
var variableIndex = 0;
for (var line = argList.Start.Line; line < argList.Start.Line + lineCount; line++)
{
var newContent = module.Lines[line, 1].Replace(" , ", "");

var oldVariableString = paramNames.ElementAt(i);
var newVariableString = paramNames.ElementAt(_view.Parameters.ElementAt(variableIndex).Index);
var beginningSub = newContent.Substring(0, variableStringIndex);
var replaceSub = newContent.Substring(variableStringIndex).Replace(oldVariableString, newVariableString);
var currentStringIndex = line == argList.Start.Line ? reference.Declaration.IdentifierName.Length : 0;

newContent = beginningSub + replaceSub;
for (var i = 0; i < paramNames.Count && variableIndex < _view.Parameters.Count; i++)
{
var variableStringIndex = newContent.IndexOf(paramNames.ElementAt(i), currentStringIndex);

if (variableStringIndex > -1)
{
if (_view.Parameters.ElementAt(variableIndex).Index >= paramNames.Count)
{
newContent = newContent.Insert(variableStringIndex, " , ");
i--;
variableIndex++;
currentStringIndex = beginningSub.Length + newVariableString.Length;
continue;
}
}

module.ReplaceLine(line, newContent);
var oldVariableString = paramNames.ElementAt(i);
var newVariableString = paramNames.ElementAt(_view.Parameters.ElementAt(variableIndex).Index);
var beginningSub = newContent.Substring(0, variableStringIndex);
var replaceSub = newContent.Substring(variableStringIndex).Replace(oldVariableString, newVariableString);

newContent = beginningSub + replaceSub;

variableIndex++;
currentStringIndex = beginningSub.Length + newVariableString.Length;
}
}

module.ReplaceLine(line, newContent);
}
}

Expand Down

0 comments on commit 2e42d87

Please sign in to comment.