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.
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)
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
- Unsupported value: {}
- Invalid value for {}
- No such address space: %s
- Current trace does not use Sleigh
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/5a30621947ab5b74.
Report an issue: GitHub.