typestate analysis