static Dictionary <string, VariableDeclarationSyntax> SplitVariableDeclarations(VBSyntax.VariableDeclaratorSyntax declarator, VBasic.VisualBasicSyntaxVisitor <CSharpSyntaxNode> nodesVisitor, SemanticModel semanticModel) { var rawType = (TypeSyntax)declarator.AsClause?.TypeSwitch( (VBSyntax.SimpleAsClauseSyntax c) => c.Type, (VBSyntax.AsNewClauseSyntax c) => VBasic.SyntaxExtensions.Type(c.NewExpression), _ => { throw new NotImplementedException($"{_.GetType().FullName} not implemented!"); } )?.Accept(nodesVisitor) ?? SyntaxFactory.ParseTypeName("var"); var initializer = (ExpressionSyntax)declarator.AsClause?.TypeSwitch( (VBSyntax.SimpleAsClauseSyntax _) => declarator.Initializer?.Value, (VBSyntax.AsNewClauseSyntax c) => c.NewExpression )?.Accept(nodesVisitor) ?? (ExpressionSyntax)declarator.Initializer?.Value.Accept(nodesVisitor); var newDecls = new Dictionary <string, VariableDeclarationSyntax>(); foreach (var name in declarator.Names) { var type = rawType; if (!SyntaxTokenExtensions.IsKind(name.Nullable, VBasic.SyntaxKind.None)) { if (type is ArrayTypeSyntax) { type = ((ArrayTypeSyntax)type).WithElementType( SyntaxFactory.NullableType(((ArrayTypeSyntax)type).ElementType)); initializer = null; } else { type = SyntaxFactory.NullableType(type); } } var rankSpecifiers = NodesVisitor.ConvertArrayRankSpecifierSyntaxes(name.ArrayRankSpecifiers, name.ArrayBounds, nodesVisitor, semanticModel, false); if (rankSpecifiers.Count > 0) { var rankSpecifiersWithSizes = NodesVisitor.ConvertArrayRankSpecifierSyntaxes(name.ArrayRankSpecifiers, name.ArrayBounds, nodesVisitor, semanticModel); if (!rankSpecifiersWithSizes.SelectMany(ars => ars.Sizes).OfType <OmittedArraySizeExpressionSyntax>().Any()) { initializer = SyntaxFactory.ArrayCreationExpression( SyntaxFactory.ArrayType(type, rankSpecifiersWithSizes)); } type = SyntaxFactory.ArrayType(type, rankSpecifiers); } VariableDeclarationSyntax decl; var v = SyntaxFactory.VariableDeclarator(ConvertIdentifier(name.Identifier, semanticModel), null, initializer == null ? null : SyntaxFactory.EqualsValueClause(initializer)); string k = type.ToString(); if (newDecls.TryGetValue(k, out decl)) { newDecls[k] = decl.AddVariables(v); } else { newDecls[k] = SyntaxFactory.VariableDeclaration(type, SyntaxFactory.SingletonSeparatedList(v)); } } return(newDecls); }