public AndTest() throws IOException {
    this.q =
        new Query(
            TaxonomyCoordinates.getInferredTaxonomyCoordinate(
                StampCoordinates.getDevelopmentLatestActiveOnly(),
                Get.configurationService().getDefaultLanguageCoordinate())) {
          @Override
          protected ForSetSpecification ForSetSpecification() {
            return new ForSetSpecification(ComponentCollectionTypes.ALL_CONCEPTS);
          }

          @Override
          public void Let() {
            let("Physical force", Snomed.PHYSICAL_FORCE);
            let("Motion", Snomed.MOTION);
          }

          @Override
          public Clause Where() {
            return And(
                ConceptIsKindOf("Physical force"),
                Xor(ConceptIsKindOf("Motion"), ConceptIsDescendentOf("Motion")));
          }
        };
  }
  @Override
  public C build(
      EditCoordinate editCoordinate, ChangeCheckerMode changeCheckerMode, List builtObjects)
      throws IllegalStateException {
    if (referencedComponentNid == Integer.MAX_VALUE) {
      referencedComponentNid =
          Get.identifierService().getNidForUuids(referencedComponentBuilder.getUuids());
    }
    SememeChronologyImpl sememeChronicle =
        new SememeChronologyImpl(
            sememeType,
            primordialUuid,
            Get.identifierService().getNidForUuids(this.getUuids()),
            assemblageConceptSequence,
            referencedComponentNid,
            Get.identifierService().getSememeSequenceForUuids(this.getUuids()));
    sememeChronicle.setAdditionalUuids(additionalUuids);
    Get.identifierService()
        .setConceptSequenceForComponentNid(assemblageConceptSequence, sememeChronicle.getNid());
    switch (sememeType) {
      case COMPONENT_NID:
        ComponentNidSememeImpl cnsi =
            (ComponentNidSememeImpl)
                sememeChronicle.createMutableVersion(
                    ComponentNidSememeImpl.class, State.ACTIVE, editCoordinate);
        cnsi.setComponentNid((Integer) parameters[0]);
        break;
      case LONG:
        LongSememeImpl lsi =
            (LongSememeImpl)
                sememeChronicle.createMutableVersion(
                    LongSememeImpl.class, State.ACTIVE, editCoordinate);
        lsi.setLongValue((Long) parameters[0]);
        break;
      case LOGIC_GRAPH:
        LogicGraphSememeImpl lgsi =
            (LogicGraphSememeImpl)
                sememeChronicle.createMutableVersion(
                    LogicGraphSememeImpl.class, State.ACTIVE, editCoordinate);
        lgsi.setGraphData(((LogicalExpression) parameters[0]).getData(DataTarget.INTERNAL));
        break;
      case MEMBER:
        SememeVersionImpl svi =
            (SememeVersionImpl)
                sememeChronicle.createMutableVersion(
                    SememeVersionImpl.class, State.ACTIVE, editCoordinate);
        break;
      case STRING:
        StringSememeImpl ssi =
            (StringSememeImpl)
                sememeChronicle.createMutableVersion(
                    StringSememeImpl.class, State.ACTIVE, editCoordinate);
        ssi.setString((String) parameters[0]);
        break;
      case DESCRIPTION:
        {
          DescriptionSememeImpl dsi =
              (DescriptionSememeImpl)
                  sememeChronicle.createMutableVersion(
                      DescriptionSememeImpl.class, State.ACTIVE, editCoordinate);
          dsi.setCaseSignificanceConceptSequence((Integer) parameters[0]);
          dsi.setDescriptionTypeConceptSequence((Integer) parameters[1]);
          dsi.setLanguageConceptSequence((Integer) parameters[2]);
          dsi.setText((String) parameters[3]);
          break;
        }
      case DYNAMIC:
        {
          DynamicSememeImpl dsi =
              (DynamicSememeImpl)
                  sememeChronicle.createMutableVersion(
                      DynamicSememeImpl.class, State.ACTIVE, editCoordinate);
          if (parameters != null && parameters.length > 0) {
            // See notes in SememeBuilderProvider - this casting / wrapping nonesense it to work
            // around Java being stupid.
            dsi.setData(((AtomicReference<DynamicSememeDataBI[]>) parameters[0]).get());
          }
          // TODO DAN this needs to fire the validator!
          break;
        }
      default:
        throw new UnsupportedOperationException("Can't handle: " + sememeType);
    }

    if (changeCheckerMode == ChangeCheckerMode.ACTIVE) {
      Get.commitService().addUncommitted(sememeChronicle);
    } else {
      Get.commitService().addUncommittedNoChecks(sememeChronicle);
    }
    builtObjects.add(sememeChronicle);
    return (C) sememeChronicle;
  }