コード例 #1
0
  /**
   * 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);
  }