@Override
			protected void updateItem(AstUsages usages, boolean empty) {
				super.updateItem(usages, empty);
				if (empty || usages == null) {
					setText(null);
					setGraphic(null);
					setOnMousePressed(null);
				} else {
					String usageFmt = "%d reads, %d writes".formatted(usages.readers().size(), usages.writers().size());
					setText(usageFmt);

					// Put a warning symbol on variables that are read from before ever being written to.
					//  - Parameters are implicitly treated as being written to
					List<ASTElement> list = usages.readersAndWriters()
							.sorted(Comparator.comparing(ASTElement::location))
							.toList();
					if (!list.isEmpty() && !usages.isParameter() && usages.readers().contains(list.getFirst())) {
						BoundLabel warning = new BoundLabel(Lang.getBinding("assembler.variables.read-before-write"),
								new FontIconView(CarbonIcons.WARNING, Color.YELLOW));
						warning.getStyleClass().add(Styles.WARNING);
						setGraphic(warning);
					} else {
						setGraphic(null);
					}
				}
			}
Component panel for the assembler which shows the variables of the currently selected method.

@author Matt Coley
recaf-ui/src/main/java/software/coley/recaf/ui/pane/editing/assembler/JvmVariablesPane.java