Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/next' into TestExplorer_Issue4…
Browse files Browse the repository at this point in the history
…541_resx_cleanup
  • Loading branch information
IvenBach committed Nov 3, 2020
2 parents 26f8a12 + 54567b4 commit 76d745a
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ private bool HasConflictIdentifiers(IEncapsulateFieldCandidate candidate, string
{
return HasInternalPropertyAndBackingFieldConflict(candidate)
|| HasConflictsWithOtherEncapsulationPropertyIdentifiers(candidate, identifierToCompare)
|| HasConflictsWithOtherEncapsulationBackingIdentifiers(candidate, identifierToCompare)
|| HasConflictsWithUnmodifiedPropertyAndFieldIdentifiers(candidate, identifierToCompare)
|| HasConflictWithLocalDeclarationIdentifiers(candidate, identifierToCompare);
}
Expand All @@ -233,11 +234,20 @@ private bool HasInternalPropertyAndBackingFieldConflict(IEncapsulateFieldCandida
&& candidate.EncapsulateFlag
&& candidate.PropertyIdentifier.IsEquivalentVBAIdentifierTo(candidate.BackingIdentifier);

private bool HasConflictsWithOtherEncapsulationPropertyIdentifiers(IEncapsulateFieldCandidate candidate, string identifierToCompare)
private bool HasConflictsWithOtherEncapsulationPropertyIdentifiers(IEncapsulateFieldCandidate candidate, string identifierToCompare)
=> _allCandidates.Where(c => c.TargetID != candidate.TargetID
&& c.EncapsulateFlag
&& c.PropertyIdentifier.IsEquivalentVBAIdentifierTo(identifierToCompare)).Any();

private bool HasConflictsWithOtherEncapsulationBackingIdentifiers(IEncapsulateFieldCandidate candidate, string identifierToCompare)
{
return candidate is IEncapsulateFieldAsUDTMemberCandidate || candidate is IUserDefinedTypeMemberCandidate
? false
: _allCandidates.Where(c => c.TargetID != candidate.TargetID
&& c.EncapsulateFlag
&& c.BackingIdentifier.IsEquivalentVBAIdentifierTo(identifierToCompare)).Any();
}

private bool HasConflictsWithUnmodifiedPropertyAndFieldIdentifiers(IEncapsulateFieldCandidate candidate, string identifierToCompare)
{
var membersToEvaluate = _members.Where(d => d != candidate.Declaration);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Linq;

namespace Rubberduck.Refactorings.EncapsulateField.Extensions
{
Expand All @@ -9,20 +10,13 @@ public static bool IsEquivalentVBAIdentifierTo(this string lhs, string identifie

public static string IncrementEncapsulationIdentifier(this string identifier)
{
var fragments = identifier.Split('_');
if (fragments.Length == 1)
var numeric = string.Concat(identifier.Reverse().TakeWhile(c => char.IsDigit(c)).Reverse());
if (!int.TryParse(numeric, out var currentNum))
{
return $"{identifier}_1";
currentNum = 0;
}

var lastFragment = fragments[fragments.Length - 1];
if (long.TryParse(lastFragment, out var number))
{
fragments[fragments.Length - 1] = (number + 1).ToString();

return string.Join("_", fragments);
}
return $"{identifier}_1"; ;
var identifierSansNumericSuffix = identifier.Substring(0, identifier.Length - numeric.Length);
return $"{identifierSansNumericSuffix}{++currentNum}";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ End Sub
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Public Property Get MyArray() As Variant", actualCode);
StringAssert.DoesNotContain("Public Property Let MyArray(", actualCode);
StringAssert.Contains("Redim myArray_1(size)", actualCode);
StringAssert.Contains("myArray_1(idx) = idx", actualCode);
StringAssert.Contains("Redim myArray1(size)", actualCode);
StringAssert.Contains("myArray1(idx) = idx", actualCode);
}

[Test]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -328,9 +328,9 @@ End Enum

var presenterAction = Support.UserAcceptsDefaults();
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Private numberType_1 As NumberTypes", actualCode);
StringAssert.Contains("Private numberType1 As NumberTypes", actualCode);
StringAssert.Contains("Public Property Get NumberType() As NumberTypes", actualCode);
StringAssert.Contains("NumberType = numberType_1", actualCode);
StringAssert.Contains("NumberType = numberType1", actualCode);
}

//5.3.1 The declared type of a function declaration may not be a private enum name.
Expand All @@ -357,9 +357,9 @@ End Enum
var presenterAction = Support.UserAcceptsDefaults();
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
var expectedPropertyType = enumTypeAccessibility == "Public" ? "NumberTypes" : "Long";
StringAssert.Contains("Private numberType_1 As NumberTypes", actualCode);
StringAssert.Contains("Private numberType1 As NumberTypes", actualCode);
StringAssert.Contains($"Public Property Get NumberType() As {expectedPropertyType}", actualCode);
StringAssert.Contains("NumberType = numberType_1", actualCode);
StringAssert.Contains("NumberType = numberType1", actualCode);
}

[Test]
Expand All @@ -373,12 +373,12 @@ public void EncapsulatePrivateFieldInList()
var presenterAction = Support.SetParametersForSingleTarget("fizz");

var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Private fizz_1 As Integer, fuzz As Integer,", actualCode);
StringAssert.Contains("Private fizz1 As Integer, fuzz As Integer,", actualCode);
StringAssert.Contains("Public Property Get Fizz() As Integer", actualCode);
StringAssert.Contains("Public Property Let Fizz(", actualCode);
StringAssert.Contains($"(ByVal {Support.RHSIdentifier} As Integer)", actualCode);
StringAssert.Contains("Fizz = fizz_1", actualCode);
StringAssert.Contains($"fizz_1 = {Support.RHSIdentifier}", actualCode);
StringAssert.Contains("Fizz = fizz1", actualCode);
StringAssert.Contains($"fizz1 = {Support.RHSIdentifier}", actualCode);
StringAssert.Contains("End Property", actualCode);
}

Expand All @@ -396,8 +396,8 @@ public void EncapsulatePrivateField_Defaults()
StringAssert.Contains("Public Property Get Fizz() As Integer", actualCode);
StringAssert.Contains("Public Property Let Fizz(", actualCode);
StringAssert.Contains($"(ByVal {Support.RHSIdentifier} As Integer)", actualCode);
StringAssert.Contains("Fizz = fizz_1", actualCode);
StringAssert.Contains($"fizz_1 = {Support.RHSIdentifier}", actualCode);
StringAssert.Contains("Fizz = fizz1", actualCode);
StringAssert.Contains($"fizz1 = {Support.RHSIdentifier}", actualCode);
StringAssert.Contains("End Property", actualCode);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ EncapsulateFieldUseBackingFieldModel modelBuilder(RubberduckParserState state)

var backingField = propertyIdentifier != null
? target
: $"{target}_1";
: $"{target}1";

StringAssert.Contains($"Public Property Get {resultPropertyIdentifier}()", refactoredCode);
StringAssert.Contains($"{resultPropertyIdentifier} = {backingField}", refactoredCode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ End Type
StringAssert.Contains($"Property Get Second", actualCode);

StringAssert.Contains($"Private {expectedThat.TargetFieldName} As TBar", actualCode);
StringAssert.Contains($"First_1 = {expectedThat.TargetFieldName}.First", actualCode);
StringAssert.Contains($"Second_1 = {expectedThat.TargetFieldName}.Second", actualCode);
StringAssert.Contains($"First1 = {expectedThat.TargetFieldName}.First", actualCode);
StringAssert.Contains($"Second1 = {expectedThat.TargetFieldName}.Second", actualCode);
StringAssert.Contains($"{expectedThat.TargetFieldName}.First = {Support.RHSIdentifier}", actualCode);
StringAssert.Contains($"{expectedThat.TargetFieldName}.Second = {Support.RHSIdentifier}", actualCode);
StringAssert.Contains($"Property Get First_1", actualCode);
StringAssert.Contains($"Property Get Second_1", actualCode);
StringAssert.Contains($"Property Get First1", actualCode);
StringAssert.Contains($"Property Get Second1", actualCode);

StringAssert.Contains($"Private {expectedThis.TargetFieldName} As TBar", actualCode);
StringAssert.Contains($"Private {expectedThat.TargetFieldName} As TBar", actualCode);
Expand Down Expand Up @@ -749,7 +749,7 @@ End Type

var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);

StringAssert.Contains("Public Property Let First_1", actualCode);
StringAssert.Contains("Public Property Let First1", actualCode);
StringAssert.Contains("Public Property Let Second", actualCode);
}

Expand Down Expand Up @@ -809,8 +809,8 @@ End Type

StringAssert.Contains("Public Property Let Foo(", actualCode);
StringAssert.Contains("Public Property Let Bar(", actualCode);
StringAssert.Contains("Public Property Let Foo_1(", actualCode);
StringAssert.Contains("Public Property Let Bar_1(", actualCode);
StringAssert.Contains("Public Property Let Foo1(", actualCode);
StringAssert.Contains("Public Property Let Bar1(", actualCode);
StringAssert.Contains($"myBar.FooBar.Foo = {Support.RHSIdentifier}", actualCode);
StringAssert.Contains($"myBar.ReBar.Foo = {Support.RHSIdentifier}", actualCode);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ End Type
var presenterAction = Support.UserAcceptsDefaults(convertFieldToUDTMember: true);
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Private this As Long", actualCode);
StringAssert.Contains($"Private this_1 As {Support.StateUDTDefaultTypeName}", actualCode);
StringAssert.Contains($"Private this1 As {Support.StateUDTDefaultTypeName}", actualCode);
}

