@Override
	public Set<Class<?>> resolveByAnnotation(
			final Class<? extends Annotation> annotation) throws IOException {
		Matcher<Class<?>> matcher = new Matcher<Class<?>>() {
			
			public boolean matches(Class<?> clazz) {
				Annotation[] annotations = clazz.getAnnotations();
				
				for (Annotation a : annotations) {
					if (a.annotationType().equals(annotation)) {
						return true;
					}
				}
				
				return false;
			}
			
		};
		return resolve(matcher);
	}
@Override
	public Set<Class<?>> resolveByAnnotation(
			final Class<? extends Annotation> annotation) throws IOException {
		Matcher<Class<?>> matcher = new Matcher<Class<?>>() {
			
			public boolean matches(Class<?> clazz) {
				Annotation[] annotations = clazz.getAnnotations();
				
				for (Annotation a : annotations) {
					if (a.annotationType().equals(annotation)) {
						return true;
					}
				}
				
				return false;
			}
			
		};
		return resolve(matcher);
	}
@ Override public Set < Class < ? > > resolveByAnnotation ( final Class < ? extends Annotation > annotation ) throws IOException { Matcher < Class < ? > > matcher = new Matcher < Class < ? > > ( ) { public boolean matches ( Class < ? > clazz ) { Annotation [ ] annotations = clazz . getAnnotations ( ) ; for ( Annotation a : annotations ) { if ( a . annotationType ( ) . equals ( annotation ) ) { return true ; } } return false ; } } ; return resolve ( matcher ) ; }
Resolves the classes that is annotated by the specified annotation as
{@code java.lang.Class}.

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