boolean (@Nullable PsiMember member) { if (member == null || member instanceof PsiTypeParameter) return false; if (member.hasModifierProperty(PsiModifier.PUBLIC) || !isInFinalClass(member) && member.hasModifierProperty(PsiModifier.PROTECTED)) { PsiElement parent = member.getParent(); if (parent instanceof PsiClass) { return isModulePublicApi((PsiClass)parent); } if (parent instanceof PsiJavaFile) { String packageName = ((PsiJavaFile)parent).getPackageName(); return myExportedPackageNames.contains(packageName); } } return false; }