if (headChild != null) code = (code << 2) ^ headChild.label().hashCode();
Symbol headLabel = headLabel(); if (headLabel != null) code = (code << 2) ^ headLabel.hashCode();
    public int hashCode() {      // all three types of chart items (stopped, baseNP and others)      // depend on label and head word      int code = label.hashCode();      code = (code << 2) ^ headWord.hashCode();      // special case for stopped items      if (stop) {        code = (code << 1) | (isPreterminal() ? 1 : 0);        return code;      }      // special case for baseNP items      if (this.label == baseNP) {	if (headChild != null)	  code = (code << 2) ^ headChild.label().hashCode();	code = (code << 2) ^ leftPrevMods.hashCode();	code = (code << 2) ^ rightPrevMods.hashCode();	return code;      }      // finish computation of hash code for all other items      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;    }