Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从EclipseJDT中的类名获取IType_Eclipse_Eclipse Jdt - Fatal编程技术网

如何从EclipseJDT中的类名获取IType

如何从EclipseJDT中的类名获取IType,eclipse,eclipse-jdt,Eclipse,Eclipse Jdt,我正在实现JUnitNewTestSuite向导的一个变体,我需要从另一个源获取测试类,而不是从当前项目获取测试类。在我看来,它们是完全限定类名的字符串 其中一些可能还不存在于该用户的工作区中,更不用说在当前项目的类路径中了。用户以后需要导入这些项目,但我还不想在向导中弄乱它们。我只需要将所有类添加到新套件中,不管它们是否存在 对于已经在此项目的类路径中的类,我可以使用IJavaProject.findType(字符串fullyQualifiedName)。对于(尚未)可见的类,是否有类似的方法

我正在实现JUnitNewTestSuite向导的一个变体,我需要从另一个源获取测试类,而不是从当前项目获取测试类。在我看来,它们是完全限定类名的字符串

其中一些可能还不存在于该用户的工作区中,更不用说在当前项目的类路径中了。用户以后需要导入这些项目,但我还不想在向导中弄乱它们。我只需要将所有类添加到新套件中,不管它们是否存在

对于已经在此项目的类路径中的类,我可以使用IJavaProject.findType(字符串fullyQualifiedName)。对于(尚未)可见的类,是否有类似的方法来获取其类型


我很乐意凭空构造一个IType,但IType似乎不喜欢被构造。

我认为这是不可能的:Java文档模型接口是基于类路径创建的

更糟糕的是,如果项目不存在于用户工作区中,则生成的代码将无法编译,这也是不允许任意创建此类构造的另一个原因


如果我是你,我会尝试帮助用户在类型不可用的情况下导入不存在的项目,从而避免使用Java文档模型进行处理。

出于我的目的,创建一个
假设类型
和一个
假设方法
完成了工作。我附上一个概述,以防其他人需要遵循这条路径

首先,我创建了一个
假设类型
,并让它实现
IType
接口。我在修改后的向导中的适当位置实例化了其中一个。使用Eclipse的大纲视图,我在新类中的所有方法上创建了一个方法断点。这使我能够检测在执行向导期间实际调用了哪些方法。我还修改了构造函数,使其采用向导需要处理的类的名称,作为
字符串

在本练习中,几乎所有新方法都被忽略。我发现我可以为所有方法保留默认实现(大多数情况下返回null或返回false),但以下方法除外:

  • 构造器
  • 存在()
    -无需修改
  • get祖先(int)
    -无需修改,但返回假设类的包可能很有用,例如,如果我的类是
    java.lang.Object.class
    ,则返回
    java.lang
  • getDeclaringType()
    -无需修改
  • getElementName()
    -修改为返回类名,例如,如果我的类是
    java.lang.Object.class
    ,则返回
    Object
  • getElementType()
    -修改为返回
    IJavaElement.TYPE
  • getFlags()
    -尚未修改,但可能已修改
  • getMethod(String,String[])
    -修改后返回一个新的
    假设方法(name)
  • getMethods()
    -修改为返回新的
    IMethod[]{new-HypotheticalMethod(“dudMethod”)}
在这个过程中,我发现我需要能够返回一个
假设方法
,因此我也创建了这个类型,继承了
IMethod
,并使用相同的技术来确定必须实现哪些方法。以下是运行此向导时唯一调用的方法:

  • 构造函数-添加
    字符串
    参数以引入方法的名称
  • 存在()
    -无需修改
  • isMainMethod()
    -无需修改

这就是我最初问题的答案。Zoltán,我将按照您在即将到来的迭代中的建议进行操作,并尝试在以下两种情况下为用户提供帮助:所需的类尚未位于该项目的类路径中,以及所需的类位于某个尚未位于工作区中的项目中。

在这种情况下,生成的代码最初不会编译是可以接受的。如果用户在导入项目之前将所需的类名字符串粘贴到新的JUnitTestSite中,也会发生同样的情况。我还期待在这个向导的未来迭代中触发某种导入。当我这样做时,我希望我能找到一种直接的方法,用所需的项目填充项目导入向导。但这与我原来的问题不同。(有趣的是,投票给某人回答我自己的问题不是像我这样的新用户可以做的事。)目前我正在考虑实现一个实现IType的假设类型对象。我希望现有的向导代码实际上只需要IType和相关接口的少数方法,仅仅足以将这些方法视为包含尚未导入类名称的美化字符串。当然,另一种方法是对现有向导代码进行重大修改,改为使用字符串。然而,这感觉像是一个二等解决方案。