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