アノテーションを見つける最も簡単な方法はトリプルループを使用することですが、(特定のアノテーションを探していると仮定して)'SearchEngineorg.eclipse.jdt.internal.junit.launcherを使用する方が少し速いかもしれませんinstead. Take a look at the source code for the
。 .JUnit4TestFinder`クラス。@Testまたは@RunWithで注釈が付けられた(ソース)クラスを検索します。これは、実行したいことと似ていますが、バイナリクラスを検索します。
あなたはこのようなことをするでしょう:
IJavaElement[] allPackagesToSearch = ...
SearchRequestor requestor = <implement the SearchRequestor abstract class and store all matches>
IJavaSearchScope scope= SearchEngine.createJavaSearchScope(binaryPackages, IJavaSearchScope.APPLICATION_LIBRARIES);
int matchRule= SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE;
SearchPattern runWithPattern= SearchPattern.createPattern("com.foo.MyAnnotation", IJavaSearchConstants.ANNOTATION_TYPE, IJavaSearchConstants.ANNOTATION_TYPE_REFERENCE, matchRule);
SearchParticipant[] searchParticipants= new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() };
new SearchEngine().search(annotationsPattern, searchParticipants, scope, requestor, new SubProgressMonitor(pm, 2));
これは少し一口です。これがどのように機能するかを理解するには、SearchEngine、SearchPattern、およびSearchRequestorのJavaDocを読むことをお勧めします。
すべての注釈を検索する場合は、一致ルールを変更し、「com.foo.MyAnnotation」の代わりに「*」を使用します。