Skip to content

Commit 2e3f834

Browse files
committed
Fixed regression with Generics.
1 parent fa7536a commit 2e3f834

File tree

1 file changed

+130
-123
lines changed

1 file changed

+130
-123
lines changed

CSharpToJavaScript/Walker.cs

Lines changed: 130 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -3414,8 +3414,9 @@ public override void VisitGenericName(GenericNameSyntax node)
34143414
{
34153415
case SyntaxKind.IdentifierToken:
34163416
{
3417-
//TODO! See "VisitIdentifierName"
3418-
3417+
if (IsRightAttribute(node, asToken))
3418+
break;
3419+
34193420
if (IdentifierToken(node) == false)
34203421
{
34213422
base.VisitGenericName(node);
@@ -3458,146 +3459,152 @@ public override void VisitIdentifierName(IdentifierNameSyntax node)
34583459
{
34593460
case SyntaxKind.IdentifierToken:
34603461
{
3461-
IdentifierNameSyntax _identifier = (IdentifierNameSyntax)node;
3462-
SymbolInfo? _symbolInfo = null;
3463-
3464-
if (_SNOriginalAsExpression != null)
3465-
{
3466-
IEnumerable<SyntaxNodeOrToken> _identifierNameSyntax = _SNOriginalAsExpression.DescendantNodesAndTokens().Where(e => e.IsToken == true);
3467-
foreach (SyntaxNodeOrToken _item in _identifierNameSyntax)
3468-
{
3469-
SyntaxToken _syntaxToken = _item.AsToken();
3470-
3471-
if (_syntaxToken.IsKind(SyntaxKind.IdentifierToken))
3472-
{
3473-
if (_syntaxToken.Text == asToken.Text)
3474-
{
3475-
if (_item.Parent != null)
3476-
_symbolInfo = _Model.GetSymbolInfo(_item.Parent);
3477-
else
3478-
Log.ErrorLine("_item.Parent is null");
3479-
break;
3480-
}
3481-
}
3482-
}
3483-
//node = _SNOriginalAsExpression;
3484-
}
3485-
else
3462+
if (IsRightAttribute(node, asToken))
3463+
break;
3464+
3465+
if (IdentifierToken(node) == false)
34863466
{
3487-
if (_SNPropertyType != null)
3488-
_symbolInfo = _Model.GetSymbolInfo(_SNPropertyType);
3489-
else
3490-
_symbolInfo = _Model.GetSymbolInfo(_identifier);
3467+
base.VisitIdentifierName(node);
34913468
}
3492-
3493-
ISymbol? _symbol = null;
3469+
break;
3470+
}
3471+
default:
3472+
Log.ErrorLine($"asToken : {kind}");
3473+
break;
3474+
}
3475+
}
3476+
}
3477+
}
3478+
private bool IsRightAttribute<T>(T identifier, SyntaxToken asToken) where T : SimpleNameSyntax
3479+
{
3480+
SymbolInfo? _symbolInfo = null;
34943481

3495-
if (_symbolInfo?.CandidateSymbols.Length >= 1)
3496-
_symbol = _symbolInfo?.CandidateSymbols[0];
3497-
else
3498-
_symbol = _symbolInfo?.Symbol;
3482+
if (_SNOriginalAsExpression != null)
3483+
{
3484+
IEnumerable<SyntaxNodeOrToken> _identifierNameSyntax = _SNOriginalAsExpression.DescendantNodesAndTokens().Where(e => e.IsToken == true);
3485+
foreach (SyntaxNodeOrToken _item in _identifierNameSyntax)
3486+
{
3487+
SyntaxToken _syntaxToken = _item.AsToken();
34993488

3500-
if (_symbol != null)
3501-
{
3502-
CheckParentAttributes:
3503-
AttributeData[] _attributeData = _symbol.GetAttributes().ToArray();
3504-
for (int j = 0; j < _attributeData.Length; j++)
3505-
{
3506-
if (_attributeData[j].AttributeClass != null)
3507-
{
3508-
if (_attributeData[j].AttributeClass!.Name == nameof(BinaryAttribute) ||
3509-
_attributeData[j].AttributeClass!.Name == nameof(UnaryAttribute))
3510-
{
3511-
_AttributeDatasForInvocation[0] = _attributeData[j].AttributeClass!.Name;
3512-
_AttributeDatasForInvocation[1] = _attributeData[j].ConstructorArguments[0].Value.ToString();
3513-
goto BreakIndetifierToken;
3514-
}
3489+
if (_syntaxToken.IsKind(SyntaxKind.IdentifierToken))
3490+
{
3491+
if (_syntaxToken.Text == asToken.Text)
3492+
{
3493+
if (_item.Parent != null)
3494+
_symbolInfo = _Model.GetSymbolInfo(_item.Parent);
3495+
else
3496+
Log.ErrorLine("_item.Parent is null");
3497+
break;
3498+
}
3499+
}
3500+
}
3501+
//node = _SNOriginalAsExpression;
3502+
}
3503+
else
3504+
{
3505+
if (_SNPropertyType != null)
3506+
_symbolInfo = _Model.GetSymbolInfo(_SNPropertyType);
3507+
else
3508+
_symbolInfo = _Model.GetSymbolInfo(identifier);
3509+
}
35153510

3516-
if (_attributeData[j].AttributeClass.Name == nameof(EnumValueAttribute))
3517-
{
3518-
SyntaxTriviaList _syntaxTrivias = _identifier.GetLeadingTrivia();
3519-
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3520-
{
3521-
VisitTrivia(_syntaxTrivias[_i]);
3522-
}
3511+
ISymbol? _symbol = null;
35233512

3524-
JSSB.Append($"\"{_attributeData[j].ConstructorArguments[0].Value}\"");
3513+
if (_symbolInfo?.CandidateSymbols.Length >= 1)
3514+
_symbol = _symbolInfo?.CandidateSymbols[0];
3515+
else
3516+
_symbol = _symbolInfo?.Symbol;
35253517

3526-
_syntaxTrivias = _identifier.GetTrailingTrivia();
3527-
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3528-
{
3529-
VisitTrivia(_syntaxTrivias[_i]);
3530-
}
3518+
if (_symbol != null)
3519+
{
3520+
CheckParentAttributes:
3521+
AttributeData[] _attributeData = _symbol.GetAttributes().ToArray();
3522+
for (int j = 0; j < _attributeData.Length; j++)
3523+
{
3524+
if (_attributeData[j].AttributeClass != null)
3525+
{
3526+
if (_attributeData[j].AttributeClass!.Name == nameof(BinaryAttribute) ||
3527+
_attributeData[j].AttributeClass!.Name == nameof(UnaryAttribute))
3528+
{
3529+
_AttributeDatasForInvocation[0] = _attributeData[j].AttributeClass!.Name;
3530+
_AttributeDatasForInvocation[1] = _attributeData[j].ConstructorArguments[0].Value.ToString();
35313531

3532-
goto BreakIndetifierToken;
3533-
}
3532+
return true;
3533+
}
35343534

3535-
if (_attributeData[j].AttributeClass.Name == nameof(ValueAttribute))
3536-
{
3537-
SyntaxTriviaList _syntaxTrivias = _identifier.GetLeadingTrivia();
3538-
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3539-
{
3540-
VisitTrivia(_syntaxTrivias[_i]);
3541-
}
3535+
if (_attributeData[j].AttributeClass.Name == nameof(EnumValueAttribute))
3536+
{
3537+
SyntaxTriviaList _syntaxTrivias = identifier.GetLeadingTrivia();
3538+
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3539+
{
3540+
VisitTrivia(_syntaxTrivias[_i]);
3541+
}
35423542

3543-
JSSB.Append($"{_attributeData[j].ConstructorArguments[0].Value}");
3543+
JSSB.Append($"\"{_attributeData[j].ConstructorArguments[0].Value}\"");
35443544

3545-
_syntaxTrivias = _identifier.GetTrailingTrivia();
3546-
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3547-
{
3548-
VisitTrivia(_syntaxTrivias[_i]);
3549-
}
3545+
_syntaxTrivias = identifier.GetTrailingTrivia();
3546+
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3547+
{
3548+
VisitTrivia(_syntaxTrivias[_i]);
3549+
}
35503550

3551-
goto BreakIndetifierToken;
3552-
}
3551+
return true;
3552+
}
35533553

3554-
if (_attributeData[j].AttributeClass.Name == nameof(ToAttribute))
3555-
{
3556-
ToAttribute _toAttr = new ToAttribute(_attributeData[j].ConstructorArguments[0].Value.ToString());
3554+
if (_attributeData[j].AttributeClass.Name == nameof(ValueAttribute))
3555+
{
3556+
SyntaxTriviaList _syntaxTrivias = identifier.GetLeadingTrivia();
3557+
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3558+
{
3559+
VisitTrivia(_syntaxTrivias[_i]);
3560+
}
35573561

3558-
if (_toAttr.To == ToAttribute.None)
3559-
_IgnoreTailingDot = true;
3562+
JSSB.Append($"{_attributeData[j].ConstructorArguments[0].Value}");
35603563

3561-
SyntaxTriviaList _syntaxTrivias = _identifier.GetLeadingTrivia();
3562-
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3563-
{
3564-
VisitTrivia(_syntaxTrivias[_i]);
3565-
}
3564+
_syntaxTrivias = identifier.GetTrailingTrivia();
3565+
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3566+
{
3567+
VisitTrivia(_syntaxTrivias[_i]);
3568+
}
35663569

3567-
JSSB.Append($"{_toAttr.Convert(_identifier.Identifier.Text)}");
3570+
return true;
3571+
}
35683572

3569-
_syntaxTrivias = _identifier.GetTrailingTrivia();
3570-
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3571-
{
3572-
VisitTrivia(_syntaxTrivias[_i]);
3573-
}
3574-
3575-
goto BreakIndetifierToken;
3576-
}
3577-
}
3578-
}
3579-
if (_symbol.ContainingType != null)
3580-
{
3581-
_symbol = _symbol.ContainingType;
3582-
goto CheckParentAttributes;
3583-
}
3584-
}
3573+
if (_attributeData[j].AttributeClass.Name == nameof(ToAttribute))
3574+
{
3575+
ToAttribute _toAttr = new ToAttribute(_attributeData[j].ConstructorArguments[0].Value.ToString());
35853576

3586-
if (IdentifierToken(node) == false)
3587-
{
3588-
base.VisitIdentifierName(node);
3589-
}
3590-
BreakIndetifierToken:
3591-
break;
3577+
if (_toAttr.To == ToAttribute.None)
3578+
_IgnoreTailingDot = true;
3579+
3580+
SyntaxTriviaList _syntaxTrivias = identifier.GetLeadingTrivia();
3581+
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3582+
{
3583+
VisitTrivia(_syntaxTrivias[_i]);
35923584
}
3593-
default:
3594-
Log.ErrorLine($"asToken : {kind}");
3595-
break;
3585+
3586+
JSSB.Append($"{_toAttr.Convert(identifier.Identifier.Text)}");
3587+
3588+
_syntaxTrivias = identifier.GetTrailingTrivia();
3589+
for (int _i = 0; _i < _syntaxTrivias.Count; _i++)
3590+
{
3591+
VisitTrivia(_syntaxTrivias[_i]);
3592+
}
3593+
3594+
return true;
3595+
}
35963596
}
35973597
}
3598+
if (_symbol.ContainingType != null)
3599+
{
3600+
_symbol = _symbol.ContainingType;
3601+
goto CheckParentAttributes;
3602+
}
35983603
}
3599-
}
36003604

