code: @Override
    public BaseType extendGenericType()
    {
      BaseType []oldParams = getParameters();    
      BaseType []newParams = new BaseType[oldParams.length];
      boolean isExtend = false;
      
      for (int i = 0; i < newParams.length; i++) {
        BaseType param = oldParams[i];
        
        if (param instanceof ClassType
            || param instanceof ParamType) {
          BaseType []upperBounds = new BaseType[] { param };
          BaseType []lowerBounds = new BaseType[] { };//ObjectType.OBJECT_TYPE };
          
          BaseType extParam = new WildcardTypeImpl(lowerBounds, upperBounds);
          
          newParams[i] = extParam;
          isExtend = true;
        }
        else {
          newParams[i] = param;
        }
      }
      
      if (isExtend) {
        ParamType extendsType = new ParamType(_type, newParams, _paramMap);
  
        return extendsType;
      }
      else {
        return this;
      }
    }
docs: Convert Foo<Bar> to Foo<? extends Bar> for CDI extension matching.