public static String collectReportText(GTreeNode cur,
					Collection<? extends GTreeNode> included, int indent) {
				StringBuilder b = new StringBuilder();
				if (cur instanceof NodeWithText) {
					NodeWithText nwt = (NodeWithText) cur;
					String text = nwt.getReportText();
					if (text != null) {
						b.append('\n');
						for (int i = 0; i < indent; i++) {
							b.append(INDENTATION);
						}
						b.append(nwt.getReportText());
					}
					if (nwt.doesIndent()) {
						indent += 1;
					}
				}
				boolean doAll = (included == null || !containsAny(included, cur.getChildren()));
				for (GTreeNode node : cur.getChildren()) {
					if (node instanceof NodeWithText && (doAll || included.contains(node))) {
						NodeWithText nwt = (NodeWithText) node;

						b.append(nwt.collectReportText(included, indent));
					}
				}
				return b.toString();
			}
This spacer addresses the optical impression that the message panel changes size when showing details
Ghidra/Framework/Docking/src/main/java/docking/ErrLogExpandableDialog.java