booleanCode = (booleanCode << 1) | (stop ? 1 : 0);
    public int hashCode() {      int code = label.hashCode();      code = (code << 2) ^ headWord.hashCode();      if (stop) {        code = (code << 1) | (isPreterminal() ? 1 : 0);        return code;      }      if (leftSubcat != null)        code = (code << 2) ^ leftSubcat.hashCode();      if (rightSubcat != null)        code = (code << 2) ^ rightSubcat.hashCode();      if (headChild != null)        code = (code << 2) ^ headChild.label().hashCode();      code = (code << 2) ^ leftPrevMods.hashCode();      code = (code << 2) ^ rightPrevMods.hashCode();      int booleanCode = 0;      booleanCode = (booleanCode << 1) | (stop ? 1 : 0);      booleanCode = (booleanCode << 1) | (leftVerb ? 1 : 0);      booleanCode = (booleanCode << 1) | (rightVerb ? 1 : 0);      return code ^ booleanCode;    }