3605+
return false;
3606+
}
3607+
36013608
public override void VisitAssignmentExpression(AssignmentExpressionSyntax node)
36023609
{
36033610
#if DEBUG
@@ -5006,10 +5013,10 @@ public override void VisitInvocationExpression(InvocationExpressionSyntax node)
50065013
if (_AttributeDatasForInvocation[0] == nameof(BinaryAttribute))
50075014
{
50085015
_AttributeDatasForInvocation[0] = string.Empty;
5009-
string _arg = _AttributeDatasForInvocation[1];
5016+
string _operator = _AttributeDatasForInvocation[1];
50105017

50115018
VisitArgument(_arguments.Arguments[0]);
5012-
JSSB.Append(_arg);
5019+
JSSB.Append(_operator);
50135020
VisitTrailingTrivia(_arguments.Arguments.GetSeparator(0));
50145021
VisitArgument(_arguments.Arguments[1]);
50155022

@@ -5025,9 +5032,9 @@ public override void VisitInvocationExpression(InvocationExpressionSyntax node)
50255032
if (_AttributeDatasForInvocation[0] == nameof(UnaryAttribute))
50265033
{
50275034
_AttributeDatasForInvocation[0] = string.Empty;
5028-
string _arg = _AttributeDatasForInvocation[1];
5035+
string _operator = _AttributeDatasForInvocation[1];
50295036

5030-
JSSB.Append(_arg);
5037+
JSSB.Append(_operator);
50315038
VisitArgument(_arguments.Arguments[0]);
50325039

50335040
goto BreakArgumentList;

0 commit comments

Comments
 (0)