class A { private int value = 1; static class B<T extends A> { void print(T t) { System.out.println(t.value); } } } class Bug { // Idea incorrectly analyses this code with JDK 7 public <T extends Bug> void doit(T other) { // Oops, was legal with JDK 6, no longer legal with JDK 7 other.mPrivate(); // Redundant with JDK 6, not a redundant cast with JDK 7 ((Bug)other).mPrivate(); } // Idea correctly analyses this code public void doit2(SubClass other) { // Not legal with JDK 6 or 7 other.<error descr="'mPrivate()' has private access in 'Bug'">mPrivate</error>(); // Not redundant with JDK 6 or 7 ((Bug)other).mPrivate(); } private void mPrivate() { } } class SubClass extends Bug { }