Skip to content

Commit 59f6568

Browse files
Convert array type when there's an initializer
Part of #544
1 parent 34317c1 commit 59f6568

File tree

3 files changed

+40
-10
lines changed

3 files changed

+40
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
1919
* Added constructors now only added to the relevant type - not other types in the same file
2020
* Converted non-static field initializers moved to constructor - [#281](https://github.com/icsharpcode/CodeConverter/issues/281)
2121
* Convert assignments using "Mid" built-in function
22-
22+
* Improve conversion of array initializer types
2323

2424
### C# -> VB
2525

CodeConverter/CSharp/CommonConversions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,11 @@ private async Task<CSharpSyntaxNode> GetInitializerFromNameAndType(ITypeSymbol t
249249
if (rankSpecifiers.Count > 0)
250250
{
251251
var rankSpecifiersWithSizes = await ConvertArrayRankSpecifierSyntaxes(name.ArrayRankSpecifiers, name.ArrayBounds);
252-
if (rankSpecifiersWithSizes.SelectMany(ars => ars.Sizes).Any(e => !e.IsKind(CSSyntaxKind.OmittedArraySizeExpression)))
253-
{
254-
var arrayTypeSyntax = (ArrayTypeSyntax) GetTypeSyntax(typeSymbol);
255-
arrayTypeSyntax = arrayTypeSyntax.WithRankSpecifiers(rankSpecifiersWithSizes);
252+
var arrayTypeSyntax = ((ArrayTypeSyntax)GetTypeSyntax(typeSymbol)).WithRankSpecifiers(rankSpecifiersWithSizes);
253+
if (rankSpecifiersWithSizes.SelectMany(ars => ars.Sizes).Any(e => !e.IsKind(CSSyntaxKind.OmittedArraySizeExpression))) {
256254
initializer = SyntaxFactory.ArrayCreationExpression(arrayTypeSyntax);
255+
} else if (initializer is ImplicitArrayCreationExpressionSyntax iaces && iaces.Initializer != null) {
256+
initializer = SyntaxFactory.ArrayCreationExpression(arrayTypeSyntax, iaces.Initializer);
257257
}
258258
}
259259

Tests/CSharp/StatementTests/StatementTests.cs

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,39 @@ private void TestMethod()
822822
}");
823823
}
824824

825+
[Fact]
826+
public async Task Issue554_AvoidImplicitArrayTypeAsync()
827+
{
828+
await TestConversionVisualBasicToCSharpAsync(@"Imports System.Net
829+
Imports System.Net.Sockets
830+
831+
Public Class Issue554_ImplicitArrayType
832+
Public Shared Sub Main()
833+
Dim msg() As Byte = {2}
834+
Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Loopback, 1434)
835+
Dim l_socket As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
836+
Dim i_Test, i_Tab(), bearb(,) As Integer
837+
l_socket.SendTo(msg, ep)
838+
End Sub
839+
End Class"
840+
, @"using System.Net;
841+
using System.Net.Sockets;
842+
843+
public partial class Issue554_ImplicitArrayType
844+
{
845+
public static void Main()
846+
{
847+
var msg = new byte[] { 2 };
848+
var ep = new IPEndPoint(IPAddress.Loopback, 1434);
849+
var l_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
850+
int i_Test;
851+
int[] i_Tab;
852+
int[,] bearb;
853+
l_socket.SendTo(msg, ep);
854+
}
855+
}");
856+
}
857+
825858
[Fact]
826859
public async Task ArrayInitializationStatementWithLengthAsync()
827860
{
@@ -1197,16 +1230,13 @@ public static void Main()
11971230
[Fact]
11981231
public async Task SplitArrayDeclarationsAsync()
11991232
{
1200-
await TestConversionVisualBasicToCSharpAsync($@"Imports System.Diagnostics
1201-
Imports System.Threading
1202-
1203-
Public Class AcmeClass
1233+
await TestConversionVisualBasicToCSharpAsync($@"Public Class SplitArrayDeclarations
12041234
Public Shared Sub Main()
12051235
Dim i_Test, i_Tab(), bearb(,) As Integer
12061236
End Sub
12071237
End Class"
12081238
, @"
1209-
public partial class AcmeClass
1239+
public partial class SplitArrayDeclarations
12101240
{
12111241
public static void Main()
12121242
{

0 commit comments

Comments
 (0)