boolean (int row, final Object newValue) { final Property property = myProperties.get(row); final Object[] oldValue = new Object[1]; boolean isNewValue; try { oldValue[0] = getValue(property); isNewValue = !Comparing.equal(oldValue[0], newValue); if (newValue == null && oldValue[0] instanceof String && ((String)oldValue[0]).length() == 0) { isNewValue = false; } } catch (Throwable e) { isNewValue = true; } boolean isSetValue = true; final boolean[] needRefresh = new boolean[1]; if (isNewValue) { isSetValue = doSetValue(() -> { for (PropertiesContainer component : myContainers) { property.setValue(component, newValue); needRefresh[0] |= property.needRefreshPropertyList(component, oldValue[0], newValue); } }); } if (isSetValue) { if (property.needRefreshPropertyList() || needRefresh[0]) { update(myContainers, null, property.closeEditorDuringRefresh()); } else { myModel.fireTableRowsUpdated(row, row); } } return isSetValue; }