def makeHashFunction(self, originalHashFunction, syntheticMemberList):
        """
        :param list(SyntheticMember) syntheticMemberList: a list of the class' synthetic members.
        """
        if originalHashFunction is None:
            return None

        for member in syntheticMemberList:
            if not member.readOnly():
                return None

        # All synthetic members are read-only: generate a hash function.
        def hash_function(instance):
            values = [getattr(instance, m.privateMemberName()) for m in syntheticMemberList]
            if inspect.isfunction(originalHashFunction) or inspect.ismethod(originalHashFunction):
                values.append(originalHashFunction(instance))
            return hash(tuple(values))

        return hash_function
:param list(SyntheticMember) syntheticMemberList: a list of the class' synthetic members.