2009-09-15 47 views
5

我想用完全限定名稱獲得給定類的所有子類的列表。我想把它從Eclipse中複製並粘貼到這樣一個文本文件:列出具有完全限定名稱的所有子類

some.package.Class1 
some.package.Class2 
some.other.package.Class3 
... 

我已經試過:

  • Search | Java | Type, Limit to implementors這一個由於一些奇怪的原因沒有列出子類的子類,只有直接的後代。
  • Hierarchy打開Hierarchy查看打印樹組件中所有子類的類,此視圖不允許我選擇所有行並複製其名稱。

其他技巧?有數百個課程,所以我想避免手動完成。

+0

相關http://stackoverflow.com/questions/492184/how-do-you-find-all-subclasses-of-a-given-class-in-java – Narayan 2009-09-15 10:05:09

+1

@Narayan:我見過這個問題,但那是關於以編程方式進行的。我希望只需點擊幾下即可獲得解決方案。 – 2009-09-15 10:08:37

+0

你可以得到一個自定義的視圖,而不需要複雜的「層次視圖」的TypeHierarchyViewPart,但使用相同的底層機制來檢索/顯示類的層次結構。 – VonC 2009-09-15 11:35:17

回答

0

http://internna.blogspot.com/2007/11/java-5-retrieving-all-classes-from.html一個描述的模式:可以按如下修改該類型的execute方法來處理層次結構(如VonC指出,+1),並獲得所有的子類型和內容設置到剪貼板可以通過編程來完成。這是一個恥辱Eclipse不能做到OOTB。在Java代碼中執行此操作可以免費執行過濾(例如!(klazz.isEnum()))。

3

中確實建立層次樹是在org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle層次視圖的方法:

private ITypeHierarchy createTypeHierarchy(IJavaElement element, IProgressMonitor pm) throws JavaModelException { 
    if (element.getElementType() == IJavaElement.TYPE) { 
     IType type= (IType) element; 
     if (fIsSuperTypesOnly) { 
      return type.newSupertypeHierarchy(pm); 
     } else { 
      return type.newTypeHierarchy(pm); 
     } 
    } else { 

其中採用org.eclipse.jdt.internal.core.SourceType

/** 
* @see IType 
*/ 
public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException { 
    return newTypeHierarchy(project, DefaultWorkingCopyOwner.PRIMARY, monitor); 
} 

所以,如果你能得到IJavaElement,您可以檢查這些類來模擬相同的結果。

它採用了org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation

+0

所以你建議在Eclipse中實現一個自定義視圖。 我是否正確? – 2009-09-15 11:33:44

1

nWire for Java可以給你的延伸給定類或實現特定接口的類的完整列表。您將在nWire導航器中獲得它,該導航器不提供複製命令。

但是,您可以使用nWire數據庫,它是一個標準的H2數據庫,結構非常簡單,並且可以通過簡單的查詢獲取所需的一切。我們將在未來一段時間推出報告功能。

恕我直言,它會少一點努力,你會得到一個工具,讓你更多。

+0

我已經安裝了插件。我如何「進入nWire數據庫」。我沒有看到任何這樣的觀點。網站也沒有幫助。或者我應該使用一些數據庫客戶端來訪問它?什麼是數據庫名稱呢? – 2009-09-15 13:24:54

+0

給我發一封電子郵件來支持[at] nwiresoftware.com,我會給你發更多的細節。 – zvikico 2009-09-15 13:42:49

3

更新:我的原始答案不起作用,因爲沒有上下文結構化的選擇。

This answer顯示如何將操作提供給上下文菜單並檢索結構化選擇。

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; 
} 
+0

讓我看看...真棒? +1(如果可以,+ 10)。 – VonC 2009-09-15 14:22:57

+0

:)非常感謝 – 2009-09-15 14:31:20

相關問題