Bug 514634 General Improvement
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/xlia/MoCC2XLIA.java b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/xlia/MoCC2XLIA.java
index e1d174b..b823125 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/xlia/MoCC2XLIA.java
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/xlia/MoCC2XLIA.java
@@ -1678,7 +1678,8 @@
helperPort.varReceivedTokenCount,
helperPort.rateExpression());
- if( ALWAYS_USING_MODE || moccPort.isDeciding() )
+ if( (ALWAYS_USING_MODE || moccPort.isDeciding())
+ && (helperPort.varReceivedMode != null) )
{
assert (helperPort.varReceivedMode != null) :
"Unexpected a null varReceivedMode for port " +
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableConfigProvider.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableConfigProvider.java
index f86f8a9..a56064e 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableConfigProvider.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableConfigProvider.java
@@ -36,7 +36,8 @@
public final String NATURE_TITLE;
public final String VALUE_TITLE;
- public final int SELECTION_WIDTH = 20;
+ public final int ROW_NUMBER_WIDTH = 40;
+ public final int SELECTION_WIDTH = 20;
public final int NATURE_WIDTH;
public final int VALUE_WIDTH;
@@ -52,12 +53,15 @@
public final String[] VALID_NATURES;
+ public final boolean SHOW_ROW_NUMBER;
+
public TraceElementTableConfigProvider(
final String storeKey, final List<String> defaultAttributeValue,
final String title, final String toolTipText, final boolean checkedBoxForColumnZero,
final boolean isNatureUniqueSet, final String natureTitle, final int natureWidth,
final String valueTitle, final int valueWidth, final int heightHint,
- final TraceElementKind[] validTraces, final TraceElementKind deafaultTrace) {
+ final TraceElementKind[] validTraces, final TraceElementKind defaultTrace,
+ final boolean showRowNumber) {
STORE_KEY = storeKey;
DEFAULT_ATTRIBUTE_VALUE = defaultAttributeValue;
@@ -84,19 +88,22 @@
VALID_NATURES[offset] = validTraces[offset].getLiteral();
}
- DEFAULT_TRACE_NATURE = deafaultTrace;
+ DEFAULT_TRACE_NATURE = defaultTrace;
+
+ SHOW_ROW_NUMBER = showRowNumber;
}
public TraceElementTableConfigProvider(final String storeKey,
final List<String> defaultAttributeValue, final String title, final String toolTipText,
final boolean checkedBoxForColumnZero, final String natureTitle, final int natureWidth,
final String valueTitle, final int valueWidth, final int heightHint,
- final TraceElementKind[] validTraces, final TraceElementKind deafaultTrace)
+ final TraceElementKind[] validTraces, final TraceElementKind defaultTrace,
+ final boolean showRowNumber)
{
this(storeKey, defaultAttributeValue, title, toolTipText,
checkedBoxForColumnZero, false, natureTitle,
natureWidth, valueTitle, valueWidth, heightHint,
- validTraces, TraceElementKind.TRANSITION);
+ validTraces, defaultTrace, showRowNumber);
}
@@ -109,7 +116,7 @@
this(storeKey, defaultAttributeValue, title, toolTipText,
checkedBoxForColumnZero, false, natureTitle,
natureWidth, valueTitle, valueWidth, heightHint,
- validTraces, TraceElementKind.TRANSITION);
+ validTraces, TraceElementKind.TRANSITION, false);
}
@@ -362,7 +369,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(7),//HEIGHT_HINT_ROW_7,
- TRANSITION_TRACE_ELEMENT, TraceElementKind.TRANSITION);
+ TRANSITION_TRACE_ELEMENT, TraceElementKind.TRANSITION, true);
}
@@ -379,7 +386,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(7),//HEIGHT_HINT_ROW_7,
- BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.TRANSITION);
+ BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.TRANSITION, true);
}
@@ -397,7 +404,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(5),//HEIGHT_HINT_ROW_5,
- BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.VARIABLE);
+ BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.VARIABLE, false);
}
public static TraceElementTableConfigProvider getControllableTrace(final Font font) {
@@ -410,7 +417,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(5),//HEIGHT_HINT_ROW_5,
- BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.VARIABLE);
+ BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.VARIABLE, false);
}
@@ -427,7 +434,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(7),//HEIGHT_HINT_ROW_7,
- BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.TRANSITION);
+ BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.TRANSITION, false);
}
@@ -444,7 +451,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(5),//HEIGHT_HINT_ROW_5,
- BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.TRANSITION);
+ BEHAVIOR_SELECTION_TRACE_ELEMENT, TraceElementKind.TRANSITION, false);
}
public static TraceElementTableConfigProvider getTestGenerationTraceDetail(final Font font) {
@@ -457,7 +464,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(5),//HEIGHT_HINT_ROW_5,
- SERIALIZER_TRACE_ELEMENT, TraceElementKind.TRANSITION);
+ SERIALIZER_TRACE_ELEMENT, TraceElementKind.TRANSITION, false);
}
public static TraceElementTableConfigProvider getTestGenenrationTraceFormat(final Font font) {
@@ -471,7 +478,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(32),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(10),//HEIGHT_HINT_ROW_10,
- FORMAT_ELEMENT, TraceElementKind.RAW_ATTRIBUTE);
+ FORMAT_ELEMENT, TraceElementKind.RAW_ATTRIBUTE, false);
}
@@ -489,7 +496,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(7),//HEIGHT_HINT_ROW_7,
- SERIALIZER_TRACE_ELEMENT, TraceElementKind.VARIABLE);
+ SERIALIZER_TRACE_ELEMENT, TraceElementKind.VARIABLE, false);
}
public static TraceElementTableConfigProvider getFirstSymbexOutputGraphizFormat(final Font font) {
@@ -502,7 +509,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(32),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(10),//HEIGHT_HINT_ROW_10,
- FORMAT_ELEMENT, TraceElementKind.VARIABLE);
+ FORMAT_ELEMENT, TraceElementKind.VARIABLE, false);
}
@@ -520,7 +527,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(16),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(5),//HEIGHT_HINT_ROW_5,
- SERIALIZER_TRACE_ELEMENT, TraceElementKind.VARIABLE);
+ SERIALIZER_TRACE_ELEMENT, TraceElementKind.VARIABLE, false);
}
@@ -534,7 +541,7 @@
"Nature" , pixelConverter.convertWidthInCharsToPixels(24),
"Element", pixelConverter.convertWidthInCharsToPixels(48),
pixelConverter.convertHeightInCharsToPixels(10),//HEIGHT_HINT_ROW_10,
- FORMAT_ELEMENT, TraceElementKind.VARIABLE);
+ FORMAT_ELEMENT, TraceElementKind.VARIABLE, false);
}
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableViewer.java b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableViewer.java
index 7a42fd7..1ab77e1 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableViewer.java
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/src/org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableViewer.java
@@ -11,6 +11,7 @@
package org.eclipse.efm.execution.configuration.common.ui.editors.table;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
@@ -27,6 +28,7 @@
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
@@ -40,6 +42,7 @@
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
@@ -66,8 +69,11 @@
private TableViewer fTableViewer;
+ private Label fContentDescriptionLabel;
+
private final TraceElementTableConfigProvider fTableConfig;
+ private int ROW_LINE_COLUMN_INDEX;
private int SELECTION_COLUMN_INDEX;
private int NATURE_COLUMN_INDEX;
private int VALUE_COLUMN_INDEX;
@@ -119,6 +125,8 @@
fTableViewer.setInput(traceElements);
addNewElementItemForDoubleClick();
+
+ updateContentDescriptionLabel();
}
public void removeAll() {
@@ -141,6 +149,19 @@
return traceElements;
}
+ public int getElementCount() {
+ return fTableViewer.getTable().getItems().length;
+ }
+
+ protected void updateContentDescriptionLabel() {
+ fContentDescriptionLabel.setText(fTableConfig.TITLE
+ + " (Total: " + getElementCount() + ")");
+
+ fContentDescriptionLabel.setToolTipText(
+ "(Total: " + getElementCount() + ")");
+ }
+
+
/**
* Create the TableViewer Control
* @param parent
@@ -161,7 +182,8 @@
final Composite labelContainer = widgetToolkit.createComposite(
viewForm, font, 1, 1, GridData.FILL_BOTH, 5, 5);
- widgetToolkit.createLabel(labelContainer, fTableConfig.TITLE, 1);
+ fContentDescriptionLabel =
+ widgetToolkit.createLabel(labelContainer, fTableConfig.TITLE, 1);
viewForm.setTopLeft(labelContainer);
final ToolBarManager toolBarManager= new ToolBarManager(SWT.FLAT);
@@ -245,6 +267,8 @@
@Override
public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
super.inputChanged(viewer, oldInput, newInput);
+
+ updateContentDescriptionLabel();
}
} );
// fTableViewer.setLabelProvider(new TraceElementLabelProvider());
@@ -256,7 +280,6 @@
// }
// });
-
//!! // Double click for edit TraceElement value column
// TableViewerFocusCellManager focusCellManager =
// new TableViewerFocusCellManager(fTableViewer,
@@ -315,19 +338,52 @@
// create the columns for the table
private void createColumns(final Composite tableComposite, final Font font) {
+ ROW_LINE_COLUMN_INDEX = -1;
SELECTION_COLUMN_INDEX = -1;
- NATURE_COLUMN_INDEX = 0;
- VALUE_COLUMN_INDEX = 1;
+ NATURE_COLUMN_INDEX = 0;
+ VALUE_COLUMN_INDEX = 1;
- if( fTableConfig.CHECKED_BOX_FOR_COLUMN_ZERO ) {
- SELECTION_COLUMN_INDEX = 0;
- NATURE_COLUMN_INDEX = 1;
- VALUE_COLUMN_INDEX = 2;
+ if( fTableConfig.SHOW_ROW_NUMBER ) {
+ ROW_LINE_COLUMN_INDEX = 0;
+ SELECTION_COLUMN_INDEX = -1;
+ NATURE_COLUMN_INDEX = 1;
+ VALUE_COLUMN_INDEX = 2;
// column for the TraceElement Selection
- final TableViewerColumn viewerColumn = createTableViewerColumn(
- fTableConfig.SELECTION_TITLE, fTableConfig.SELECTION_WIDTH,
- false, SELECTION_COLUMN_INDEX);
+ final TableViewerColumn viewerColumn =
+ createTableViewerColumn("",
+ fTableConfig.ROW_NUMBER_WIDTH,
+ true, ROW_LINE_COLUMN_INDEX, SWT.RIGHT);
+
+ viewerColumn.setEditingSupport(
+ new TraceElementSelectionEditingSupport(this));
+
+ viewerColumn.setLabelProvider( new CellLabelProvider() {
+
+ @Override
+ public void update(final ViewerCell cell) {
+ if( fTableViewer != null ) {
+ final int index =
+ Arrays.asList(fTableViewer.getTable().getItems())
+ .indexOf(cell.getItem());
+ cell.setText("" + (index + 1));
+ }
+ }
+ });
+ }
+
+ if( fTableConfig.CHECKED_BOX_FOR_COLUMN_ZERO ) {
+ SELECTION_COLUMN_INDEX = ROW_LINE_COLUMN_INDEX + 1;
+ NATURE_COLUMN_INDEX = ROW_LINE_COLUMN_INDEX + 2;
+ VALUE_COLUMN_INDEX = ROW_LINE_COLUMN_INDEX + 3;
+
+
+ // column for the TraceElement Selection
+ final TableViewerColumn viewerColumn =
+ createTableViewerColumn(
+ fTableConfig.SELECTION_TITLE,
+ fTableConfig.SELECTION_WIDTH,
+ false, SELECTION_COLUMN_INDEX, SWT.CENTER);
viewerColumn.setEditingSupport(
new TraceElementSelectionEditingSupport(this));
@@ -360,10 +416,13 @@
}
+
// first column is for the TraceElement Nature
TableViewerColumn viewerColumn =
- createTableViewerColumn(fTableConfig.NATURE_TITLE,
- fTableConfig.NATURE_WIDTH, true, NATURE_COLUMN_INDEX);
+ createTableViewerColumn(
+ fTableConfig.NATURE_TITLE,
+ fTableConfig.NATURE_WIDTH,
+ true, NATURE_COLUMN_INDEX, SWT.LEFT);
viewerColumn.setEditingSupport(
new TraceElementNatureEditingSupport(this));
@@ -385,7 +444,7 @@
// second column is for the TraceElement Value
viewerColumn = createTableViewerColumn(fTableConfig.VALUE_TITLE,
- fTableConfig.VALUE_WIDTH, true, VALUE_COLUMN_INDEX);
+ fTableConfig.VALUE_WIDTH, true, VALUE_COLUMN_INDEX, SWT.LEFT);
viewerColumn.setEditingSupport(new TraceElementValueEditingSupport(this));
@@ -425,9 +484,11 @@
private TableViewerColumn createTableViewerColumn(
- final String title, final int bound, final boolean resizable, final int colNumber) {
+ final String title, final int bound,
+ final boolean resizable, final int colNumber, final int style)
+ {
final TableViewerColumn viewerColumn =
- new TableViewerColumn(fTableViewer, SWT.NONE);
+ new TableViewerColumn(fTableViewer, style);
final TableColumn column = viewerColumn.getColumn();
@@ -618,7 +679,9 @@
new TraceElementAddingDialog(this, null, null);
if( addingDialog.open() == Window.OK ) {
- updateLaunchConfigurationDialog();
+ updateContentDescriptionLabel();
+
+ updateLaunchConfigurationDialog();
}
}
@@ -670,6 +733,8 @@
TraceElementKind.UNDEFINED, ADD_NEW_ELEMENT));
}
+ updateContentDescriptionLabel();
+
updateLaunchConfigurationDialog();
}
}
@@ -720,6 +785,8 @@
(selectionIndex + 1));
}
+ updateContentDescriptionLabel();
+
updateLaunchConfigurationDialog();
}
}
@@ -762,6 +829,8 @@
if( selTraceElement.getNature() != TraceElementKind.UNDEFINED ) {
fTableViewer.editElement(selTraceElement, VALUE_COLUMN_INDEX);
+// updateContentDescriptionLabel();
+
updateLaunchConfigurationDialog();
}
}
@@ -800,6 +869,8 @@
fTableViewer.remove( selection.getData() );
}
+ updateContentDescriptionLabel();
+
updateLaunchConfigurationDialog();
}
}
@@ -833,6 +904,8 @@
fTableViewer.getTable().removeAll();
addNewElementItemForDoubleClick();
+ updateContentDescriptionLabel();
+
updateLaunchConfigurationDialog();
}
diff --git a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/IWorkflowConfigurationConstants.java b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/IWorkflowConfigurationConstants.java
index ed46eeb..bb9305e 100644
--- a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/IWorkflowConfigurationConstants.java
+++ b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/IWorkflowConfigurationConstants.java
@@ -1021,20 +1021,18 @@
PLUGIN_LAUNCH_ID + ".ATTR_SYMBEX_OPTION_TEXTUAL_CONFIGURATION"; //$NON-NLS-1$
String DEFAULT_SYMBEX_OPTION_TEXTUAL_CONFIGURATION
- = "symbex 'option' [\n"
- + "\tname_id_separator = \"_\" // default \"#\"\n"
- + "\tnewfresh_param_name_pid = false\n"
- + "\tpretty_printer_var_name = true // default false\n"
- + "\ttime_name_id = '$time'\n"
- + "\ttime_initial_value = 0\n"
- + "\tdelta_name_id = '$delay'\n"
- + "\tdelta_initial_value = 0\n"
- + "\tnode_condition_enabled = false // default false\n"
- + "\tseparation_of_pc_disjunction = false\n"
- + "\tcheck_pathcondition_satisfiability = true\n"
- + "\t//strongly_check_pathcondition_satisfiability = true\n"
- + "\tconstraint_solver = 'CVC4' // Z3\n"
- + "] // end symbex\n"; //$NON-NLS-1$
+ = "name_id_separator = \"_\" // default \"#\"\n"
+ + "newfresh_param_name_pid = false\n"
+ + "pretty_printer_var_name = true // default false\n"
+ + "time_name_id = '$time'\n"
+ + "time_initial_value = 0\n"
+ + "delta_name_id = '$delay'\n"
+ + "delta_initial_value = 0\n"
+ + "node_condition_enabled = false // default false\n"
+ + "separation_of_pc_disjunction = false\n"
+ + "check_pathcondition_satisfiability = true\n"
+ + "//strongly_check_pathcondition_satisfiability = true\n"
+ + "constraint_solver = 'CVC4' // Z3\n"; //$NON-NLS-1$
////////////////////////////////////////////////////////////////////////////
// DEVELOPER: a.k.a. DEVELOPER DEBUG TUNING OPTION
diff --git a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/IWorkflowSpiderConfigurationUtils.java b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/IWorkflowSpiderConfigurationUtils.java
index f2ea03a..70edd45 100644
--- a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/IWorkflowSpiderConfigurationUtils.java
+++ b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/IWorkflowSpiderConfigurationUtils.java
@@ -12,6 +12,9 @@
*******************************************************************************/
package org.eclipse.efm.execution.core;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
public interface IWorkflowSpiderConfigurationUtils {
///////////////////////////////////////////////////////////////////////////
@@ -122,6 +125,100 @@
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
+ Pattern PATTERN_EXECUTION_SPIDER_INIT_POSITIONS = Pattern.compile(
+ SPIDER_TRACE_INIT_PREFIX + "[(](\\d+):(\\d+):(\\d+):(\\d+)[)]"
+ + "(" + SPIDER_COVERAGE_PREFIX + "[(](\\d+):(\\d+)[)])?");
+
+ Pattern PATTERN_EXECUTION_SPIDER_STEP_POSITIONS = Pattern.compile(
+ SPIDER_TRACE_STEP_PREFIX + "\\((\\d+):(\\d+):(\\d+):(\\d+)\\)"
+ + "(" + SPIDER_COVERAGE_PREFIX + "\\((\\d+):(\\d+)\\))?");
+
+ Pattern PATTERN_EXECUTION_SPIDER_STOP_POSITIONS = Pattern.compile(
+ SPIDER_TRACE_INIT_PREFIX + "\\((\\d+):(\\d+):(\\d+):(\\d+)\\)"
+ + "(" + SPIDER_COVERAGE_PREFIX + "\\((\\d+):(\\d+)\\))?");
+
+
+ default int[] matcherSpiderPositions(final String spiderInformations) {
+ if( spiderInformations.length() < 2 ) {
+ return RESCUE_POSITIONS;
+ }
+ else {
+ Matcher matcher = null;
+
+ final char firstChar = spiderInformations.charAt(0);
+ if( firstChar == '$' ) {
+ if( (matcher = PATTERN_EXECUTION_SPIDER_STEP_POSITIONS.matcher(
+ spiderInformations)).find() )
+ {
+ final int[] positions = new int[matcher.groupCount() + 1];
+ for (int i = 1; i <= positions.length; i++) {
+ positions[i] = Integer.parseUnsignedInt(matcher.group(i));
+ }
+ return( positions );
+ }
+ }
+ else if( firstChar == '<' ) {
+ if( (matcher = PATTERN_EXECUTION_SPIDER_INIT_POSITIONS.matcher(
+ spiderInformations)).find() )
+ {
+ final int[] positions = new int[matcher.groupCount() + 1];
+ for (int i = 1; i <= positions.length; i++) {
+ positions[i] = Integer.parseUnsignedInt(matcher.group(i));
+ }
+ return( positions );
+ }
+ }
+ else if( firstChar == '>' ) {
+ if( (matcher = PATTERN_EXECUTION_SPIDER_STOP_POSITIONS.matcher(
+ spiderInformations)).find() )
+ {
+ final int[] positions = new int[matcher.groupCount() + 1];
+ for (int i = 1; i <= positions.length; i++) {
+ positions[i] = Integer.parseUnsignedInt(matcher.group(i));
+ }
+ return( positions );
+ }
+ }
+
+// else
+ {
+ return( splitSpiderPositions(spiderInformations) );
+ }
+ }
+ }
+
+ default int[] splitSpiderPositions(final String spiderInformations) {
+ String[] strPositions;
+
+ final char firstChar = spiderInformations.charAt(0);
+ if( (firstChar == '$') || (firstChar == '<') || (firstChar == '>') ) {
+ strPositions = spiderInformations.split(SPIDER_POSITIONS_SEPARATOR);
+ }
+ else { //if (firstChar == 's')
+ strPositions = spiderInformations.split(OLD_POSITIONS_SEPARATOR);
+ }
+
+ final int[] positions = new int[strPositions.length - 1];
+
+ for (int i = 1; i < strPositions.length; i++) {
+ try {
+ positions[i - 1] = Integer.parseInt(strPositions[i]);
+ } catch(final NumberFormatException e) {
+ //!! NOTHING ELSE !!
+ positions[i - 1] = 0;
+
+ System.out.print( "spiderPosition< unexpected as number > : " );
+ System.out.print( strPositions[i] );
+ System.out.print( " FROM " );
+ System.out.println( spiderInformations );
+ }
+ }
+
+ return( positions );
+ }
+
+
+
String SPIDER_POSITIONS_SEPARATOR = "\\D+";
String OLD_POSITIONS_SEPARATOR = "[, ]*\\w+[:][ ]*|[,/ ]+";
@@ -132,31 +229,11 @@
return RESCUE_POSITIONS;
}
else {
- String[] strPositions;
+// final int[] positions = matcherSpiderPositions(spiderInformations);
+// System.out.print( "MATCHER " + spiderInformations + " --> " );
+// System.out.println( Arrays.toString(positions) );
- final char firstChar = spiderInformations.charAt(0);
- if( (firstChar == '$') || (firstChar == '<') || (firstChar == '>') ) {
- strPositions = spiderInformations.split(SPIDER_POSITIONS_SEPARATOR);
- }
- else { //if (firstChar == 's')
- strPositions = spiderInformations.split(OLD_POSITIONS_SEPARATOR);
- }
-
- final int[] positions = new int[strPositions.length - 1];
-
- for (int i = 1; i < strPositions.length; i++) {
- try {
- positions[i - 1] = Integer.parseInt(strPositions[i]);
- } catch(final NumberFormatException e) {
- //!! NOTHING ELSE !!
- positions[i - 1] = 0;
-
- System.out.print( "spiderPosition< unexpected as number > : " );
- System.out.println( strPositions[i] );
- }
- }
-
- return( positions );
+ return( splitSpiderPositions(spiderInformations) );
}
}
diff --git a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/common/TraceElementCustomImpl.java b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/common/TraceElementCustomImpl.java
index e0a86ce..aa37b8c 100644
--- a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/common/TraceElementCustomImpl.java
+++ b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/common/TraceElementCustomImpl.java
@@ -66,7 +66,7 @@
final Matcher matcher = pattern.matcher(element);
if( matcher.find() ) {
- String kind = matcher.group(1).trim();
+ final String kind = matcher.group(1).trim();
nature = TraceElementKind.get(kind);
if( nature != null ) {
@@ -177,26 +177,33 @@
public void toWriter(final PrettyPrintWriter writer) {
final Object value = getValue();
- writer.appendTab( isSelected() ? "" : UNSELECTION_MARKER );
-
switch( getNature() ) {
case UNDEFINED: {
- writer.commentLine( value );
+// if( (value instanceof String)
+// && (((String) value).indexOf('=') > 0) )
+// {
+// writer.appendTabEol( value.toString() );
+// }
+// else {
+ writer.commentLine( value );
+// }
break;
}
case TIPS: {
- writer.append("//").appendEol( value.toString() );
+ writer.appendTab("//").appendEol( value.toString() );
break;
}
case RAW_ATTRIBUTE: {
- writer.appendEol( value.toString() );
+ writer.appendTab( isSelected() ? "" : UNSELECTION_MARKER )
+ .appendEol( value.toString() );
break;
}
case CONDITION:
case DECISION:
case FORMULA: {
- writer.append( getNature().getLiteral() ).append( " = " );
+ writer.appendTab( isSelected() ? "" : UNSELECTION_MARKER )
+ .append( getNature().getLiteral() ).append( " = " );
if( value instanceof String ) {
final String str = value.toString();
@@ -214,7 +221,8 @@
}
default: {
- writer.append( getNature().getLiteral() ).append( " = " );
+ writer.appendTab( isSelected() ? "" : UNSELECTION_MARKER )
+ .append( getNature().getLiteral() ).append( " = " );
if( value instanceof String ) {
final String str = value.toString();
diff --git a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SequenceDiagramTraceSerializerWorkerCustomImpl.java b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SequenceDiagramTraceSerializerWorkerCustomImpl.java
index 8d4d5e5..2ae2f28 100644
--- a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SequenceDiagramTraceSerializerWorkerCustomImpl.java
+++ b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SequenceDiagramTraceSerializerWorkerCustomImpl.java
@@ -124,7 +124,7 @@
"format", configuration,
ATTR_SEQUENCE_DIAGRAM_TRACE_FORMAT_ELEMENT_LIST,
DEFAULT_SEQUENCE_DIAGRAM_TRACE_FORMAT_ELEMENT_LIST,
- TraceElementKind.UNDEFINED);
+ TraceElementKind.RAW_ATTRIBUTE);
serializerWorker.setFormat( format );
@@ -173,7 +173,7 @@
TraceSpecificationCustomImpl.create(
"trace", configuration,
ATTR_BASIC_TRACE_DETAILS_ELEMENT_LIST,
- TraceElementKind.UNDEFINED);
+ TraceElementKind.RAW_ATTRIBUTE);
boolean enabled;
diff --git a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SymbexGraphicSerializerWorkerCustomImpl.java b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SymbexGraphicSerializerWorkerCustomImpl.java
index f53ed43..df8faaf 100644
--- a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SymbexGraphicSerializerWorkerCustomImpl.java
+++ b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SymbexGraphicSerializerWorkerCustomImpl.java
@@ -82,7 +82,7 @@
"format", configuration,
ATTR_FIRST_SYMBEX_OUTPUT_GRAPHVIZ_FORMAT_SPEC,
DEFAULT_SYMBEX_OUTPUT_GRAPHVIZ_FORMAT_SPEC,
- TraceElementKind.UNDEFINED);
+ TraceElementKind.RAW_ATTRIBUTE);
serializerWorker.setFormat( format );
@@ -138,7 +138,7 @@
"format", configuration,
ATTR_SECOND_SYMBEX_OUTPUT_GRAPHVIZ_FORMAT_SPEC,
DEFAULT_SYMBEX_OUTPUT_GRAPHVIZ_FORMAT_SPEC,
- TraceElementKind.UNDEFINED);
+ TraceElementKind.RAW_ATTRIBUTE);
serializerWorker.setFormat( format );
diff --git a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SymbexGraphvizSerializerWorkerCustomImpl.java b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SymbexGraphvizSerializerWorkerCustomImpl.java
index c9ae222..2aa36b7 100644
--- a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SymbexGraphvizSerializerWorkerCustomImpl.java
+++ b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/SymbexGraphvizSerializerWorkerCustomImpl.java
@@ -82,7 +82,7 @@
"format", configuration,
ATTR_FIRST_SYMBEX_OUTPUT_GRAPHVIZ_FORMAT_SPEC,
DEFAULT_SYMBEX_OUTPUT_GRAPHVIZ_FORMAT_SPEC,
- TraceElementKind.UNDEFINED);
+ TraceElementKind.RAW_ATTRIBUTE);
serializerWorker.setFormat( format );
@@ -138,7 +138,7 @@
"format", configuration,
ATTR_SECOND_SYMBEX_OUTPUT_GRAPHVIZ_FORMAT_SPEC,
DEFAULT_SYMBEX_OUTPUT_GRAPHVIZ_FORMAT_SPEC,
- TraceElementKind.UNDEFINED);
+ TraceElementKind.RAW_ATTRIBUTE);
serializerWorker.setFormat( format );
diff --git a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/TTCNTraceSerializerWorkerCustomImpl.java b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/TTCNTraceSerializerWorkerCustomImpl.java
index 7de28a7..ea96aa6 100644
--- a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/TTCNTraceSerializerWorkerCustomImpl.java
+++ b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/serializer/TTCNTraceSerializerWorkerCustomImpl.java
@@ -28,7 +28,7 @@
implements IWorkflowConfigurationConstants {
protected TTCNTraceSerializerWorkerCustomImpl(
- Director director, String name) {
+ final Director director, final String name) {
super();
setDirector(director);
@@ -36,7 +36,7 @@
}
protected TTCNTraceSerializerWorkerCustomImpl(
- Director director, String name, String description) {
+ final Director director, final String name, final String description) {
super();
setDirector(director);
@@ -46,9 +46,9 @@
public static TTCNTraceSerializerWorkerCustomImpl create(
- Director director, ILaunchConfiguration configuration) {
+ final Director director, final ILaunchConfiguration configuration) {
- TTCNTraceSerializerWorkerCustomImpl serializerWorker =
+ final TTCNTraceSerializerWorkerCustomImpl serializerWorker =
new TTCNTraceSerializerWorkerCustomImpl(
director, "TTCN_trace_generator");
@@ -62,17 +62,17 @@
// serializerWorker.setFormat( format );
//
//
- List<String> specification = DEFAULT_TTCN_TRACE_SPECIFICATION;
+ final List<String> specification = DEFAULT_TTCN_TRACE_SPECIFICATION;
- TraceSpecificationCustomImpl trace =
+ final TraceSpecificationCustomImpl trace =
TraceSpecificationCustomImpl.create("trace",
- specification, TraceElementKind.UNDEFINED);
+ specification, TraceElementKind.RAW_ATTRIBUTE);
// TraceSpecificationCustomImpl trace =
// TraceSpecificationCustomImpl.create(
// "trace", configuration,
// ATTR_TTCN_TRACE_SPECIFICATION,
// DEFAULT_TTCN_TRACE_SPECIFICATION,
-// TraceElementKind.UNDEFINED);
+// TraceElementKind.RAW_ATTRIBUTE);
serializerWorker.setTrace( trace );
@@ -81,7 +81,7 @@
try {
str = configuration.getAttribute(
ATTR_TTCN_FOLDER_NAME, DEFAULT_TTCN_FOLDER_NAME);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_FOLDER_NAME;
@@ -93,7 +93,7 @@
enabledCustomization = configuration.getAttribute(
ATTR_TTCN_ENABLED_CUSTOMIZATION,
DEFAULT_TTCN_ENABLED_CUSTOMIZATION);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
enabledCustomization = DEFAULT_TTCN_ENABLED_CUSTOMIZATION;
@@ -108,7 +108,7 @@
str = configuration.getAttribute(
ATTR_TTCN_CONTROL_MODULE_NAME,
DEFAULT_TTCN_CONTROL_MODULE_NAME);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_CONTROL_MODULE_NAME;
@@ -120,7 +120,7 @@
str = configuration.getAttribute(
ATTR_TTCN_DECLARATIONS_MODULE_NAME,
DEFAULT_TTCN_DECLARATIONS_MODULE_NAME);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_DECLARATIONS_MODULE_NAME;
@@ -132,7 +132,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TEMPLATES_MODULE_NAME,
DEFAULT_TTCN_TEMPLATE_MODULE_NAME);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TEMPLATE_MODULE_NAME;
@@ -145,7 +145,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TESTCASES_MODULE_NAME,
DEFAULT_TTCN_TESTCASES_MODULE_NAME);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TESTCASES_MODULE_NAME;
@@ -156,7 +156,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TESTCASES_STARTING_WRAPPER,
DEFAULT_TTCN_TESTCASES_STARTING_WRAPPER);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TESTCASES_STARTING_WRAPPER;
@@ -167,7 +167,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TESTCASES_ENDING_WRAPPER,
DEFAULT_TTCN_TESTCASES_ENDING_WRAPPER);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TESTCASES_ENDING_WRAPPER;
@@ -178,7 +178,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TESTCASES_SENDING_WRAPPER,
DEFAULT_TTCN_TESTCASES_SENDING_WRAPPER);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TESTCASES_SENDING_WRAPPER;
@@ -189,7 +189,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TESTCASES_RECEIVING_WRAPPER,
DEFAULT_TTCN_TESTCASES_RECEIVING_WRAPPER);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TESTCASES_RECEIVING_WRAPPER;
@@ -202,7 +202,7 @@
str = configuration.getAttribute(
ATTR_TTCN_ADAPTATION_MODULE_NAME,
DEFAULT_TTCN_ADAPTATION_MODULE_NAME);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_ADAPTATION_MODULE_NAME;
@@ -213,7 +213,7 @@
str = configuration.getAttribute(
ATTR_TTCN_ADAPTATION_UTILS_IMPL,
DEFAULT_TTCN_ADAPTATION_UTILS_IMPL);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_ADAPTATION_UTILS_IMPL;
@@ -224,7 +224,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TESTCASES_STARTING_ENDING_IMPL,
DEFAULT_TTCN_TESTCASES_STARTING_ENDING_IMPL);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TESTCASES_STARTING_ENDING_IMPL;
@@ -235,7 +235,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TESTCASES_SENDING_IMPL,
DEFAULT_TTCN_TESTCASES_SENDING_IMPL);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TESTCASES_SENDING_IMPL;
@@ -246,7 +246,7 @@
str = configuration.getAttribute(
ATTR_TTCN_TESTCASES_RECEIVING_IMPL,
DEFAULT_TTCN_TESTCASES_RECEIVING_IMPL);
- } catch( CoreException e ) {
+ } catch( final CoreException e ) {
e.printStackTrace();
str = DEFAULT_TTCN_TESTCASES_RECEIVING_IMPL;
@@ -258,7 +258,7 @@
}
- public void toWriter(PrettyPrintWriter writer) {
+ public void toWriter(final PrettyPrintWriter writer) {
writer.commentLine( getComment() );
writer.appendTab( "serializer#symbex#trace#ttcn" );
@@ -274,9 +274,9 @@
writer.appendEol( " {" );
- PrettyPrintWriter writer2 = writer.itab2();
+ final PrettyPrintWriter writer2 = writer.itab2();
- ManifestCustomImpl manifest = (ManifestCustomImpl) getManifest();
+ final ManifestCustomImpl manifest = (ManifestCustomImpl) getManifest();
if( manifest != null ) {
manifest.toWriter(writer2);
}
@@ -379,13 +379,13 @@
writer2.appendTabEol( "] // end implementation" );
- TraceSpecificationCustomImpl format =
+ final TraceSpecificationCustomImpl format =
(TraceSpecificationCustomImpl) getFormat();
if( format != null ) {
format.toWriter( writer2 );
}
- TraceSpecificationCustomImpl trace =
+ final TraceSpecificationCustomImpl trace =
(TraceSpecificationCustomImpl) getTrace();
if( trace != null ) {
trace.toWriter(writer2);
diff --git a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/test/OfflineTestWorkerCustomImpl.java b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/test/OfflineTestWorkerCustomImpl.java
index a7f8744..eab633b 100644
--- a/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/test/OfflineTestWorkerCustomImpl.java
+++ b/execution/org.eclipse.efm.execution.core/src/org/eclipse/efm/execution/core/workflow/test/OfflineTestWorkerCustomImpl.java
@@ -150,6 +150,7 @@
writer.appendTab2Eol( "property [" )
.appendTab3Eol( "format = \"BASIC#XLIA\"" )
+ .appendTab3Eol( "slice = true" )
.appendTab3Eol( "trace#folding = true" )
.appendTab3Eol( "step#scheduler = '|i|'" )
.appendTab3Eol( "trace#reporting#size = 7" )
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/.gitignore b/execution/org.eclipse.efm.execution.launchconfiguration/.gitignore
index bbdfc34..35139e0 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/.gitignore
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/.gitignore
@@ -1,2 +1,4 @@
/bin/
*.md.html
+/plugin-orig.xml
+/plugin_menu_test.xml
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/action/ProfileExecutionAction.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/action/ProfileExecutionAction.java
index 9f46695..404f6b0 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/action/ProfileExecutionAction.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/action/ProfileExecutionAction.java
@@ -158,6 +158,10 @@
addActionToMenu(fMenu, new ProfileExecutionCountAction(
"Profile Execution until Terminate Action", Integer.MAX_VALUE),
accel++);
+
+ addActionToMenu(fMenu, new ProfileExecutionCountAction(
+ "Profile Execution up to FULL-Coverage", -1),
+ accel++);
new Separator("Profile_N_Executions").fill(fMenu, -1); //$NON-NLS-1$
addActionToMenu(fMenu, new ProfileExecutionCountAction(10), accel++);
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/console/SymbexSpiderConsolePage.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/console/SymbexSpiderConsolePage.java
index 1bb4b8e..f28328f 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/console/SymbexSpiderConsolePage.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/console/SymbexSpiderConsolePage.java
@@ -698,11 +698,11 @@
fSpider.resetSpider(
fSymbexWorkflowProvider
.getSymbexlAnalysisProfileName(),
- (bounds.length == 6)
+ (bounds.length >= 6)
? SPIDER_GEOMETRY.PENTAGON
: SPIDER_GEOMETRY.TETRAGON );
- initSpider( spiderPositions(traceLine) );
+ initSpider( bounds );
disabledSpiderTrace = false;
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/sew/ProfileSymbexWorkflow.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/sew/ProfileSymbexWorkflow.java
index 168e85e..9c4409c 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/sew/ProfileSymbexWorkflow.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/sew/ProfileSymbexWorkflow.java
@@ -15,6 +15,7 @@
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.Calendar;
import org.eclipse.core.runtime.IPath;
import org.eclipse.efm.execution.core.IWorkflowSpiderConfigurationUtils;
@@ -30,9 +31,16 @@
protected int fExecutionCount;
+ protected boolean fStopWhenFullyCoverage;
+
protected long fTotalExecutionTime_COV;
protected long fTotalExecutionTime_NOT;
+ protected long fTotalExecutionStepCount;
+ protected long fTotalExecutionContextCount;
+ protected long fTotalExecutionHeightMax;
+ protected long fTotalExecutionWidthMax;
+
protected boolean fFullyCoverageFlag;
protected int fFullyCoverageCount;
@@ -41,15 +49,31 @@
final SymbexWorkflowProvider symbexWorkflow, final int executionCount) {
super(symbexWorkflow);
+ final Calendar CALENDAR = Calendar.getInstance();
this.fReportFilePath = symbexWorkflow.getSymbexWorkflowPath()
- .removeFileExtension().addFileExtension("profile.csv");
+ .removeFileExtension().addFileExtension(
+ "profile_" + CALENDAR.get(Calendar.HOUR_OF_DAY)
+ + "_" + CALENDAR.get(Calendar.MINUTE) + ".csv");
this.fLoggerWriter = null;
- this.fExecutionCount = executionCount;
+ if( executionCount > 0 ) {
+ this.fExecutionCount = executionCount;
+ this.fStopWhenFullyCoverage = false;
+ }
+ else {
+ this.fExecutionCount = Integer.MAX_VALUE;
+ this.fStopWhenFullyCoverage = true;
+ }
- this.fTotalExecutionTime_COV = 0;
- this.fTotalExecutionTime_NOT = 0;
+
+ this.fTotalExecutionTime_COV = 0;
+ this.fTotalExecutionTime_NOT = 0;
+
+ this.fTotalExecutionStepCount = 0;
+ this.fTotalExecutionContextCount = 0;
+ this.fTotalExecutionHeightMax = 0;
+ this.fTotalExecutionWidthMax = 0;
this.fFullyCoverageFlag = false;
this.fFullyCoverageCount = 0;
@@ -65,7 +89,7 @@
*/
@Override
public String getSymbexlAnalysisProfileName() {
- return "PROFILE EXECUTION: " + super.fIndex + " / " + this.fExecutionCount;
+ return "PROFILING EXECUTION: " + super.fIndex + " / " + this.fExecutionCount;
}
/*
@@ -97,7 +121,10 @@
@Override
public boolean hasNext() {
- return (super.fIndex <= this.fExecutionCount) ;
+ if( this.fStopWhenFullyCoverage && fFullyCoverageFlag) {
+ return false;
+ }
+ return (super.fIndex <= this.fExecutionCount);
}
@Override
@@ -135,38 +162,122 @@
public void logHeader(final PrintWriter logger) {
logger.print( "Index" );
logger.print( CSV_SEPARATOR );
+
logger.print( "Coverage" );
logger.print( CSV_SEPARATOR );
+
logger.print( "Step" );
logger.print( CSV_SEPARATOR );
+ logger.print( "Context" );
+ logger.print( CSV_SEPARATOR );
+ logger.print( "Height" );
+ logger.print( CSV_SEPARATOR );
logger.print( "Execution Time" );
logger.println();
logger.flush();
- logger.flush();
+ }
+
+ public void reportStatistic(final PrintWriter logger) {
+ logger.println();
+
+ logger.print( "Average Step" );
+ logger.print( CSV_SEPARATOR );
+
+ logger.print( "Context" );
+ logger.print( CSV_SEPARATOR );
+
+ logger.print( "Height" );
+ logger.print( CSV_SEPARATOR );
+
+ logger.print( " Width" );
+ logger.print( CSV_SEPARATOR );
+
+ logger.print( "100% Time" );
+ logger.print( CSV_SEPARATOR );
+
+ logger.print( "@->Date" );
+
+ logger.println();
+
+ logger.format( "%12.1f",
+ (double)this.fTotalExecutionStepCount / this.fFullyCoverageCount );
+ logger.print( CSV_SEPARATOR );
+
+ logger.format( "%7.1f",
+ (double)this.fTotalExecutionContextCount / this.fFullyCoverageCount );
+ logger.print( CSV_SEPARATOR );
+
+ logger.format( "%6.1f",
+ (double)this.fTotalExecutionHeightMax / this.fFullyCoverageCount );
+ logger.print( CSV_SEPARATOR );
+
+ logger.format( "%6.1f",
+ (double)this.fTotalExecutionWidthMax / this.fFullyCoverageCount );
+ logger.print( CSV_SEPARATOR );
+
+
+ logger.format( "%9.1f",
+ (double)this.fTotalExecutionTime_COV / this.fFullyCoverageCount );
+ logger.print( CSV_SEPARATOR );
+
+ logger.format( "%tT", Calendar.getInstance().getTime() );
+
+ logger.println();
+
}
@Override
public void finalize() {
+ reportStatistic(fLoggerWriter);
+
fLoggerWriter.println();
fLoggerWriter.print( "Total : " );
- fLoggerWriter.println( this.fExecutionCount );
+ fLoggerWriter.println( super.fIndex - 1 );//Math.min(this.fExecutionCount, super.fIndex) );
fLoggerWriter.print( "100 % : " );
fLoggerWriter.println( this.fFullyCoverageCount );
+
+ fLoggerWriter.print( "Average Execution Step Count : " );
+ fLoggerWriter.println(
+ (double)this.fTotalExecutionStepCount / this.fFullyCoverageCount );
+
+ fLoggerWriter.println();
+
+ fLoggerWriter.print( "Average Execution Context Count: " );
+ fLoggerWriter.println(
+ (double)this.fTotalExecutionContextCount / this.fFullyCoverageCount );
+
+ fLoggerWriter.println();
+
+ fLoggerWriter.print( "Average Execution Height: " );
+ fLoggerWriter.println(
+ (double)this.fTotalExecutionHeightMax / this.fFullyCoverageCount );
+
+ fLoggerWriter.print( "Average Execution Width : " );
+ fLoggerWriter.println(
+ (double)this.fTotalExecutionWidthMax / this.fFullyCoverageCount );
+
+ fLoggerWriter.println();
+
fLoggerWriter.print( "Average Fully Coverage Time: " );
- fLoggerWriter.println( (double)fTotalExecutionTime_COV / this.fFullyCoverageCount );
+ fLoggerWriter.println(
+ (double)this.fTotalExecutionTime_COV / this.fFullyCoverageCount );
fLoggerWriter.print( "Average Non Coverage Time : " );
- fLoggerWriter.println( (double)fTotalExecutionTime_NOT /
+ fLoggerWriter.println( (double)this.fTotalExecutionTime_NOT /
(this.fExecutionCount - this.fFullyCoverageCount) );
+ fLoggerWriter.println();
+
+ fLoggerWriter.println( Calendar.getInstance().getTime() );
+
+
fLoggerWriter.close();
}
-
/*
* LOGGING
*/
@@ -193,6 +304,11 @@
++this.fFullyCoverageCount;
this.fTotalExecutionTime_COV += super.fExecutionTime;
+ this.fTotalExecutionStepCount += fExecutionStepCount;
+ this.fTotalExecutionContextCount += fExecutionContextCount;
+ this.fTotalExecutionHeightMax += fExecutionHeightMax;
+ this.fTotalExecutionWidthMax += fExecutionWidthMax;
+
// Force l'arrêt avec hasNext() --> return (super.fIndex < this.fExecutionCount) ;
// super.fIndex = this.fExecutionCount;
}
@@ -207,15 +323,37 @@
public void logSymbex(final PrintWriter logger) {
logger.format( "%5d" , super.fIndex );
logger.print( CSV_SEPARATOR );
- logger.format( "%8s" , (this.fFullyCoverageFlag ? "YES" : "NO") );
+
+ logger.format( "%8s" , (this.fFullyCoverageFlag ? "100 %"
+ : super.fCoverageCount + " / " + super.fCoverageTotal) );
logger.print( CSV_SEPARATOR );
- logger.format( "%4d" , super.fExecutionStepCount - 1 );
+
+ logger.format( "%4d" , super.fExecutionStepCount );
+ logger.print( CSV_SEPARATOR );
+
+ logger.format( "%7d" , super.fExecutionContextCount );
+ logger.print( CSV_SEPARATOR );
+
+ logger.format( "%6d" , super.fExecutionHeightMax );
logger.print( CSV_SEPARATOR );
logger.format( "%11d" , super.fExecutionTime );
logger.print( " ms" );
- logger.println();
+ if( ((super.fIndex % 5) == 0) && ((super.fIndex < this.fExecutionCount)) ) {
+ logger.println();
+
+ reportStatistic(logger);
+ logger.flush();
+
+ logger.println();
+ logHeader(fLoggerWriter);
+ }
+ else {
+ logger.println();
+ }
+
+ logger.flush();
logger.flush();
}
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/sew/SymbexWorkflowProvider.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/sew/SymbexWorkflowProvider.java
index 968bf1d..30b26f8 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/sew/SymbexWorkflowProvider.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/job/sew/SymbexWorkflowProvider.java
@@ -55,6 +55,9 @@
protected long fExecutionHeightMax;
protected long fExecutionWidthMax;
+ protected long fCoverageCount;
+ protected long fCoverageTotal;
+
protected long fExecutionTime;
protected long fDeadlockCount;
@@ -262,6 +265,9 @@
this.fExecutionHeightMax = 0;
this.fExecutionWidthMax = 0;
+ this.fCoverageCount = 0;
+ this.fCoverageTotal = 0;
+
this.fExecutionTime = 0;
this.fDeadlockCount = 0;
@@ -406,7 +412,10 @@
*/
final static Pattern PATTERN_EXECUTION_STOP_STATS = Pattern.compile(
"stop:\\s*(\\d+)\\s*,\\s*context:\\s*(\\d+)\\s*,"
- + "\\s*height:\\s*(\\d+)\\s*,\\s*width:\\s*(\\d+).*");
+ + "\\s*height:\\s*(\\d+)\\s*,\\s*width:\\s*(\\d+)(.*)");
+
+ final static Pattern PATTERN_EXECUTION_COVERAGE_STOP_STATS = Pattern.compile(
+ ".+coverage:\\s*(\\d+)\\s*/\\s*(\\d+)\\s*");
final static Pattern PATTERN_EXECUTION_TIME = Pattern.compile(
"\\$time<\\s*(\\d+)\\s*ms.+");
@@ -458,6 +467,12 @@
this.fExecutionContextCount = Integer.parseUnsignedInt( matcher.group(2) );
this.fExecutionHeightMax = Integer.parseUnsignedInt( matcher.group(3) );
this.fExecutionWidthMax = Integer.parseUnsignedInt( matcher.group(4) );
+
+ final String rest = matcher.group(5);
+ if( (matcher = PATTERN_EXECUTION_COVERAGE_STOP_STATS.matcher(rest)).find() ) {
+ this.fCoverageCount = Integer.parseUnsignedInt( matcher.group(1) );
+ this.fCoverageTotal = Integer.parseUnsignedInt( matcher.group(2) );
+ }
}
else if( (matcher = PATTERN_EXECUTION_TIME.matcher(line)).find() ) {
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/SymbexOptionTab.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/SymbexOptionTab.java
index 8d89de1..5821673 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/SymbexOptionTab.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/tabs/SymbexOptionTab.java
@@ -28,6 +28,6 @@
@Override
public String getName() {
- return "SymbEx << INCUBATION >>";
+ return "SymbEx";
}
}