NationalSecurityAgency/ghidra · error · UnsupportedOperationException
Cell is not editable
Error message
Cell is not editable
What it means
Default implementation of EnumeratedTableColumn.setValueOf(R, Object). Mirrors error 562 for the simpler EnumeratedTableColumn interface: columns are non-editable unless isEditable(R) is overridden to return true, and when editing is enabled the subclass must also override setValueOf. The default throws to signal an incomplete edit implementation.
Solutions
- Override setValueOf(R row, Object value) in the enum constant/class so the edit is applied to the row.
- Leave isEditable returning false if the column must remain read-only.
- Pair every isEditable()==true column with a tested setValueOf override.
Example fix
// before
ADDRESS {
public Object getValueOf(Row r) { return r.getAddress(); }
public boolean isEditable(Row r) { return true; } // no setValueOf
};
// after
ADDRESS {
public Object getValueOf(Row r) { return r.getAddress(); }
public boolean isEditable(Row r) { return true; }
public void setValueOf(Row r, Object value) { r.setAddress((Address) value); }
}; Defensive patterns
Strategy: type-guard
Type guard
if (col.isEditable(row)) {
// only call setValueOf if isEditable is true AND the column overrides setValueOf
} Try / catch
try {
col.setValueOf(row, value);
} catch (UnsupportedOperationException e) {
if ("Cell is not editable".equals(e.getMessage())) {
// no setter implemented; ignore
} else throw e;
} Prevention
- Override setValueOf wherever isEditable returns true.
- Keep editing and its setter implemented as a pair.
- Test edit commits for every editable enumerated column.
When it happens
Trigger: An enum-based EnumeratedTableColumn overrides isEditable(row) to true but does not override setValueOf(row, value). The table invokes setValueOf when a user commits an edit in that cell.
Common situations: Prototyping an editable enumerated table column; toggling editability on a column modeled after a read-only one without adding the setter; framework upgrades where the editable contract was tightened.
Related errors
- Cell is not editable
- Address is not in process
- ADDRESS must be HOST:PORT
- address must be in the form 'host:port'
- address must be 'port' or 'host:port'
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/5a30621947ab5b74.
Report an issue: GitHub.
Appendix: source
Thrown at Ghidra/Debug/ProposedUtils/src/main/java/docking/widgets/table/EnumeratedTableColumn.java:61
* @return the value
*/
public Object getValueOf(R row);
/**
* Get the name of this column
*
* @return the name
*/
public String getHeader();
/**
* Get the value of this column for the given row
*
* @param row the row
* @param value the new value
*/
default public void setValueOf(R row, Object value) {
throw new UnsupportedOperationException("Cell is not editable");
}
/**
* Check if this column can be modified for the given row
*
* @param row the row
* @return true if editable
*/
default public boolean isEditable(R row) {
return false;
}
/**
* Check if this column can be sorted
*
* <p>
* TODO: Either this should be implemented as ported to {@link GDynamicColumnTableModel}, or
* removed.View on GitHub (pinned to d5f144c24d)