Buggy code:
masterDetailsBlock . updateMasterTreeView ( ) ; } } } ) ; toolkit . createLabel ( cpoBaseData , "" ) ; Link link = new Link ( cpoBaseData , SWT . NONE ) ; link . setText ( "<a>Data<seq2seq4repair_space>class:<//a>" ) ; link . addSelectionListener ( new SelectionAdapter ( ) { @ Override public void widgetSelected ( SelectionEvent e ) { handleOpenDataClass ( ) ; } } ) ; txtDataClass = toolkit . createText ( cpoBaseData , "" ) ; gd = new GridData ( SWT . FILL , SWT . CENTER , true , false ) ; gd . horizontalIndent = FieldDecorationRegistry . getDefault ( ) . getMaximumDecorationWidth ( ) ; txtDataClass . setLayoutData ( gd ) ; txtDataClass . addModifyListener ( new ModifyListener ( ) { @ Override public void modifyText ( ModifyEvent e ) { if ( ( segment ) != null ) { segment . setDataClassName ( ( ( Text ) ( e . widget ) ) . getText ( ) ) ; } if ( checkDataClassExists ( ) ) { tvFields . refresh ( ) ; } } } ) ; FieldDecoration fdec = FieldDecorationRegistry . getDefault ( ) . getFieldDecoration ( DEC_WARNING ) ; cdDataClassWarning = new ControlDecoration ( txtDataClass , ( ( SWT . BOTTOM ) | ( SWT . LEFT ) ) ) ; cdDataClassWarning . setImage ( fdec . getImage ( ) ) ; cdDataClassWarning . setDescriptionText ( "The<seq2seq4repair_space>data<seq2seq4repair_space>class<seq2seq4repair_space>could<seq2seq4repair_space>not<seq2seq4repair_space>be<seq2seq4repair_space>found<seq2seq4repair_space>on<seq2seq4repair_space>the<seq2seq4repair_space>current<seq2seq4repair_space>project's<seq2seq4repair_space>classpath" ) ; cdDataClassWarning . hide ( ) ; Button btnBrowseClass = toolkit . createButton ( cpoBaseData , "Browse..." , PUSH ) ; btnBrowseClass . setLayoutData ( new GridData ( SWT . LEFT , SWT . CENTER , false , false ) ) ; JavaTypeContentProposalProvider . attachToComponents ( txtDataClass , btnBrowseClass , getEditor ( ) , "Please<seq2seq4repair_space>select<seq2seq4repair_space>a<seq2seq4repair_space>Data<seq2seq4repair_space>type<seq2seq4repair_space>to<seq2seq4repair_space>use<seq2seq4repair_space>for<seq2seq4repair_space>this<seq2seq4repair_space>segment." , Data . class . getName ( ) ) ; Table tbl = new Table ( c , ( ( ( SWT . BORDER ) | ( SWT . FULL_SELECTION ) ) | ( SWT . V_SCROLL ) ) ) ; tbl . setHeaderVisible ( true ) ; gd = new GridData ( SWT . FILL , SWT . FILL , true , true ) ; gd . heightHint = 200 ; tbl . setLayoutData ( gd ) ; TableColumn tc = new TableColumn ( tbl , SWT . LEAD ) ; tc . setText ( "Field" ) ; tc . setWidth ( 120 ) ; tc = new TableColumn ( tbl , SWT . LEAD ) ; tc . setText ( "Data<seq2seq4repair_space>type" ) ; tc . setWidth ( 90 ) ; tc = new TableColumn ( tbl , SWT . LEAD ) ; tc . setText ( "Format<seq2seq4repair_space>pattern" ) ; tc . setWidth ( 140 ) ; tc = new TableColumn ( tbl , SWT . LEAD ) ; tc . setText ( "Data<seq2seq4repair_space>subtype" ) ; tc . setWidth ( 140 ) ; tvFields = new TableViewer ( tbl ) ; tvFields . setContentProvider ( new SegmentDetailsFormPart . SegmentFieldsContentProvider ( ) ) ; tvFields . setLabelProvider ( new SegmentDetailsFormPart . SegmentFieldLabelProvider ( getEditor ( ) . getSite ( ) . getWorkbenchWindow ( ) . getWorkbench ( ) ) ) ; <START_BUG> tvFields . setCellEditors ( new CellEditor [ ] { new org . eclipse . jface . viewers . TextCellEditor ( tvFields . getTable ( ) ) , new org . eclipse . jface . viewers . ComboBoxCellEditor ( tvFields . getTable ( ) , TestDataFieldType . displayNames ( ) ) , new org . eclipse . jface . viewers . TextCellEditor ( tvFields . getTable ( ) ) , new DataClassCellEditor ( getEditor ( ) , tvFields . getTable ( ) ) } ) ; <END_BUG> tvFields . setColumnProperties ( new String [ ] { "name" , "type" , "pattern" , "subtype" } ) ; tvFields . setCellModifier ( new ICellModifier ( ) { @ Override public void modify ( Object element , String property , Object value ) { if ( element instanceof TableItem ) { element = ( ( TableItem ) ( element ) ) . getData ( ) ; } Object prevValue = getValue ( element , property ) ; if ( prevValue == null ? value == null : prevValue . equals ( value ) ) { return ; } SegmentDetailsFormPart . SegmentFieldTableEntry entry = ( ( SegmentDetailsFormPart . SegmentFieldTableEntry ) ( element ) ) ; ITestDataFieldMetadata meta = entry . getField ( ) ; if ( "name" . equals ( property ) ) { meta . setName ( ( value == null ? null : value . toString ( ) ) ) ; } if ( "type" . equals ( property ) ) { meta . setType ( TestDataFieldType . values ( ) [ ( ( Number ) ( value ) ) . intValue ( ) ] ) ; if ( ! ( canModify ( entry , "pattern" ) ) ) { meta . setFormatterPattern ( null ) ; } } if ( "pattern" . equals ( property ) ) { meta . setFormatterPattern ( ( ( value == null ) || ( "" . equals ( value ) ) ? null : value . toString ( ) ) ) ; } if ( "subtype" . equals ( property ) ) { meta . setSubTypeClassName ( ( ( value == null ) || ( "" . equals ( value ) ) ? null : value . toString ( ) ) ) ; } ( ( SegmentDetailsFormPart . SegmentFieldsContentProvider ) ( tvFields . getContentProvider ( ) ) ) . checkFieldCurrentness ( segment , entry ) ; tvFields . update ( element , null ) ; } @ Override public Object getValue ( Object element , String property ) { SegmentDetailsFormPart . SegmentFieldTableEntry entry = ( ( SegmentDetailsFormPart . SegmentFieldTableEntry ) ( element ) ) ; ITestDataFieldMetadata meta = entry . getField ( ) ; if ( "name" . equals ( property ) ) { return meta . getName ( ) ; }

Fix:
tvFields . setCellEditors ( new CellEditor [ ] { new org . eclipse . jface . viewers . TextCellEditor ( tvFields . getTable ( ) ) , new org . eclipse . jface . viewers . ComboBoxCellEditor ( tvFields . getTable ( ) , TestDataFieldType . displayNames ( ) , SWT . READ_ONLY ) , new org . eclipse . jface . viewers . TextCellEditor ( tvFields . getTable ( ) ) , new DataClassCellEditor ( getEditor ( ) , tvFields . getTable ( ) ) } ) ;