コード例 #1
0
  /**
   * Sets up the assertion preservation part of the UI.
   *
   * @param composite on which to install the UI.
   * @param cfg to be used.
   * @pre composite != null and cfg != null
   */
  private void setupAssertionUI(final Composite composite, final SlicerConfiguration cfg) {
    final Group _assertionGroup = new Group(composite, SWT.NONE);
    final GridData _gridData1 = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false);
    _gridData1.horizontalSpan = 3;
    _gridData1.grabExcessHorizontalSpace = true;
    _assertionGroup.setLayoutData(_gridData1);

    final GridLayout _gl1 = new GridLayout(3, false);
    _assertionGroup.setLayout(_gl1);
    _assertionGroup.setText("Preservation of assertions in the system");

    final Button _assertionPreservingSliceButton = new Button(_assertionGroup, SWT.CHECK);
    _assertionPreservingSliceButton.setText("Preserve assertions");
    _assertionPreservingSliceButton.setEnabled(true);

    final GridData _gd2 = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false);
    _gd2.horizontalSpan = 1;
    _assertionPreservingSliceButton.setLayoutData(_gd2);

    final Button _applclasses = new Button(_assertionGroup, SWT.CHECK);
    _applclasses.setText("Preserve assertions in application classes only");
    _applclasses.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.ASSERTIONS_IN_APPLICATION_CLASSES_ONLY, _applclasses, cfg));
    _applclasses.setSelection(cfg.areAssertionsOnlyInAppClassesConsidered());

    final GridData _gd3 = new GridData(SWT.END, SWT.BEGINNING, false, false);
    _gd3.horizontalSpan = 2;
    _gd3.grabExcessHorizontalSpace = true;
    _applclasses.setLayoutData(_gd3);

    final SelectionListener _sl1 =
        new BooleanPropertySelectionListener(
            SlicerConfiguration.SLICE_TO_PRESERVE_ASSERTIONS,
            _assertionPreservingSliceButton,
            cfg) {
          @Override
          public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent evt) {
            final boolean _value = button.getSelection();
            containingConfiguration.setProperty(id, Boolean.valueOf(_value));
            _applclasses.setEnabled(_value);
          }
        };
    _assertionPreservingSliceButton.addSelectionListener(_sl1);

    _assertionPreservingSliceButton.setSelection(cfg.getSliceToPreserveAssertions());
    _assertionPreservingSliceButton.notifyListeners(SWT.Selection, null);
  }
コード例 #2
0
  /**
   * Sets up row to configure deadlock preserving slicing and slice type.
   *
   * @param composite to layout the slice configuration widgets.
   * @pre composite != null
   */
  private void setupSliceInfoUI(final Composite composite) {
    final SlicerConfiguration _cfg = (SlicerConfiguration) configuration;

    final GridLayout _gridLayout = new GridLayout(3, false);
    composite.setLayout(_gridLayout);

    executableSliceButton = new Button(composite, SWT.CHECK);
    executableSliceButton.setText("Executable slice");

    final GridData _gridData2 = new GridData();
    _gridData2.horizontalSpan = 1;
    executableSliceButton.setLayoutData(_gridData2);
    executableSliceButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.EXECUTABLE_SLICE, executableSliceButton, _cfg));

    if (_cfg.getSliceType().equals(SliceType.FORWARD_SLICE)) {
      executableSliceButton.setEnabled(false);
    }
    executableSliceButton.setSelection(_cfg.getExecutableSlice());

    setupCallingContextUI(composite, _cfg);
    setupAssertionUI(composite, _cfg);
    setupDeadlockUI(composite, _cfg);

    // Slice type related group
    final Group _group2 = new Group(composite, SWT.SHADOW_ETCHED_IN);
    _group2.setText("Slice Type");

    final GridData _gridData = new GridData(GridData.FILL_HORIZONTAL);
    _gridData.horizontalSpan = 1;
    _gridData.verticalAlignment = SWT.TOP;
    _gridData.horizontalAlignment = SWT.RIGHT;
    _group2.setLayoutData(_gridData);

    final RowLayout _rowLayout = new RowLayout();
    _rowLayout.type = SWT.VERTICAL;
    _group2.setLayout(_rowLayout);

    final Button _backwardSlice = new Button(_group2, SWT.RADIO);
    _backwardSlice.setText("Backward slice");

    final Button _forwardSlice = new Button(_group2, SWT.RADIO);
    _forwardSlice.setText("Forward slice");

    final Button _completeSlice = new Button(_group2, SWT.RADIO);
    _completeSlice.setText("Complete slice");

    final SelectionListener _sl6 =
        new SelectionListener() {
          public void widgetSelected(final SelectionEvent evt) {
            Object _value = null;

            if (evt.widget == _forwardSlice) {
              _value = SliceType.FORWARD_SLICE;
              executableSliceButton.setSelection(false);
              executableSliceButton.notifyListeners(SWT.Selection, null);
              executableSliceButton.setEnabled(false);
            } else {
              if (evt.widget == _backwardSlice) {
                _value = SliceType.BACKWARD_SLICE;
              } else if (evt.widget == _completeSlice) {
                _value = SliceType.COMPLETE_SLICE;
              }
              executableSliceButton.setEnabled(true);
            }

            if (_value != null) {
              _cfg.setProperty(SlicerConfiguration.SLICE_TYPE, _value);
            }
          }

          public void widgetDefaultSelected(final SelectionEvent evt) {
            widgetSelected(evt);
          }
        };
    _backwardSlice.addSelectionListener(_sl6);
    _completeSlice.addSelectionListener(_sl6);
    _forwardSlice.addSelectionListener(_sl6);

    final Object _sliceType = _cfg.getSliceType();

    if (_sliceType.equals(SliceType.BACKWARD_SLICE)) {
      _backwardSlice.setSelection(true);
    } else if (_sliceType.equals(SliceType.COMPLETE_SLICE)) {
      _completeSlice.setSelection(true);
    } else if (_sliceType.equals(SliceType.FORWARD_SLICE)) {
      _forwardSlice.setSelection(true);
    }
  }
