Skip to content

VB -> C#: #error Cannot convert InvocationExpressionSyntax with seemingly very basic code #1225

@wfrx

Description

@wfrx

VB.Net input code

Dim res = LicenseService.Instance.GetLicenseMaybe(licenseName)

Erroneous output

var res = default
#error Cannot convert InvocationExpressionSyntax - see comment for details
   /* Cannot convert ArgumentListSyntax, System.ArgumentException: Knoten ist nicht innerhalb Syntaxbaum
      at Microsoft.CodeAnalysis.VisualBasic.VBSemanticModel.GetTypeInfoWorker(AttributeSyntax attribute, CancellationToken cancellationToken)
      at ICSharpCode.CodeConverter.CSharp.CommonConversions.IsOutAttribute(AttributeSyntax a) in /_/CodeConverter/CSharp/CommonConversions.cs:line 671
      at ICSharpCode.CodeConverter.CSharp.CommonConversions.HasOutAttribute(AttributeListSyntax a) in /_/CodeConverter/CSharp/CommonConversions.cs:line 662
      at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate)
      at ICSharpCode.CodeConverter.CSharp.ArgumentConverter.CreateExtraArgOrNull(IParameterSymbol p, Boolean requiresCompareMethod, Boolean expandOptionalArgs) in /_/CodeConverter/CSharp/ArgumentConverter.cs:line 207
      at ICSharpCode.CodeConverter.CSharp.ArgumentConverter.GetAdditionalRequiredArgs(IEnumerable`1 arguments, ICollection`1 processedParametersNames, ISymbol invocationSymbol, Boolean invocationHasOverloads)+MoveNext() in /_/CodeConverter/CSharp/ArgumentConverter.cs:line 191
      at System.Linq.Enumerable.ConcatIterator`1.MoveNext()
      at Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SeparatedList[TNode](IEnumerable`1 nodes)
      at ICSharpCode.CodeConverter.CSharp.ExpressionNodeVisitor.VisitArgumentList(ArgumentListSyntax node) in /_/CodeConverter/CSharp/ExpressionNodeVisitor.cs:line 223
      at ICSharpCode.CodeConverter.CSharp.CommentConvertingVisitorWrapper.ConvertHandledAsync[T](VisualBasicSyntaxNode vbNode, SourceTriviaMapKind sourceTriviaMap) in /_/CodeConverter/CSharp/CommentConvertingVisitorWrapper.cs:line 40

   Input: (licenseName)

   Context:
   Global.MyCompany.MyNamespace.Administration.Licensing.LicenseService.Instance.GetLicenseMaybe(licenseName)

    */

Expected output

var res = LicenseService.Instance.GetLicenseMaybe(licenseName);

Details

  • dotnet tool 10.0.1.923

The solution I tried to convert is very large - a single project with more than 1200 files and god knows how many lines of code.
There are about 700 occurrences of this #error Cannot convert InvocationExpressionSyntax.
I don't see a clear pattern, but it seems to affect many calls of Singletons (like the above LicenseService), but not exclusively.
Many of them - like the above example - I can simply fix by removing the error comment and putting the line exactly as shown in the expected output above.

Metadata

Metadata

Assignees

No one assigned

    Labels

    VB -> C#Specific to VB -> C# conversion

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions