docs: public boolean isVisible(TypeFinder typeFinder, IType fromType, IMember target) throws JavaModelException {
  		final int flags = target.getFlags();
  		if (Flags.isPublic(flags)) {
  			return true;
  		}
  		final String fromTypeName = fromType.getFullyQualifiedName();
  		final String memberType = target.getDeclaringType().getFullyQualifiedName();
  		if (Flags.isPrivate(flags)) {
  			return target.getDeclaringType().getFullyQualifiedName().equals(fromTypeName);
  		}
  		if (Flags.isProtected(flags)) {
  			IType t = fromType;
  			while (t != null) {
  				if (memberType.equals(t.getFullyQualifiedName())) {
  					return true;
  				}
  				final String typeName = t.getSuperclassName();
  				if (Strings.isNullOrEmpty(typeName)) {
  					t = null;
  				} else {
  					t = typeFinder.findType(typeName);
  				}
  			}
  		}
  		final IPackageFragment f1 = target.getDeclaringType().getPackageFragment();
  		final IPackageFragment f2 = fromType.getPackageFragment();
  		if (f1.isDefaultPackage()) {
  			return f2.isDefaultPackage();
  		}
  		return f1.getElementName().equals(f2.getElementName());
  	}