如何从 ReSharper 中的 ITreeNode 访问 IType / IDeclaredType?
How to get access to the IType / IDeclaredType from an ITreeNode in ReSharper?
我正在探索为 ReSharper/Rider 编写插件。按照文档的 example,我正在为 ReSharper 构建上下文操作。
这是上下文操作,还没有做太多:
[ContextAction
(
Name = "New context action",
Description = "Some description...",
Group = "C#",
Disabled = false,
Priority = 1
)]
public sealed class NewContextAction : ContextActionBase
{
public override string Text => "New context action";
public NewContextAction(LanguageIndependentContextActionDataProvider dataProvider)
{
var selectedTreeNode = dataProvider.GetSelectedElement<ITreeNode>();
// --> How can I get a reference to the type?
}
...
}
每当我单击源代码中的某些内容(如上所示的类型)时,我的上下文操作 class 的构造函数就会被调用。我可以使用 ITreeNode
访问名称,但我不知道如何从树表示移动到 ReSharper 使用的实际类型表示。
问题
如何获取用户点击的类型(IType
、IDeclaredType
...)的引用?
你需要这样的东西:
var objectCreationExpression = dataProvider.GetSelectedElement<IObjectCreationExpression>();
var typeUsage = objectCreationExpression?.TypeUsage;
if (typeUsage != null)
{
var type = CSharpTypeFactory.CreateType(typeUsage);
}
我正在探索为 ReSharper/Rider 编写插件。按照文档的 example,我正在为 ReSharper 构建上下文操作。
这是上下文操作,还没有做太多:
[ContextAction
(
Name = "New context action",
Description = "Some description...",
Group = "C#",
Disabled = false,
Priority = 1
)]
public sealed class NewContextAction : ContextActionBase
{
public override string Text => "New context action";
public NewContextAction(LanguageIndependentContextActionDataProvider dataProvider)
{
var selectedTreeNode = dataProvider.GetSelectedElement<ITreeNode>();
// --> How can I get a reference to the type?
}
...
}
每当我单击源代码中的某些内容(如上所示的类型)时,我的上下文操作 class 的构造函数就会被调用。我可以使用 ITreeNode
访问名称,但我不知道如何从树表示移动到 ReSharper 使用的实际类型表示。
问题
如何获取用户点击的类型(IType
、IDeclaredType
...)的引用?
你需要这样的东西:
var objectCreationExpression = dataProvider.GetSelectedElement<IObjectCreationExpression>();
var typeUsage = objectCreationExpression?.TypeUsage;
if (typeUsage != null)
{
var type = CSharpTypeFactory.CreateType(typeUsage);
}