package org.testng.eclipse.launch; import java.util.Collection; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IMember; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.ITypeHierarchy; import org.eclipse.jdt.core.search.SearchMatch; import org.eclipse.jdt.core.search.SearchRequestor; public class AnnotationSearchRequestor extends SearchRequestor { private final Collection<IType> fResult; private final ITypeHierarchy fHierarchy; public AnnotationSearchRequestor(ITypeHierarchy hierarchy, Collection<IType> result) { fHierarchy= hierarchy; fResult= result; } public void acceptSearchMatch(SearchMatch match) throws CoreException { if (match.getAccuracy() == SearchMatch.A_ACCURATE && !match.isInsideDocComment()) { Object element= match.getElement(); if (element instanceof IType || element instanceof IMethod) { IMember member= (IMember) element; IType type= member.getElementType() == IJavaElement.TYPE ? (IType) member : member.getDeclaringType(); addTypeAndSubtypes(type); } } } private void addTypeAndSubtypes(IType type) { if (fResult.add(type)) { IType[] subclasses= fHierarchy.getSubclasses(type); for (int i= 0; i < subclasses.length; i++) { addTypeAndSubtypes(subclasses[i]); } } } }