0

EclipseでIClassFileを使用する場合、注釈をどのようにチェックしますか?

これは機能しないようですclassFile.getClass()。isAnnotationPresent?どんな助けでも大歓迎です。

使用上の問題

for (final IClassFile classFile : classFiles) {
    IAnnotation[] annotations = classFile.getType().getAnnotations();

つまり、すべてのパッケージを取得してから、そのパッケージ内のクラスファイルを取得してから、アノテーションを取得する必要があります。3つのループが必要になります。これを最小限に抑える方法はありますか?

4

1 に答える 1

1

アノテーションを見つける最も簡単な方法はトリプルループを使用することですが、(特定のアノテーションを探していると仮定して)'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」の代わりに「*」を使用します。

于 2012-09-23T03:02:48.153 に答える