1- using System . Linq . Expressions ;
1+ using System . Collections . Immutable ;
2+ using System . Linq . Expressions ;
23using System . Runtime . CompilerServices ;
34using ICSharpCode . CodeConverter . Util . FromRoslyn ;
45using Microsoft . CodeAnalysis . Classification ;
@@ -669,6 +670,7 @@ public ISymbol GetCsOriginalSymbolOrNull(ISymbol symbol)
669670 symbol = symbol . OriginalDefinition ;
670671 // Construct throws an exception if ConstructedFrom differs from it, so let's use ConstructedFrom directly
671672 var symbolToFind = symbol is IMethodSymbol m ? m . ConstructedFrom : symbol ;
673+ // This no longer works for private members: https://github.com/dotnet/roslyn/issues/72369#issuecomment-1975066163
672674 var similarSymbol = SymbolFinder . FindSimilarSymbols ( symbolToFind , _csCompilation ) . FirstOrDefault ( ) ;
673675 return similarSymbol ;
674676 }
@@ -747,6 +749,9 @@ public RefKind GetCsRefKind(IParameterSymbol vbParameter, Microsoft.CodeAnalysis
747749 return csParam . RefKind ;
748750 }
749751
752+ var syntaxNodes = vbParameter ? . DeclaringSyntaxReferences . Select ( r => r . GetSyntax ( ) ) ;
753+ optionalParameterSyntax ??= syntaxNodes ? . OfType < VBSyntax . ParameterSyntax > ( ) . FirstOrDefault ( ) ;
754+
750755 if ( optionalParameterSyntax ? . AttributeLists . Any ( this . HasOutAttribute ) == true ) {
751756 return RefKind . Out ;
752757 }
@@ -800,4 +805,19 @@ public async Task<CSharpSyntaxNode> WithRemovedRedundantConversionOrNullAsync(VB
800805 return writtenByUser ? null : this . TypeConversionAnalyzer . AddExplicitConversion ( conversionArg , csharpArg ,
801806 forceTargetType : forceTargetType , defaultToCast : true ) ;
802807 }
808+
809+ public SemanticModelExtensions . RefConversion GetRefConversionType ( VBSyntax . ArgumentSyntax node , VBSyntax . ArgumentListSyntax argList , ImmutableArray < IParameterSymbol > parameters , out string argName , out RefKind refKind )
810+ {
811+ var parameter = node . IsNamed && node is VBSyntax . SimpleArgumentSyntax sas
812+ ? parameters . FirstOrDefault ( p => p . Name . Equals ( sas . NameColonEquals . Name . Identifier . Text , StringComparison . OrdinalIgnoreCase ) )
813+ : parameters . ElementAtOrDefault ( argList . Arguments . IndexOf ( node ) ) ;
814+ if ( parameter != null ) {
815+ refKind = GetCsRefKind ( parameter ) ;
816+ argName = parameter . Name ;
817+ } else {
818+ refKind = RefKind . None ;
819+ argName = null ;
820+ }
821+ return SemanticModel . NeedsVariableForArgument ( node , refKind ) ;
822+ }
803823}
0 commit comments