我正在实现JUnit New Test Suite向导的变体,而不是从当前项目中获取测试类,我需要从其他来源获取它们。他们作为完全合格的班级名字来找我。
其中一些可能尚未存在于此用户的工作空间中,更不用说在当前项目的类路径中。用户稍后需要导入这些项目,但我不想在我的向导中弄乱它。我需要将所有类添加到新套件中,无论它们是否存在。
对于已经在此项目的类路径中的那些类,我可以使用IJavaProject.findType(String fullyQualifiedName)。是否有类似的方法来获取尚未(可见)的类的IType?
我很乐意凭空构建一个IType,但是IType似乎并不喜欢构建它。
答案 0 :(得分:1)
我认为不可能:Java Document Model接口是基于类路径创建的。
更糟糕的是,如果项目在用户工作区中不存在,则生成的代码将无法编译,这是不允许任意创建此类构造的另一个原因。
如果我是你,我会尝试帮助用户在类型不可用的情况下导入不存在的项目,从而避免使用Java文档模型进行处理。
答案 1 :(得分:1)
出于我的目的,创建HypotheticalType
和HypotheticalMethod
可以完成工作。我附上一份概述,以防其他人需要遵循这条道路。
首先,我创建了一个HypotheticalType
并让它实现了IType
接口。我在我修改过的向导中的适当位置实例化了其中一个。使用Eclipse的Outline视图,我在新类的所有方法上创建了一个方法断点。这让我可以检测在执行向导期间实际调用的方法。我还修改了构造函数,以String
作为我需要向导处理的类的名称。
本练习中几乎忽略了所有新方法。我发现除了以下所有方法,我可以保留默认实现(在大多数情况下返回null或返回false):
exists()
- 无需修改getAncestor(int)
- 无需修改,但返回我的假设类的包可能很有用,例如:如果我的课程为java.lang.Object.class
,请返回java.lang
。getDeclaringType()
- 无需修改getElementName()
- 已修改为返回班级名称,例如如果我的课程为java.lang.Object.class
,请返回Object
。getElementType()
- 已修改为返回IJavaElement.TYPE
getFlags()
- 尚未修改,但可能getMethod(String, String[])
- 已修改为返回新的HypotheticalMethod(name)
getMethods()
- 已修改为返回新的IMethod[] { new HypotheticalMethod("dudMethod") }
在此过程中我发现我需要能够返回HypotheticalMethod
,所以我也创建了该类型,继承自IMethod
,并使用相同的技术来确定哪些方法必须实施。这是在向导运行时调用的唯一方法:
String
参数以引入方法的名称exists()
- 无需修改isMainMethod()
- 无需修改这涵盖了我原始问题的解决方案。 Zoltán,我将按照您在即将进行的迭代中的建议进行操作,并尝试在所需类尚未进入此项目的类路径的情况下协助用户,以及所需类在某些项目中的情况但是在工作区里。