2011-07-28 82 views
0

Eclipse的SearchEngine類有很多搜索方法,包括各種風格的search,searchAllTypeNames等。searchAllTypeNames似乎是圍繞在包中找到類。在項目中查找用戶定義的類有什麼好策略? (通過用戶定義的類,我的意思是用戶已寫入它駐留在該項目中,而不是被從其他項目,外部罐,系統庫等導入的類的源代碼的類)什麼是使用Eclipse的JDT在項目中查找類的有效方式?

  1. 使用search自定義IJavaSearchResultCollector
  2. 獲取項目中的所有包(使用search?),然後遍歷包,使用searchAllTypeNames收集類。
  3. 手動運行AST。
  4. 別的東西。

請注意,我並不需要「最有效」的方法來收集類。我更喜歡易於編碼和合理高效的東西,因爲它需要大量代碼才能更高效。

我歡迎任何有關使用SearchEngine方法的相關一般指導。我發現很多選擇令人困惑。

+0

你想要做什麼更清晰一些會有所幫助。當你說「用戶定義的類」時,你的意思是源代碼中的類嗎?你想包括接口/枚舉等?最好的搜索方式取決於你在找什麼。 –

+0

@安德魯艾森伯格:我已經澄清了一些問題中的措詞。我的意思是源代碼中的類。我對具有行爲的類最感興趣,因此會包含枚舉,但不包括接口。 – kc2001

回答

1

由於您的搜索條件相當具體,因此最好的選擇是遍歷Java模型以查找您的類型。

這裏是一個小環,你可以使用:

IJavaProject proj = getJavaProject(); 
    for (IPackageFragmentRoot root : prog.getAllPackageFragmentRoots()) { 
     if (!root.isReadOnly()) { 
      for (IJavaElement child : root.getChildren()) { 
       if (child.getElementType() == IJavaElement.PACKAGE_FRAGMENT) { 
        IPackageFragment frag = (IPackageFragment) child; 
        for (ICompilationUnit u : frag.getCompilationUnits()) { 
         for (IType type : u.getAllTypes()) { 
          if (type.isClass() || type.isEnum()) { 
           // do something 
          } 
         } 
        } 
       } 
      } 
     } 
    } 

我建議像這樣的循環,而不是使用搜索引擎,因爲沒有簡單的方法,我知道用搜索引擎來只找到源類型。

+0

謝謝。我並不是真的希望有人爲我寫代碼,但是既然你做了,我會很感激地使用它。乾杯! – kc2001

相關問題