如何将 IMethodSymbol 转换为 MethodDeclarationSyntax?
How to convert an IMethodSymbol to a MethodDeclarationSyntax?
给定一个 IMethodSymbol
我如何创建一个 MethodDeclarationSyntax
?
背景:
为了修复代码,我将方法从一个实现接口的 class 复制到另一个实现不同接口的方法。
因此,我需要对复制的方法进行一些修改(参数、命名空间等)。
我想修改 IMethodSymbol
,将符号转换为 MethodDeclarationSyntax
,然后将符号添加到新的 class。
我已经能够通过使用 DeclaringSyntaxReferences
属性 来做到这一点,但是当原始 class 驻留在 nuget 包中时,这不起作用。
使用 DeclaringSyntaxReferences
(以及我自己的一些代码)我能够执行以下操作:
public static MethodDeclarationSyntax[] ToMethodDeclarationSyntax(this IMethodSymbol methodSymbol)
{
var namespaceValue = methodSymbol.ContainingNamespace.GetNameSpaceIdentifier();
var syntaxReference = methodSymbol.DeclaringSyntaxReferences;
var syntaxNodes = syntaxReference.Select(syntaxRef => syntaxRef.GetSyntax());
var methodNodes = syntaxNodes.OfType<MethodDeclarationSyntax>();
var methodExpression = methodSymbol.CreateExpressionSyntax();
return methodNodes
.Select(mds => mds
.WithExpressionBody(methodExpression)
.WithReturnType(SyntaxFactory.QualifiedName(namespaceValue, SyntaxFactory.IdentifierName(mds.ReturnType.ToString())))
.WithParameterList(methodSymbol.GetFullyQualifiedParameterListSyntax())
)
.ToArray();
}
有没有办法在不使用 DeclaringSyntaxReferences
的情况下从 IMethodSymbol 生成 MethodDeclarationSyntax?
谢谢!
使用带有 IMethodSymbol 的 SyntaxGenerator.MethodDeclaration。您可能根本不想使用 DeclaringSyntaxReferences,因为它仅在您的符号直接来自源代码的情况下才真正有用。
给定一个 IMethodSymbol
我如何创建一个 MethodDeclarationSyntax
?
背景:
为了修复代码,我将方法从一个实现接口的 class 复制到另一个实现不同接口的方法。
因此,我需要对复制的方法进行一些修改(参数、命名空间等)。
我想修改 IMethodSymbol
,将符号转换为 MethodDeclarationSyntax
,然后将符号添加到新的 class。
我已经能够通过使用 DeclaringSyntaxReferences
属性 来做到这一点,但是当原始 class 驻留在 nuget 包中时,这不起作用。
使用 DeclaringSyntaxReferences
(以及我自己的一些代码)我能够执行以下操作:
public static MethodDeclarationSyntax[] ToMethodDeclarationSyntax(this IMethodSymbol methodSymbol)
{
var namespaceValue = methodSymbol.ContainingNamespace.GetNameSpaceIdentifier();
var syntaxReference = methodSymbol.DeclaringSyntaxReferences;
var syntaxNodes = syntaxReference.Select(syntaxRef => syntaxRef.GetSyntax());
var methodNodes = syntaxNodes.OfType<MethodDeclarationSyntax>();
var methodExpression = methodSymbol.CreateExpressionSyntax();
return methodNodes
.Select(mds => mds
.WithExpressionBody(methodExpression)
.WithReturnType(SyntaxFactory.QualifiedName(namespaceValue, SyntaxFactory.IdentifierName(mds.ReturnType.ToString())))
.WithParameterList(methodSymbol.GetFullyQualifiedParameterListSyntax())
)
.ToArray();
}
有没有办法在不使用 DeclaringSyntaxReferences
的情况下从 IMethodSymbol 生成 MethodDeclarationSyntax?
谢谢!
使用带有 IMethodSymbol 的 SyntaxGenerator.MethodDeclaration。您可能根本不想使用 DeclaringSyntaxReferences,因为它仅在您的符号直接来自源代码的情况下才真正有用。