boolean (@NotNull PsiMember member, @NotNull PsiClass memberClass, @Nullable PsiClass accessObjectClass, boolean isStatic, @NotNull PsiClass contextClass) { if (!ClassUtils.inSamePackage(memberClass, contextClass)) { //in this case if the code compiles ok javac will generate required bridge methods so there will be no problems at runtime return true; } /* since classes are located in the same package javac won't generate bridge methods for members inherited by enclosing class, so local and inner classes won't have access to protected methods inherited by enclosing class, and therefore we shouldn't check enclosing classes here like JavaResolveUtil.canAccessProtectedMember does. */ if (InheritanceUtil.isInheritorOrSelf(contextClass, memberClass, true)) { if (member instanceof PsiClass || isStatic || accessObjectClass == null || InheritanceUtil.isInheritorOrSelf(accessObjectClass, contextClass, true)) { return true; } } return false; }