Class GenericContextAwarePojoGenericTypeModel<T>

  • All Implemented Interfaces:
    PojoGenericTypeModel<T>, PojoTypeModel<T>

    public final class GenericContextAwarePojoGenericTypeModel<T>
    extends AbstractPojoGenericTypeModel<T>
    implements PojoGenericTypeModel<T>
    An implementation of PojoGenericTypeModel that takes advantage of the context in which a given property appears to derive more precise type information.

    Instances wrap a PojoRawTypeModel, and propagate generics information to properties and their type by wrapping the property models as well.

    For instance, given the following model:

    
     class A<T extends C> {
       GenericType<T> propertyOfA;
     }
     class B extends A<D> {
     }
     class C {
     }
     class D extends C {
     }
     class GenericType<T> {
       T propertyOfGenericType;
     }
     
    ... if an instance of this implementation was used to model the type of B.propertyOfA, then the property B.propertyOfA would appear to have type List<D> as one would expect, instead of type T extends C if we inferred the type solely based on generics information from type A. This will also be true for more deeply nested references to a type variable, for instance the type of property B.propertyOfA.propertyOfGenericType will correctly be inferred as D.