[Test]
Expand Down Expand Up @@ -377,7 +377,7 @@ End Property
[Category("Encapsulate Field")]
public void UserDefinedTypeDefaultNameHasConflict()
{
var expectedIdentifier = "TTestModule1_1";
var expectedIdentifier = "TTestModule2";
var inputCode =
$@"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,11 @@ public void PropertyNameNotDuplicated()
var presenterAction = Support.SetParameters(userInput);
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Public Property Get Variable() As Integer", actualCode);
StringAssert.Contains("Variable = variable_1", actualCode);
StringAssert.Contains("Variable = variable3", actualCode);
StringAssert.Contains("Public Property Get Variable1() As Long", actualCode);
StringAssert.Contains("Variable1 = variable1_1", actualCode);
StringAssert.Contains("Variable1 = variable4", actualCode);
StringAssert.Contains("Public Property Get Variable2() As Integer", actualCode);
StringAssert.Contains("Variable2 = variable2_1", actualCode);
StringAssert.Contains("Variable2 = variable5", actualCode);
StringAssert.DoesNotContain("Public Property Get Variable3() As Integer", actualCode);
}

Expand Down Expand Up @@ -117,11 +117,11 @@ public void FieldNameDefaultsToNonConflictName()
Private fizzle As String
'fizz1 is the initial default name for encapsulating 'fizz'
Public Property Get Fizz_1() As String
Fizz_1 = fizzle
Public Property Get Fizz1() As String
Fizz1 = fizzle
End Property
Public Property Let Fizz_1(ByVal value As String)
Public Property Let Fizz1(ByVal value As String)
fizzle = value
End Property
";
Expand Down Expand Up @@ -256,7 +256,7 @@ public void EncapsulatePrivateField_EnumMemberConflict()
Public Enum NumberTypes
Whole = -1
Integral = 0
Rational_1 = 1
Rational1 = 1
End Enum
Private rati|onal As NumberTypes
Expand All @@ -265,7 +265,7 @@ End Enum
var presenterAction = Support.UserAcceptsDefaults();
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Public Property Get Rational() As NumberTypes", actualCode);
StringAssert.Contains("Rational = rational_2", actualCode);
StringAssert.Contains("Rational = rational2", actualCode);
}

