Add EPL 2.0 license to checkers plugin.

Change-Id: I1300962170442c6ffcf78da54ee425cde7b23adf
diff --git a/plugins/org.polarsys.chess.checkers/about.html b/plugins/org.polarsys.chess.checkers/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/plugins/org.polarsys.chess.checkers/about.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>About</title>
+</head>
+<body lang="EN-US">
+	<h2>About This Content</h2>
+
+	<p>November 30, 2017</p>
+	<h3>License</h3>
+
+	<p>
+		The Eclipse Foundation makes available all content in this plug-in
+		(&quot;Content&quot;). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
+		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		(&quot;Redistributor&quot;) and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a
+			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
index 6b0973d..6e80da9 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
@@ -1,136 +1,143 @@
-package org.polarsys.chess.checkers.core.checkerManager;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.log4j.Logger;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
-import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
-
-public abstract class Checker {
-
-	private static final Logger logger = Logger.getLogger(Checker.class);
-
-//	private static String pluginID = "org.polarsys.chess.checkers";
-
-	public final String unifiedName;
-	protected final Set<String> checkerTags;
-	protected final int registerPriority;
-	private ArrayList<Exception> errors = new ArrayList<Exception>();
-
-	protected Checker(String unifiedName, Set<String> checkerTags) {
-		this(unifiedName, checkerTags, 0);
-	}
-
-	public Checker(String unifiedName, Set<String> checkerTags, int registerPriority) {
-
-		this.unifiedName = unifiedName;
-		this.checkerTags = checkerTags;
-		this.registerPriority = registerPriority;
-
-		CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();
-		logger.debug("register " + unifiedName);
-		checkerManager.getCheckersContainter().register(this);
-	}
-
-	public abstract List<CheckerMessage> check(IProgressMonitor monitor) throws Exception;
-
-	public abstract void init() throws Exception;
-
-	public void asyncCheck(boolean isFirstChecker) throws Exception {
-		
-		CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();
-		
-		org.eclipse.uml2.uml.Package pack = EntityUtil.getInstance().getCurrentSystemView();
-		if(pack==null){
-			IFile file = EntityUtil.getInstance().getCurrentIFile();
-			System.out.println("file: "+file);
-			EntityUtil.getInstance().openCurrentModelIntoEditor(file);			
-		}
-		
-		IFile iFile = WorkspaceSynchronizer.getFile(EntityUtil.getInstance().getCurrentSystemView().eResource());
-		init();
-
-		logger.debug("running checker: "+unifiedName);
-		Job job = new Job("Checker Manager: " + unifiedName) {
-			@Override
-			protected IStatus run(IProgressMonitor monitor) {
-				try {
-					errors = new ArrayList<Exception>();
-					List<CheckerMessage> messages = check(monitor);
-					if (messages != null) {
-//						checkerManager.deleteMarkers(iFile, unifiedName);							
-						checkerManager.deleteProjectMarkers(iFile.getProject(), unifiedName);
-						checkerManager.addMessages(unifiedName, messages);
-					}
-				} catch (Exception e) {
-					e.printStackTrace();
-					logger.error("Checker '"+unifiedName+"' exception: "+e.getMessage());
-					return Status.CANCEL_STATUS;
-				}
-				if (monitor.isCanceled()) {
-					logger.warn("checker '" + unifiedName + "' isCanceled");
-					return Status.CANCEL_STATUS;
-				}
-				// use this to open a Shell in the UI thread
-				return Status.OK_STATUS;
-			}
-		};
-		
-		job.setUser(isFirstChecker);
-		job.schedule();
-	}
-	
-//	/**
-//	 * Recursively returns all the files in the given container
-//	 * @param container the IContainer
-//	 * @return
-//	 */
-//	private List<IFile> getProjectFiles(IContainer container) {
-//		final List<IFile> files = new ArrayList<IFile>();
-//		try {
-//			for (IResource member : container.members()) {
-//				if (member instanceof IContainer) {
-//					files.addAll(getProjectFiles((IContainer) member));
-//				} else if (member instanceof IFile) {
-//					files.add((IFile) member);
-//				}
-//			}
-//		} catch (Exception e) {
-//			e.printStackTrace();
-//		}
-//		return files;
-//	}
-
-	/*
-	 * private void syncWithUI(Shell shell) { Display.getDefault().asyncExec(new
-	 * Runnable() { public void run() { MessageDialog.openInformation(shell,
-	 * "message", "completed!"); } }); }
-	 */
-
-	public boolean belongsTo(Set<String> checkersTags) {
-		for (String tag : checkersTags) {
-			if (checkerTags.contains(tag))
-				return true;
-		}
-		return false;
-	}
-
-	public String getUnifiedName() {
-		return unifiedName;
-	}
-
-	public Set<String> getCheckerTags() {
-		return checkerTags;
-	}
-
-	public void addError(Exception e){
-		errors.add(e);
-	}
-}
\ No newline at end of file
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.checkerManager;

+

+import java.util.ArrayList;

+import java.util.List;

+import java.util.Set;

+

+import org.apache.log4j.Logger;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.IStatus;

+import org.eclipse.core.runtime.Status;

+import org.eclipse.core.runtime.jobs.Job;

+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;

+import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;

+

