Scalable, flow-sensitive type inference for statically typed object-oriented languages