move some more common code into TypePropertyCache