0

我正在尝试编写我的第一个 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
   }
}
4

1 回答 1

0

您不能按照您的要求做 - ReSharper 的类型系统是项目源的视图,而不是加载到 AppDomain 中的程序集。换句话说IType,即使 Foo.cs 尚未加载,您也可以获取 Foo.cs 中定义的类。如果项目无法编译,它仍然需要能够返回类型信息,因为 Bar.cs 中的代码完全无效。

因此,如果不编译项目并将程序集加载到 AppDomain 中,就无法将 a 转换IType为 a 。System.Type但是 ReSharper 有很多工具可以在它自己的类型系统视图中处理类型。你到底想做什么?

于 2015-11-24T13:26:30.253 回答