Skip to content

Commit d687a03

Browse files
committed
Forced repo to match RD\next. Reintroduced LocalVariable QuickFix and QuickFixHelper
1 parent b69b7cc commit d687a03

File tree

7 files changed

+74
-426
lines changed

7 files changed

+74
-426
lines changed

RetailCoder.VBE/Inspections/QuickFixes/AssignedByValParameterQuickFix.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ public void TESTONLY_FixUsingAutoGeneratedName()
4545
public override void Fix()
4646
{
4747

48-
SetLocalCopyVariableName();
48+
//SetLocalCopyVariableName();
4949

5050
if (IsCancelled) { return; }
5151

5252
ModifyBlockToUseLocalCopyVariable();
5353
}
54-
54+
/*
5555
private void SetLocalCopyVariableName()
5656
{
5757
using (var view = new AssignedByValParameterQuickFixDialog(_originalProcCodeLines))
@@ -69,7 +69,7 @@ private void SetLocalCopyVariableName()
6969
}
7070
}
7171
}
72-
72+
*/
7373
private void ModifyBlockToUseLocalCopyVariable()
7474
{
7575
if(!CheckLocalVariableNameIsValidForUpdate())
Lines changed: 5 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Antlr4.Runtime;
2-
using Antlr4.Runtime.Tree;
32
using Rubberduck.Inspections.Abstract;
43
using Rubberduck.Inspections.Resources;
54
using Rubberduck.Parsing.Grammar;
@@ -15,74 +14,26 @@ namespace Rubberduck.Inspections.QuickFixes
1514
public class PassParameterByReferenceQuickFix : QuickFixBase
1615
{
1716
private Declaration _target;
17+
private QuickFixHelper _quickFixHelper;
1818

1919
public PassParameterByReferenceQuickFix(Declaration target, QualifiedSelection selection)
2020
: base(target.Context, selection, InspectionsUI.PassParameterByReferenceQuickFix)
2121
{
2222
_target = target;
23+
_quickFixHelper = new QuickFixHelper(target, selection);
2324
}
2425

2526
public override void Fix()
2627
{
2728
var argCtxt = GetArgContextForIdentifier(Context.Parent.Parent, _target.IdentifierName);
2829

29-
var terminalNode = argCtxt.BYVAL();
30-
31-
var replacementLine = GenerateByRefReplacementLine(terminalNode);
32-
33-
ReplaceModuleLine(terminalNode.Symbol.Line, replacementLine);
34-
30+
_quickFixHelper.ReplaceTerminalNodeTextInCodeModule(argCtxt.BYVAL(), Tokens.ByRef);
3531
}
3632
private VBAParser.ArgContext GetArgContextForIdentifier(RuleContext context, string identifier)
3733
{
38-
var argList = GetArgListForContext(context);
39-
return argList.arg().SingleOrDefault(parameter =>
34+
var args = _quickFixHelper.GetArgContextsForContext(context);
35+
return args.SingleOrDefault(parameter =>
4036
Identifier.GetName(parameter.unrestrictedIdentifier()).Equals(identifier));
4137
}
42-
private string GenerateByRefReplacementLine(ITerminalNode terminalNode)
43-
{
44-
var module = Selection.QualifiedName.Component.CodeModule;
45-
var byValTokenLine = module.GetLines(terminalNode.Symbol.Line, 1);
46-
47-
return ReplaceAtIndex(byValTokenLine, Tokens.ByVal, Tokens.ByRef, terminalNode.Symbol.Column);
48-
}
49-
private void ReplaceModuleLine(int lineNumber, string replacementLine)
50-
{
51-
var module = Selection.QualifiedName.Component.CodeModule;
52-
module.DeleteLines(lineNumber);
53-
module.InsertLines(lineNumber, replacementLine);
54-
}
55-
private string ReplaceAtIndex(string input, string toReplace, string replacement, int startIndex)
56-
{
57-
int stopIndex = startIndex + toReplace.Length;
58-
var prefix = input.Substring(0, startIndex);
59-
var suffix = input.Substring(stopIndex + 1);
60-
var tokenToBeReplaced = input.Substring(startIndex, stopIndex - startIndex + 1);
61-
return prefix + tokenToBeReplaced.Replace(toReplace, replacement) + suffix;
62-
}
63-
private VBAParser.ArgListContext GetArgListForContext(RuleContext context)
64-
{
65-
if (context is VBAParser.SubStmtContext)
66-
{
67-
return ((VBAParser.SubStmtContext)context).argList();
68-
}
69-
else if (context is VBAParser.FunctionStmtContext)
70-
{
71-
return ((VBAParser.FunctionStmtContext)context).argList();
72-
}
73-
else if (context is VBAParser.PropertyLetStmtContext)
74-
{
75-
return ((VBAParser.PropertyLetStmtContext)context).argList();
76-
}
77-
else if (context is VBAParser.PropertyGetStmtContext)
78-
{
79-
return ((VBAParser.PropertyGetStmtContext)context).argList();
80-
}
81-
else if (context is VBAParser.PropertySetStmtContext)
82-
{
83-
return ((VBAParser.PropertySetStmtContext)context).argList();
84-
}
85-
return null;
86-
}
8738
}
8839
}

RetailCoder.VBE/Inspections/Results/AssignedByValParameterInspectionResult.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public override IEnumerable<QuickFixBase> QuickFixes
2727
{
2828
return _quickFixes ?? (_quickFixes = new QuickFixBase[]
2929
{
30-
new AssignedByValParameterQuickFix(Target, QualifiedSelection),
30+
new AssignedByValParameterMakeLocalCopyQuickFix(Target, QualifiedSelection),
3131
new PassParameterByReferenceQuickFix(Target, QualifiedSelection),
3232
new IgnoreOnceQuickFix(Context, QualifiedSelection, Inspection.AnnotationName)
3333
});

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,9 @@
347347
<Compile Include="Inspections\MemberNotOnInterfaceInspection.cs" />
348348
<Compile Include="Inspections\QuickFixes\AddIdentifierToWhiteListQuickFix.cs" />
349349
<Compile Include="Inspections\QuickFixes\ApplicationWorksheetFunctionQuickFix.cs" />
350+
<Compile Include="Inspections\QuickFixes\AssignedByValParameterMakeLocalCopyQuickFix.cs" />
350351
<Compile Include="Inspections\QuickFixes\AssignedByValParameterQuickFix.cs" />
352+
<Compile Include="Inspections\QuickFixes\QuickFixHelper.cs" />
351353
<Compile Include="Inspections\Resources\InspectionsUI.Designer.cs">
352354
<AutoGen>True</AutoGen>
353355
<DesignTime>True</DesignTime>

RetailCoder.VBE/UI/Refactorings/AssignedByValParameterQuickFixDialog.cs

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
using System;
2-
using System.Linq;
32
using System.Windows.Forms;
43
using Rubberduck.Parsing.Symbols;
54
using Rubberduck.Inspections;
5+
using Rubberduck.VBEditor;
6+
using System.Linq;
67

78
namespace Rubberduck.UI.Refactorings
89
{
910
public partial class AssignedByValParameterQuickFixDialog : Form, IDialogView
1011
{
11-
private readonly string[] _procedureLines;
12-
private bool _userInputIsValid;
12+
private string[] _identifierNamesAlreadyDeclared;
1313

14-
public AssignedByValParameterQuickFixDialog(string[] procedureLines)
14+
public AssignedByValParameterQuickFixDialog(Declaration target, QualifiedSelection selection)
1515
{
16-
_procedureLines = procedureLines;
17-
_userInputIsValid = false;
1816
InitializeComponent();
1917
InitializeCaptions();
18+
Target = target;
19+
_identifierNamesAlreadyDeclared = Enumerable.Empty<string>().ToArray();
2020
}
2121

2222
private void InitializeCaptions()
@@ -43,13 +43,9 @@ public Declaration Target
4343
_target = value;
4444
if (_target == null)
4545
{
46-
return;
46+
return;
4747
}
48-
49-
var declarationType =
50-
RubberduckUI.ResourceManager.GetString("DeclarationType_" + _target.DeclarationType, Settings.Settings.Culture);
51-
InstructionsLabel.Text = string.Format(RubberduckUI.AssignedByValParamQFixDialog_InstructionsLabelText, declarationType,
52-
_target.IdentifierName);
48+
SetInstructionLableText();
5349
}
5450
}
5551

@@ -63,11 +59,23 @@ public string NewName
6359
SetControlsProperties();
6460
}
6561
}
62+
public string[] IdentifierNamesAlreadyDeclared
63+
{
64+
get { return _identifierNamesAlreadyDeclared; }
65+
set { _identifierNamesAlreadyDeclared = value; }
66+
}
67+
68+
private void SetInstructionLableText()
69+
{
70+
var declarationType =
71+
RubberduckUI.ResourceManager.GetString("DeclarationType_" + _target.DeclarationType, Settings.Settings.Culture);
72+
InstructionsLabel.Text = string.Format(RubberduckUI.AssignedByValParamQFixDialog_InstructionsLabelText, declarationType,
73+
_target.IdentifierName);
74+
}
6675

