Refactor checkers
diff --git a/plugins/org.polarsys.chess.checkers/META-INF/MANIFEST.MF b/plugins/org.polarsys.chess.checkers/META-INF/MANIFEST.MF
index d0651ae..2b9f476 100644
--- a/plugins/org.polarsys.chess.checkers/META-INF/MANIFEST.MF
+++ b/plugins/org.polarsys.chess.checkers/META-INF/MANIFEST.MF
@@ -23,7 +23,8 @@
org.eclipse.gmf.runtime.common.ui.services,
org.eclipse.papyrus.views.modelexplorer,
org.polarsys.chess.contracts.profile,
- org.eclipse.emf.common
+ org.eclipse.emf.common,
+ org.eclipse.xtext
Export-Package: org.polarsys.chess.checkers,
org.polarsys.chess.checkers.core.checkerManager,
org.polarsys.chess.checkers.core.impl
diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/NameDistance.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/NameDistance.java
index 0516012..94da2ab 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/NameDistance.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/NameDistance.java
@@ -9,6 +9,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
import org.polarsys.chess.checkers.core.checkerManager.Checker;
import org.polarsys.chess.checkers.core.checkerManager.CheckerMessage;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
@@ -136,12 +137,7 @@
* @return a list of warnings
*/
private List<CheckerMessage> processElements(EList<NamedElement> elements) {
- List<CheckerMessage> warnings = new ArrayList<CheckerMessage>();
-
-// int k = 0;
-// for (NamedElement element : elements) {
-// System.out.println(k++ + ": " + element.getName());
-// }
+ List<CheckerMessage> messages = new ArrayList<CheckerMessage>();
for (int i = 0; i < elements.size(); i++) {
final NamedElement first = elements.get(i);
@@ -158,7 +154,7 @@
if (distance == 0) {
final String msg = equalsMsg(first, second);
- warnings.add(new CheckerMessage(msg, 2, first, unifiedName));
+ messages.add(createMessage(msg, 2, first, unifiedName));
}
if (distance <= threshold) {
similarNames.add(second.getName());
@@ -168,10 +164,10 @@
// If some similarities are found, store the entry in the warnings
if (similarNames.size() > 0) {
final String msg = similarMsg(first, similarNames);
- warnings.add(new CheckerMessage(msg, 1, first, unifiedName));
+ messages.add(createMessage(msg, 1, first, unifiedName));
}
}
- return warnings;
+ return messages;
}
protected String equalsMsg(NamedElement first, NamedElement second) {
@@ -255,11 +251,12 @@
return cost[len0 - 1];
}
+ protected CheckerMessage createMessage(String msg, int severity, EObject element, String unifiedName) {
+ return new CheckerMessage(msg, severity, element, unifiedName);
+ }
+
@Override
public void init() throws Exception {
systemViewPackage = EntityUtil.getInstance().getCurrentSystemView();
-
- //TODO: aprire esattamente il progetto corretto, dove sono quando lancio il check? Devo essere su un progetto,
- // e quello viene analizzato
}
}
diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/StateStatus.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/StateStatus.java
index 61adb2d..5cfb952 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/StateStatus.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/StateStatus.java
@@ -9,6 +9,7 @@
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.Region;
@@ -19,6 +20,13 @@
import org.polarsys.chess.checkers.core.checkerManager.CheckerMessage;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
+/**
+ * Two checkers that detect unreachable states and states without transitions to other
+ * states, inside a StateMachine.
+ *
+ * @author cristofo
+ *
+ */
public class StateStatus extends Checker {
private Package systemViewPackage;
private static final Logger logger = Logger.getLogger(StateStatus.class);
@@ -120,7 +128,7 @@
}
if (dead) {
final String msg = deadMsg(state, block);
- errors.add(new CheckerMessage(msg, 2, state, unifiedName));
+ errors.add(createMessage(msg, 2, state, unifiedName));
deadStates.add(state.getName());
}
@@ -171,7 +179,7 @@
}
if (unreachable) {
final String msg = unreachableMsg(state, block);
- errors.add(new CheckerMessage(msg, 2, state, unifiedName));
+ errors.add(createMessage(msg, 2, state, unifiedName));
unreachableStates.add(state.getName());
}
}
@@ -246,13 +254,13 @@
if ((dead && stateCounter > 2)) {
final String msg = deadMsg(state, block);
- errors.add(new CheckerMessage(msg, 2, state, unifiedName));
+ errors.add(createMessage(msg, 2, state, unifiedName));
deadStates.add(state.getName());
}
if ((unreachable)) {
final String msg = unreachableMsg(state, block);
- errors.add(new CheckerMessage(msg, 2, state, unifiedName));
+ errors.add(createMessage(msg, 2, state, unifiedName));
unreachableStates.add(state.getName());
}
}
@@ -272,6 +280,10 @@
return errors;
}
+ protected CheckerMessage createMessage(String msg, int severity, EObject state, String unifiedName) {
+ return new CheckerMessage(msg, severity, state, unifiedName);
+ }
+
protected String deadMsg(Vertex state, Class block) {
return "The state '" + state.getName() + "' of block '" +
block.getName() + "' does not have any transitions to other states";