Java 列出具有完全限定名称的所有子类
我想得到一个给定类的所有子类及其完全限定名的列表。我想将它从Eclipse复制并粘贴到一个文本文件中,如下所示:Java 列出具有完全限定名称的所有子类,java,eclipse,Java,Eclipse,我想得到一个给定类的所有子类及其完全限定名的列表。我想将它从Eclipse复制并粘贴到一个文本文件中,如下所示: some.package.Class1 some.package.Class2 some.other.package.Class3 ... 我试过: 执行Search | Java |类型,限制实现者但是出于一些奇怪的原因,这张表没有列出子类的子类,只列出了子类的直接后代 打开打印树组件中所有子类的类的层次结构视图,但是此视图不允许我选择所有行并复制它们的名称 还有别的
some.package.Class1
some.package.Class2
some.other.package.Class3
...
我试过:
- 执行
但是出于一些奇怪的原因,这张表没有列出子类的子类,只列出了子类的直接后代Search | Java |类型,限制实现者
- 打开打印树组件中所有子类的类的
视图,但是此视图不允许我选择所有行并复制它们的名称层次结构
还有别的把戏吗?有数百个类,因此我希望避免手动执行此操作。层次结构视图中用于构建层次结构树的方法位于: 哪个使用类 因此,如果您可以得到一个,那么您可以检查这些类以模拟相同的结果 它使用可以为您提供扩展给定类或实现特定接口的类的完整列表。您将在nWire导航器中获得它,该导航器不提供复制命令 但是,您可以访问nWire数据库,它是一个标准的H2数据库,具有非常简单的结构,并通过简单的查询获得所需的一切。我们将在未来某个时候引入报告功能
恕我直言,这样做不费吹灰之力,你会得到一个能给你带来更多好处的工具。更新:我原来的答案不起作用,因为结构化选择没有上下文 显示如何将操作添加到关联菜单并检索结构化选择。您可以修改该类型的execute方法来处理层次结构(如VonC所建议的,+1),并获取所有子类型,并将内容设置为剪贴板,如下所示:
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
try {
IStructuredSelection selection = SelectionConverter
.getStructuredSelection(activePart);
IJavaElement[] elements = SelectionConverter.getElements(selection);
if (elements != null && elements.length > 0) {
if (elements[0] != null && elements[0] instanceof IType) {
IType type = (IType)elements[0];
ITypeHierarchy hierarchy =
type.newTypeHierarchy(new NullProgressMonitor());
IType[] subTypes = hierarchy.getAllSubtypes(type);
StringBuffer buf = new StringBuffer();
for (IType iType : subTypes) {
buf.append(iType.getFullyQualifiedName()).append("\n");
}
Shell shell = HandlerUtil.getActiveShell(event);
Clipboard clipboard = new Clipboard(shell.getDisplay());
clipboard.setContents(
new Object[]{buf.toString()},
new Transfer[]{TextTransfer.getInstance()});
}
}
} catch (JavaModelException e) {
logException(e);
}
return null;
}
遵循中描述的模式可以通过编程实现。很遗憾Eclipse不能做到这一点。用Java代码进行过滤可以不增加额外的成本(例如,
!(klazz.isEnum())
)。related@Narayan:我已经看到了这个问题,但这是一个关于以编程方式进行过滤的问题。我希望只需点击几下就可以找到一个解决方案。实际上,你可以得到一个自定义视图,大大降低了“hierarchy view”的TypeHierarchyViewPart
的复杂性,但使用相同的底层机制来检索/显示类的层次结构。如果你能让Rich的解决方案发挥作用,我建议将他的答案作为这个问题的正式答案,因此您建议在Eclipse中实现自定义视图。我做对了吗?我已经安装了插件。如何“进入NWWire数据库”。我看不到这样的景色。网站对此也没有帮助。或者我应该使用一些数据库客户端来访问它?那么数据库的名称是什么?给我发一封电子邮件到[www.nwiresoftware.com]支持,我会给你发送更多详细信息。
/**
* @see IType
*/
public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
return newTypeHierarchy(project, DefaultWorkingCopyOwner.PRIMARY, monitor);
}
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
try {
IStructuredSelection selection = SelectionConverter
.getStructuredSelection(activePart);
IJavaElement[] elements = SelectionConverter.getElements(selection);
if (elements != null && elements.length > 0) {
if (elements[0] != null && elements[0] instanceof IType) {
IType type = (IType)elements[0];
ITypeHierarchy hierarchy =
type.newTypeHierarchy(new NullProgressMonitor());
IType[] subTypes = hierarchy.getAllSubtypes(type);
StringBuffer buf = new StringBuffer();
for (IType iType : subTypes) {
buf.append(iType.getFullyQualifiedName()).append("\n");
}
Shell shell = HandlerUtil.getActiveShell(event);
Clipboard clipboard = new Clipboard(shell.getDisplay());
clipboard.setContents(
new Object[]{buf.toString()},
new Transfer[]{TextTransfer.getInstance()});
}
}
} catch (JavaModelException e) {
logException(e);
}
return null;
}