src/main/java/org/eiichiro/bootleg/CtClassClassResolver.java
@Override
	public Set<CtClass> resolveByInterface(final Class<?> interfaceClass) throws IOException {
		Matcher<CtClass> matcher = new Matcher<CtClass>() {

			@Override
			public boolean matches(CtClass ctClass) {
				try {
					for (CtClass c : ctClass.getInterfaces()) {
						if (c.getName().equals(interfaceClass.getName())) {
							return true;
						}
					}
					
					CtClass superclass = ctClass.getSuperclass();
					
					if (superclass != null) {
						return matches(superclass);
					}
					
				} catch (Exception e) {}
				
				ctClass.detach();
				return false;
			}
			
		};
		return resolve(matcher);
	}
@Override
	public Set<CtClass> resolveByInterface(final Class<?> interfaceClass) throws IOException {
		Matcher<CtClass> matcher = new Matcher<CtClass>() {

			@Override
			public boolean matches(CtClass ctClass) {
				try {
					for (CtClass c : ctClass.getInterfaces()) {
						if (c.getName().equals(interfaceClass.getName())) {
							return true;
						}
					}
					
					CtClass superclass = ctClass.getSuperclass();
					
					if (superclass != null) {
						return matches(superclass);
					}
					
				} catch (Exception e) {}
				
				ctClass.detach();
				return false;
			}
			
		};
		return resolve(matcher);
	}
Resolves the classes that implements the specified interface as
{@code javassist.CtClass}.

@param interfaceClass The interface being implemented.
@return Classes that implements the specified interface as
{@code javassist.CtClass}.
@throws IOException If any I/O access fails while traversing the search
path.