如何从 IType 获取类型实例 (Resharper 8 SDK)
How to get Type instance from IType (Resharper 8 SDK)
我正在尝试编写我的第一个 ReSharper 扩展,但我遇到了以下问题:
如何从它的 IType 描述符中获取已解析的类型?
作为背景,我正在尝试编写一个使用工具来测试两种类型参数的兼容性的分析器。
到目前为止,我得到了这个
[ElementProblemAnalyzer(new[] { typeof(IInvocationExpression) })]
public class MyAnalyzer : IElementProblemAnalyzer`
{
public void Run(ITreeNode element, ElementProblemAnalyzerData analyzerData, IHighlightingConsumer consumer)
{
...
var typeArgs = meaningfulChildren.FirstOrDefault(o => o is ITypeArgumentList) as ITypeArgumentList;
IType psiType = typeArgs.TypeArguments[0];
Type actualType = psiType.ResolvedType; // No such property
}
}
您不能按要求做 - ReSharper 的类型系统是项目源的视图,而不是加载到 AppDomain 中的程序集。换句话说,即使 Foo.cs 尚未加载,您也可以获得 Foo.cs 中定义的 class 的 IType
。如果项目无法编译,它仍然需要能够 return 键入信息,因为 Bar.cs 中的代码完全无效。
因此,如果不编译项目并将程序集加载到 AppDomain 中,就无法将 IType
转换为 System.Type
。但 ReSharper 有很多工具可以在其自己的类型系统视图中处理类型。你到底想做什么?
我正在尝试编写我的第一个 ReSharper 扩展,但我遇到了以下问题:
如何从它的 IType 描述符中获取已解析的类型?
作为背景,我正在尝试编写一个使用工具来测试两种类型参数的兼容性的分析器。
到目前为止,我得到了这个
[ElementProblemAnalyzer(new[] { typeof(IInvocationExpression) })]
public class MyAnalyzer : IElementProblemAnalyzer`
{
public void Run(ITreeNode element, ElementProblemAnalyzerData analyzerData, IHighlightingConsumer consumer)
{
...
var typeArgs = meaningfulChildren.FirstOrDefault(o => o is ITypeArgumentList) as ITypeArgumentList;
IType psiType = typeArgs.TypeArguments[0];
Type actualType = psiType.ResolvedType; // No such property
}
}
您不能按要求做 - ReSharper 的类型系统是项目源的视图,而不是加载到 AppDomain 中的程序集。换句话说,即使 Foo.cs 尚未加载,您也可以获得 Foo.cs 中定义的 class 的 IType
。如果项目无法编译,它仍然需要能够 return 键入信息,因为 Bar.cs 中的代码完全无效。
因此,如果不编译项目并将程序集加载到 AppDomain 中,就无法将 IType
转换为 System.Type
。但 ReSharper 有很多工具可以在其自己的类型系统视图中处理类型。你到底想做什么?