在基于JDT做插件開發時,經常會碰到希望根據類名直接得到ICompilationUnit或IJavaElement,來訪問這個類的JavaModel,但發現要實現這個實在是好困難,主要是因中JDT中SearchEngine的文檔或例子代碼簡直找不到,只能從eclipse的jdt源碼中學習,總結了一些使用經驗:
1.根據類名得到符合條件SearMatch

public class SearchEngineUtils
{

/** *//**
*
* @param clsName
* @return
*/

public static List<SearchMatch> searchClass(final String clsName)
{
final List<SearchMatch> matchs = new ArrayList<SearchMatch>();


SearchRequestor requestor = new SearchRequestor()
{

@Override

public void acceptSearchMatch(SearchMatch match) throws CoreException
{
if (match.getResource().getName().lastIndexOf(clsName) > -1)
matchs.add(match);
}
};

SearchPattern pattern = SearchPattern.createPattern(clsName, IJavaSearchConstants.CLASS, IJavaSearchConstants.DECLARATIONS,
SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE);

IJavaSearchScope scope = SearchEngine.createWorkspaceScope();

try
{

new SearchEngine().search(pattern, new SearchParticipant[]
{ SearchEngine.getDefaultSearchParticipant() }, scope, requestor, null);

} catch (Exception e)
{
e.printStackTrace();
}
return matchs;
}
}
2.從SearchMatch得到ICompilationUnit或IJavaElement
使用org.eclipse.jdt.internal.corext.util.SearchUtils,雖然它是一個內部類,但好象還沒找到替代它的.