Abstract. Variant parametric types (VPT) represent the successful result of combining subtype polymorphism with parametric polymorphism to support a more flexible subtyping for Java-like languages. A key feature of this combination is the use-site variance. Depending on how the fields are used, each variance denotes a covariant, a contravariant, an invariant or a bivariant subtyping. By annotating variance properties on each type argument to a parametric class, programmers can choose various desirable variance properties for each use of the parametric class. Although Java library classes have been successfully refactored to use variant parametric types, these mechanisms are often criticized, due to the difficulty of choosing appropriate variance annotations. Several algorithms have been proposed for automatically refactoring of legacy Java code to use generic libraries, but no one can support the full flexibility of the use-site variance-based subtyping. This paper addresses this d...