if (!onType.isWovenBy(aspectType)) {
if (onType.getWeaverState() != null) {
    public boolean matches(ResolvedTypeX matchType, ResolvedTypeX aspectType) {    	ResolvedTypeX onType = matchType.getWorld().resolve(signature.getDeclaringType());    	//System.err.println("matching: " + this + " to " + matchType + " onType = " + onType);   		if (matchType.equals(onType)) {    			if (!onType.isExposedToWeaver()) {   				if (!onType.isWovenBy(aspectType)) {	   				if (matchType.getWorld().getLint().typeNotExposedToWeaver.isEnabled()) {	   					matchType.getWorld().getLint().typeNotExposedToWeaver.signal(	   						matchType.getName(), signature.getSourceLocation());	   				}   				}   			}   			return true;   		}   		//System.err.println("NO MATCH DIRECT");   		    	if (onType.isInterface()) {    		return matchType.isTopmostImplementor(onType);    	} else {    		return false;    	}    }