コード例 #3
0
  /**
   * Sets up row corresponding to Ready DA in the configurator composite.
   *
   * @param composite to layout the ready dependence configuration widgets.
   * @pre composite != null
   */
  private void setupReadyDepUI(final Composite composite) {
    final SlicerConfiguration _cfg = (SlicerConfiguration) configuration;

    final RowLayout _rowLayout1 = new RowLayout(SWT.VERTICAL);
    composite.setLayout(_rowLayout1);

    final Composite _readyComposite1 = new Composite(composite, SWT.NONE);
    final GridLayout _gridLayout2 = new GridLayout();
    _gridLayout2.numColumns = 2;
    _readyComposite1.setLayout(_gridLayout2);

    final Button _useRDAButton = new Button(_readyComposite1, SWT.CHECK);
    _useRDAButton.setText("use ready dependence");
    _useRDAButton.setToolTipText("Use ready dependence in calculation of the slice.");
    _useRDAButton.setSelection(_cfg.isReadyDepAnalysisUsed());
    _useRDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(SlicerConfiguration.USE_READYDA, _useRDAButton, _cfg));

    // Sets up the composite and buttons pertaining to precision control.
    final Group _precisionOfRDAGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
    final GridLayout _gridLayout3 = new GridLayout();
    _gridLayout3.numColumns = 2;
    _precisionOfRDAGroup.setLayout(_gridLayout3);
    _precisionOfRDAGroup.setText("Precision of Ready dependence");

    final Group _precisionGroup = new Group(_precisionOfRDAGroup, SWT.SHADOW_ETCHED_IN);
    final GridLayout _gridLayout4 = new GridLayout();
    _gridLayout4.numColumns = 1;
    _precisionGroup.setLayout(_gridLayout4);
    _precisionGroup.setText("Sort of analysis to be used.");
    _precisionGroup.setToolTipText(
        "Controls the precision via  properties inherent to interference.");

    // Sets up the buttons that control the nature of ready dependence.
    final Button _typedRDA = new Button(_precisionGroup, SWT.RADIO);
    _typedRDA.setText("use type-based analysis");
    _typedRDA.setToolTipText("Only primaries of compatible types will be considered");

    final Button _equivalenceClassBasedEscapeAnalysisBasedRDA =
        new Button(_precisionGroup, SWT.RADIO);
    _equivalenceClassBasedEscapeAnalysisBasedRDA.setText(
        "use equivalence class-based escape analysis");
    _equivalenceClassBasedEscapeAnalysisBasedRDA.setToolTipText(
        "Only primaries belonging to the same equivalence class  will be considered.");

    final Button _symbolBasedEscapeAnalysisBasedRDA = new Button(_precisionGroup, SWT.RADIO);
    _symbolBasedEscapeAnalysisBasedRDA.setText(
        "use sybmolic and equivalence class-based escape analysis");
    _symbolBasedEscapeAnalysisBasedRDA.setToolTipText(
        "Only symbolically equivalent primaries that belong to the same equivalence class will be considered.");

    SelectionListener _sl =
        new SelectionListener() {
          public void widgetSelected(final SelectionEvent evt) {
            Object _value = null;

            if (evt.widget == _equivalenceClassBasedEscapeAnalysisBasedRDA) {
              _value = SlicerConfiguration.EQUIVALENCE_CLASS_BASED_INFO;
            } else if (evt.widget == _symbolBasedEscapeAnalysisBasedRDA) {
              _value = SlicerConfiguration.SYMBOL_AND_EQUIVCLS_BASED_INFO;
            } else if (evt.widget == _typedRDA) {
              _value = SlicerConfiguration.TYPE_BASED_INFO;
            }

            if (_value != null) {
              _cfg.setProperty(SlicerConfiguration.NATURE_OF_READY_DA, _value);
            }
          }

          public void widgetDefaultSelected(final SelectionEvent evt) {
            widgetSelected(evt);
          }
        };
    _equivalenceClassBasedEscapeAnalysisBasedRDA.addSelectionListener(_sl);
    _symbolBasedEscapeAnalysisBasedRDA.addSelectionListener(_sl);
    _typedRDA.addSelectionListener(_sl);

    final Object _temp = _cfg.getProperty(SlicerConfiguration.NATURE_OF_READY_DA);

    if (_temp == null || _temp.equals(SlicerConfiguration.SYMBOL_AND_EQUIVCLS_BASED_INFO)) {
      _symbolBasedEscapeAnalysisBasedRDA.setSelection(true);
    } else if (_temp.equals(SlicerConfiguration.EQUIVALENCE_CLASS_BASED_INFO)) {
      _equivalenceClassBasedEscapeAnalysisBasedRDA.setSelection(true);
    } else if (_temp.equals(SlicerConfiguration.TYPE_BASED_INFO)) {
      _typedRDA.setSelection(true);
    }

    // Sets up the buttons that control what auxiliary analysis are used improve precision.
    final Composite _analysisComposite = new Composite(_precisionOfRDAGroup, SWT.NONE);
    final RowLayout _rowLayout = new RowLayout();
    _rowLayout.type = SWT.VERTICAL;
    _analysisComposite.setLayout(_rowLayout);

    final GridData _analysisCompositeGridData = new GridData(GridData.FILL_HORIZONTAL);
    _analysisCompositeGridData.verticalAlignment = SWT.TOP;
    _analysisComposite.setLayoutData(_analysisCompositeGridData);

    final Button _useOFAForReady = new Button(_analysisComposite, SWT.CHECK);
    _useOFAForReady.setText("use object flow analysis information");
    _useOFAForReady.setToolTipText("Only aliasing primaries will be considered");
    _useOFAForReady.setSelection(_cfg.isOFAUsedForReady());
    _useOFAForReady.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_OFA_FOR_READY_DA, _useOFAForReady, _cfg));

    final Button _useSLAForReady = new Button(_analysisComposite, SWT.CHECK);
    _useSLAForReady.setText("use safe lock analysis ");
    _useSLAForReady.setToolTipText("Safe locks will not considered");
    _useSLAForReady.setSelection(_cfg.isSafeLockAnalysisUsedForReady());
    _useSLAForReady.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_SLA_FOR_READY_DA, _useSLAForReady, _cfg));

    final Button _useCallSiteSensitiveReady = new Button(_analysisComposite, SWT.CHECK);
    _useCallSiteSensitiveReady.setText("blocking call-site aware");
    _useCallSiteSensitiveReady.setToolTipText(
        "Calls leading to blocking will be considered as blocking as well.");
    _useCallSiteSensitiveReady.setSelection(_cfg.isCallSiteSensitiveReadyUsed());
    _useCallSiteSensitiveReady.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.CALL_SITE_SENSITIVE_READY_DA, _useCallSiteSensitiveReady, _cfg));

    // Sets up the buttons that control what rules of ready dependence analysis are used.
    final Group _natureOfRDAGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
    final GridLayout _gridLayout5 = new GridLayout();
    _gridLayout5.numColumns = 2;
    _natureOfRDAGroup.setLayout(_gridLayout5);
    _natureOfRDAGroup.setText("Nature of Ready dependence");

    final Button _rule1RDAButton = new Button(_natureOfRDAGroup, SWT.CHECK);
    _rule1RDAButton.setText("use rule 1 of ready dependence");
    _rule1RDAButton.setToolTipText(
        "Intra-thread intra-procedural monitor acquisition based ready dependence");
    _rule1RDAButton.setSelection(_cfg.isReadyRule1Used());
    _rule1RDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_RULE1_IN_READYDA, _rule1RDAButton, _cfg));

    final Button _rule2RDAButton = new Button(_natureOfRDAGroup, SWT.CHECK);
    _rule2RDAButton.setText("use rule 2 of ready dependence");
    _rule2RDAButton.setToolTipText("Inter-thread monitor acquisition ready dependence");
    _rule2RDAButton.setSelection(_cfg.isReadyRule2Used());
    _rule2RDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_RULE2_IN_READYDA, _rule2RDAButton, _cfg));

    final Button _rule3RDAButton = new Button(_natureOfRDAGroup, SWT.CHECK);
    _rule3RDAButton.setText("use rule 3 of ready dependence");
    _rule3RDAButton.setToolTipText(
        "Intra-thread intra-procedural Object.wait() based ready dependence");
    _rule3RDAButton.setSelection(_cfg.isReadyRule3Used());
    _rule3RDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_RULE3_IN_READYDA, _rule3RDAButton, _cfg));

    final Button _rule4RDAButton = new Button(_natureOfRDAGroup, SWT.CHECK);
    _rule4RDAButton.setText("use rule 4 of ready dependence");
    _rule4RDAButton.setToolTipText("Inter-thread Object.wait() based ready dependence");
    _rule4RDAButton.setSelection(_cfg.isReadyRule4Used());
    _rule4RDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_RULE4_IN_READYDA, _rule4RDAButton, _cfg));

    // Links up the buttons via selection listener to control toggling based on the user's decision
    // to use ready DA.
    _useRDAButton.addSelectionListener(
        new SelectionListener() {
          public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent evt) {
            boolean _val = false;

            if (_useRDAButton.getSelection()) {
              _val = true;
            }
            _precisionGroup.setEnabled(_val);
            _precisionOfRDAGroup.setEnabled(_val);
            _equivalenceClassBasedEscapeAnalysisBasedRDA.setEnabled(_val);
            _typedRDA.setEnabled(_val);
            _useOFAForReady.setEnabled(_val);
            _useSLAForReady.setEnabled(_val);
            _useCallSiteSensitiveReady.setEnabled(_val);
            _symbolBasedEscapeAnalysisBasedRDA.setEnabled(_val);
            _rule1RDAButton.setEnabled(_val);
            _rule2RDAButton.setEnabled(_val);
            _rule3RDAButton.setEnabled(_val);
            _rule4RDAButton.setEnabled(_val);
          }

          public void widgetDefaultSelected(final SelectionEvent evt) {
            widgetSelected(evt);
          }
        });

    _useRDAButton.setSelection(_cfg.isInterferenceDepAnalysisUsed());
    _useRDAButton.notifyListeners(SWT.Selection, null);
  }
コード例 #4
0
  /**
   * Sets up calling context related part of the UI.
   *
   * @param composite on which to draw.
   * @param cfg that provides/receives the info.
   * @pre composite != null and cfg != null
   */
  private void setupCallingContextUI(final Composite composite, final SlicerConfiguration cfg) {
    final Button _propertyAwareSlicingButton = new Button(composite, SWT.CHECK);
    _propertyAwareSlicingButton.setText("Property Aware Slicing");
    _propertyAwareSlicingButton.setToolTipText("Precise but expensive");

    final GridData _gridData4 = new GridData();
    _gridData4.horizontalSpan = 1;
    _propertyAwareSlicingButton.setLayoutData(_gridData4);
    _propertyAwareSlicingButton.setSelection(cfg.getPropertyAware());

    final SelectionListener _sl3 =
        new BooleanPropertySelectionListener(
            SlicerConfiguration.PROPERTY_AWARE, _propertyAwareSlicingButton, cfg);
    _propertyAwareSlicingButton.addSelectionListener(_sl3);

    final Composite _c = new Composite(composite, SWT.NONE);
    final GridData _gridData5 = new GridData();
    _gridData4.horizontalSpan = 1;
    _c.setLayoutData(_gridData5);
    _c.setLayout(new FillLayout(SWT.HORIZONTAL));

    final Label _l = new Label(_c, SWT.HORIZONTAL | SWT.LEFT);
    _l.setText("Limit for calling contexts: ");
    final Text _callingContextLimit = new Text(_c, SWT.LEFT | SWT.SINGLE);
    _callingContextLimit.setToolTipText("This has to be >=0");
    _callingContextLimit.setText(String.valueOf(cfg.getCallingContextLimit()));

    final FocusListener _sl4 =
        new FocusAdapter() {
          @Override
          public void focusLost(@SuppressWarnings("unused") final FocusEvent e) {
            try {
              final int _i = Integer.parseInt(_callingContextLimit.getText());

              if (_i < 0) {
                throw new NumberFormatException();
              }
              cfg.setCallingContextLimit(_i);
            } catch (final NumberFormatException _e) {
              final MessageBox _msgBox =
                  new MessageBox(composite.getShell(), SWT.ERROR_INVALID_ARGUMENT | SWT.ICON_ERROR);
              _msgBox.setMessage(
                  "The limit has to be zero or a positive integer. It was \""
                      + _callingContextLimit.getText()
                      + "\".");
              _msgBox.open();
              _callingContextLimit.setText(
                  SlicerConfiguration.DEFAULT_CALLING_CONTEXT_LIMIT.toString());
            }
          }
        };
    _callingContextLimit.addFocusListener(_sl4);

    final SelectionListener _sl5 =
        new SelectionListener() {
          public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent e) {
            final boolean _b = _propertyAwareSlicingButton.getSelection();
            _callingContextLimit.setEnabled(_b);
            _l.setEnabled(_b);
          }

          public void widgetDefaultSelected(final SelectionEvent e) {
            widgetSelected(e);
          }
        };
    _propertyAwareSlicingButton.addSelectionListener(_sl5);
    _c.pack();
  }
