public String expand(MssCFGenContext genContext) {
    String retval;
    final String S_ProcName = "CFGenKbGelReference.expand() ";
    String referenceName = getRequiredReferenceName();

    ICFGenKbGenItemObj genItem =
        genContext.getGenEngine().findContextItem(genContext, referenceName);
    if (genItem == null) {
      genContext
          .getGenEngine()
          .getLog()
          .message(
              "Could not resolve reference method \""
                  + referenceName
                  + "\". \""
                  + "$"
                  + getRequiredSourceText()
                  + "$"
                  + "\" is invalid");
      return (null);
    }

    if (!(genItem instanceof MssCFGenReferenceObj)) {
      genContext
          .getGenEngine()
          .getLog()
          .message(
              "Resolution of reference method \""
                  + referenceName
                  + "\" returned a "
                  + genItem.getClass().getPackage().getName()
                  + "."
                  + genItem.getClass().getName()
                  + ", not a MssCFGenReferenceObj. \""
                  + "$"
                  + getRequiredSourceText()
                  + "$"
                  + "\" is invalid");
      return (null);
    }

    MssCFGenReferenceObj reference = (MssCFGenReferenceObj) genItem;

    ICFLibAnyObj refDef = reference.dereference(genContext);
    if (refDef == null) {
      genContext
          .getGenEngine()
          .getLog()
          .message(
              "Resolution of reference \""
                  + referenceName
                  + "\" returned null. \""
                  + "$"
                  + getRequiredSourceText()
                  + "$"
                  + "\" is invalid");
      return (null);
    }

    MssCFGenContext refContext = genContext.buildRefContext(refDef);
    if (refContext == null) {
      throw new RuntimeException(S_ProcName + "buildRefContext() failed");
    }

    ICFGenKbGelInstructionObj remainder = getOptionalChildrenRemainder();

    String expansion;
    if (remainder == null) {
      expansion = "";
    } else {
      expansion = remainder.expand(refContext);
    }

    return (expansion);
  }