private static IEnumerable<SyntaxNodeOrToken> CreateQuestInitializer(ushort questId, QuestRoot quest)
{
- return new SyntaxNodeOrToken[]
+ try
{
- InitializerExpression(
- SyntaxKind.ComplexElementInitializerExpression,
- SeparatedList<ExpressionSyntax>(
- new SyntaxNodeOrToken[]
- {
- LiteralExpression(
- SyntaxKind.NumericLiteralExpression,
- Literal(questId)),
- Token(SyntaxKind.CommaToken),
- ObjectCreationExpression(
- IdentifierName(nameof(QuestRoot)))
- .WithInitializer(
- InitializerExpression(
- SyntaxKind.ObjectInitializerExpression,
- SeparatedList<ExpressionSyntax>(
- SyntaxNodeList(
- AssignmentList(nameof(QuestRoot.Author), quest.Author)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(QuestRoot.Comment), quest.Comment, null)
- .AsSyntaxNodeOrToken(),
- AssignmentList(nameof(QuestRoot.TerritoryBlacklist),
- quest.TerritoryBlacklist).AsSyntaxNodeOrToken(),
- AssignmentExpression(
- SyntaxKind.SimpleAssignmentExpression,
- IdentifierName(nameof(QuestRoot.QuestSequence)),
- CreateQuestSequence(quest.QuestSequence))
- ))))
- })),
- Token(SyntaxKind.CommaToken)
- };
+ return new SyntaxNodeOrToken[]
+ {
+ InitializerExpression(
+ SyntaxKind.ComplexElementInitializerExpression,
+ SeparatedList<ExpressionSyntax>(
+ new SyntaxNodeOrToken[]
+ {
+ LiteralExpression(
+ SyntaxKind.NumericLiteralExpression,
+ Literal(questId)),
+ Token(SyntaxKind.CommaToken),
+ ObjectCreationExpression(
+ IdentifierName(nameof(QuestRoot)))
+ .WithInitializer(
+ InitializerExpression(
+ SyntaxKind.ObjectInitializerExpression,
+ SeparatedList<ExpressionSyntax>(
+ SyntaxNodeList(
+ AssignmentList(nameof(QuestRoot.Author), quest.Author)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(QuestRoot.Comment), quest.Comment, null)
+ .AsSyntaxNodeOrToken(),
+ AssignmentList(nameof(QuestRoot.TerritoryBlacklist),
+ quest.TerritoryBlacklist).AsSyntaxNodeOrToken(),
+ AssignmentExpression(
+ SyntaxKind.SimpleAssignmentExpression,
+ IdentifierName(nameof(QuestRoot.QuestSequence)),
+ CreateQuestSequence(quest.QuestSequence))
+ ))))
+ })),
+ Token(SyntaxKind.CommaToken)
+ };
+ }
+ catch (Exception e)
+ {
+ throw new Exception($"QuestGen[{questId}]: {e.Message}", e);
+ }
}
private static ExpressionSyntax CreateQuestSequence(List<QuestSequence> sequences)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.Sprint), step.Sprint, emptyStep.Sprint)
.AsSyntaxNodeOrToken(),
- Assignment(nameof(QuestStep.IgnoreDistanceToObject), step.IgnoreDistanceToObject, emptyStep.IgnoreDistanceToObject)
+ Assignment(nameof(QuestStep.IgnoreDistanceToObject),
+ step.IgnoreDistanceToObject, emptyStep.IgnoreDistanceToObject)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.Comment), step.Comment, emptyStep.Comment)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.Aetheryte), step.Aetheryte, emptyStep.Aetheryte)
.AsSyntaxNodeOrToken(),
- Assignment(nameof(QuestStep.AethernetShard), step.AethernetShard, emptyStep.AethernetShard)
+ Assignment(nameof(QuestStep.AethernetShard), step.AethernetShard,
+ emptyStep.AethernetShard)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.AetheryteShortcut), step.AetheryteShortcut,
emptyStep.AetheryteShortcut)
.AsSyntaxNodeOrToken(),
AssignmentList(nameof(QuestStep.ComplexCombatData), step.ComplexCombatData)
.AsSyntaxNodeOrToken(),
- Assignment(nameof(QuestStep.CombatDelaySecondsAtStart), step.CombatDelaySecondsAtStart,
+ Assignment(nameof(QuestStep.CombatDelaySecondsAtStart),
+ step.CombatDelaySecondsAtStart,
emptyStep.CombatDelaySecondsAtStart)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.JumpDestination), step.JumpDestination,
.AsSyntaxNodeOrToken(),
AssignmentList(nameof(QuestStep.PointMenuChoices), step.PointMenuChoices)
.AsSyntaxNodeOrToken(),
- Assignment(nameof(QuestStep.PickUpQuestId), step.PickUpQuestId, emptyStep.PickUpQuestId)
+ Assignment(nameof(QuestStep.PickUpQuestId), step.PickUpQuestId,
+ emptyStep.PickUpQuestId)
.AsSyntaxNodeOrToken(),
- Assignment(nameof(QuestStep.TurnInQuestId), step.TurnInQuestId, emptyStep.TurnInQuestId)
+ Assignment(nameof(QuestStep.TurnInQuestId), step.TurnInQuestId,
+ emptyStep.TurnInQuestId)
.AsSyntaxNodeOrToken(),
- Assignment(nameof(QuestStep.NextQuestId), step.NextQuestId, emptyStep.NextQuestId)
+ Assignment(nameof(QuestStep.NextQuestId), step.NextQuestId,
+ emptyStep.NextQuestId)
.AsSyntaxNodeOrToken()))))),
Token(SyntaxKind.CommaToken),
}.ToArray())));
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Numerics;
using Microsoft.CodeAnalysis;
{
public static IEnumerable<SyntaxNodeOrToken> SyntaxNodeList(params SyntaxNodeOrToken?[] nodes)
{
- nodes = nodes.Where(x => x != null).ToArray();
+ nodes = nodes.Where(x => x != null && x.Value.RawKind != 0).ToArray();
if (nodes.Length == 0)
return [];
public static ExpressionSyntax LiteralValue<T>(T? value)
{
- if (value is string s)
- return LiteralExpression(SyntaxKind.StringLiteralExpression, Literal(s));
- else if (value is bool b)
- return LiteralExpression(b ? SyntaxKind.TrueLiteralExpression : SyntaxKind.FalseLiteralExpression);
- else if (value is short i16)
- return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(i16));
- else if (value is int i32)
- return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(i32));
- else if (value is byte u8)
- return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(u8));
- else if (value is ushort u16)
- return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(u16));
- else if (value is uint u32)
- return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(u32));
- else if (value is float f)
- return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(f));
- else if (value != null && value.GetType().IsEnum)
- return MemberAccessExpression(
- SyntaxKind.SimpleMemberAccessExpression,
- IdentifierName(value.GetType().Name),
- IdentifierName(value.GetType().GetEnumName(value)!));
- else if (value is Vector3 vector)
+ try
{
- return ObjectCreationExpression(
- IdentifierName(nameof(Vector3)))
- .WithArgumentList(
- ArgumentList(
- SeparatedList<ArgumentSyntax>(
- new SyntaxNodeOrToken[]
- {
- Argument(LiteralValue(vector.X)),
- Token(SyntaxKind.CommaToken),
- Argument(LiteralValue(vector.Y)),
- Token(SyntaxKind.CommaToken),
- Argument(LiteralValue(vector.Z))
- })));
- }
- else if (value is AethernetShortcut aethernetShortcut)
- {
- return ObjectCreationExpression(
- IdentifierName(nameof(AethernetShortcut)))
- .WithInitializer(
- InitializerExpression(
- SyntaxKind.ObjectInitializerExpression,
- SeparatedList<ExpressionSyntax>(
- SyntaxNodeList(
- Assignment<EAetheryteLocation?>(nameof(AethernetShortcut.From), aethernetShortcut.From,
- null)
- .AsSyntaxNodeOrToken(),
- Assignment<EAetheryteLocation?>(nameof(AethernetShortcut.To), aethernetShortcut.To,
- null)
- .AsSyntaxNodeOrToken()))));
- }
- else if (value is ChatMessage chatMessage)
- {
- ChatMessage emptyMessage = new();
- return ObjectCreationExpression(
- IdentifierName(nameof(ChatMessage)))
- .WithInitializer(
- InitializerExpression(
- SyntaxKind.ObjectInitializerExpression,
- SeparatedList<ExpressionSyntax>(
- SyntaxNodeList(
- Assignment(nameof(ChatMessage.ExcelSheet), chatMessage.ExcelSheet,
- emptyMessage.ExcelSheet)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(ChatMessage.Key), chatMessage.Key,
- emptyMessage.Key)
- .AsSyntaxNodeOrToken()))));
- }
- else if (value is DialogueChoice dialogueChoice)
- {
- DialogueChoice emptyChoice = new();
- return ObjectCreationExpression(
- IdentifierName(nameof(DialogueChoice)))
- .WithInitializer(
- InitializerExpression(
- SyntaxKind.ObjectInitializerExpression,
- SeparatedList<ExpressionSyntax>(
- SyntaxNodeList(
- Assignment<EDialogChoiceType?>(nameof(DialogueChoice.Type), dialogueChoice.Type, null)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(DialogueChoice.ExcelSheet), dialogueChoice.ExcelSheet,
- emptyChoice.ExcelSheet)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(DialogueChoice.Prompt), dialogueChoice.Prompt, emptyChoice.Prompt)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(DialogueChoice.Yes), dialogueChoice.Yes, emptyChoice.Yes)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(DialogueChoice.Answer), dialogueChoice.Answer, emptyChoice.Answer)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(DialogueChoice.DataId), dialogueChoice.DataId, emptyChoice.DataId)
- .AsSyntaxNodeOrToken()))));
- }
- else if (value is JumpDestination jumpDestination)
- {
- return ObjectCreationExpression(
- IdentifierName(nameof(JumpDestination)))
- .WithInitializer(
- InitializerExpression(
- SyntaxKind.ObjectInitializerExpression,
- SeparatedList<ExpressionSyntax>(
- SyntaxNodeList(
- Assignment<Vector3?>(nameof(JumpDestination.Position), jumpDestination.Position, null)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(JumpDestination.StopDistance), jumpDestination.StopDistance, null)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(JumpDestination.DelaySeconds), jumpDestination.DelaySeconds, null)
- .AsSyntaxNodeOrToken()))));
- }
- else if (value is ExcelRef excelRef)
- {
- if (excelRef.Type == ExcelRef.EType.Key)
+ if (value is string s)
+ return LiteralExpression(SyntaxKind.StringLiteralExpression, Literal(s));
+ else if (value is bool b)
+ return LiteralExpression(b ? SyntaxKind.TrueLiteralExpression : SyntaxKind.FalseLiteralExpression);
+ else if (value is short i16)
+ return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(i16));
+ else if (value is int i32)
+ return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(i32));
+ else if (value is byte u8)
+ return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(u8));
+ else if (value is ushort u16)
+ return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(u16));
+ else if (value is uint u32)
+ return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(u32));
+ else if (value is float f)
+ return LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(f));
+ else if (value != null && value.GetType().IsEnum)
+ return MemberAccessExpression(
+ SyntaxKind.SimpleMemberAccessExpression,
+ IdentifierName(value.GetType().Name),
+ IdentifierName(value.GetType().GetEnumName(value)!));
+ else if (value is Vector3 vector)
{
return ObjectCreationExpression(
- IdentifierName(nameof(ExcelRef)))
+ IdentifierName(nameof(Vector3)))
.WithArgumentList(
ArgumentList(
- SingletonSeparatedList(
- Argument(LiteralValue(excelRef.AsKey())))));
+ SeparatedList<ArgumentSyntax>(
+ new SyntaxNodeOrToken[]
+ {
+ Argument(LiteralValue(vector.X)),
+ Token(SyntaxKind.CommaToken),
+ Argument(LiteralValue(vector.Y)),
+ Token(SyntaxKind.CommaToken),
+ Argument(LiteralValue(vector.Z))
+ })));
+ }
+ else if (value is AethernetShortcut aethernetShortcut)
+ {
+ return ObjectCreationExpression(
+ IdentifierName(nameof(AethernetShortcut)))
+ .WithInitializer(
+ InitializerExpression(
+ SyntaxKind.ObjectInitializerExpression,
+ SeparatedList<ExpressionSyntax>(
+ SyntaxNodeList(
+ Assignment<EAetheryteLocation?>(nameof(AethernetShortcut.From),
+ aethernetShortcut.From,
+ null)
+ .AsSyntaxNodeOrToken(),
+ Assignment<EAetheryteLocation?>(nameof(AethernetShortcut.To), aethernetShortcut.To,
+ null)
+ .AsSyntaxNodeOrToken()))));
+ }
+ else if (value is ChatMessage chatMessage)
+ {
+ ChatMessage emptyMessage = new();
+ return ObjectCreationExpression(
+ IdentifierName(nameof(ChatMessage)))
+ .WithInitializer(
+ InitializerExpression(
+ SyntaxKind.ObjectInitializerExpression,
+ SeparatedList<ExpressionSyntax>(
+ SyntaxNodeList(
+ Assignment(nameof(ChatMessage.ExcelSheet), chatMessage.ExcelSheet,
+ emptyMessage.ExcelSheet)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(ChatMessage.Key), chatMessage.Key,
+ emptyMessage.Key)
+ .AsSyntaxNodeOrToken()))));
+ }
+ else if (value is DialogueChoice dialogueChoice)
+ {
+ DialogueChoice emptyChoice = new();
+ return ObjectCreationExpression(
+ IdentifierName(nameof(DialogueChoice)))
+ .WithInitializer(
+ InitializerExpression(
+ SyntaxKind.ObjectInitializerExpression,
+ SeparatedList<ExpressionSyntax>(
+ SyntaxNodeList(
+ Assignment<EDialogChoiceType?>(nameof(DialogueChoice.Type), dialogueChoice.Type,
+ null)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(DialogueChoice.ExcelSheet), dialogueChoice.ExcelSheet,
+ emptyChoice.ExcelSheet)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(DialogueChoice.Prompt), dialogueChoice.Prompt, emptyChoice.Prompt)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(DialogueChoice.Yes), dialogueChoice.Yes, emptyChoice.Yes)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(DialogueChoice.Answer), dialogueChoice.Answer, emptyChoice.Answer)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(DialogueChoice.DataId), dialogueChoice.DataId, emptyChoice.DataId)
+ .AsSyntaxNodeOrToken()))));
+ }
+ else if (value is JumpDestination jumpDestination)
+ {
+ return ObjectCreationExpression(
+ IdentifierName(nameof(JumpDestination)))
+ .WithInitializer(
+ InitializerExpression(
+ SyntaxKind.ObjectInitializerExpression,
+ SeparatedList<ExpressionSyntax>(
+ SyntaxNodeList(
+ Assignment<Vector3?>(nameof(JumpDestination.Position), jumpDestination.Position,
+ null)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(JumpDestination.StopDistance), jumpDestination.StopDistance, null)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(JumpDestination.DelaySeconds), jumpDestination.DelaySeconds, null)
+ .AsSyntaxNodeOrToken()))));
+ }
+ else if (value is ExcelRef excelRef)
+ {
+ if (excelRef.Type == ExcelRef.EType.Key)
+ {
+ return ObjectCreationExpression(
+ IdentifierName(nameof(ExcelRef)))
+ .WithArgumentList(
+ ArgumentList(
+ SingletonSeparatedList(
+ Argument(LiteralValue(excelRef.AsKey())))));
+ }
+ else if (excelRef.Type == ExcelRef.EType.RowId)
+ {
+ return ObjectCreationExpression(
+ IdentifierName(nameof(ExcelRef)))
+ .WithArgumentList(
+ ArgumentList(
+ SingletonSeparatedList(
+ Argument(LiteralValue(excelRef.AsRowId())))));
+ }
+ else
+ throw new Exception($"Unsupported ExcelRef type {excelRef.Type}");
+ }
+ else if (value is ComplexCombatData complexCombatData)
+ {
+ var emptyData = new ComplexCombatData();
+ return ObjectCreationExpression(
+ IdentifierName(nameof(ComplexCombatData)))
+ .WithInitializer(
+ InitializerExpression(
+ SyntaxKind.ObjectInitializerExpression,
+ SeparatedList<ExpressionSyntax>(
+ SyntaxNodeList(
+ Assignment(nameof(ComplexCombatData.DataId), complexCombatData.DataId,
+ emptyData.DataId)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(ComplexCombatData.MinimumKillCount),
+ complexCombatData.MinimumKillCount, emptyData.MinimumKillCount)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(ComplexCombatData.RewardItemId), complexCombatData.RewardItemId,
+ emptyData.RewardItemId)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(ComplexCombatData.RewardItemCount),
+ complexCombatData.RewardItemCount,
+ emptyData.RewardItemCount)
+ .AsSyntaxNodeOrToken(),
+ AssignmentList(nameof(ComplexCombatData.CompletionQuestVariablesFlags),
+ complexCombatData.CompletionQuestVariablesFlags),
+ Assignment(nameof(ComplexCombatData.IgnoreQuestMarker),
+ complexCombatData.IgnoreQuestMarker,
+ emptyData.IgnoreQuestMarker)
+ .AsSyntaxNodeOrToken()))));
}
- else if (excelRef.Type == ExcelRef.EType.RowId)
+ else if (value is QuestWorkValue qwv)
{
return ObjectCreationExpression(
- IdentifierName(nameof(ExcelRef)))
+ IdentifierName(nameof(QuestWorkValue)))
.WithArgumentList(
ArgumentList(
- SingletonSeparatedList(
- Argument(LiteralValue(excelRef.AsRowId())))));
+ SeparatedList<ArgumentSyntax>(
+ new SyntaxNodeOrToken[]
+ {
+ Argument(LiteralValue(qwv.High)),
+ Token(SyntaxKind.CommaToken),
+ Argument(LiteralValue(qwv.Low))
+ })));
}
- else
- throw new Exception($"Unsupported ExcelRef type {excelRef.Type}");
- }
- else if (value is ComplexCombatData complexCombatData)
- {
- var emptyData = new ComplexCombatData();
- return ObjectCreationExpression(
- IdentifierName(nameof(ComplexCombatData)))
- .WithInitializer(
- InitializerExpression(
- SyntaxKind.ObjectInitializerExpression,
- SeparatedList<ExpressionSyntax>(
- SyntaxNodeList(
- Assignment(nameof(ComplexCombatData.DataId), complexCombatData.DataId, emptyData.DataId)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(ComplexCombatData.MinimumKillCount),
- complexCombatData.MinimumKillCount, emptyData.MinimumKillCount)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(ComplexCombatData.RewardItemId), complexCombatData.RewardItemId,
- emptyData.RewardItemId)
- .AsSyntaxNodeOrToken(),
- Assignment(nameof(ComplexCombatData.RewardItemCount), complexCombatData.RewardItemCount,
- emptyData.RewardItemCount)
- .AsSyntaxNodeOrToken(),
- AssignmentList(nameof(ComplexCombatData.CompletionQuestVariablesFlags),
- complexCombatData.CompletionQuestVariablesFlags),
- Assignment(nameof(ComplexCombatData.IgnoreQuestMarker),
- complexCombatData.IgnoreQuestMarker,
- emptyData.IgnoreQuestMarker)
- .AsSyntaxNodeOrToken()))));
- }
- else if (value is QuestWorkValue qwv)
- {
- return ObjectCreationExpression(
- IdentifierName(nameof(QuestWorkValue)))
- .WithArgumentList(
- ArgumentList(
- SeparatedList<ArgumentSyntax>(
- new SyntaxNodeOrToken[]
- {
- Argument(LiteralValue(qwv.High)),
- Token(SyntaxKind.CommaToken),
- Argument(LiteralValue(qwv.Low))
- })));
+ else if (value is List<QuestWorkValue> list)
+ {
+ return CollectionExpression(
+ SeparatedList<CollectionElementSyntax>(
+ SyntaxNodeList(list.Select(x => ExpressionElement(
+ LiteralValue(x)).AsSyntaxNodeOrToken()).ToArray())));
+ }
+ else if (value is null)
+ return LiteralExpression(SyntaxKind.NullLiteralExpression);
}
- else if (value is List<QuestWorkValue> list)
+ catch (Exception e)
{
- return CollectionExpression(
- SeparatedList<CollectionElementSyntax>(
- SyntaxNodeList(list.Select(x => ExpressionElement(
- LiteralValue(x)).AsSyntaxNodeOrToken()).ToArray())));
+ throw new Exception($"Unable to handle literal [{value}]: {e.StackTrace}", e);
}
- else if (value is null)
- return LiteralExpression(SyntaxKind.NullLiteralExpression);
- else
- throw new Exception($"Unsupported data type {value.GetType()} = {value}");
+
+ throw new Exception($"Unsupported data type {value.GetType()} = {value}");
}
public static AssignmentExpressionSyntax? Assignment<T>(string name, T? value, T? defaultValue)
{
- if (value == null && defaultValue == null)
- return null;
+ try
+ {
+ if (value == null && defaultValue == null)
+ return null;
- if (value != null && defaultValue != null && value.Equals(defaultValue))
- return null;
+ if (value != null && defaultValue != null && value.Equals(defaultValue))
+ return null;
- return AssignmentExpression(
- SyntaxKind.SimpleAssignmentExpression,
- IdentifierName(name),
- LiteralValue(value));
+ return AssignmentExpression(
+ SyntaxKind.SimpleAssignmentExpression,
+ IdentifierName(name),
+ LiteralValue(value));
+ }
+ catch (Exception e)
+ {
+ throw new Exception($"Unable to handle assignment [{name}]: {e.Message}", e);
+ }
}
- public static AssignmentExpressionSyntax? AssignmentList<T>(string name, IEnumerable<T> value)
+ public static AssignmentExpressionSyntax? AssignmentList<T>(string name, IEnumerable<T>? value)
{
- IEnumerable<T> list = value.ToList();
- if (!list.Any())
- return null;
+ try
+ {
+ if (value == null)
+ return null;
+
+ IEnumerable<T> list = value.ToList();
+ if (!list.Any())
+ return null;
- return AssignmentExpression(
- SyntaxKind.SimpleAssignmentExpression,
- IdentifierName(name),
- CollectionExpression(
- SeparatedList<CollectionElementSyntax>(
- SyntaxNodeList(list.Select(x => ExpressionElement(
- LiteralValue(x)).AsSyntaxNodeOrToken()).ToArray())
- )));
+ return AssignmentExpression(
+ SyntaxKind.SimpleAssignmentExpression,
+ IdentifierName(name),
+ CollectionExpression(
+ SeparatedList<CollectionElementSyntax>(
+ SyntaxNodeList(list.Select(x => ExpressionElement(
+ LiteralValue(x)).AsSyntaxNodeOrToken()).ToArray())
+ )));
+ }
+ catch (Exception e)
+ {
+ throw new Exception($"Unable to handle list [{name}]: {e.StackTrace}", e);
+ }
}
public static SyntaxNodeOrToken? AsSyntaxNodeOrToken(this SyntaxNode? node)