6776
private string GetVariableNameFeedback()
6877
{
6978
var validator = new VariableNameValidator(NewName);
70-
_userInputIsValid = validator.IsValidName() && !NewNameAlreadyUsed();
7179

7280
if (UserInputIsBlank())
7381
{
@@ -85,14 +93,14 @@ private string GetVariableNameFeedback()
8593
{
8694
return string.Format(RubberduckUI.AssignedByValDialog_ReservedKeywordFormat, NewName);
8795
}
88-
if (NewNameAlreadyUsed())
89-
{
90-
return string.Format(RubberduckUI.AssignedByValDialog_NewNameAlreadyUsedFormat, NewName);
91-
}
9296
if (IsByValIdentifier())
9397
{
9498
return string.Format(RubberduckUI.AssignedByValDialog_IsByValIdentifierFormat, NewName);
9599
}
100+
if (NewNameAlreadyUsed())
101+
{
102+
return string.Format(RubberduckUI.AssignedByValDialog_NewNameAlreadyUsedFormat, NewName);
103+
}
96104
if (!validator.IsMeaningfulName())
97105
{
98106
return string.Format(RubberduckUI.AssignedByValDialog_QuestionableEntryFormat, NewName);
@@ -102,9 +110,11 @@ private string GetVariableNameFeedback()
102110

103111
private void SetControlsProperties()
104112
{
105-
OkButton.Visible = _userInputIsValid;
106-
OkButton.Enabled = _userInputIsValid;
107-
InvalidNameValidationIcon.Visible = !_userInputIsValid;
113+
var validator = new VariableNameValidator(NewName);
114+
var userInputIsValid = validator.IsValidName() && !NewNameAlreadyUsed();
115+
OkButton.Visible = userInputIsValid;
116+
OkButton.Enabled = userInputIsValid;
117+
InvalidNameValidationIcon.Visible = !userInputIsValid;
108118
}
109119

110120
private bool UserInputIsBlank()
@@ -114,13 +124,12 @@ private bool UserInputIsBlank()
114124

115125
private bool IsByValIdentifier()
116126
{
117-
return NewName.Equals(Target.IdentifierName,StringComparison.OrdinalIgnoreCase);
127+
return NewName.Equals(Target.IdentifierName, StringComparison.OrdinalIgnoreCase);
118128
}
119129

120130
private bool NewNameAlreadyUsed()
121131
{
122-
var validator = new VariableNameValidator(NewName);
123-
return _procedureLines.Any(codeLine => validator.IsFoundIn(codeLine));
132+
return _identifierNamesAlreadyDeclared.Contains(NewName);
124133
}
125134
}
126135
}

0 commit comments

Comments
 (0)