if (exactDeclaringType.isInterface(world) && shadowDeclaringType.equals(world.resolve("java.lang.Object"))) { return; }
	private void warnOnConfusingSig(Shadow shadow) {        // no warnings for declare error/warning        if (munger instanceof Checker) return;                World world = shadow.getIWorld();        		// warning never needed if the declaring type is any		TypeX exactDeclaringType = signature.getDeclaringType().getExactType();        		ResolvedTypeX shadowDeclaringType =			shadow.getSignature().getDeclaringType().resolve(world);        		if (signature.getDeclaringType().isStar()			|| exactDeclaringType== ResolvedTypeX.MISSING)			return;        // warning not needed if match type couldn't ever be the declaring type		if (!shadowDeclaringType.isAssignableFrom(exactDeclaringType)) {            return;		}		// if the method in the declaring type is *not* visible to the		// exact declaring type then warning not needed.		int shadowModifiers = shadow.getSignature().getModifiers(world);		if (!ResolvedTypeX			.isVisible(				shadowModifiers,				shadowDeclaringType,				exactDeclaringType.resolve(world))) {			return;		}		SignaturePattern nonConfusingPattern =			new SignaturePattern(				signature.getKind(),				signature.getModifiers(),				signature.getReturnType(),				TypePattern.ANY,				signature.getName(), 				signature.getParameterTypes(),				signature.getThrowsPattern());		if (nonConfusingPattern			.matches(shadow.getSignature(), shadow.getIWorld())) {                shadow.getIWorld().getLint().unmatchedSuperTypeInCall.signal(                    new String[] {                        shadow.getSignature().getDeclaringType().toString(),                        signature.getDeclaringType().toString()                    },                    this.getSourceLocation(),                    new ISourceLocation[] {shadow.getSourceLocation()} );               		}	}