在基于JDT做插件開(kāi)發(fā)時(shí),經(jīng)常會(huì)碰到希望根據(jù)類名直接得到ICompilationUnit或IJavaElement,來(lái)訪問(wèn)這個(gè)類的JavaModel,但發(fā)現(xiàn)要實(shí)現(xiàn)這個(gè)實(shí)在是好困難,主要是因中JDT中SearchEngine的文檔或例子代碼簡(jiǎn)直找不到,只能從eclipse的jdt源碼中學(xué)習(xí),總結(jié)了一些使用經(jīng)驗(yàn):
1.根據(jù)類名得到符合條件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,雖然它是一個(gè)內(nèi)部類,但好象還沒(méi)找到替代它的.
1.根據(jù)類名得到符合條件SearMatch






























2.從SearchMatch得到ICompilationUnit或IJavaElement
使用org.eclipse.jdt.internal.corext.util.SearchUtils,雖然它是一個(gè)內(nèi)部類,但好象還沒(méi)找到替代它的.