コード例 #5
0
  /**
   * Sets up row corresponding Interference DA in the configurator composite.
   *
   * @param composite to layout the interference dependence configuration widgets.
   * @pre composite != null
   */
  private void setupInteferenceDepUI(final Composite composite) {
    final SlicerConfiguration _cfg = (SlicerConfiguration) configuration;

    final GridLayout _gridLayout = new GridLayout();
    _gridLayout.numColumns = 2;
    composite.setLayout(_gridLayout);

    final Button _useIDAButton = new Button(composite, SWT.CHECK);
    _useIDAButton.setText("use interference dependence");
    _useIDAButton.setToolTipText("Use interference dependence in calculation of the slice.");
    _useIDAButton.setSelection(_cfg.isInterferenceDepAnalysisUsed());
    _useIDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_INTERFERENCEDA, _useIDAButton, _cfg));

    // Sets up the composite and buttons pertaining to precision control.
    final Group _natureOfIDAGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
    final GridLayout _gridLayout3 = new GridLayout();
    _gridLayout3.numColumns = 2;
    _natureOfIDAGroup.setLayout(_gridLayout3);
    _natureOfIDAGroup.setText("Precision of Interference dependence");
    _natureOfIDAGroup.setToolTipText("Controls the precision of interference dependence.");

    final GridData _gridData1 = new GridData(GridData.FILL_HORIZONTAL);
    _gridData1.horizontalSpan = 2;
    _natureOfIDAGroup.setLayoutData(_gridData1);

    final Group _precisionGroup = new Group(_natureOfIDAGroup, SWT.SHADOW_ETCHED_IN);
    final GridLayout _gridLayout4 = new GridLayout();
    _gridLayout4.numColumns = 1;
    _precisionGroup.setLayout(_gridLayout4);
    _precisionGroup.setText("Sort of analysis to be used.");
    _precisionGroup.setToolTipText(
        "Controls the precision via  properties inherent to interference.");

    final Button _typedIDA = new Button(_precisionGroup, SWT.RADIO);
    _typedIDA.setText("use type-based analysis");
    _typedIDA.setToolTipText("Only primaries of compatible types will be considered");

    final Button _equivalenceClassBasedEscapeAnalysisBasedIDA =
        new Button(_precisionGroup, SWT.RADIO);
    _equivalenceClassBasedEscapeAnalysisBasedIDA.setText(
        "use equivalence class-based escape analysis");
    _equivalenceClassBasedEscapeAnalysisBasedIDA.setToolTipText(
        "Only primaries of belonging to the same equivalence class will be considered.");

    final Button _symbolBasedEscapeAnalysisBasedIDA = new Button(_precisionGroup, SWT.RADIO);
    _symbolBasedEscapeAnalysisBasedIDA.setText(
        "use symbolic and equivalence class-based escape analysis");
    _symbolBasedEscapeAnalysisBasedIDA.setToolTipText(
        "Only symbolically equivalent primaries that belong to the same equivalence class will be considered.");

    final SelectionListener _sl2 =
        new SelectionListener() {
          public void widgetSelected(final SelectionEvent evt) {
            Object _value = null;

            if (evt.widget == _equivalenceClassBasedEscapeAnalysisBasedIDA) {
              _value = SlicerConfiguration.EQUIVALENCE_CLASS_BASED_INFO;
            } else if (evt.widget == _symbolBasedEscapeAnalysisBasedIDA) {
              _value = SlicerConfiguration.SYMBOL_AND_EQUIVCLS_BASED_INFO;
            } else if (evt.widget == _typedIDA) {
              _value = SlicerConfiguration.TYPE_BASED_INFO;
            }

            if (_value != null) {
              _cfg.setProperty(SlicerConfiguration.NATURE_OF_INTERFERENCE_DA, _value);
            }
          }

          public void widgetDefaultSelected(final SelectionEvent evt) {
            widgetSelected(evt);
          }
        };
    _equivalenceClassBasedEscapeAnalysisBasedIDA.addSelectionListener(_sl2);
    _symbolBasedEscapeAnalysisBasedIDA.addSelectionListener(_sl2);
    _typedIDA.addSelectionListener(_sl2);

    final Object _temp = _cfg.getProperty(SlicerConfiguration.NATURE_OF_INTERFERENCE_DA);

    if (_temp == null || _temp.equals(SlicerConfiguration.SYMBOL_AND_EQUIVCLS_BASED_INFO)) {
      _symbolBasedEscapeAnalysisBasedIDA.setSelection(true);
    } else if (_temp.equals(SlicerConfiguration.EQUIVALENCE_CLASS_BASED_INFO)) {
      _equivalenceClassBasedEscapeAnalysisBasedIDA.setSelection(true);
    } else if (_temp.equals(SlicerConfiguration.TYPE_BASED_INFO)) {
      _typedIDA.setSelection(true);
    }

    // Sets up the buttons that control what auxiliary analysis are used improve precision.
    final Composite _analysisComposite = new Composite(_natureOfIDAGroup, SWT.NONE);
    final RowLayout _rowLayout = new RowLayout();
    _rowLayout.type = SWT.VERTICAL;
    _analysisComposite.setLayout(_rowLayout);

    final GridData _analysisCompositeGridData = new GridData(GridData.FILL_HORIZONTAL);
    _analysisCompositeGridData.verticalAlignment = SWT.TOP;
    _analysisComposite.setLayoutData(_analysisCompositeGridData);

    final Button _useOFAForInterference = new Button(_analysisComposite, SWT.CHECK);
    _useOFAForInterference.setText("use object flow analysis information");
    _useOFAForInterference.setToolTipText("Only aliasing primaries will be considered");
    _useOFAForInterference.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_OFA_FOR_INTERFERENCE_DA, _useOFAForInterference, _cfg));

    _useOFAForInterference.setSelection(_cfg.isOFAUsedForInterference());

    // Links up the buttons via selection listener to control toggling based on the user's decision
    // to use interference DA.
    _useIDAButton.addSelectionListener(
        new SelectionListener() {
          public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent evt) {
            boolean _val = false;

            if (_useIDAButton.getSelection()) {
              _val = true;
            }
            _natureOfIDAGroup.setEnabled(_val);
            _equivalenceClassBasedEscapeAnalysisBasedIDA.setEnabled(_val);
            _typedIDA.setEnabled(_val);
            _symbolBasedEscapeAnalysisBasedIDA.setEnabled(_val);
            _useOFAForInterference.setEnabled(_val);
            _precisionGroup.setEnabled(_val);
          }

          public void widgetDefaultSelected(final SelectionEvent evt) {
            widgetSelected(evt);
          }
        });

    _useOFAForInterference.setSelection(_cfg.isOFAUsedForInterference());
    _useIDAButton.setSelection(_cfg.isInterferenceDepAnalysisUsed());
    _useIDAButton.notifyListeners(SWT.Selection, null);
  }
