private static String componentConstraintsToString(CC cc) {
    CC newCC = new CC();
    StringBuilder stringBuilder = new StringBuilder();
    if (cc.getSkip() != newCC.getSkip()) {
      stringBuilder.append(" skip=").append(cc.getSkip());
    }
    if (cc.getSpanX() != newCC.getSpanX()) {
      stringBuilder.append(" spanX=").append(cc.getSpanX() == LayoutUtil.INF ? "INF" : cc.getSpanX());
    }
    if (cc.getSpanY() != newCC.getSpanY()) {
      stringBuilder.append(" spanY=").append(cc.getSpanY() == LayoutUtil.INF ? "INF" : cc.getSpanY());
    }
    if (cc.getPushX() != null) {
      stringBuilder.append(" pushX=").append(cc.getPushX());
    }
    if (cc.getPushY() != null) {
      stringBuilder.append(" pushY=").append(cc.getPushY());
    }
    if (cc.getSplit() != newCC.getSplit()) {
      stringBuilder.append(" split=").append(cc.getSplit());
    }
    if (cc.isWrap()) {
      stringBuilder.append(" wrap=");
      if (cc.getWrapGapSize() != null) {
        stringBuilder.append(cc.getWrapGapSize());
      }
      else {
        stringBuilder.append("true");
      }
    }
    if (cc.isNewline()) {
      stringBuilder.append(" newline=");
      if (cc.getNewlineGapSize() != null) {
        stringBuilder.append(cc.getNewlineGapSize());
      }
      else {
        stringBuilder.append("true");
      }
    }
    if (cc.getHideMode() != newCC.getHideMode()) {
      stringBuilder.append(" hidemode=").append(cc.getHideMode());
    }
    return stringBuilder.toString().trim();
  }
private static String componentConstraintsToString(CC cc)