public void createAbstractXxxVMethods(ClassGenerator classGen) {
    if (returnVType().equals(owner)) {
      JType xxxV = owner.jType(XxxV);
      ImmutableList<VType> rest = isEndofunctionForOwner() ? skipOne(toVType(vParams))
          : toVType(vParams);

      boolean isAnyBasicInRest = isAnyBasic(rest);
      boolean isRestOneCompoundVType = rest.size() == 1 && rest.get(0).isCompound();

      if (isAnyBasicInRest) {
        // XxxV name(primitive v1);
        ImmutableList<JParam> jParams = toJParam(rest, MostPrimitiveG);
        MethodGenerator met = classGen.newMethodPairWithImpl(xxxV, name(), jParams);

        generateComponentAssigningMethodBody(met, generateJComponentAssignments(jParams));
      }

      if (isRestOneCompoundVType) {
        ImmutableList<VComponent> vComponents = rest.get(0).vComponents();
        boolean isImplementationGenerated = false;

        if (isAnyBasic(vComponents)) {
          // XxxV name(primitive field1, primitive field2, ...);
          ImmutableList<JParam> jParams = toJParam(vComponents, MostPrimitiveG);
          MethodGenerator met = classGen.newMethodPairWithImpl(xxxV, name(), jParams);

          generateComponentAssigningMethodBody(met, generateJComponentAssignments2(jParams));
          isImplementationGenerated = true;
        }

        // XxxV name(FieldG v1, FieldG v2, ...);
        ImmutableList<JParam> jParams = toJParam(vComponents, XxxG);
        MethodGenerator met = classGen.newMethodPairWithImpl(xxxV, name(), jParams);

        if (isImplementationGenerated) {
          met.add(jReturn(chainedCall(XxxV, mostPrimitive(jParams))));
        } else {
          generateComponentAssigningMethodBody(met, generateJComponentAssignments2(jParams));
        }
      }

      // XxxV name(XxxG v1);
      ImmutableList<JParam> jParams = toJParam(rest, XxxG);
      MethodGenerator met = classGen.newMethodPairWithImpl(xxxV, name(), jParams);

      if (isAnyBasicInRest) {
        met.add(jReturn(chainedCall(XxxV, mostPrimitive(jParams))));
      } else if (isRestOneCompoundVType) {
        ImmutableList<JExpression> args = rest.get(0).jComponentAccessOn(jParams.get(0));
        met.add(jReturn(chainedCall(XxxV, args)));
      } else {
        generateComponentAssigningMethodBody(met, generateJComponentAssignments(jParams));
      }
    }
  }