Assuring Type Safety of Object Oriented Languages