+public abstract class Checker {

+

+	private static final Logger logger = Logger.getLogger(Checker.class);

+

+//	private static String pluginID = "org.polarsys.chess.checkers";

+

+	public final String unifiedName;

+	protected final Set<String> checkerTags;

+	protected final int registerPriority;

+	private ArrayList<Exception> errors = new ArrayList<Exception>();

+

+	protected Checker(String unifiedName, Set<String> checkerTags) {

+		this(unifiedName, checkerTags, 0);

+	}

+

+	public Checker(String unifiedName, Set<String> checkerTags, int registerPriority) {

+

+		this.unifiedName = unifiedName;

+		this.checkerTags = checkerTags;

+		this.registerPriority = registerPriority;

+

+		CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();

+		logger.debug("register " + unifiedName);

+		checkerManager.getCheckersContainter().register(this);

+	}

+

+	public abstract List<CheckerMessage> check(IProgressMonitor monitor) throws Exception;

+

+	public abstract void init() throws Exception;

+

+	public void asyncCheck(boolean isFirstChecker) throws Exception {

+		

+		CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();

+		

+		org.eclipse.uml2.uml.Package pack = EntityUtil.getInstance().getCurrentSystemView();

+		if(pack==null){

+			IFile file = EntityUtil.getInstance().getCurrentIFile();

+			System.out.println("file: "+file);

+			EntityUtil.getInstance().openCurrentModelIntoEditor(file);			

+		}

+		

+		IFile iFile = WorkspaceSynchronizer.getFile(EntityUtil.getInstance().getCurrentSystemView().eResource());

+		init();

+

+		logger.debug("running checker: "+unifiedName);

+		Job job = new Job("Checker Manager: " + unifiedName) {

+			@Override

+			protected IStatus run(IProgressMonitor monitor) {

+				try {

+					errors = new ArrayList<Exception>();

+					List<CheckerMessage> messages = check(monitor);

+					if (messages != null) {

+//						checkerManager.deleteMarkers(iFile, unifiedName);							

+						checkerManager.deleteProjectMarkers(iFile.getProject(), unifiedName);

+						checkerManager.addMessages(unifiedName, messages);

+					}

+				} catch (Exception e) {

+					e.printStackTrace();

+					logger.error("Checker '"+unifiedName+"' exception: "+e.getMessage());

+					return Status.CANCEL_STATUS;

+				}

+				if (monitor.isCanceled()) {

+					logger.warn("checker '" + unifiedName + "' isCanceled");

+					return Status.CANCEL_STATUS;

+				}

+				// use this to open a Shell in the UI thread

+				return Status.OK_STATUS;

+			}

+		};

+		

+		job.setUser(isFirstChecker);

+		job.schedule();

+	}

+	

+//	/**

+//	 * Recursively returns all the files in the given container

+//	 * @param container the IContainer

+//	 * @return

+//	 */

+//	private List<IFile> getProjectFiles(IContainer container) {

+//		final List<IFile> files = new ArrayList<IFile>();

+//		try {

+//			for (IResource member : container.members()) {

+//				if (member instanceof IContainer) {

+//					files.addAll(getProjectFiles((IContainer) member));

+//				} else if (member instanceof IFile) {

+//					files.add((IFile) member);

+//				}

+//			}

+//		} catch (Exception e) {

+//			e.printStackTrace();

+//		}

+//		return files;

+//	}

+

+	/*

+	 * private void syncWithUI(Shell shell) { Display.getDefault().asyncExec(new

+	 * Runnable() { public void run() { MessageDialog.openInformation(shell,

+	 * "message", "completed!"); } }); }

+	 */

+

+	public boolean belongsTo(Set<String> checkersTags) {

+		for (String tag : checkersTags) {

+			if (checkerTags.contains(tag))

+				return true;

+		}

+		return false;

+	}

+

+	public String getUnifiedName() {

+		return unifiedName;

+	}

+

+	public Set<String> getCheckerTags() {

+		return checkerTags;

+	}

+

+	public void addError(Exception e){

+		errors.add(e);

+	}

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
index c7184e3..d5411c1 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
@@ -1,222 +1,229 @@
-package org.polarsys.chess.checkers.core.checkerManager;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.log4j.Logger;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EValidator;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPage;
-import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPageBookView;
-import org.eclipse.papyrus.views.modelexplorer.ModelExplorerView;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.IPage;
-import org.eclipse.uml2.uml.NamedElement;
-import org.eclipse.xtext.nodemodel.INode;
-import org.polarsys.chess.service.gui.utils.ReportProblemsUtil;
-
-public class CheckerManager {
-
-	private static final Logger logger = Logger.getLogger(CheckerManager.class);
-
-	private static final String CHECKER_NAME = "checkerName";
-	List<CheckersContainer> checkersContainers;
-	List<CheckerMessage> messages;
-	HashMap<String, Boolean> checkerStatus;
-
-	// ModelExplorerPageBookView modelExplorerPageBookView;
-	// ModelExplorerView modelExplorerView ;
-	// test test;
-	public CheckerManager() {
-		logger.debug("Instantiate CheckerManager");
-		this.checkersContainers = new ArrayList<CheckersContainer>();
-		new CheckersContainer(this);
-		// checkersContainers.add(checkersContainer);
-	}
-
-	public void run(Set<String> selectedCheckersTags) throws Exception {
-		logger.debug("run");
-		checkerStatus = new HashMap<String, Boolean>();
-		messages = new ArrayList<CheckerMessage>();
-		// modelExplorerPageBookView = getModelExplorerPageBookView();
-		// modelExplorerView = getModelExplorerView();
-		// test = new test(modelExplorerView);
-		for (CheckersContainer checkersContainer : checkersContainers) {
-			logger.debug("run checkersContainer");
-			checkersContainer.run(selectedCheckersTags);
-		}
-	}
-
-	public void register(CheckersContainer checkersContainer) {
-		logger.debug("register CheckersContainer");
-		this.checkersContainers.add(checkersContainer);
-	}
-
-	public Set<String> getTags() {
-		Set<String> tags = new HashSet<String>();
-
-		for (CheckersContainer containter : checkersContainers) {
-			tags.addAll(containter.getTags());
-		}
-
-		return tags;
-	}
-
-	public CheckersContainer getCheckersContainter() {
-		return checkersContainers.get(0);
-	}
-
-	public void addMessages(String unifiedName, List<CheckerMessage> newMessages) throws Exception {
-		// this.messages.addAll(newMessages);
-		checkerStatus.put(unifiedName, true);
-
-		// logger.debug("addMessages '" + unifiedName + "' : " +
-		// newMessages.size());
-
-		/*
-		 * for (Boolean value : checkerStatus.values()) { if
-		 * (value.booleanValue() == false) return; }
-		 */
-
-		// IViewPart modelexplorer =
-		// PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
-		// .showView(ModelExplorerPageBookView.VIEW_ID);
-		// modelExplorerView = getModelExplorerPageBookView();
-		// System.out.println("modelexplorer: "+modelExplorerView);
-
-		// Set<IFile> iFiles = extractIFiles(newMessages);
-
-		// for (IFile iFile : iFiles) {
-		// deleteMarkers(iFile, unifiedName);
-		// }
-
-		for (CheckerMessage msn : newMessages) {
-			if (msn.object != null && msn.object instanceof EObject) {
-				IMarker marker = msn.file.createMarker(EValidator.MARKER);
-				marker.setAttribute(CHECKER_NAME, msn.checkerName);
-				marker.setAttribute(IMarker.MESSAGE, msn.message);
-				String location = EcoreUtil.getURI((EObject) msn.object).toString();
-				if (msn.object instanceof NamedElement) {
-					location = ((NamedElement) msn.object).getQualifiedName();
-				}
-				marker.setAttribute(IMarker.LOCATION, location);
-				marker.setAttribute(IMarker.SEVERITY, msn.severity);
-				marker.setAttribute(EValidator.URI_ATTRIBUTE, EcoreUtil.getURI((EObject) msn.object).toString());
-			} else if (msn.object != null && msn.object instanceof INode) {
-				try {
-					final INode node = (INode) msn.object;
-					if (msn.severity == IMarker.SEVERITY_INFO) {
-						ReportProblemsUtil.reportInfo(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(), 
-								node.getOffset(), node.getEndOffset());
-					} else if (msn.severity == IMarker.SEVERITY_WARNING) {
-						ReportProblemsUtil.reportWarning(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(), 
-								node.getOffset(), node.getEndOffset());
-					} else if (msn.severity == IMarker.SEVERITY_ERROR) {
-						ReportProblemsUtil.reportError(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(), 
-								node.getOffset(), node.getEndOffset());
-					}
-				} catch (NullPointerException | CoreException e) {
-					e.printStackTrace();
-				}
-			}
-		}
-	}
-
-	private Set<IFile> extractIFiles(List<CheckerMessage> checkerMessages) {
-
-		Set<IFile> iFiles = new HashSet<IFile>();
-		if (checkerMessages != null) {
-			for (CheckerMessage checkerMessage : checkerMessages) {
-				if (checkerMessage.file != null) {
-					iFiles.add(checkerMessage.file);
-				}
-			}
-		}
-		return iFiles;
-	}
-
-	void deleteMarkers(IFile file, String checkerName) throws CoreException {
-		IMarker[] markers = file.findMarkers(EValidator.MARKER, false, IResource.DEPTH_ONE);
-		for (IMarker marker : markers) {
-			if (marker != null && marker.exists() && marker.getAttribute(CHECKER_NAME, "").equals(checkerName)) {
-				marker.delete();
-			}
-		}
-	}
-
-	/**
-	 * Deletes all the matching markers inside the given project.
-	 * @param project the active project
-	 * @param checkerName the name of the creating checker
-	 * @throws CoreException
-	 */
-	void deleteProjectMarkers(IProject project, String checkerName) throws CoreException {
-		IMarker[] markers = project.findMarkers(null, false, IResource.DEPTH_INFINITE);
-		for (IMarker marker : markers) {
-			if (marker != null && marker.exists() && marker.getAttribute(CHECKER_NAME, "").equals(checkerName)) {
-				marker.delete();
-			}
-		}
-	}
-
-	private ModelExplorerPageBookView getModelExplorerPageBookView() {
-
-		IWorkbench workbench = PlatformUI.getWorkbench();
-
-		System.out.println("workbench: " + workbench);
-		IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
-
-		System.out.println("window: " + window);
-
-		IWorkbenchPage workbenchPage = window.getActivePage();
-
-		System.out.println("workbenchPage: " + workbenchPage);
-
-		IViewPart modelExplorerViewPart = null;
-
-		for (IViewPart view : workbenchPage.getViews()) {
-			System.out.println("view: " + view.getTitle());
-		}
-
-		try {
-			modelExplorerViewPart = window.getActivePage().showView(ModelExplorerPageBookView.VIEW_ID);
-		} catch (PartInitException ex) {
-			ex.printStackTrace(System.out);
-		}
-
-		ModelExplorerPageBookView view = (ModelExplorerPageBookView) modelExplorerViewPart;
-		return view;
-
-	}
-
-	private ModelExplorerView getModelExplorerView() {
-
-		ModelExplorerPageBookView view = getModelExplorerPageBookView();
-		IPage currentPage = view.getCurrentPage();
-		ModelExplorerPage page = (ModelExplorerPage) currentPage;
-		IViewPart viewer = page.getViewer();
-		ModelExplorerView modelExplorerView = (ModelExplorerView) viewer;
-
-		return modelExplorerView;
-
-	}
-
-	public void updateCheckerStatus(String unifiedName, boolean b) {
-		checkerStatus.put(unifiedName, b);
-	}
-
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.checkerManager;

+

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Set;

+

+import org.apache.log4j.Logger;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPage;

+import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPageBookView;

+import org.eclipse.papyrus.views.modelexplorer.ModelExplorerView;

+import org.eclipse.ui.IViewPart;

+import org.eclipse.ui.IWorkbench;

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PartInitException;

+import org.eclipse.ui.PlatformUI;

+import org.eclipse.ui.part.IPage;

+import org.eclipse.uml2.uml.NamedElement;

+import org.eclipse.xtext.nodemodel.INode;

+import org.polarsys.chess.service.gui.utils.ReportProblemsUtil;

+

+public class CheckerManager {

+

+	private static final Logger logger = Logger.getLogger(CheckerManager.class);

+

+	private static final String CHECKER_NAME = "checkerName";

+	List<CheckersContainer> checkersContainers;

+	List<CheckerMessage> messages;

+	HashMap<String, Boolean> checkerStatus;

+

+	// ModelExplorerPageBookView modelExplorerPageBookView;

+	// ModelExplorerView modelExplorerView ;

+	// test test;

+	public CheckerManager() {

+		logger.debug("Instantiate CheckerManager");

+		this.checkersContainers = new ArrayList<CheckersContainer>();

+		new CheckersContainer(this);

+		// checkersContainers.add(checkersContainer);

+	}

+

+	public void run(Set<String> selectedCheckersTags) throws Exception {

+		logger.debug("run");

+		checkerStatus = new HashMap<String, Boolean>();

+		messages = new ArrayList<CheckerMessage>();

+		// modelExplorerPageBookView = getModelExplorerPageBookView();

+		// modelExplorerView = getModelExplorerView();

+		// test = new test(modelExplorerView);

+		for (CheckersContainer checkersContainer : checkersContainers) {

+			logger.debug("run checkersContainer");

+			checkersContainer.run(selectedCheckersTags);

+		}

+	}

+

+	public void register(CheckersContainer checkersContainer) {

+		logger.debug("register CheckersContainer");

+		this.checkersContainers.add(checkersContainer);

+	}

+

+	public Set<String> getTags() {

+		Set<String> tags = new HashSet<String>();

+

+		for (CheckersContainer containter : checkersContainers) {

+			tags.addAll(containter.getTags());

+		}

+

+		return tags;

+	}

+

+	public CheckersContainer getCheckersContainter() {

+		return checkersContainers.get(0);

+	}

+

+	public void addMessages(String unifiedName, List<CheckerMessage> newMessages) throws Exception {

+		// this.messages.addAll(newMessages);

+		checkerStatus.put(unifiedName, true);

+

+		// logger.debug("addMessages '" + unifiedName + "' : " +

+		// newMessages.size());

+

+		/*

+		 * for (Boolean value : checkerStatus.values()) { if

+		 * (value.booleanValue() == false) return; }

+		 */

+

+		// IViewPart modelexplorer =

+		// PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()

+		// .showView(ModelExplorerPageBookView.VIEW_ID);

+		// modelExplorerView = getModelExplorerPageBookView();

+		// System.out.println("modelexplorer: "+modelExplorerView);

+

+		// Set<IFile> iFiles = extractIFiles(newMessages);

+

+		// for (IFile iFile : iFiles) {

+		// deleteMarkers(iFile, unifiedName);

+		// }

+

+		for (CheckerMessage msn : newMessages) {

+			if (msn.object != null && msn.object instanceof EObject) {

+				IMarker marker = msn.file.createMarker(EValidator.MARKER);

+				marker.setAttribute(CHECKER_NAME, msn.checkerName);

+				marker.setAttribute(IMarker.MESSAGE, msn.message);

+				String location = EcoreUtil.getURI((EObject) msn.object).toString();

+				if (msn.object instanceof NamedElement) {

+					location = ((NamedElement) msn.object).getQualifiedName();

+				}

+				marker.setAttribute(IMarker.LOCATION, location);

+				marker.setAttribute(IMarker.SEVERITY, msn.severity);

+				marker.setAttribute(EValidator.URI_ATTRIBUTE, EcoreUtil.getURI((EObject) msn.object).toString());

+			} else if (msn.object != null && msn.object instanceof INode) {

+				try {

+					final INode node = (INode) msn.object;

+					if (msn.severity == IMarker.SEVERITY_INFO) {

+						ReportProblemsUtil.reportInfo(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(), 

+								node.getOffset(), node.getEndOffset());

+					} else if (msn.severity == IMarker.SEVERITY_WARNING) {

+						ReportProblemsUtil.reportWarning(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(), 

+								node.getOffset(), node.getEndOffset());

+					} else if (msn.severity == IMarker.SEVERITY_ERROR) {

+						ReportProblemsUtil.reportError(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(), 

+								node.getOffset(), node.getEndOffset());

+					}

+				} catch (NullPointerException | CoreException e) {

+					e.printStackTrace();

+				}

+			}

+		}

+	}

+

+	private Set<IFile> extractIFiles(List<CheckerMessage> checkerMessages) {

+

+		Set<IFile> iFiles = new HashSet<IFile>();

+		if (checkerMessages != null) {

+			for (CheckerMessage checkerMessage : checkerMessages) {

+				if (checkerMessage.file != null) {

+					iFiles.add(checkerMessage.file);

+				}

+			}

+		}

+		return iFiles;

+	}

+

+	void deleteMarkers(IFile file, String checkerName) throws CoreException {

+		IMarker[] markers = file.findMarkers(EValidator.MARKER, false, IResource.DEPTH_ONE);

+		for (IMarker marker : markers) {

+			if (marker != null && marker.exists() && marker.getAttribute(CHECKER_NAME, "").equals(checkerName)) {

+				marker.delete();

+			}

+		}

+	}

+

+	/**

+	 * Deletes all the matching markers inside the given project.

+	 * @param project the active project

+	 * @param checkerName the name of the creating checker

+	 * @throws CoreException

+	 */

+	void deleteProjectMarkers(IProject project, String checkerName) throws CoreException {

+		IMarker[] markers = project.findMarkers(null, false, IResource.DEPTH_INFINITE);

+		for (IMarker marker : markers) {

+			if (marker != null && marker.exists() && marker.getAttribute(CHECKER_NAME, "").equals(checkerName)) {

+				marker.delete();

+			}

+		}

+	}

+

+	private ModelExplorerPageBookView getModelExplorerPageBookView() {

+

+		IWorkbench workbench = PlatformUI.getWorkbench();

+

+		System.out.println("workbench: " + workbench);

+		IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();

+

+		System.out.println("window: " + window);

+

+		IWorkbenchPage workbenchPage = window.getActivePage();

+

+		System.out.println("workbenchPage: " + workbenchPage);

+

+		IViewPart modelExplorerViewPart = null;

+

+		for (IViewPart view : workbenchPage.getViews()) {

+			System.out.println("view: " + view.getTitle());

+		}

+

+		try {

+			modelExplorerViewPart = window.getActivePage().showView(ModelExplorerPageBookView.VIEW_ID);

+		} catch (PartInitException ex) {

+			ex.printStackTrace(System.out);

+		}

+

+		ModelExplorerPageBookView view = (ModelExplorerPageBookView) modelExplorerViewPart;

+		return view;

+

+	}

+

+	private ModelExplorerView getModelExplorerView() {

+

+		ModelExplorerPageBookView view = getModelExplorerPageBookView();

+		IPage currentPage = view.getCurrentPage();

+		ModelExplorerPage page = (ModelExplorerPage) currentPage;

+		IViewPart viewer = page.getViewer();

+		ModelExplorerView modelExplorerView = (ModelExplorerView) viewer;

+

+		return modelExplorerView;

+

+	}

+

+	public void updateCheckerStatus(String unifiedName, boolean b) {

+		checkerStatus.put(unifiedName, b);

+	}

+

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerMessage.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerMessage.java
index c0f5c5e..bce10f3 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerMessage.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerMessage.java
@@ -1,33 +1,40 @@
-package org.polarsys.chess.checkers.core.checkerManager;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
-
-public class CheckerMessage {
-
-	protected IFile file;
-	protected int severity;
-	protected String message;
-	protected Object object;
-	protected String checkerName;
-	
-	public CheckerMessage(String message, int severity ,Object object, String checkerName ) {
-			this((object instanceof EObject) ? WorkspaceSynchronizer.getFile(((EObject) object).eResource()) : null, 
-					severity, message, object, checkerName);
-	}
-
-	public CheckerMessage(IFile file, int severity, String message, Object object, String checkerName) {
-		super();
-		this.file = file;
-		this.severity = severity;
-		this.message = message;
-		this.object = object;
-		this.checkerName = checkerName;
-	}
-
-	public String getMessage() {
-		return message;
-	}
-	
-}
\ No newline at end of file
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.checkerManager;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;

+

+public class CheckerMessage {

+

+	protected IFile file;

+	protected int severity;

+	protected String message;

+	protected Object object;

+	protected String checkerName;

+	

+	public CheckerMessage(String message, int severity ,Object object, String checkerName ) {

+			this((object instanceof EObject) ? WorkspaceSynchronizer.getFile(((EObject) object).eResource()) : null, 

+					severity, message, object, checkerName);

+	}

+

+	public CheckerMessage(IFile file, int severity, String message, Object object, String checkerName) {

+		super();

+		this.file = file;

+		this.severity = severity;

+		this.message = message;

+		this.object = object;

+		this.checkerName = checkerName;

+	}

+

+	public String getMessage() {

+		return message;

+	}

+	

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerTriggerManager.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerTriggerManager.java
index 1e8d188..296256a 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerTriggerManager.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerTriggerManager.java
@@ -1,38 +1,45 @@
-package org.polarsys.chess.checkers.core.checkerManager;
-
-import java.util.List;
-
-import com.google.common.collect.HashBasedTable;
-import com.google.common.collect.Table;
-
-public class CheckerTriggerManager {
-	Table<String, String, Integer> targetIdHashMap = HashBasedTable.create();
-
-	public void loadCheckersRegistry() {
-		// TODO Auto-generated method stub
-
-	}
-
-	public void saveCheckersRegistry() {
-		// TODO Auto-generated method stub
-
-	}
-
-	public boolean isTriggered(String checkerUnifiedName, String targetId, int targetCurrentHashCode) {
-		Integer lastTargetHashCode = targetIdHashMap.get(checkerUnifiedName, targetId);
-		if ((lastTargetHashCode != null) && (!lastTargetHashCode.equals(targetCurrentHashCode))) {
-			return true;
-		}
-		return false;
-	}
-
-	public void updateCheckersRegistryEntry(String checkerUnifiedName, String targetId, int targetCurrentHashCode) {
-		targetIdHashMap.put(checkerUnifiedName, targetId, targetCurrentHashCode);
-
-	}
-
-	public void updateCheckersRegistry(List<?> targets) {
-		// TODO Auto-generated method stub
-
-	}
-}
\ No newline at end of file
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.checkerManager;

+

+import java.util.List;

+

+import com.google.common.collect.HashBasedTable;

+import com.google.common.collect.Table;

+

+public class CheckerTriggerManager {

+	Table<String, String, Integer> targetIdHashMap = HashBasedTable.create();

+

+	public void loadCheckersRegistry() {

+		// TODO Auto-generated method stub

+

+	}

+

+	public void saveCheckersRegistry() {

+		// TODO Auto-generated method stub

+

+	}

+

+	public boolean isTriggered(String checkerUnifiedName, String targetId, int targetCurrentHashCode) {

+		Integer lastTargetHashCode = targetIdHashMap.get(checkerUnifiedName, targetId);

+		if ((lastTargetHashCode != null) && (!lastTargetHashCode.equals(targetCurrentHashCode))) {

+			return true;

+		}

+		return false;

+	}

+

+	public void updateCheckersRegistryEntry(String checkerUnifiedName, String targetId, int targetCurrentHashCode) {

+		targetIdHashMap.put(checkerUnifiedName, targetId, targetCurrentHashCode);

+

+	}

+

+	public void updateCheckersRegistry(List<?> targets) {

+		// TODO Auto-generated method stub

+

+	}

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
index 89ea553..ae4adb1 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
@@ -1,72 +1,79 @@
-package org.polarsys.chess.checkers.core.checkerManager;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-
-import org.apache.log4j.Logger;
-
-public class CheckersContainer {
-
-	private static final Logger logger = Logger.getLogger(CheckersContainer.class);
-	
-	List<Checker> checkers;
-	CheckerManager checkerManager;
-	
-	public CheckersContainer(CheckerManager checkerManager) {
-		this.checkers = new ArrayList<Checker>();
-		this.checkerManager = checkerManager;
-		checkerManager.register(this);
-	}
-
-	public void run(Set<String> checkersTags) throws Exception {
-
-		boolean isFirstChecker = true;
-		
-		for (Checker checker : checkers) {
-
-			checkerManager.updateCheckerStatus(checker.unifiedName, false);
-
-			if (checker.belongsTo(checkersTags)) {
-				logger.debug("run " + checker.getUnifiedName());
-					checker.asyncCheck(isFirstChecker);
-					isFirstChecker=false;
-			}
-		}
-
-	}
-
-	public void register(Checker checker) {
-		Optional<Checker> alreadyRegisteredChecker = find(this.checkers,checker.unifiedName);
-		if(!alreadyRegisteredChecker.isPresent()){
-			logger.debug("register checker not present: "+checker.registerPriority);
-			this.checkers.add(checker);
-		}else if((alreadyRegisteredChecker.get().registerPriority < checker.registerPriority)){	
-			logger.debug("register checker already registered with priority: "+alreadyRegisteredChecker.get().registerPriority);
-			logger.debug("checker to register with priority: "+checker.registerPriority);
-			
-			this.checkers.remove(alreadyRegisteredChecker.get());
-			this.checkers.add(checker);
-			//return;
-		}
-		//this.checkers.add(checker);
-	}
-
-	public Optional<Checker> find(final List<Checker> list, final String name){
-	    return list.stream().filter(o -> o.unifiedName.equals(name)).findFirst();
-	}
-	
-	public Collection<? extends String> getTags() {
-		Set<String> tags = new HashSet<String>();
-		for (Checker checker : checkers) {
-			tags.addAll(checker.getCheckerTags());
-		}
-		return tags;
-	}
-
-	
-
-}
\ No newline at end of file
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.checkerManager;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Optional;

+import java.util.Set;

+

+import org.apache.log4j.Logger;

+

+public class CheckersContainer {

+

+	private static final Logger logger = Logger.getLogger(CheckersContainer.class);

+	

+	List<Checker> checkers;

+	CheckerManager checkerManager;

+	

+	public CheckersContainer(CheckerManager checkerManager) {

+		this.checkers = new ArrayList<Checker>();

+		this.checkerManager = checkerManager;

+		checkerManager.register(this);

+	}

+

+	public void run(Set<String> checkersTags) throws Exception {

+

+		boolean isFirstChecker = true;

+		

+		for (Checker checker : checkers) {

+

+			checkerManager.updateCheckerStatus(checker.unifiedName, false);

+

+			if (checker.belongsTo(checkersTags)) {

+				logger.debug("run " + checker.getUnifiedName());

+					checker.asyncCheck(isFirstChecker);

+					isFirstChecker=false;

+			}

+		}

+

+	}

+

+	public void register(Checker checker) {

+		Optional<Checker> alreadyRegisteredChecker = find(this.checkers,checker.unifiedName);

+		if(!alreadyRegisteredChecker.isPresent()){

+			logger.debug("register checker not present: "+checker.registerPriority);

+			this.checkers.add(checker);

+		}else if((alreadyRegisteredChecker.get().registerPriority < checker.registerPriority)){	

+			logger.debug("register checker already registered with priority: "+alreadyRegisteredChecker.get().registerPriority);

+			logger.debug("checker to register with priority: "+checker.registerPriority);

+			

+			this.checkers.remove(alreadyRegisteredChecker.get());

+			this.checkers.add(checker);

+			//return;

+		}

+		//this.checkers.add(checker);

+	}

+

+	public Optional<Checker> find(final List<Checker> list, final String name){

+	    return list.stream().filter(o -> o.unifiedName.equals(name)).findFirst();

+	}

+	

+	public Collection<? extends String> getTags() {

+		Set<String> tags = new HashSet<String>();

+		for (Checker checker : checkers) {

+			tags.addAll(checker.getCheckerTags());

+		}

+		return tags;

+	}

+

+	

+

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/test.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/test.java
index 997c9d6..0644726 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/test.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/test.java
@@ -1,53 +1,60 @@
-package org.polarsys.chess.checkers.core.checkerManager;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EValidator;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.papyrus.views.modelexplorer.ModelExplorerView;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.ide.IGotoMarker;
-import org.eclipse.ui.navigator.CommonViewer;
-
-import com.google.common.collect.Lists;
-
-public class test implements IGotoMarker {
-
-	ModelExplorerView  modelExplorerView;
-	
-	
-	public test(ModelExplorerView modelExplorerView) {
-		super();
-		this.modelExplorerView = modelExplorerView;
-	}
-
-
-	@Override
-	public void gotoMarker(IMarker marker) {
-		
-		String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
-		if (uriAttribute != null) {
-			URI uri = URI.createURI(uriAttribute);
-			
-				EditingDomain domain = modelExplorerView.getEditingDomain();
-				EObject eObject = domain.getResourceSet().getEObject(uri, false);
-				if (eObject != null) {
-					
-					modelExplorerView.revealSemanticElement(Lists.newArrayList(eObject));
-					//CommonViewer treeViewer = modelExplorerView.getCommonViewer();
-					// The common viewer is in fact a tree viewer
-					// bug enhancement: use function in ModelExplorerView instead of findElementForEObject
-					//ModelExplorerView.reveal(Lists.newArrayList(eObject), treeViewer);
-				}
-			}
-		
-	}
-
-	
-	
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.checkerManager;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.papyrus.views.modelexplorer.ModelExplorerView;

+import org.eclipse.ui.IViewPart;

+import org.eclipse.ui.ide.IDE;

+import org.eclipse.ui.ide.IGotoMarker;

+import org.eclipse.ui.navigator.CommonViewer;

+

+import com.google.common.collect.Lists;

+

+public class test implements IGotoMarker {

+

+	ModelExplorerView  modelExplorerView;

+	

+	

+	public test(ModelExplorerView modelExplorerView) {

+		super();

+		this.modelExplorerView = modelExplorerView;

+	}

+

+

+	@Override

+	public void gotoMarker(IMarker marker) {

+		

+		String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);

+		if (uriAttribute != null) {

+			URI uri = URI.createURI(uriAttribute);

+			

+				EditingDomain domain = modelExplorerView.getEditingDomain();

+				EObject eObject = domain.getResourceSet().getEObject(uri, false);

+				if (eObject != null) {

+					

+					modelExplorerView.revealSemanticElement(Lists.newArrayList(eObject));

+					//CommonViewer treeViewer = modelExplorerView.getCommonViewer();

+					// The common viewer is in fact a tree viewer

+					// bug enhancement: use function in ModelExplorerView instead of findElementForEObject

+					//ModelExplorerView.reveal(Lists.newArrayList(eObject), treeViewer);

+				}

+			}

+		

+	}

+

+	

+	

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/IdentifiersChecker.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/IdentifiersChecker.java
index 62be6d4..9dcd2f5 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/IdentifiersChecker.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/IdentifiersChecker.java
@@ -1,154 +1,161 @@
-package org.polarsys.chess.checkers.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.log4j.Logger;
-import org.eclipse.core.resources.IMarker;
-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.eclipse.uml2.uml.Behavior;
-import org.eclipse.uml2.uml.Class;
-import org.eclipse.uml2.uml.NamedElement;
-import org.eclipse.uml2.uml.Operation;
-import org.eclipse.uml2.uml.Package;
-import org.eclipse.uml2.uml.Port;
-import org.eclipse.uml2.uml.Property;
-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;
-
-public class IdentifiersChecker extends Checker {
-	protected Package systemViewPackage;
-	private static final Logger logger = Logger.getLogger(IdentifiersChecker.class);
-	private static final String checkerName = "IdentifierChecker";
-
-	/**
-	 * Default constructor
-	 */
-	public IdentifiersChecker() {
-		super(checkerName, getTags());
-	}
-
-	/**
-	 * Creates the checker with the given priority.
-	 * @param priority the priority
-	 */
-	public IdentifiersChecker(int priority) {
-		super(checkerName, getTags(), priority);
-	}
-
-	/**
-	 * Constructor with explicit tags.
-	 * @param tags the tags identifying this checker
-	 */
-	public IdentifiersChecker(Set<String> tags) {
-		super(checkerName, tags);
-	}
-
-	/**
-	 * Constructor with explicit tags and priority.
-	 * @param tags the tags identifying this checker
-	 * @param priority the priority
-	 */
-	public IdentifiersChecker(Set<String> tags, int priority) {
-		super(checkerName, tags, priority);
-	}
-
-	@Override
-	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {
-		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();
-		Collection<Class> blocks = null;
-		try {
-			blocks = (Collection<Class>) EntityUtil.getInstance().getAllClasses(systemViewPackage);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		monitor.beginTask(checkerName, blocks.size());
-		for (Class block : blocks) {
-			messages.addAll(processBlock(block));
-			if (monitor.isCanceled())
-				throw new Exception("Checker interrupted");
-			monitor.worked(1);
-		}
-		return messages;
-	}
-
-	/**
-	 * Processes the given block.
-	 * 
-	 * @param block
-	 *            the block to process
-	 * @return a list of messages
-	 */
-	protected List<CheckerMessage> processBlock(Class block) {
-		final EList<NamedElement> elements = filterElements(block);
-		return processElements(elements);
-	}
-
-	/**
-	 * Processes the given list of elements.
-	 * 
-	 * @param block
-	 *            the list to process
-	 * @return a list of warnings
-	 */
-	protected List<CheckerMessage> processElements(EList<NamedElement> elements) {
-		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();
-
-		for (NamedElement element : elements) {
-			final String name = element.getName();
-			logger.debug("Processing " + name);
-			if (!isValidId(name)) {
-				logger.debug("The element name is not a valid identifier: " + name);
-				final String msg = "The element name is not a valid identifier: " + name;
-				messages.add(new CheckerMessage(msg, IMarker.SEVERITY_WARNING, element, checkerName));
-			}
-		}
-		return messages;
-	}
-
-	protected boolean isValidId(String id) {
-		return javax.lang.model.SourceVersion.isIdentifier(id) && (!javax.lang.model.SourceVersion.isKeyword(id));
-	}
-	
-	/**
-	 * Creates the list of elements to be analized (incuding the block itself). Can be overridden if necessary.
-	 * @param elements
-	 * @return the filtered elements
-	 */
-	protected EList<NamedElement> filterElements(Class block) {
-		final EList<Property> attributes = block.getOwnedAttributes();
-		final EList<Operation> operations = block.getOwnedOperations();
-		final EList<Behavior> behaviors = block.getOwnedBehaviors();
-		final EList<Port> ports = block.getOwnedPorts();
-
-		final EList<NamedElement> elements = new BasicEList<NamedElement>(attributes.size() + 
-				operations.size() + behaviors.size() + ports.size() + 1);
-		elements.addAll(attributes);
-		elements.addAll(operations);
-		elements.addAll(behaviors);
-		elements.addAll(ports);
-		elements.add(block);
-		return elements;
-	}
-
-	private static Set<String> getTags() {
-		Set<String> tags = new HashSet<String>();
-		tags.add("fast");
-		tags.add("warnings");
-		tags.add("sysml");
-		return tags;
-	}
-	
-	@Override
-	public void init() throws Exception {
-		systemViewPackage = EntityUtil.getInstance().getCurrentSystemView();
-	}
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.impl;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Set;

+

+import org.apache.log4j.Logger;

+import org.eclipse.core.resources.IMarker;

+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.eclipse.uml2.uml.Behavior;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.NamedElement;

+import org.eclipse.uml2.uml.Operation;

+import org.eclipse.uml2.uml.Package;

+import org.eclipse.uml2.uml.Port;

+import org.eclipse.uml2.uml.Property;

+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;

+

+public class IdentifiersChecker extends Checker {

+	protected Package systemViewPackage;

+	private static final Logger logger = Logger.getLogger(IdentifiersChecker.class);

+	private static final String checkerName = "IdentifierChecker";

+

+	/**

+	 * Default constructor

+	 */

+	public IdentifiersChecker() {

+		super(checkerName, getTags());

+	}

+

+	/**

+	 * Creates the checker with the given priority.

+	 * @param priority the priority

+	 */

+	public IdentifiersChecker(int priority) {

+		super(checkerName, getTags(), priority);

+	}

+

+	/**

+	 * Constructor with explicit tags.

+	 * @param tags the tags identifying this checker

+	 */

+	public IdentifiersChecker(Set<String> tags) {

+		super(checkerName, tags);

+	}

+

+	/**

+	 * Constructor with explicit tags and priority.

+	 * @param tags the tags identifying this checker

+	 * @param priority the priority

+	 */

+	public IdentifiersChecker(Set<String> tags, int priority) {

+		super(checkerName, tags, priority);

+	}

+

+	@Override

+	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {

+		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();

+		Collection<Class> blocks = null;

+		try {

+			blocks = (Collection<Class>) EntityUtil.getInstance().getAllClasses(systemViewPackage);

+		} catch (Exception e) {

+			e.printStackTrace();

+		}

+

+		monitor.beginTask(checkerName, blocks.size());

+		for (Class block : blocks) {

+			messages.addAll(processBlock(block));

+			if (monitor.isCanceled())

+				throw new Exception("Checker interrupted");

+			monitor.worked(1);

+		}

+		return messages;

+	}

+

+	/**

+	 * Processes the given block.

+	 * 

+	 * @param block

+	 *            the block to process

+	 * @return a list of messages

+	 */

+	protected List<CheckerMessage> processBlock(Class block) {

+		final EList<NamedElement> elements = filterElements(block);

+		return processElements(elements);

+	}

+

+	/**

+	 * Processes the given list of elements.

+	 * 

+	 * @param block

+	 *            the list to process

+	 * @return a list of warnings

+	 */

+	protected List<CheckerMessage> processElements(EList<NamedElement> elements) {

+		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();

+

+		for (NamedElement element : elements) {

+			final String name = element.getName();

+			logger.debug("Processing " + name);

+			if (!isValidId(name)) {

+				logger.debug("The element name is not a valid identifier: " + name);

+				final String msg = "The element name is not a valid identifier: " + name;

+				messages.add(new CheckerMessage(msg, IMarker.SEVERITY_WARNING, element, checkerName));

+			}

+		}

+		return messages;

+	}

+

+	protected boolean isValidId(String id) {

+		return javax.lang.model.SourceVersion.isIdentifier(id) && (!javax.lang.model.SourceVersion.isKeyword(id));

+	}

+	

+	/**

+	 * Creates the list of elements to be analized (incuding the block itself). Can be overridden if necessary.

+	 * @param elements

+	 * @return the filtered elements

+	 */

+	protected EList<NamedElement> filterElements(Class block) {

+		final EList<Property> attributes = block.getOwnedAttributes();

+		final EList<Operation> operations = block.getOwnedOperations();

+		final EList<Behavior> behaviors = block.getOwnedBehaviors();

+		final EList<Port> ports = block.getOwnedPorts();

+

+		final EList<NamedElement> elements = new BasicEList<NamedElement>(attributes.size() + 

+				operations.size() + behaviors.size() + ports.size() + 1);

+		elements.addAll(attributes);

+		elements.addAll(operations);

+		elements.addAll(behaviors);

+		elements.addAll(ports);

+		elements.add(block);

+		return elements;

+	}

+

+	private static Set<String> getTags() {

+		Set<String> tags = new HashSet<String>();

+		tags.add("fast");

+		tags.add("warnings");

+		tags.add("sysml");

+		return tags;

+	}

+	

+	@Override

+	public void init() throws Exception {

+		systemViewPackage = EntityUtil.getInstance().getCurrentSystemView();

+	}

+}

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 00a6a42..8d56967 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
@@ -1,291 +1,298 @@
-package org.polarsys.chess.checkers.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.apache.log4j.Logger;
-import org.eclipse.core.resources.IMarker;
-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;
-import org.eclipse.uml2.uml.Package;
-import org.eclipse.uml2.uml.Port;
-import org.eclipse.uml2.uml.Property;
-import org.eclipse.uml2.uml.Behavior;
-import org.eclipse.uml2.uml.Class;
-import org.eclipse.uml2.uml.NamedElement;
-import org.eclipse.uml2.uml.Operation;
-
-/**
- * Computes the minimum distance among properties inside SysML Blocks.
- * 
- * @author cristofo
- *
- */
-public class NameDistance extends Checker {
-
-	/** Minimum distance between two elements; below it, marks as suspect. */
-	private int threshold = 2;
-	private Package systemViewPackage;
-	private static final Logger logger = Logger.getLogger(NameDistance.class);
-	private static final String checkerName = "NameDistance";
-
-	/**
-	 * Creates a name distance checker with default threshold.
-	 */
-	public NameDistance() {
-		super(checkerName, getTags());
-	}
-
-	/**
-	 * Creates a name distance checker with the given priority.
-	 * @param priority the priority
-	 */
-	public NameDistance(int priority) {
-		super(checkerName, getTags(), priority);
-	}
-
-	/**
-	 * Creates a name distance checker with the given priority and threshold.
-	 * @param priority the priority
-	 * @param threshold the threshold to use
-	 */
-	public NameDistance(int priority, int threshold) {
-		super(checkerName, getTags(), priority);
-		setThreshold(threshold);
-	}
-
-	/**
-	 * Constructor with explicit tags.
-	 * @param tags the tags identifying this checker
-	 */
-	public NameDistance(Set<String> tags) {
-		super(checkerName, tags);
-	}
-
-	/**
-	 * Constructor with explicit tags and priority.
-	 * @param tags the tags identifying this checker
-	 * @param priority the priority
-	 */
-	public NameDistance(Set<String> tags, int priority) {
-		super(checkerName, tags, priority);
-	}
-
-	/**
-	 * Constructor with explicit tags, priority and threshold.
-	 * @param tags the tags identifying this checker
-	 * @param priority the priority
-	 * @param threshold the threshold to use
-	 */
-	public NameDistance(Set<String> tags, int priority, int threshold) {
-		super(checkerName, tags, priority);
-		setThreshold(threshold);
-	}
-	
-	private static Set<String> getTags() {
-		Set<String> tags = new HashSet<String>();
-		tags.add("fast");
-		tags.add("warnings");
-		tags.add("errors");
-		tags.add("sysml");
-		return tags;
-	}
-
-	public int getThreshold() {
-		return threshold;
-	}
-
-	public void setThreshold(int threshold) {
-		this.threshold = threshold;
-	}
-
-	@Override
-	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {
-		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();
-		Collection<Class> blocks = null;
-		try {
-			blocks = (Collection<Class>) EntityUtil.getInstance().getAllClasses(systemViewPackage);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		monitor.beginTask(unifiedName, blocks.size());
-		for (Class block : blocks) {
-			messages.addAll(processBlock(block));
-			if (monitor.isCanceled())
-				throw new Exception("Checker interrupted");
-			monitor.worked(1);
-		}
-		return messages;
-	}
-
-	/**
-	 * Processes the given block.
-	 * 
-	 * @param block
-	 *            the block to process
-	 * @return a list of warnings
-	 */
-	private List<CheckerMessage> processBlock(Class block) {
-		final EList<NamedElement> elements = filterElements(block);
-		return processElements(elements);
-	}
-
-	/**
-	 * Creates the list of elements to be analized. Can be overridden if necessary.
-	 * @param elements
-	 * @return the filtered elements
-	 */
-	protected EList<NamedElement> filterElements(Class block) {
-		final EList<Property> attributes = block.getOwnedAttributes();
-		final EList<Operation> operations = block.getOwnedOperations();
-		final EList<Behavior> behaviors = block.getOwnedBehaviors();
-		final EList<Port> ports = block.getOwnedPorts();
-
-		final EList<NamedElement> elements = new BasicEList<NamedElement>(attributes.size() + 
-				operations.size() + behaviors.size() + ports.size());
-		elements.addAll(attributes);
-		elements.addAll(operations);
-		elements.addAll(behaviors);
-		elements.addAll(ports);
-		return elements;
-	}
-	
-	/**
-	 * Processes the given list of elements.
-	 * 
-	 * @param block
-	 *            the list to process
-	 * @return a list of warnings
-	 */
-	private List<CheckerMessage> processElements(EList<NamedElement> elements) {
-		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();
-
-		for (int i = 0; i < elements.size(); i++) {
-			final NamedElement first = elements.get(i);
-			final String firstName = normalizeName(first.getName());
-			ArrayList<String> similarNames = new ArrayList<String>(2);
-			for (int j = 0; j < elements.size(); j++) {
-				if (j == i)
-					continue;
-				final NamedElement second = elements.get(j);
-
-				final String secondName = normalizeName(second.getName());
-				final int distance = levenshteinDistance(firstName, secondName);
-				logger.debug(firstName + " and " + secondName + " distance = " + distance);
-
-				if (distance == 0) {
-					final String msg = equalsMsg(first, second);
-					messages.add(createMessage(msg, IMarker.SEVERITY_ERROR, first, unifiedName));
-				}
-				if (distance <= threshold) {
-					similarNames.add(second.getName());
-				}
-			}
-
-			// If some similarities are found, store the entry in the warnings
-			if (similarNames.size() > 0) {
-				final String msg = similarMsg(first, similarNames);
-				messages.add(createMessage(msg, IMarker.SEVERITY_WARNING, first, unifiedName));
-			}
-		}
-		return messages;
-	}
-	
-	protected String equalsMsg(NamedElement first, NamedElement second) {
-		return "The term '" + first.getName() + "' is equal to '" + second.getName()  + 
-				"' in block '" + ((Class) first.getOwner()).getName() + "'";
-	}
-
-	protected String similarMsg(NamedElement first, ArrayList<String> similarNames) {
-		return "The term '" + first.getName() + "' is very similar to '"
-				+ String.join("' and '", similarNames) + "' in block '" + ((Class) first.getOwner()).getName() + "'";
-	}
-	
-	/**
-	 * Removes macro and event prefixes from the name, and put it in lowercase.
-	 * 
-	 * @param name
-	 * @return
-	 */
-	private String normalizeName(String name) {
-		// if (name.startsWith(RfiAccEntityUtil.MACRO_PREFIX) &&
-		// Character.isUpperCase(name.charAt(RfiAccEntityUtil.MACRO_PREFIX.length())))
-		// {
-		// name = name.substring(RfiAccEntityUtil.MACRO_PREFIX.length());
-		// } else if (name.startsWith(RfiAccEntityUtil.EVENT_PREFIX) &&
-		// Character.isUpperCase(name.charAt(RfiAccEntityUtil.EVENT_PREFIX.length())))
-		// {
-		// name = name.substring(RfiAccEntityUtil.EVENT_PREFIX.length());
-		// }
-
-		return name.toLowerCase();
-	}
-
-	/**
-	 * Computes the Levenshtein distance. Code taken from
-	 * https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Java
-	 * 
-	 * @param lhs
-	 * @param rhs
-	 * @return the distance
-	 */
-	private static int levenshteinDistance(CharSequence lhs, CharSequence rhs) {
-		int len0 = lhs.length() + 1;
-		int len1 = rhs.length() + 1;
-
-		// the array of distances
-		int[] cost = new int[len0];
-		int[] newcost = new int[len0];
-
-		// initial cost of skipping prefix in String s0
-		for (int i = 0; i < len0; i++)
-			cost[i] = i;
-
-		// dynamically computing the array of distances
-
-		// transformation cost for each letter in s1
-		for (int j = 1; j < len1; j++) {
-			// initial cost of skipping prefix in String s1
-			newcost[0] = j;
-
-			// transformation cost for each letter in s0
-			for (int i = 1; i < len0; i++) {
-				// matching current letters in both strings
-				int match = (lhs.charAt(i - 1) == rhs.charAt(j - 1)) ? 0 : 1;
-
-				// computing cost for each transformation
-				int cost_replace = cost[i - 1] + match;
-				int cost_insert = cost[i] + 1;
-				int cost_delete = newcost[i - 1] + 1;
-
-				// keep minimum cost
-				newcost[i] = Math.min(Math.min(cost_insert, cost_delete), cost_replace);
-			}
-
-			// swap cost/newcost arrays
-			int[] swap = cost;
-			cost = newcost;
-			newcost = swap;
-		}
-
-		// the distance is the cost for transforming all letters in both strings
-		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();
-	}
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.impl;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Set;

+import org.apache.log4j.Logger;

+import org.eclipse.core.resources.IMarker;

+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;

+import org.eclipse.uml2.uml.Package;

+import org.eclipse.uml2.uml.Port;

+import org.eclipse.uml2.uml.Property;

+import org.eclipse.uml2.uml.Behavior;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.NamedElement;

+import org.eclipse.uml2.uml.Operation;

+

+/**

+ * Computes the minimum distance among properties inside SysML Blocks.

+ * 

+ * @author cristofo

+ *

+ */

+public class NameDistance extends Checker {

+

+	/** Minimum distance between two elements; below it, marks as suspect. */

+	private int threshold = 2;

+	private Package systemViewPackage;

+	private static final Logger logger = Logger.getLogger(NameDistance.class);

+	private static final String checkerName = "NameDistance";

+

+	/**

+	 * Creates a name distance checker with default threshold.

+	 */

+	public NameDistance() {

+		super(checkerName, getTags());

+	}

+

+	/**

+	 * Creates a name distance checker with the given priority.

+	 * @param priority the priority

+	 */

+	public NameDistance(int priority) {

+		super(checkerName, getTags(), priority);

+	}

+

+	/**

+	 * Creates a name distance checker with the given priority and threshold.

+	 * @param priority the priority

+	 * @param threshold the threshold to use

+	 */

+	public NameDistance(int priority, int threshold) {

+		super(checkerName, getTags(), priority);

+		setThreshold(threshold);

+	}

+

+	/**

+	 * Constructor with explicit tags.

+	 * @param tags the tags identifying this checker

+	 */

+	public NameDistance(Set<String> tags) {

+		super(checkerName, tags);

+	}

+

+	/**

+	 * Constructor with explicit tags and priority.

+	 * @param tags the tags identifying this checker

+	 * @param priority the priority

+	 */

+	public NameDistance(Set<String> tags, int priority) {

+		super(checkerName, tags, priority);

+	}

+

+	/**

+	 * Constructor with explicit tags, priority and threshold.

+	 * @param tags the tags identifying this checker

+	 * @param priority the priority

+	 * @param threshold the threshold to use

+	 */

+	public NameDistance(Set<String> tags, int priority, int threshold) {

+		super(checkerName, tags, priority);

+		setThreshold(threshold);

+	}

+	

+	private static Set<String> getTags() {

+		Set<String> tags = new HashSet<String>();

+		tags.add("fast");

+		tags.add("warnings");

+		tags.add("errors");

+		tags.add("sysml");

+		return tags;

+	}

+

+	public int getThreshold() {

+		return threshold;

+	}

+

+	public void setThreshold(int threshold) {

+		this.threshold = threshold;

+	}

+

+	@Override

+	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {

+		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();

+		Collection<Class> blocks = null;

+		try {

+			blocks = (Collection<Class>) EntityUtil.getInstance().getAllClasses(systemViewPackage);

+		} catch (Exception e) {

+			e.printStackTrace();

+		}

+

+		monitor.beginTask(unifiedName, blocks.size());

+		for (Class block : blocks) {

+			messages.addAll(processBlock(block));

+			if (monitor.isCanceled())

+				throw new Exception("Checker interrupted");

+			monitor.worked(1);

+		}

+		return messages;

+	}

+

+	/**

+	 * Processes the given block.

+	 * 

+	 * @param block

+	 *            the block to process

+	 * @return a list of warnings

+	 */

+	private List<CheckerMessage> processBlock(Class block) {

+		final EList<NamedElement> elements = filterElements(block);

+		return processElements(elements);

+	}

+

+	/**

+	 * Creates the list of elements to be analized. Can be overridden if necessary.

+	 * @param elements

+	 * @return the filtered elements

+	 */

+	protected EList<NamedElement> filterElements(Class block) {

+		final EList<Property> attributes = block.getOwnedAttributes();

+		final EList<Operation> operations = block.getOwnedOperations();

+		final EList<Behavior> behaviors = block.getOwnedBehaviors();

+		final EList<Port> ports = block.getOwnedPorts();

+

+		final EList<NamedElement> elements = new BasicEList<NamedElement>(attributes.size() + 

+				operations.size() + behaviors.size() + ports.size());

+		elements.addAll(attributes);

+		elements.addAll(operations);

+		elements.addAll(behaviors);

+		elements.addAll(ports);

+		return elements;

+	}

+	

+	/**

+	 * Processes the given list of elements.

+	 * 

+	 * @param block

+	 *            the list to process

+	 * @return a list of warnings

+	 */

+	private List<CheckerMessage> processElements(EList<NamedElement> elements) {

+		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();

+

+		for (int i = 0; i < elements.size(); i++) {

+			final NamedElement first = elements.get(i);

+			final String firstName = normalizeName(first.getName());

+			ArrayList<String> similarNames = new ArrayList<String>(2);

+			for (int j = 0; j < elements.size(); j++) {

+				if (j == i)

+					continue;

+				final NamedElement second = elements.get(j);

+

+				final String secondName = normalizeName(second.getName());

+				final int distance = levenshteinDistance(firstName, secondName);

+				logger.debug(firstName + " and " + secondName + " distance = " + distance);

+

+				if (distance == 0) {

+					final String msg = equalsMsg(first, second);

+					messages.add(createMessage(msg, IMarker.SEVERITY_ERROR, first, unifiedName));

+				}

+				if (distance <= threshold) {

+					similarNames.add(second.getName());

+				}

+			}

+

+			// If some similarities are found, store the entry in the warnings

+			if (similarNames.size() > 0) {

+				final String msg = similarMsg(first, similarNames);

+				messages.add(createMessage(msg, IMarker.SEVERITY_WARNING, first, unifiedName));

+			}

+		}

+		return messages;

+	}

+	

+	protected String equalsMsg(NamedElement first, NamedElement second) {

+		return "The term '" + first.getName() + "' is equal to '" + second.getName()  + 

+				"' in block '" + ((Class) first.getOwner()).getName() + "'";

+	}

+

+	protected String similarMsg(NamedElement first, ArrayList<String> similarNames) {

+		return "The term '" + first.getName() + "' is very similar to '"

+				+ String.join("' and '", similarNames) + "' in block '" + ((Class) first.getOwner()).getName() + "'";

+	}

+	

+	/**

+	 * Removes macro and event prefixes from the name, and put it in lowercase.

+	 * 

+	 * @param name

+	 * @return

+	 */

+	private String normalizeName(String name) {

+		// if (name.startsWith(RfiAccEntityUtil.MACRO_PREFIX) &&

+		// Character.isUpperCase(name.charAt(RfiAccEntityUtil.MACRO_PREFIX.length())))

+		// {

+		// name = name.substring(RfiAccEntityUtil.MACRO_PREFIX.length());

+		// } else if (name.startsWith(RfiAccEntityUtil.EVENT_PREFIX) &&

+		// Character.isUpperCase(name.charAt(RfiAccEntityUtil.EVENT_PREFIX.length())))

+		// {

+		// name = name.substring(RfiAccEntityUtil.EVENT_PREFIX.length());

+		// }

+

+		return name.toLowerCase();

+	}

+

+	/**

+	 * Computes the Levenshtein distance. Code taken from

+	 * https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Java

+	 * 

+	 * @param lhs

+	 * @param rhs

+	 * @return the distance

+	 */

+	private static int levenshteinDistance(CharSequence lhs, CharSequence rhs) {

+		int len0 = lhs.length() + 1;

+		int len1 = rhs.length() + 1;

+

+		// the array of distances

+		int[] cost = new int[len0];

+		int[] newcost = new int[len0];

+

+		// initial cost of skipping prefix in String s0

+		for (int i = 0; i < len0; i++)

+			cost[i] = i;

+

+		// dynamically computing the array of distances

+

+		// transformation cost for each letter in s1

+		for (int j = 1; j < len1; j++) {

+			// initial cost of skipping prefix in String s1

+			newcost[0] = j;

+

+			// transformation cost for each letter in s0

+			for (int i = 1; i < len0; i++) {

+				// matching current letters in both strings

+				int match = (lhs.charAt(i - 1) == rhs.charAt(j - 1)) ? 0 : 1;

+

+				// computing cost for each transformation

+				int cost_replace = cost[i - 1] + match;

+				int cost_insert = cost[i] + 1;

+				int cost_delete = newcost[i - 1] + 1;

+

+				// keep minimum cost

+				newcost[i] = Math.min(Math.min(cost_insert, cost_delete), cost_replace);

+			}

+

+			// swap cost/newcost arrays

+			int[] swap = cost;

+			cost = newcost;

+			newcost = swap;

+		}

+

+		// the distance is the cost for transforming all letters in both strings

+		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();

+	}

+}

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 e7c0204..edbe85c 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
@@ -1,322 +1,329 @@
-package org.polarsys.chess.checkers.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.log4j.Logger;
-import org.eclipse.core.resources.IMarker;
-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;
-import org.eclipse.uml2.uml.StateMachine;
-import org.eclipse.uml2.uml.Transition;
-import org.eclipse.uml2.uml.Vertex;
-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;
-
-/**
- * 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;
-	protected static final Logger logger = Logger.getLogger(StateStatus.class);
-	private final EntityUtil entityUtil = EntityUtil.getInstance();
-	private static final String checkerName = "StateStatus";
-
-	/**
-	 * Creates a state checker
-	 */
-	public StateStatus() {
-		super(checkerName, getTags());
-	}
-
-	/**
-	 * Creates a state checker with the given priority
-	 * @param priority the priority
-	 */
-	public StateStatus(int priority) {
-		super(checkerName, getTags(), priority);
-	}
-
-	/**
-	 * Constructor with explicit tags.
-	 * @param tags the tags identifying this checker
-	 */
-	public StateStatus(Set<String> tags) {
-		super(checkerName, tags);
-	}
-
-	/**
-	 * Constructor with explicit tags and priority.
-	 * @param tags the tags identifying this checker
-	 * @param priority the priority
-	 */
-	public StateStatus(Set<String> tags, int priority) {
-		super(checkerName, tags, priority);
-	}
-
-	private static Set<String> getTags() {
-		Set<String> tags = new HashSet<String>();
-		tags.add("fast");
-		tags.add("errors");
-		tags.add("state machine");
-		return tags;
-	}
-
-	@Override
-	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {
-		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();
-		Collection<Class> blocks = null;
-		blocks = getBlocks(systemViewPackage);
-
-		monitor.beginTask(unifiedName, blocks.size());
-		for (Class block : blocks) {
-//			warnings.addAll(checkForDeadAndUnreachableStates(block));
-			messages.addAll(checkForDeadStates(block));
-			messages.addAll(checkForUnreachableStates(block));
-			if (monitor.isCanceled())
-				throw new Exception("Checker interrupted");
-			monitor.worked(1);
-		}
-		return messages;
-	}
-
-	/**
-	 * Returns the blocks that should be checked inside the model. Can be overwritter if necessary.
-	 * @param systemViewPackage
-	 * @return
-	 */
-	protected Collection<Class> getBlocks(Package systemViewPackage) {
-		try {
-			return (Collection<Class>) EntityUtil.getInstance().getAllClasses(systemViewPackage);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-	
-	/**
-	 * A dead state is a state with no transitions to other states.
-	 * @param block
-	 * @return list of errors
-	 */
-	protected List<CheckerMessage> checkForDeadStates(Class block) {
-		List<CheckerMessage> errors = new ArrayList<CheckerMessage>();
-		
-		final Set<StateMachine> stateMachines = entityUtil.getNominalStateMachines(block);
-		if (stateMachines.isEmpty()) {
-			logger.error("No state machines are present in block " + block.getName());			
-		}
-		
-		for (StateMachine stateMachine : stateMachines) {
-			if (stateMachine == null) continue;
-			final String stateMachineName = stateMachine.getName();
-			final Region region = stateMachine.getRegion(null); // Assume that only one region is present
-			if (region == null) {
-				logger.error("State machine " + stateMachineName + " of block " + block.getName() + 
-						" is not valid");
-				continue;
-			}
-			
-			// If there is only one intermediate state, don't do any check
-			if (entityUtil.getIntermediateStates(stateMachine).size() <= 1) continue;
-			
-			final EList<Vertex> states = entityUtil.getStates(stateMachine);
-			final List<String> deadStates = new ArrayList<String>(1);
-			for (Vertex state : states) {
-				if (entityUtil.isFinalState(state)) continue;
-				boolean dead = true;
-				final EList<Transition> outgoingTransitions = entityUtil.getOutgoingTransitions(state);
-				for (Transition transition : outgoingTransitions) {
-					if (entityUtil.getTransitionNextState(transition) != state) {
-						dead = false;
-						break;
-					}
-				}
-				if (dead) {
-					final String msg = deadMsg(state, block);
-					errors.add(createMessage(msg, IMarker.SEVERITY_ERROR, state, unifiedName));
-
-					deadStates.add(state.getName());
-				}
-			}
-			if (deadStates.size() == 0) {
-				logger.debug("State machine " + stateMachineName + ": all states are valid");
-			} else {
-				logger.error("State machine " + stateMachineName + ": the following states are dead: " + 
-						String.join(", ", deadStates));
-			}
-		}
-		
-		return errors;
-	}
-	
-	/**
-	 * An unreachable state is a state that is no reachable from other states.
-	 * @param block
-	 * @return list of errors
-	 */
-	private List<CheckerMessage> checkForUnreachableStates(Class block) {
-		List<CheckerMessage> errors = new ArrayList<CheckerMessage>();
-		
-		final Set<StateMachine> stateMachines = entityUtil.getNominalStateMachines(block);
-		if (stateMachines.isEmpty()) {
-			logger.error("No state machines are present in block " + block.getName());			
-		}
-		
-		for (StateMachine stateMachine : stateMachines) {
-			if (stateMachine == null) continue;
-			final String stateMachineName = stateMachine.getName();
-			final Region region = stateMachine.getRegion(null); // Assume that only one region is present
-			if (region == null) {
-				logger.error("State machine " + stateMachineName + " of block " + block.getName() + 
-						" is not valid");
-				continue;
-			}
-			final EList<Vertex> states = entityUtil.getIntermediateStates(stateMachine);
-			final List<String> unreachableStates = new ArrayList<String>(1);
-			for (Vertex state : states) {
-				boolean unreachable = true;
-				final EList<Transition> incomingTransitions = entityUtil.getIncomingTransitions(state);
-				for (Transition transition : incomingTransitions) {
-					if (entityUtil.getTransitionSourceState(transition) != state) {
-						unreachable = false;
-						break;
-					}
-				}
-				if (unreachable) {
-					final String msg = unreachableMsg(state, block);
-					errors.add(createMessage(msg, IMarker.SEVERITY_ERROR, state, unifiedName));
-					unreachableStates.add(state.getName());					
-				}
-			}
-			if (unreachableStates.size() == 0) {
-				logger.debug("State machine " + stateMachineName + ": all states are valid");
-			} else {
-				logger.error("State machine " + stateMachineName + ": the following states are not reachable: " + 
-						String.join(", ", unreachableStates));
-			}
-		}
-		
-		return errors;
-	}
-
-	/**
-	 * An unreachable state is a state that is no reachable from other states.
-	 * @param block
-	 * @return list of errors
-	 */
-	private List<CheckerMessage> checkForDeadAndUnreachableStates(Class block) {		
-		List<CheckerMessage> errors = new ArrayList<CheckerMessage>();
-		
-		final Set<StateMachine> stateMachines = entityUtil.getNominalStateMachines(block);
-		if (stateMachines.isEmpty()) {
-			logger.error("No state machines are present in block " + block.getName());			
-		}
-		
-		for (StateMachine stateMachine : stateMachines) {
-			if (stateMachine == null) continue;
-			final String stateMachineName = stateMachine.getName();
-			final Region region = stateMachine.getRegion(null); // Assume that only one region is present
-			if (region == null) {
-				logger.error("State machine " + stateMachineName + " of block " + block.getName() + 
-						" is not valid");
-				continue;
-			}
-			final EList<Vertex> states = entityUtil.getStates(stateMachine);
-			final List<String> deadStates = new ArrayList<String>(1);
-			final List<String> unreachableStates = new ArrayList<String>(1);
-
-			int stateCounter = 0;
-			for (Vertex state : states) {
-				if (!entityUtil.isFinalState(state)) {
-					stateCounter++;
-				}
-			}
-			
-			for (Vertex state : states) {
-				boolean dead = false;
-				boolean unreachable = false;
-				if (!entityUtil.isFinalState(state)) {
-					dead = true;
-					final EList<Transition> outgoingTransitions = entityUtil.getOutgoingTransitions(state);
-					for (Transition transition : outgoingTransitions) {
-						if (entityUtil.getTransitionNextState(transition) != state) {
-							dead = false;
-							break;
-						}
-					}					
-				}
-
-				if (!entityUtil.isInitialState(state)) {
-					unreachable = true;
-					final EList<Transition> incomingTransitions = entityUtil.getIncomingTransitions(state);
-					for (Transition transition : incomingTransitions) {
-						if (entityUtil.getTransitionSourceState(transition) != state) {
-							unreachable = false;
-							break;
-						}
-					}
-				}
-
-				if ((dead && stateCounter > 2)) {
-					final String msg = deadMsg(state, block);
-					errors.add(createMessage(msg, IMarker.SEVERITY_ERROR, state, unifiedName));
-					deadStates.add(state.getName());
-				}
-
-				if ((unreachable)) {
-					final String msg = unreachableMsg(state, block);
-					errors.add(createMessage(msg, IMarker.SEVERITY_ERROR, state, unifiedName));
-					unreachableStates.add(state.getName());
-				}
-			}
-			if (deadStates.size() == 0) {
-				logger.debug("State machine " + stateMachineName + ": all states are valid");
-			} else {
-				logger.error("State machine " + stateMachineName + ": the following states are dead: " + 
-						String.join(", ", deadStates));
-			}
-			if (unreachableStates.size() == 0) {
-				logger.debug("State machine " + stateMachineName + ": all states are valid");
-			} else {
-				logger.error("State machine " + stateMachineName + ": the following states are not reachable: " + 
-						String.join(", ", unreachableStates));
-			}
-		}
-		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";
-	}
-	
-	protected String unreachableMsg(Vertex state, Class block) {
-		return "The state '" + state.getName() + "' of block '" + 
-				block.getName() + "' is never reachable";
-	}
-
-	@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
-	}
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.impl;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Set;

+

+import org.apache.log4j.Logger;

+import org.eclipse.core.resources.IMarker;

+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;

+import org.eclipse.uml2.uml.StateMachine;

+import org.eclipse.uml2.uml.Transition;

+import org.eclipse.uml2.uml.Vertex;

+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;

+

+/**

+ * 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;

+	protected static final Logger logger = Logger.getLogger(StateStatus.class);

+	private final EntityUtil entityUtil = EntityUtil.getInstance();

+	private static final String checkerName = "StateStatus";

+

+	/**

+	 * Creates a state checker

+	 */

+	public StateStatus() {

+		super(checkerName, getTags());

+	}

+

+	/**

+	 * Creates a state checker with the given priority

+	 * @param priority the priority

+	 */

+	public StateStatus(int priority) {

+		super(checkerName, getTags(), priority);

+	}

+

+	/**

+	 * Constructor with explicit tags.

+	 * @param tags the tags identifying this checker

+	 */

+	public StateStatus(Set<String> tags) {

+		super(checkerName, tags);

+	}

+

+	/**

+	 * Constructor with explicit tags and priority.

+	 * @param tags the tags identifying this checker

+	 * @param priority the priority

+	 */

+	public StateStatus(Set<String> tags, int priority) {

+		super(checkerName, tags, priority);

+	}

+

+	private static Set<String> getTags() {

+		Set<String> tags = new HashSet<String>();

+		tags.add("fast");

+		tags.add("errors");

+		tags.add("state machine");

+		return tags;

+	}

+

+	@Override

+	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {

+		List<CheckerMessage> messages = new ArrayList<CheckerMessage>();

+		Collection<Class> blocks = null;

+		blocks = getBlocks(systemViewPackage);

+

+		monitor.beginTask(unifiedName, blocks.size());

+		for (Class block : blocks) {

+//			warnings.addAll(checkForDeadAndUnreachableStates(block));

+			messages.addAll(checkForDeadStates(block));

+			messages.addAll(checkForUnreachableStates(block));

+			if (monitor.isCanceled())

+				throw new Exception("Checker interrupted");

+			monitor.worked(1);

+		}

+		return messages;

+	}

+

+	/**

+	 * Returns the blocks that should be checked inside the model. Can be overwritter if necessary.

+	 * @param systemViewPackage

+	 * @return

+	 */

+	protected Collection<Class> getBlocks(Package systemViewPackage) {

+		try {

+			return (Collection<Class>) EntityUtil.getInstance().getAllClasses(systemViewPackage);

+		} catch (Exception e) {

+			e.printStackTrace();

+		}

+		return null;

+	}

+	

+	/**

+	 * A dead state is a state with no transitions to other states.

+	 * @param block

+	 * @return list of errors

+	 */

+	protected List<CheckerMessage> checkForDeadStates(Class block) {

+		List<CheckerMessage> errors = new ArrayList<CheckerMessage>();

+		

+		final Set<StateMachine> stateMachines = entityUtil.getNominalStateMachines(block);

+		if (stateMachines.isEmpty()) {

+			logger.error("No state machines are present in block " + block.getName());			

+		}

+		

+		for (StateMachine stateMachine : stateMachines) {

+			if (stateMachine == null) continue;

+			final String stateMachineName = stateMachine.getName();

+			final Region region = stateMachine.getRegion(null); // Assume that only one region is present

+			if (region == null) {

+				logger.error("State machine " + stateMachineName + " of block " + block.getName() + 

+						" is not valid");

+				continue;

+			}

+			

+			// If there is only one intermediate state, don't do any check

+			if (entityUtil.getIntermediateStates(stateMachine).size() <= 1) continue;

+			

+			final EList<Vertex> states = entityUtil.getStates(stateMachine);

+			final List<String> deadStates = new ArrayList<String>(1);

+			for (Vertex state : states) {

+				if (entityUtil.isFinalState(state)) continue;

+				boolean dead = true;

+				final EList<Transition> outgoingTransitions = entityUtil.getOutgoingTransitions(state);

+				for (Transition transition : outgoingTransitions) {

+					if (entityUtil.getTransitionNextState(transition) != state) {

+						dead = false;

+						break;

+					}

+				}

+				if (dead) {

+					final String msg = deadMsg(state, block);

+					errors.add(createMessage(msg, IMarker.SEVERITY_ERROR, state, unifiedName));

+

+					deadStates.add(state.getName());

+				}

+			}

+			if (deadStates.size() == 0) {

+				logger.debug("State machine " + stateMachineName + ": all states are valid");

+			} else {

+				logger.error("State machine " + stateMachineName + ": the following states are dead: " + 

+						String.join(", ", deadStates));

+			}

+		}

+		

+		return errors;

+	}

+	

+	/**

+	 * An unreachable state is a state that is no reachable from other states.

+	 * @param block

+	 * @return list of errors

+	 */

+	private List<CheckerMessage> checkForUnreachableStates(Class block) {

+		List<CheckerMessage> errors = new ArrayList<CheckerMessage>();

+		

+		final Set<StateMachine> stateMachines = entityUtil.getNominalStateMachines(block);

+		if (stateMachines.isEmpty()) {

+			logger.error("No state machines are present in block " + block.getName());			

+		}

+		

+		for (StateMachine stateMachine : stateMachines) {

+			if (stateMachine == null) continue;

+			final String stateMachineName = stateMachine.getName();

+			final Region region = stateMachine.getRegion(null); // Assume that only one region is present

+			if (region == null) {

+				logger.error("State machine " + stateMachineName + " of block " + block.getName() + 

+						" is not valid");

+				continue;

+			}

+			final EList<Vertex> states = entityUtil.getIntermediateStates(stateMachine);

+			final List<String> unreachableStates = new ArrayList<String>(1);

+			for (Vertex state : states) {

+				boolean unreachable = true;

+				final EList<Transition> incomingTransitions = entityUtil.getIncomingTransitions(state);

+				for (Transition transition : incomingTransitions) {

+					if (entityUtil.getTransitionSourceState(transition) != state) {

+						unreachable = false;

+						break;

+					}

+				}

+				if (unreachable) {

+					final String msg = unreachableMsg(state, block);

+					errors.add(createMessage(msg, IMarker.SEVERITY_ERROR, state, unifiedName));

+					unreachableStates.add(state.getName());					

+				}

+			}

+			if (unreachableStates.size() == 0) {

+				logger.debug("State machine " + stateMachineName + ": all states are valid");

+			} else {

+				logger.error("State machine " + stateMachineName + ": the following states are not reachable: " + 

+						String.join(", ", unreachableStates));

+			}

+		}

+		

+		return errors;

+	}

+

+	/**

+	 * An unreachable state is a state that is no reachable from other states.

+	 * @param block

+	 * @return list of errors

+	 */

+	private List<CheckerMessage> checkForDeadAndUnreachableStates(Class block) {		

+		List<CheckerMessage> errors = new ArrayList<CheckerMessage>();

+		

+		final Set<StateMachine> stateMachines = entityUtil.getNominalStateMachines(block);

+		if (stateMachines.isEmpty()) {

+			logger.error("No state machines are present in block " + block.getName());			

+		}

+		

+		for (StateMachine stateMachine : stateMachines) {

+			if (stateMachine == null) continue;

+			final String stateMachineName = stateMachine.getName();

+			final Region region = stateMachine.getRegion(null); // Assume that only one region is present

+			if (region == null) {

+				logger.error("State machine " + stateMachineName + " of block " + block.getName() + 

+						" is not valid");

+				continue;

+			}

+			final EList<Vertex> states = entityUtil.getStates(stateMachine);

+			final List<String> deadStates = new ArrayList<String>(1);

+			final List<String> unreachableStates = new ArrayList<String>(1);

+

+			int stateCounter = 0;

+			for (Vertex state : states) {

+				if (!entityUtil.isFinalState(state)) {

+					stateCounter++;

+				}

+			}

+			

+			for (Vertex state : states) {

+				boolean dead = false;

+				boolean unreachable = false;

+				if (!entityUtil.isFinalState(state)) {

+					dead = true;

+					final EList<Transition> outgoingTransitions = entityUtil.getOutgoingTransitions(state);

+					for (Transition transition : outgoingTransitions) {

+						if (entityUtil.getTransitionNextState(transition) != state) {

+							dead = false;

+							break;

+						}

+					}					

+				}

+

+				if (!entityUtil.isInitialState(state)) {

+					unreachable = true;

+					final EList<Transition> incomingTransitions = entityUtil.getIncomingTransitions(state);

+					for (Transition transition : incomingTransitions) {

+						if (entityUtil.getTransitionSourceState(transition) != state) {

+							unreachable = false;

+							break;

+						}

+					}

+				}

+

+				if ((dead && stateCounter > 2)) {

+					final String msg = deadMsg(state, block);

+					errors.add(createMessage(msg, IMarker.SEVERITY_ERROR, state, unifiedName));

+					deadStates.add(state.getName());

+				}

+

+				if ((unreachable)) {

+					final String msg = unreachableMsg(state, block);

+					errors.add(createMessage(msg, IMarker.SEVERITY_ERROR, state, unifiedName));

+					unreachableStates.add(state.getName());

+				}

+			}

+			if (deadStates.size() == 0) {

+				logger.debug("State machine " + stateMachineName + ": all states are valid");

+			} else {

+				logger.error("State machine " + stateMachineName + ": the following states are dead: " + 

+						String.join(", ", deadStates));

+			}

+			if (unreachableStates.size() == 0) {

+				logger.debug("State machine " + stateMachineName + ": all states are valid");

+			} else {

+				logger.error("State machine " + stateMachineName + ": the following states are not reachable: " + 

+						String.join(", ", unreachableStates));

+			}

+		}

+		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";

+	}

+	

+	protected String unreachableMsg(Vertex state, Class block) {

+		return "The state '" + state.getName() + "' of block '" + 

+				block.getName() + "' is never reachable";

+	}

+

+	@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/TestChecker1.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/TestChecker1.java
index 391caaa..5259614 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/TestChecker1.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/TestChecker1.java
@@ -1,77 +1,84 @@
-package org.polarsys.chess.checkers.core.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
-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;
-
-
-public class TestChecker1 extends Checker {
-
-	org.eclipse.uml2.uml.Package systemViewPackage;
-	IResource resource;
-	IFile file;
-	public TestChecker1(String unifiedName, Set<String> checkerTags, int priority) {
-		super(unifiedName, checkerTags,priority);
-	}
-
-	@Override
-	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {
-
-		monitor.beginTask(unifiedName, 3);
-		System.out.println("systemViewPackage: "+systemViewPackage);
-		//Resource resource = systemViewPackage.eResource();
-		
-		//IResource resource = getResourceForModel(systemViewPackage);
-		List<CheckerMessage> res = new ArrayList<CheckerMessage>();
-		long time = 0;
-		while(time<10){
-		res.add(new CheckerMessage("StateMachineChecker2 "+time+" priority "+registerPriority, IMarker.SEVERITY_ERROR, systemViewPackage,unifiedName));
-		TimeUnit.SECONDS.sleep(1);
-		time++;
-		monitor.worked(1);
-		}
-		return res;
-	}
-
-	
-	
-	public IResource getResourceForModel(EObject obj) {
-		//org.eclipse.emf.common.util.URI uri = obj.eResource().getURI();
-		org.eclipse.emf.common.util.URI uri = EcoreUtil.getURI(obj);
-		System.out.println("uri: "+uri);
-	        // assuming platform://resource/project/path/to/file
-		String projectStr = uri.segment(1);
-		IPath path = new Path(uri.path()).removeFirstSegments(2);
-		System.out.println("path: "+path);
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectStr);
-		System.out.println("project: "+project);
-		return project.findMember(path);
-	}
-	
-	@Override
-	public void init() throws Exception {
-		systemViewPackage = EntityUtil.getInstance().getCurrentSystemView();
-		//resource = ResourcesPlugin.getWorkspace().getRoot();
-		resource = getResourceForModel(systemViewPackage);
-		file = WorkspaceSynchronizer.getFile(systemViewPackage.eResource());
-		System.out.println("resource: "+resource);
-		
-	}
-
-
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.impl;

+

+import java.util.ArrayList;

+import java.util.List;

+import java.util.Set;

+import java.util.concurrent.TimeUnit;

+import org.eclipse.core.runtime.Path;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;

+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;

+

+

+public class TestChecker1 extends Checker {

+

+	org.eclipse.uml2.uml.Package systemViewPackage;

+	IResource resource;

+	IFile file;

+	public TestChecker1(String unifiedName, Set<String> checkerTags, int priority) {

+		super(unifiedName, checkerTags,priority);

+	}

+

+	@Override

+	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {

+

+		monitor.beginTask(unifiedName, 3);

+		System.out.println("systemViewPackage: "+systemViewPackage);

+		//Resource resource = systemViewPackage.eResource();

+		

+		//IResource resource = getResourceForModel(systemViewPackage);

+		List<CheckerMessage> res = new ArrayList<CheckerMessage>();

+		long time = 0;

+		while(time<10){

+		res.add(new CheckerMessage("StateMachineChecker2 "+time+" priority "+registerPriority, IMarker.SEVERITY_ERROR, systemViewPackage,unifiedName));

+		TimeUnit.SECONDS.sleep(1);

+		time++;

+		monitor.worked(1);

+		}

+		return res;

+	}

+

+	

+	

+	public IResource getResourceForModel(EObject obj) {

+		//org.eclipse.emf.common.util.URI uri = obj.eResource().getURI();

+		org.eclipse.emf.common.util.URI uri = EcoreUtil.getURI(obj);

+		System.out.println("uri: "+uri);

+	        // assuming platform://resource/project/path/to/file

+		String projectStr = uri.segment(1);

+		IPath path = new Path(uri.path()).removeFirstSegments(2);

+		System.out.println("path: "+path);

+		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectStr);

+		System.out.println("project: "+project);

+		return project.findMember(path);

+	}

+	

+	@Override

+	public void init() throws Exception {

+		systemViewPackage = EntityUtil.getInstance().getCurrentSystemView();

+		//resource = ResourcesPlugin.getWorkspace().getRoot();

+		resource = getResourceForModel(systemViewPackage);

+		file = WorkspaceSynchronizer.getFile(systemViewPackage.eResource());

+		System.out.println("resource: "+resource);

+		

+	}

+

+

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/TestChecker2.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/TestChecker2.java
index dec8dc3..8d9dee4 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/TestChecker2.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/impl/TestChecker2.java
@@ -1,56 +1,63 @@
-package org.polarsys.chess.checkers.core.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
-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;
-
-
-public class TestChecker2 extends Checker {
-
-	org.eclipse.uml2.uml.Package systemViewPackage;
-	private IFile file;
-	
-	public TestChecker2(String unifiedName, Set<String> checkerTags) {
-		super(unifiedName,  checkerTags);
-	}
-
-
-	@Override
-	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {
-	
-		monitor.beginTask(unifiedName, 6);
-	
-		List<CheckerMessage> res = new ArrayList<CheckerMessage>();
-		long time = 0;
-		while(time<6){
-		res.add(new CheckerMessage("SysMLChecker1 "+time, IMarker.SEVERITY_ERROR,systemViewPackage,unifiedName));
-		if (monitor.isCanceled()) {
-			System.out.println("monitor.isCanceled()");
-	       throw new Exception();
-	    }
-		TimeUnit.SECONDS.sleep(1);
-		time++;
-		monitor.worked(1);
-		}
-		return res;
-	}
-
-
-	@Override
-	public void init() throws Exception {
-		systemViewPackage = EntityUtil.getInstance().getCurrentSystemView();
-		file = WorkspaceSynchronizer.getFile(systemViewPackage.eResource());
-		
-	}
-
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.impl;

+

+import java.util.ArrayList;

+import java.util.List;

+import java.util.Set;

+import java.util.concurrent.TimeUnit;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.Status;

+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;

+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;

+

+

+public class TestChecker2 extends Checker {

+

+	org.eclipse.uml2.uml.Package systemViewPackage;

+	private IFile file;

+	

+	public TestChecker2(String unifiedName, Set<String> checkerTags) {

+		super(unifiedName,  checkerTags);

+	}

+

+

+	@Override

+	public List<CheckerMessage> check(IProgressMonitor monitor) throws Exception {

+	

+		monitor.beginTask(unifiedName, 6);

+	

+		List<CheckerMessage> res = new ArrayList<CheckerMessage>();

+		long time = 0;

+		while(time<6){

+		res.add(new CheckerMessage("SysMLChecker1 "+time, IMarker.SEVERITY_ERROR,systemViewPackage,unifiedName));

+		if (monitor.isCanceled()) {

+			System.out.println("monitor.isCanceled()");

+	       throw new Exception();

+	    }

+		TimeUnit.SECONDS.sleep(1);

+		time++;

+		monitor.worked(1);

+		}

+		return res;

+	}

+

+

+	@Override

+	public void init() throws Exception {

+		systemViewPackage = EntityUtil.getInstance().getCurrentSystemView();

+		file = WorkspaceSynchronizer.getFile(systemViewPackage.eResource());

+		

+	}

+

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/utils/HashCodeUtils.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/utils/HashCodeUtils.java
index ba09ca4..b17d297 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/utils/HashCodeUtils.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/utils/HashCodeUtils.java
@@ -1,78 +1,85 @@
-package org.polarsys.chess.checkers.core.utils;
-
-import java.util.Objects;
-
-import org.apache.log4j.Logger;
-import org.eclipse.uml2.uml.Class;
-import org.eclipse.uml2.uml.Enumeration;
-import org.eclipse.uml2.uml.EnumerationLiteral;
-import org.eclipse.uml2.uml.Package;
-import org.eclipse.uml2.uml.Property;
-import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
-
-public class HashCodeUtils {
-	private static final Logger logger = Logger.getLogger(HashCodeUtils.class);
-
-	public int hashCodeStructuralPart(Package mainPackage) throws Exception {
-		int hash = 0;
-		for (Class clazz : EntityUtil.getInstance().getAllClasses(mainPackage)) {
-			int hashClass = hashCodeClassStructuralPart(clazz);
-			hash = Objects.hash(hash, hashClass);
-		}
-
-		logger.warn("hash for classes: " + hash);
-
-		int hashEnums = Objects.hash(EntityUtil.getInstance().getAllEnumeratives(mainPackage));
-		for (Enumeration enumeration : EntityUtil.getInstance().getAllEnumeratives(mainPackage)) {
-			int hashEnum = hashCodeEnumeration(enumeration);
-			hash = Objects.hash(hash, hashEnum);
-		}
-
-		logger.warn("hash for enums: " + hashEnums);
-
-		hash = Objects.hash(hash, hashEnums);
-
-		return hash;
-	}
-
-	public int hashCodeClassStructuralPart(Class clazz) {
-		int hash = clazz.getName().hashCode();
-		for (Property property : clazz.allAttributes()) {
-			int hashProperty = hashCodeAttribute(property);
-			hash = Objects.hash(hash, hashProperty);
-		}
-
-		logger.warn("hash for class " + clazz.getName() + ": " + hash);
-
-		return hash;
-	}
-
-	public int hashCodeAttribute(Property property) {
-
-		int hash = Objects.hash(property.getName(), property.getType().getName());
-		logger.warn("hash for property " + property.getName() + ": " + hash);
-
-		return hash;
-	}
-
-	public int hashCodeEnumeration(Enumeration enumeration) {
-
-		int hash = enumeration.hashCode();
-		for (EnumerationLiteral literal : enumeration.getOwnedLiterals()) {
-			int hashLiteral = hashCodeLiteral(literal);
-			hash = Objects.hash(hash, hashLiteral);
-		}
-
-		logger.warn("hash for enum " + enumeration.getName() + ": " + hash);
-
-		return hash;
-	}
-
-	public int hashCodeLiteral(EnumerationLiteral literal) {
-
-		int hash = literal.getName().hashCode();
-		logger.warn("hash for literal " + literal.getName() + ": " + hash);
-
-		return hash;
-	}
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.core.utils;

+

+import java.util.Objects;

+

+import org.apache.log4j.Logger;

+import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Enumeration;

+import org.eclipse.uml2.uml.EnumerationLiteral;

+import org.eclipse.uml2.uml.Package;

+import org.eclipse.uml2.uml.Property;

+import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;

+

+public class HashCodeUtils {

+	private static final Logger logger = Logger.getLogger(HashCodeUtils.class);

+

+	public int hashCodeStructuralPart(Package mainPackage) throws Exception {

+		int hash = 0;

+		for (Class clazz : EntityUtil.getInstance().getAllClasses(mainPackage)) {

+			int hashClass = hashCodeClassStructuralPart(clazz);

+			hash = Objects.hash(hash, hashClass);

+		}

+

+		logger.warn("hash for classes: " + hash);

+

+		int hashEnums = Objects.hash(EntityUtil.getInstance().getAllEnumeratives(mainPackage));

+		for (Enumeration enumeration : EntityUtil.getInstance().getAllEnumeratives(mainPackage)) {

+			int hashEnum = hashCodeEnumeration(enumeration);

+			hash = Objects.hash(hash, hashEnum);

+		}

+

+		logger.warn("hash for enums: " + hashEnums);

+

+		hash = Objects.hash(hash, hashEnums);

+

+		return hash;

+	}

+

+	public int hashCodeClassStructuralPart(Class clazz) {

+		int hash = clazz.getName().hashCode();

+		for (Property property : clazz.allAttributes()) {

+			int hashProperty = hashCodeAttribute(property);

+			hash = Objects.hash(hash, hashProperty);

+		}

+

+		logger.warn("hash for class " + clazz.getName() + ": " + hash);

+

+		return hash;

+	}

+

+	public int hashCodeAttribute(Property property) {

+

+		int hash = Objects.hash(property.getName(), property.getType().getName());

+		logger.warn("hash for property " + property.getName() + ": " + hash);

+

+		return hash;

+	}

+

+	public int hashCodeEnumeration(Enumeration enumeration) {

+

+		int hash = enumeration.hashCode();

+		for (EnumerationLiteral literal : enumeration.getOwnedLiterals()) {

+			int hashLiteral = hashCodeLiteral(literal);

+			hash = Objects.hash(hash, hashLiteral);

+		}

+

+		logger.warn("hash for enum " + enumeration.getName() + ": " + hash);

+

+		return hash;

+	}

+

+	public int hashCodeLiteral(EnumerationLiteral literal) {

+

+		int hash = literal.getName().hashCode();

+		logger.warn("hash for literal " + literal.getName() + ": " + hash);

+

+		return hash;

+	}

+}

diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/ui/commands/RunCheckers.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/ui/commands/RunCheckers.java
index 237e113..502f6c2 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/ui/commands/RunCheckers.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/ui/commands/RunCheckers.java
@@ -1,31 +1,38 @@
-package org.polarsys.chess.checkers.ui.commands;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.polarsys.chess.checkers.Activator;
-import eu.fbk.eclipse.standardtools.utils.ui.utils.DialogUtil;
-
-import org.apache.log4j.Logger;
-
-public class RunCheckers extends AbstractHandler {
-
-	private static final Logger logger = Logger.getLogger(RunCheckers.class);
-
-	public RunCheckers() {
-	}
-
-	@Override
-	public Object execute(ExecutionEvent event) throws ExecutionException {
-		try {
-			Activator.getCheckerManager().run(Activator.getDefault().getTags());
-		} catch (Exception e) {
-			e.printStackTrace();
-			logger.error(e);
-			DialogUtil.getInstance().showMessage_ExceptionError(e);
-		}
-
-		return null;
-	}
-
-}
+/*******************************************************************************

+ * Copyright (C) 2020 Fondazione Bruno Kessler.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ ******************************************************************************/

+package org.polarsys.chess.checkers.ui.commands;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.polarsys.chess.checkers.Activator;

+import eu.fbk.eclipse.standardtools.utils.ui.utils.DialogUtil;

+

+import org.apache.log4j.Logger;

+

+public class RunCheckers extends AbstractHandler {

+

+	private static final Logger logger = Logger.getLogger(RunCheckers.class);

+

+	public RunCheckers() {

+	}

+

+	@Override

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		try {

+			Activator.getCheckerManager().run(Activator.getDefault().getTags());

+		} catch (Exception e) {

+			e.printStackTrace();

+			logger.error(e);

+			DialogUtil.getInstance().showMessage_ExceptionError(e);

+		}

+

+		return null;

+	}

+

+}