[Test]
Expand All @@ -287,7 +287,7 @@ End Type
var presenterAction = Support.UserAcceptsDefaults();
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Public Property Get Wheels()", actualCode);
StringAssert.Contains("Wheels = wheels_1", actualCode);
StringAssert.Contains("Wheels = wheels1", actualCode);
}

[Test]
Expand Down Expand Up @@ -329,8 +329,8 @@ End Function
var presenterAction = Support.UserAcceptsDefaults();
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Test", actualCode);
StringAssert.Contains("test_1", actualCode);
StringAssert.DoesNotContain("Test_1", actualCode);
StringAssert.Contains("test1", actualCode);
StringAssert.DoesNotContain("Test1", actualCode);
}

[TestCase("Dim test As String", "arg")] //Local variable
Expand Down Expand Up @@ -369,17 +369,17 @@ public void TargetDefaultFieldIDConflict()
var inputCode =
$@"
Private tes|t As String
Private test_1 As String
Private test1 As String
Public Sub Foo(arg As String)
test = arg & test_1
test = arg & test1
End Sub
";
var presenterAction = Support.UserAcceptsDefaults();
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
StringAssert.Contains("Test", actualCode);
StringAssert.Contains("Private test_2 As String", actualCode);
StringAssert.DoesNotContain("test_1 = arg & test_1", actualCode);
StringAssert.Contains("Private test2 As String", actualCode);
StringAssert.DoesNotContain("test1 = arg & test1", actualCode);
}

