docs: @Override
    public TwoPhaseIterator asTwoPhaseIterator() {
      if (!query.twoPhaseIteratorAllowed()) {
        return null;
      } else {
        TwoPhaseIterator originalTwoPhaseIterator = subSpans.asTwoPhaseIterator();
        if (originalTwoPhaseIterator != null) {
          return new TwoPhaseIterator(originalTwoPhaseIterator.approximation()) {
            @Override
            public boolean matches() throws IOException {
              return originalTwoPhaseIterator.matches()
                  && twoPhaseCurrentDocMatches();
            }
  
            @Override
            public float matchCost() {
              return originalTwoPhaseIterator.matchCost();
            }
          };
        } else {
          return new TwoPhaseIterator(subSpans) {
  
            @Override
            public boolean matches() throws IOException {
              return twoPhaseCurrentDocMatches();
            }
  
            @Override
            public float matchCost() {
              return subSpans.positionsCost();
            }
          };
        }
      }
    }