コード例 #6
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);
  }
コード例 #7
0
  /**
   * Sets up tab corresponding to general dependence in the configurator composite.
   *
   * @param composite to layout the general dependence configuration widgets.
   * @pre composite != null
   */
  private void setupDependenceDepUI(final Composite composite) {
    final RowLayout _rowLayout = new RowLayout(SWT.VERTICAL);
    composite.setLayout(_rowLayout);

    final SlicerConfiguration _cfg = (SlicerConfiguration) configuration;

    final Button _useNonTerminationSensitiveCDAButton = new Button(composite, SWT.CHECK);
    _useNonTerminationSensitiveCDAButton.setText(
        "use non-termination sensitive control dependence");
    _useNonTerminationSensitiveCDAButton.setToolTipText("Loop behaviors are not preserved");
    _useNonTerminationSensitiveCDAButton.setSelection(
        ((Boolean)
                _cfg.getProperty(SlicerConfiguration.NON_TERMINATION_SENSITIVE_CONTROL_DEPENDENCE))
            .booleanValue());
    _useNonTerminationSensitiveCDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.NON_TERMINATION_SENSITIVE_CONTROL_DEPENDENCE,
            _useNonTerminationSensitiveCDAButton,
            _cfg));

    final Button _useExplicitExceptionalExitSensitiveCDAButton = new Button(composite, SWT.CHECK);
    _useExplicitExceptionalExitSensitiveCDAButton.setText(
        "consider explicit exceptional exit points");
    _useExplicitExceptionalExitSensitiveCDAButton.setSelection(
        ((Boolean)
                _cfg.getProperty(
                    SlicerConfiguration.EXPLICIT_EXCEPTIONAL_EXIT_SENSITIVE_CONTROL_DEPENDENCE))
            .booleanValue());
    _useExplicitExceptionalExitSensitiveCDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.EXPLICIT_EXCEPTIONAL_EXIT_SENSITIVE_CONTROL_DEPENDENCE,
            _useExplicitExceptionalExitSensitiveCDAButton,
            _cfg));

    final Button _useCommonUncheckedExceptionsCDAButton = new Button(composite, SWT.CHECK);
    _useCommonUncheckedExceptionsCDAButton.setText(
        "consider common unchecked exception based exit points");
    _useCommonUncheckedExceptionsCDAButton.setSelection(
        ((Boolean)
                _cfg.getProperty(
                    SlicerConfiguration.COMMON_UNCHECKED_EXCEPTIONAL_EXIT_SENSITIVE_CD))
            .booleanValue());
    _useCommonUncheckedExceptionsCDAButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.COMMON_UNCHECKED_EXCEPTIONAL_EXIT_SENSITIVE_CD,
            _useCommonUncheckedExceptionsCDAButton,
            _cfg));

    _useExplicitExceptionalExitSensitiveCDAButton.addSelectionListener(
        new SelectionListener() {
          public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent e) {
            final boolean _t = _useExplicitExceptionalExitSensitiveCDAButton.getSelection();
            _useCommonUncheckedExceptionsCDAButton.setEnabled(_t);
          }

          public void widgetDefaultSelected(final SelectionEvent e) {
            widgetSelected(e);
          }
        });

    final Button _useSyncDepButton = new Button(composite, SWT.CHECK);
    _useSyncDepButton.setText("use synchronization dependence");
    _useSyncDepButton.setToolTipText("Use synchronization dependence in calculation of the slice.");
    _useSyncDepButton.setSelection(_cfg.isSynchronizationDepAnalysisUsed());
    _useSyncDepButton.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.USE_SYNCHRONIZATIONDA, _useSyncDepButton, _cfg));

    final boolean _t = _cfg.isExplicitExceptionalExitSensitiveControlDependenceUsed();
    _useExplicitExceptionalExitSensitiveCDAButton.setSelection(_t);
    _useExplicitExceptionalExitSensitiveCDAButton.notifyListeners(SWT.Selection, null);
  }
