|
| 1 | +using System; |
1 | 2 | using System.Linq;
|
2 | 3 | using Antlr4.Runtime;
|
3 | 4 | using Rubberduck.Common;
|
@@ -73,15 +74,42 @@ private void FixMethods()
|
73 | 74 |
|
74 | 75 | private void FixMethod(VBAParser.ArgContext context, QualifiedSelection qualifiedSelection)
|
75 | 76 | {
|
76 |
| - var selectionLength = context.BYREF() == null ? 0 : 6; |
77 |
| - var replacementStart = context.Start.Column + (context.OPTIONAL() == null ? 0 : 9); |
| 77 | + var parameter = context.GetText(); |
| 78 | + var argList = context.parent.GetText(); |
78 | 79 |
|
79 | 80 | var module = qualifiedSelection.QualifiedName.Component.CodeModule;
|
80 | 81 | {
|
81 |
| - var lines = module.GetLines(context.Start.Line, 1); |
| 82 | + string result; |
| 83 | + if (context.BYREF() != null) |
| 84 | + { |
| 85 | + result = parameter.Replace(Tokens.ByRef, Tokens.ByVal); |
| 86 | + } |
| 87 | + else if (context.OPTIONAL() != null) |
| 88 | + { |
| 89 | + result = parameter.Replace(Tokens.Optional, Tokens.Optional + ' ' + Tokens.ByVal); |
| 90 | + } |
| 91 | + else |
| 92 | + { |
| 93 | + result = Tokens.ByVal + ' ' + parameter; |
| 94 | + } |
82 | 95 |
|
83 |
| - var result = lines.Remove(replacementStart, selectionLength).Insert(replacementStart, Tokens.ByVal + ' '); |
84 |
| - module.ReplaceLine(context.Start.Line, result); |
| 96 | + var startLine = 0; |
| 97 | + var stopLine = 0; |
| 98 | + try |
| 99 | + { |
| 100 | + dynamic proc = context.parent.parent; |
| 101 | + startLine = proc.GetType().GetProperty("Start").GetValue(proc).Line; |
| 102 | + stopLine = proc.GetType().GetProperty("Stop").GetValue(proc).Line; |
| 103 | + } |
| 104 | + catch { return; } |
| 105 | + |
| 106 | + var code = module.GetLines(startLine, stopLine - startLine + 1); |
| 107 | + result = code.Replace(argList, argList.Replace(parameter, result)); |
| 108 | + |
| 109 | + foreach (var line in result.Split(new[] { "\r\n" }, StringSplitOptions.None)) |
| 110 | + { |
| 111 | + module.ReplaceLine(startLine++, line); |
| 112 | + } |
85 | 113 | }
|
86 | 114 | }
|
87 | 115 | }
|
|
0 commit comments