@Override
	public Set<CtClass> resolveByAnnotation(final Class<? extends Annotation> annotation)
			throws IOException {
		Matcher<CtClass> matcher = new Matcher<CtClass>() {

			@Override
			public boolean matches(CtClass ctClass) {
				try {
					for (Object object : ctClass.getAnnotations()) {
						Annotation a = (Annotation) object;
						
						if (a.annotationType().equals(annotation)) {
							return true;
						}
					}
					
				} catch (Exception e) {}
				
				ctClass.detach();
				return false;
			}
			
		};
		return resolve(matcher);
	}
@ Override public Set < CtClass > resolveByAnnotation ( final Class < ? extends Annotation > annotation ) throws IOException { Matcher < CtClass > matcher = new Matcher < CtClass > ( ) { @ Override public boolean matches ( CtClass ctClass ) { try { for ( Object object : ctClass . getAnnotations ( ) ) { Annotation a = ( Annotation ) object ; if ( a . annotationType ( ) . equals ( annotation ) ) { return true ; } } } catch ( Exception e ) { } ctClass . detach ( ) ; return false ; } } ; return resolve ( matcher ) ; }
Resolves the classes that is annotated by the specified annotation as
{@code javassist.CtClass}.

@param annotation The annotation the class being annotated.
@return Classes that is annotated by the specified annotation as
{@code javassist.CtClass}.
@throws IOException If any I/O access fails while traversing the search
path.