/** * Sets up row corresponding to Divergence DA in the configurator composite. * * @param composite to layout the divergence dependence configuration widgets. * @pre composite != null */ private void setupDivergenceDepUI(final Composite composite) { final RowLayout _rowLayout = new RowLayout(SWT.VERTICAL); composite.setLayout(_rowLayout); final SlicerConfiguration _cfg = (SlicerConfiguration) configuration; final Button _useDDAButton = new Button(composite, SWT.CHECK); _useDDAButton.setText("use divergence dependence"); _useDDAButton.setToolTipText("Use divergence dependence in calculation of the slice."); _useDDAButton.setSelection(_cfg.isDivergenceDepAnalysisUsed()); _useDDAButton.addSelectionListener( new BooleanPropertySelectionListener( SlicerConfiguration.USE_DIVERGENCEDA, _useDDAButton, _cfg)); // Sets up the composite and buttons pertaining to precision control. final Group _natureOfDDAGroup = new Group(composite, SWT.SHADOW_ETCHED_IN); final RowLayout _rowLayout3 = new RowLayout(SWT.VERTICAL); _natureOfDDAGroup.setLayout(_rowLayout3); _natureOfDDAGroup.setText("Nature of Divergence dependence"); final Button _intraProceduralDDA = new Button(_natureOfDDAGroup, SWT.RADIO); _intraProceduralDDA.setText("intra-procedural only"); _intraProceduralDDA.setToolTipText( "This will not capture dependence on call-sites to divergent methods."); final Button _interProceduralDDA = new Button(_natureOfDDAGroup, SWT.RADIO); _interProceduralDDA.setText("inter-procedural only"); _interProceduralDDA.setToolTipText( "This will not capture dependence on intra-procedual divergence."); final Button _intraAndInterProceduralDDA = new Button(_natureOfDDAGroup, SWT.RADIO); _intraAndInterProceduralDDA.setText("intra- and inter-procedural"); _intraAndInterProceduralDDA.setToolTipText( "This will capture both intra- and inter-procedual divergence."); final SelectionListener _sl2 = new SelectionListener() { public void widgetSelected(final SelectionEvent evt) { Object _value = null; if (evt.widget == _intraProceduralDDA) { _value = SlicerConfiguration.INTRA_PROCEDURAL_ONLY; } else if (evt.widget == _interProceduralDDA) { _value = SlicerConfiguration.INTER_PROCEDURAL_ONLY; } else if (evt.widget == _intraAndInterProceduralDDA) { _value = SlicerConfiguration.INTRA_AND_INTER_PROCEDURAL; } if (_value != null) { _cfg.setProperty(SlicerConfiguration.NATURE_OF_DIVERGENCE_DA, _value); } } public void widgetDefaultSelected(final SelectionEvent evt) { widgetSelected(evt); } }; _intraAndInterProceduralDDA.addSelectionListener(_sl2); _interProceduralDDA.addSelectionListener(_sl2); _intraProceduralDDA.addSelectionListener(_sl2); final Object _temp = _cfg.getProperty(SlicerConfiguration.NATURE_OF_DIVERGENCE_DA); if (_temp == null || _temp.equals(SlicerConfiguration.INTER_PROCEDURAL_ONLY)) { _interProceduralDDA.setSelection(true); } else if (_temp.equals(SlicerConfiguration.INTRA_AND_INTER_PROCEDURAL)) { _intraAndInterProceduralDDA.setSelection(true); } else if (_temp.equals(SlicerConfiguration.INTRA_PROCEDURAL_ONLY)) { _intraProceduralDDA.setSelection(true); } // Links up the buttons via selection listener to control toggling based on the user's decision // to use interference DA. _useDDAButton.addSelectionListener( new SelectionListener() { public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent evt) { boolean _val = false; if (_useDDAButton.getSelection()) { _val = true; } _natureOfDDAGroup.setEnabled(_val); _interProceduralDDA.setEnabled(_val); _intraProceduralDDA.setEnabled(_val); _intraAndInterProceduralDDA.setEnabled(_val); } public void widgetDefaultSelected(final SelectionEvent evt) { widgetSelected(evt); } }); _useDDAButton.setSelection(_cfg.isDivergenceDepAnalysisUsed()); _useDDAButton.notifyListeners(SWT.Selection, null); }