コード例 #8
0
  /**
   * Sets up the deadlock preservation part of the UI.
   *
   * @param composite on which to install the UI.
   * @param cfg to be used.
   * @pre composite != null and cfg != null
   */
  private void setupDeadlockUI(final Composite composite, final SlicerConfiguration cfg) {
    final Group _deadlockGroup = new Group(composite, SWT.NONE);
    final GridData _gridData1 = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false);
    _gridData1.horizontalSpan = 2;
    _deadlockGroup.setLayoutData(_gridData1);

    final RowLayout _rowLayout1 = new RowLayout();
    _rowLayout1.type = SWT.VERTICAL;
    _rowLayout1.fill = true;
    _deadlockGroup.setLayout(_rowLayout1);
    _deadlockGroup.setText("Preservation of Deadlocking property");

    final Button _button = new Button(_deadlockGroup, SWT.CHECK);
    _button.setText("Preserve Deadlock");

    final Button _applclasses = new Button(_deadlockGroup, SWT.CHECK);
    _applclasses.setText("Preserve sync constructs in application classes only");
    _applclasses.setSelection(cfg.areSynchronizationsOnlyInAppClassesConsidered());
    _applclasses.addSelectionListener(
        new BooleanPropertySelectionListener(
            SlicerConfiguration.SYNCS_IN_APPLICATION_CLASSES_ONLY, _applclasses, cfg));

    final Group _group1 = new Group(_deadlockGroup, SWT.SHADOW_ETCHED_IN);
    _group1.setText("Deadlock Criteria Selection Strategy");

    final RowLayout _rowLayout2 = new RowLayout();
    _rowLayout2.type = SWT.VERTICAL;
    _group1.setLayout(_rowLayout2);

    final Button _allSyncStrategy = new Button(_group1, SWT.RADIO);
    _allSyncStrategy.setText("All Synchronization constructs");
    _allSyncStrategy.setToolTipText(
        "Synchronization constructs are preserved independent of any property");

    final Button _escapingSyncStrategy = new Button(_group1, SWT.RADIO);
    _escapingSyncStrategy.setText("Escaping Sychronization constructs");
    _escapingSyncStrategy.setToolTipText(
        "Only synchronization constructs involving escaping lock object are preserved.");

    final Button _ctxtsensEscapingSyncStrategy = new Button(_group1, SWT.RADIO);
    _ctxtsensEscapingSyncStrategy.setText("Escaping Sychronization constructs with their contexts");
    _ctxtsensEscapingSyncStrategy.setToolTipText(
        "Calling contexs of the preserved synchronization constructs " + "are considered");

    final SelectionListener _sl4 =
        new SelectionListener() {
          public void widgetSelected(final SelectionEvent evt) {
            Object _value = null;

            if (evt.widget == _ctxtsensEscapingSyncStrategy) {
              _value = SlicerConfiguration.CONTEXT_SENSITIVE_ESCAPING_SYNC_CONSTRUCTS;
            } else if (evt.widget == _escapingSyncStrategy) {
              _value = SlicerConfiguration.ESCAPING_SYNC_CONSTRUCTS;
            } else if (evt.widget == _allSyncStrategy) {
              _value = SlicerConfiguration.ALL_SYNC_CONSTRUCTS;
            }

            if (_value != null) {
              cfg.setProperty(SlicerConfiguration.DEADLOCK_CRITERIA_SELECTION_STRATEGY, _value);
            }
          }

          public void widgetDefaultSelected(final SelectionEvent evt) {
            widgetSelected(evt);
          }
        };
    _allSyncStrategy.addSelectionListener(_sl4);
    _escapingSyncStrategy.addSelectionListener(_sl4);
    _ctxtsensEscapingSyncStrategy.addSelectionListener(_sl4);

    final Object _temp = cfg.getDeadlockCriteriaSelectionStrategy();

    if (_temp.equals(SlicerConfiguration.ALL_SYNC_CONSTRUCTS)) {
      _allSyncStrategy.setSelection(true);
    } else if (_temp.equals(SlicerConfiguration.ESCAPING_SYNC_CONSTRUCTS)) {
      _escapingSyncStrategy.setSelection(true);
    } else if (_temp.equals(SlicerConfiguration.CONTEXT_SENSITIVE_ESCAPING_SYNC_CONSTRUCTS)) {
      _ctxtsensEscapingSyncStrategy.setSelection(true);
    }

    final SelectionListener _sl5 =
        new BooleanPropertySelectionListener(SlicerConfiguration.SLICE_FOR_DEADLOCK, _button, cfg) {
          @Override
          public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent evt) {
            final boolean _value = button.getSelection();
            containingConfiguration.setProperty(id, Boolean.valueOf(_value));
            _group1.setEnabled(_value);
            _applclasses.setEnabled(_value);
            _allSyncStrategy.setEnabled(_value);
            _escapingSyncStrategy.setEnabled(_value);
            _ctxtsensEscapingSyncStrategy.setEnabled(_value);
          }
        };
    _button.addSelectionListener(_sl5);

    _button.setSelection(cfg.getSliceForDeadlock());
    _button.notifyListeners(SWT.Selection, null);
  }