Skip to content

Commit 435506e

Browse files
Move existing like operator
1 parent 2cc610d commit 435506e

3 files changed

Lines changed: 14 additions & 16 deletions

File tree

CodeConverter/CSharp/BuiltInVisualBasicOperatorSubsitutions.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,15 @@ private async Task<ExpressionSyntax> ConvertMyGroupCollectionPropertyGetWithUnde
8383

8484
private async Task<ExpressionSyntax> ConvertToLikeOperatorAsync(VBSyntax.BinaryExpressionSyntax node, WellKnownMember member)
8585
{
86-
return null;
86+
var (lhs, rhs) = await AcceptSidesAsync(node);
87+
var compareText = ValidSyntaxFactory.MemberAccess("CompareMethod", _visualBasicEqualityComparison.OptionCompareTextCaseInsensitive ? "Text" : "Binary");
88+
var likeString = ValidSyntaxFactory.MemberAccess("LikeOperator", "LikeString");
89+
_visualBasicEqualityComparison.ExtraUsingDirectives.Add("Microsoft.VisualBasic");
90+
_visualBasicEqualityComparison.ExtraUsingDirectives.Add("Microsoft.VisualBasic.CompilerServices");
91+
return SyntaxFactory.InvocationExpression(
92+
likeString,
93+
ExpressionSyntaxExtensions.CreateArgList(lhs, rhs, compareText)
94+
);
8795
}
8896

8997
private async Task<ExpressionSyntax> ConvertToConcatenateOperatorAsync(VBSyntax.BinaryExpressionSyntax node)

CodeConverter/CSharp/ExpressionNodeVisitor.cs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -737,17 +737,6 @@ public override async Task<CSharpSyntaxNode> VisitBinaryExpression(VBasic.Syntax
737737
rhs = omitConversion || omitRightConversion ? rhs : CommonConversions.TypeConversionAnalyzer.AddExplicitConversion(node.Right, rhs);
738738

739739

740-
if (node.IsKind(VBasic.SyntaxKind.LikeExpression)) {
741-
var compareText = ValidSyntaxFactory.MemberAccess("CompareMethod", _optionCompareText ? "Text" : "Binary");
742-
var likeString = ValidSyntaxFactory.MemberAccess("LikeOperator", "LikeString");
743-
_extraUsingDirectives.Add("Microsoft.VisualBasic");
744-
_extraUsingDirectives.Add("Microsoft.VisualBasic.CompilerServices");
745-
return SyntaxFactory.InvocationExpression(
746-
likeString,
747-
ExpressionSyntaxExtensions.CreateArgList(lhs, rhs, compareText)
748-
);
749-
}
750-
751740
var kind = VBasic.VisualBasicExtensions.Kind(node).ConvertToken(TokenContext.Local);
752741
var op = SyntaxFactory.Token(CSharpUtil.GetExpressionOperatorTokenKind(kind));
753742

CodeConverter/CSharp/VisualBasicEqualityComparison.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@ namespace ICSharpCode.CodeConverter.CSharp
2626
internal class VisualBasicEqualityComparison
2727
{
2828
private readonly SemanticModel _semanticModel;
29-
private readonly HashSet<string> _extraUsingDirectives;
3029

3130
public VisualBasicEqualityComparison(SemanticModel semanticModel, HashSet<string> extraUsingDirectives)
3231
{
33-
_extraUsingDirectives = extraUsingDirectives;
32+
ExtraUsingDirectives = extraUsingDirectives;
3433
_semanticModel = semanticModel;
3534
}
3635

@@ -43,6 +42,8 @@ public enum RequiredType
4342

4443
public bool OptionCompareTextCaseInsensitive { get; set; }
4544

45+
public HashSet<string> ExtraUsingDirectives { get; }
46+
4647
public RequiredType GetObjectEqualityType(VBSyntax.BinaryExpressionSyntax node, TypeInfo leftType, TypeInfo rightType)
4748
{
4849
var typeInfos = new[] {leftType, rightType};
@@ -191,7 +192,7 @@ private static ExpressionSyntax NegateIfNeeded(VBSyntax.BinaryExpressionSyntax n
191192
public (ExpressionSyntax csLeft, ExpressionSyntax csRight) AdjustForVbStringComparison(VBSyntax.ExpressionSyntax vbLeft, ExpressionSyntax csLeft, TypeInfo lhsTypeInfo, VBSyntax.ExpressionSyntax vbRight, ExpressionSyntax csRight, TypeInfo rhsTypeInfo)
192193
{
193194
if (OptionCompareTextCaseInsensitive) {
194-
_extraUsingDirectives.Add("System.Globalization");
195+
ExtraUsingDirectives.Add("System.Globalization");
195196
var compareOptions = SyntaxFactory.Argument(GetCompareTextCaseInsensitiveCompareOptions());
196197
var compareString = SyntaxFactory.InvocationExpression(ValidSyntaxFactory.MemberAccess(nameof(CultureInfo), nameof(CultureInfo.CurrentCulture),
197198
nameof(CultureInfo.CompareInfo), nameof(CompareInfo.Compare)),
@@ -209,7 +210,7 @@ private static ExpressionSyntax NegateIfNeeded(VBSyntax.BinaryExpressionSyntax n
209210

210211
public ExpressionSyntax GetFullExpressionForVbObjectComparison(VBSyntax.BinaryExpressionSyntax node, ExpressionSyntax lhs, ExpressionSyntax rhs)
211212
{
212-
_extraUsingDirectives.Add("Microsoft.VisualBasic.CompilerServices");
213+
ExtraUsingDirectives.Add("Microsoft.VisualBasic.CompilerServices");
213214
var optionCompareTextCaseInsensitive = SyntaxFactory.Argument(SyntaxFactory.LiteralExpression(OptionCompareTextCaseInsensitive ? SyntaxKind.TrueKeyword : SyntaxKind.FalseLiteralExpression));
214215
var compareObject = SyntaxFactory.InvocationExpression(ValidSyntaxFactory.MemberAccess(nameof(Operators), nameof(Operators.ConditionalCompareObjectEqual)),
215216
SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(new[]

0 commit comments

Comments
 (0)