[TestCase(MockVbeBuilder.TestModuleName)]
Expand Down Expand Up @@ -472,7 +472,7 @@ End Type
var actualModuleCode = Support.RefactoredCode(presenterAction,
(moduleOneName, inputCode.ToCodeString(), ComponentType.StandardModule));

StringAssert.Contains($"Private Type TModuleOne_1", actualModuleCode[moduleOneName]);
StringAssert.Contains($"Private Type TModuleOne1", actualModuleCode[moduleOneName]);
}

[Test]
Expand Down Expand Up @@ -682,7 +682,7 @@ public void ObjectStateUDTFieldConflictsWithAssignedProperty()

model.ConflictFinder.AssignNoConflictIdentifiers(objectStateUDT);

StringAssert.AreEqualIgnoringCase("this_1", objectStateUDT.IdentifierName);
StringAssert.AreEqualIgnoringCase("this1", objectStateUDT.IdentifierName);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,24 +45,24 @@ public void FieldNameValuesPerSequenceOfPropertyNameChanges()
var inputCode = "Public fizz As String";

var encapsulatedField = Support.RetrieveEncapsulateFieldCandidate(inputCode, "fizz");
StringAssert.AreEqualIgnoringCase("fizz_1", encapsulatedField.BackingIdentifier);
StringAssert.AreEqualIgnoringCase("fizz1", encapsulatedField.BackingIdentifier);

encapsulatedField.PropertyIdentifier = "Test";
StringAssert.AreEqualIgnoringCase("fizz", encapsulatedField.BackingIdentifier);

encapsulatedField.PropertyIdentifier = "Fizz";
StringAssert.AreEqualIgnoringCase("fizz_1", encapsulatedField.BackingIdentifier);
StringAssert.AreEqualIgnoringCase("fizz1", encapsulatedField.BackingIdentifier);

encapsulatedField.PropertyIdentifier = "Fiz";
StringAssert.AreEqualIgnoringCase("fizz", encapsulatedField.BackingIdentifier);

encapsulatedField.PropertyIdentifier = "Fizz";
StringAssert.AreEqualIgnoringCase("fizz_1", encapsulatedField.BackingIdentifier);
StringAssert.AreEqualIgnoringCase("fizz1", encapsulatedField.BackingIdentifier);
}

[TestCase("strValue", "Value", "strValue")]
[TestCase("m_Text", "Text", "m_Text")]
[TestCase("notAHungarianName", "NotAHungarianName", "notAHungarianName_1")]
[TestCase("notAHungarianName", "NotAHungarianName", "notAHungarianName1")]
[Category("Refactorings")]
[Category("Encapsulate Field")]
public void AccountsForHungarianNamesAndMemberPrefix(string inputName, string expectedPropertyName, string expectedFieldName)
Expand Down

0 comments on commit 76d745a

Please sign in to comment.