diff -r b12ffdfa1341 -r cf84b07a82db src/share/classes/com/sun/tools/javac/code/Symbol.java --- a/src/share/classes/com/sun/tools/javac/code/Symbol.java Mon Jan 21 20:15:16 2013 +0000 +++ b/src/share/classes/com/sun/tools/javac/code/Symbol.java Mon Jan 21 20:19:53 2013 +0000 @@ -1233,7 +1233,8 @@ case Flags.PRIVATE: return false; case Flags.PUBLIC: - return true; + return !this.owner.isInterface() || + (flags_field & STATIC) == 0; case Flags.PROTECTED: return (origin.flags() & INTERFACE) == 0; case 0: @@ -1247,6 +1248,18 @@ } } + @Override + public boolean isInheritedIn(Symbol clazz, Types types) { + switch ((int)(flags_field & Flags.AccessFlags)) { + case PUBLIC: + return !this.owner.isInterface() || + clazz == owner || + (flags_field & STATIC) == 0; + default: + return super.isInheritedIn(clazz, types); + } + } + /** The implementation of this (abstract) symbol in class origin; * null if none exists. Synthetic methods are not considered * as possible implementations.