Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C# -> VB: Converting public static explicit operator failed #659

Closed
nilesh-chauhan opened this issue Oct 20, 2020 · 1 comment · Fixed by #667
Closed

C# -> VB: Converting public static explicit operator failed #659

nilesh-chauhan opened this issue Oct 20, 2020 · 1 comment · Fixed by #667
Labels
C# -> VB Specific to C# -> VB conversion good first issue

Comments

@nilesh-chauhan
Copy link

Input code

 public static explicit operator A2CMessage(XElement xe) { return XTypedServices.ToXTypedElement<A2CMessage>(xe, LinqToXsdTypeManager.Instance as ILinqToXsdTypeManager); }

Erroneous output

Error message:
CONVERSION ERROR: Conversion for ConversionOperatorDeclaration not implemented, please report this issue in 'public static explicit oper...' at character 27
   at ICSharpCode.CodeConverter.VB.NodesVisitor.DefaultVisit(SyntaxNode node)
   at ICSharpCode.CodeConverter.VB.NodesVisitor.VisitConversionOperatorDeclaration(ConversionOperatorDeclarationSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.ConversionOperatorDeclarationSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
   at ICSharpCode.CodeConverter.VB.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitConversionOperatorDeclaration(ConversionOperatorDeclarationSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.ConversionOperatorDeclarationSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
   at ICSharpCode.CodeConverter.VB.NodesVisitor.<VisitClassDeclaration>b__23_0(MemberDeclarationSyntax m)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at ICSharpCode.CodeConverter.VB.NodesVisitor.VisitClassDeclaration(ClassDeclarationSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.ClassDeclarationSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
   at ICSharpCode.CodeConverter.VB.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitClassDeclaration(ClassDeclarationSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.ClassDeclarationSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
   at ICSharpCode.CodeConverter.VB.NodesVisitor.<VisitCompilationUnit>b__15_1(MemberDeclarationSyntax m)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at Microsoft.CodeAnalysis.SyntaxList`1.CreateNode(IEnumerable`1 nodes)
   at Microsoft.CodeAnalysis.SyntaxList`1..ctor(IEnumerable`1 nodes)
   at Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory.List[TNode](IEnumerable`1 nodes)
   at ICSharpCode.CodeConverter.VB.NodesVisitor.VisitCompilationUnit(CompilationUnitSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
   at ICSharpCode.CodeConverter.VB.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.VisitCompilationUnit(CompilationUnitSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
   at ICSharpCode.CodeConverter.VB.CSharpConverter.ConvertCompilationTree(CSharpCompilation compilation, CSharpSyntaxTree tree)
   at ICSharpCode.CodeConverter.VB.CSToVBConversion.SingleFirstPass(Compilation sourceCompilation, SyntaxTree tree)
   at ICSharpCode.CodeConverter.Shared.ProjectConversion.SingleFirstPass(SyntaxTree tree, String treeFilePath)
   at ICSharpCode.CodeConverter.Shared.ProjectConversion.FirstPass()

Expected output

Public Overloads Shared Narrowing Operator CType(xe As XElement) As MsgHeaderLocalType
				Return XTypedServices.ToXTypedElement(Of MsgHeaderLocalType)(xe, TryCast(LinqToXsdTypeManager.Instance, ILinqToXsdTypeManager))
			End Operator

Details

While converting c# code to vb gives errors.

@nilesh-chauhan nilesh-chauhan added the C# -> VB Specific to C# -> VB conversion label Oct 20, 2020
@nilesh-chauhan nilesh-chauhan changed the title C# -> VB: _Add a short description_ C# -> VB: Converting public static explicit operator failed Oct 20, 2020
@GrahamTheCoder
Copy link
Member

GrahamTheCoder commented Oct 20, 2020

Thanks for the report. If anyone would like to implement conversion operators, you'll need to add the method mentioned in the callstack:
NodesVisitor.VisitConversionOperatorDeclaration. It can probably share a lot of code with a normal method. Though looking at the conversion in the other direction may also give some inspiration.

if (conversionModifiers.Any()) {
return SyntaxFactory.ConversionOperatorDeclaration(attributeList, nonConversionModifiers,
conversionModifiers.Single(), returnType, parameterList, body, null);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C# -> VB Specific to C# -> VB conversion good first issue
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants