diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/dialogs/SelectedElementContentDialog.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/dialogs/SelectedElementContentDialog.java
index 8de6d96..09c16ec 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/dialogs/SelectedElementContentDialog.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/dialogs/SelectedElementContentDialog.java
@@ -79,8 +79,7 @@
 				new org.eclipse.app4mc.emf.metamodelviewer.views.providers.ViewContentProvider());
 		this.tv.setLabelProvider(new org.eclipse.app4mc.emf.metamodelviewer.views.providers.ViewLabelProvider());
 
-		final Entry<String, EObject> entry = new AbstractMap.SimpleEntry<String, EObject>("Selected Element",
-				this.eObject);
+		final Entry<String, EObject> entry = new AbstractMap.SimpleEntry<>("Selected Element", this.eObject);
 
 		this.tv.setInput(entry);
 
@@ -96,7 +95,7 @@
 
 				IContributionItem[] menuItems = super.getItems();
 
-				final List<IContributionItem> filteredContributionItems = new LinkedList<IContributionItem>();
+				final List<IContributionItem> filteredContributionItems = new LinkedList<>();
 
 				for (final IContributionItem contributionItem : menuItems) {
 					if (contributionItem != null && (contributionItem.getId() != null && (!(contributionItem.getId()
@@ -156,7 +155,6 @@
 
 						new SelectedElementContentDialog(parentShell, getIWorkbenchPartSite(), (EObject) firstElement)
 								.open();
-
 					}
 				}
 			}
@@ -168,8 +166,6 @@
 		super.configureShell(newShell);
 
 		final String name = ((this.eObject instanceof EClass) ? ((EClass) this.eObject).getName() : "");
-
-		// newShell.setText("Details of : " + this.eObject.eClass().getName() + " " + name);
 		newShell.setText(name);
 
 		//
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java
index 33bf14b..e810976 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java
@@ -20,10 +20,12 @@
  */
 public class MetaModelViewerPreferenceConstants {
 
+	// Suppress default constructor
+	private MetaModelViewerPreferenceConstants() {
+		throw new IllegalStateException("Utility class");
+	}
+
 	public static final String P_DIALOG_DISPLAY = "P_DIALOG_DISPLAY";
-
 	public static final String V_ON_TOP = "On Top";
-
 	public static final String V_DEFAUT = "Default";
-
 }
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferencePage.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferencePage.java
index 4fdf827..7642e00 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferencePage.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferencePage.java
@@ -42,7 +42,6 @@
 
 		addField(new ComboFieldEditor(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY,
 				"&Configure the way child dialogs should be displayed", options, getFieldEditorParent()));
-
 	}
 
 	/*
@@ -51,6 +50,7 @@
 	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
 	 */
 	public void init(final IWorkbench workbench) {
+		// no specific initialization required
 	}
 
 }
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java
index e57bad8..f1a24eb 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java
@@ -37,6 +37,11 @@
 
 public class RegisterECOREfilesAction {
 
+	// Suppress default constructor
+	private RegisterECOREfilesAction() {
+		throw new IllegalStateException("Utility class");
+	}
+	
 	@SuppressWarnings({ "unused", "rawtypes", "unchecked" })
 	public static ResourceSet loadECOREs(List<String> ecoreFiles, ComboViewer combo_ecore) throws IOException {
 
@@ -58,8 +63,6 @@
 
 		// resourceSet.getURIConverter().getURIMap().putAll(EcorePlugin.computePlatformURIMap(true));
 
-		EcorePackage ecorePackage = EcorePackage.eINSTANCE;
-
 		// register Ecore model in resourceSet registry
 		Map packageRegistry = metaDataResourceSet.getPackageRegistry();
 
@@ -109,7 +112,7 @@
 //		Resource metaResource = metaResourceSet.getResource(URI.createURI(path), true);
 		Resource metaResource = metaResourceSet.getResource(URI.createFileURI(path), true);
 
-		metaResource.load(Collections.EMPTY_MAP);
+		metaResource.load(Collections.emptyMap());
 
 		EObject eObject = metaResource.getContents().get(0);
 
@@ -122,4 +125,5 @@
 		File file = new File(path);
 		return file.getCanonicalPath();
 	}
+
 }
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SubClassesListBuilder.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SubClassesListBuilder.java
index d0a6fbc..b62900a 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SubClassesListBuilder.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SubClassesListBuilder.java
@@ -38,7 +38,7 @@
 
 	private boolean isCalculated;
 
-	final Set<EClass> allSubClasses = new HashSet<EClass>();
+	final Set<EClass> allSubClasses = new HashSet<>();
 
 	public Set<EClass> getAllSubClasses() {
 
@@ -62,7 +62,7 @@
 
 	private List<EClass> getSubClasses(final EClass selectedObjClass) {
 
-		final List<EClass> allSubClasses = new ArrayList<EClass>();
+		final List<EClass> allSubClasses = new ArrayList<>();
 
 		final ResourceSet resourceSet = selectedObjClass.eResource().getResourceSet();
 
@@ -112,7 +112,7 @@
 
 	private List<EClass> getSubClasses(final EClass selectedObjClass, final EPackage ePackage) {
 
-		final List<EClass> allSubClasses = new ArrayList<EClass>();
+		final List<EClass> allSubClasses = new ArrayList<>();
 
 		EList<EPackage> eSubpackages = ePackage.getESubpackages();
 
@@ -126,7 +126,7 @@
 
 			if (eClassifier instanceof EClass) {
 
-				if (!(selectedObjClass == eClassifier) && selectedObjClass.isSuperTypeOf((EClass) eClassifier)) {
+				if (selectedObjClass != eClassifier && selectedObjClass.isSuperTypeOf((EClass) eClassifier)) {
 					allSubClasses.add((EClass) eClassifier);
 				}
 
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SuperClassesListBuilder.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SuperClassesListBuilder.java
index 8d38bf2..884b300 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SuperClassesListBuilder.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SuperClassesListBuilder.java
@@ -27,7 +27,7 @@
 
 	private boolean isCalculated;
 
-	final Set<EClass> allSuperClasses = new HashSet<EClass>();
+	final Set<EClass> allSuperClasses = new HashSet<>();
 
 	public SuperClassesListBuilder(final EClass eClass) {
 		this.eClass = eClass;
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java
index dea0599..8d96cf9 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java
@@ -36,7 +36,6 @@
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.MenuManager;
@@ -44,8 +43,6 @@
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.TreeSelection;
@@ -86,11 +83,6 @@
 	private ElementSearchPatternFilter patternFilter;
 	private ComboViewer combo_ecore;
 
-	/**
-	 * The constructor.
-	 */
-	public MetaModelExplorerView() {
-	}
 
 	/**
 	 * This is a callback that will allow us to create the viewer and initialize it.
@@ -130,7 +122,7 @@
 			}
 		});
 
-		ArrayList<String> arrayList = new ArrayList<String>(keySet);
+		ArrayList<String> arrayList = new ArrayList<>(keySet);
 
 		Collections.sort(arrayList);
 
@@ -216,7 +208,7 @@
 			public IContributionItem[] getItems() {
 				IContributionItem[] menuItems = super.getItems();
 
-				final List<IContributionItem> filteredContributionItems = new LinkedList<IContributionItem>();
+				final List<IContributionItem> filteredContributionItems = new LinkedList<>();
 
 				for (final IContributionItem contributionItem : menuItems) {
 					if ((contributionItem != null) && ((contributionItem.getId() != null) && (!(contributionItem.getId()
@@ -232,12 +224,7 @@
 		};
 
 		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(new IMenuListener() {
-			@Override
-			public void menuAboutToShow(final IMenuManager manager) {
-				MetaModelExplorerView.this.fillContextMenu(manager);
-			}
-		});
+		menuMgr.addMenuListener(MetaModelExplorerView.this::fillContextMenu);
 
 		final Menu menu = menuMgr.createContextMenu(this.viewer.getControl());
 		this.viewer.getControl().setMenu(menu);
@@ -295,11 +282,7 @@
 		this.filterAttributesAction = new Action("Filter for Attributes", IAction.AS_CHECK_BOX) {
 			@Override
 			public void run() {
-				if (isChecked()) {
-					setFilterForAttributesBoolean(true);
-				} else {
-					setFilterForAttributesBoolean(false);
-				}
+				setFilterForAttributesBoolean(isChecked());
 			}
 		};
 		this.filterAttributesAction.setToolTipText("Filter for Attributes");
@@ -334,7 +317,7 @@
 					return;
 				}
 
-				List<String> files = new ArrayList<String>();
+				List<String> files = new ArrayList<>();
 
 				for (String fileName : dialog.getFileNames()) {
 					String filePath = dialog.getFilterPath() + File.separator + fileName;
@@ -345,12 +328,9 @@
 				try {
 					RegisterECOREfilesAction.loadECOREs(files, combo_ecore);
 				} catch (Exception e) {
-					Display.getDefault().asyncExec(new Runnable() {
-						@Override
-						public void run() {
-							MessageDialog.openError(Display.getDefault().getActiveShell(), "Error", e.getMessage());
-						}
-					});
+					Display.getDefault().asyncExec(
+						() -> MessageDialog.openError(Display.getDefault().getActiveShell(), "Error", e.getMessage())
+					);
 				}
 			}
 		};
@@ -359,9 +339,8 @@
 	}
 
 	private void hookDoubleClickAction() {
-		this.viewer.addDoubleClickListener(new IDoubleClickListener() {
-			@Override
-			public void doubleClick(final DoubleClickEvent event) {
+		this.viewer.addDoubleClickListener(
+			event -> {
 				final ISelection selection = event.getSelection();
 
 				if (selection instanceof TreeSelection) {
@@ -399,7 +378,7 @@
 					}
 				}
 			}
-		});
+		);
 	}
 
 	/**
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewContentProvider.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewContentProvider.java
index aa2519d..551c7e9 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewContentProvider.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewContentProvider.java
@@ -37,7 +37,6 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.ETypeParameter;
 import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor;
 
 public class ViewContentProvider implements ITreeContentProvider {
@@ -54,19 +53,19 @@
 			final EList<EPackage> eSubpackages = ((EPackage) parent).getESubpackages();
 			final EList<EClassifier> eClassifiers = ((EPackage) parent).getEClassifiers();
 
-			final ArrayList<EPackage> arrayList1 = new ArrayList<EPackage>();
+			final ArrayList<EPackage> arrayList1 = new ArrayList<>();
 
 			arrayList1.addAll(eSubpackages);
 
 			Collections.sort(arrayList1, this.comparator);
 
-			final ArrayList<EClassifier> arrayList2 = new ArrayList<EClassifier>();
+			final ArrayList<EClassifier> arrayList2 = new ArrayList<>();
 
 			arrayList2.addAll(eClassifiers);
 
 			Collections.sort(arrayList2, this.comparator);
 
-			final List<ENamedElement> combinedList = new ArrayList<ENamedElement>();
+			final List<ENamedElement> combinedList = new ArrayList<>();
 
 			combinedList.addAll(arrayList1);
 			combinedList.addAll(arrayList2);
@@ -102,19 +101,19 @@
 			final EList<EPackage> eSubpackages = ((EPackage) parent).getESubpackages();
 			final EList<EClassifier> eClassifiers = ((EPackage) parent).getEClassifiers();
 
-			final ArrayList<EPackage> arrayList1 = new ArrayList<EPackage>();
+			final ArrayList<EPackage> arrayList1 = new ArrayList<>();
 
 			arrayList1.addAll(eSubpackages);
 
 			Collections.sort(arrayList1, this.comparator);
 
-			final ArrayList<EClassifier> arrayList2 = new ArrayList<EClassifier>();
+			final ArrayList<EClassifier> arrayList2 = new ArrayList<>();
 
 			arrayList2.addAll(eClassifiers);
 
 			Collections.sort(arrayList2, this.comparator);
 
-			final List<ENamedElement> combinedList = new ArrayList<ENamedElement>();
+			final List<ENamedElement> combinedList = new ArrayList<>();
 
 			combinedList.addAll(arrayList1);
 			combinedList.addAll(arrayList2);
@@ -134,15 +133,12 @@
 			int index = 0;
 
 			final SuperClassesListBuilder superClassList = new SuperClassesListBuilder((EClass) parent);
-
-			if (superClassList.getAllSuperClasses().size() > 0) {
+			if (!superClassList.getAllSuperClasses().isEmpty()) {
 				list.add(index++, superClassList);
 			}
 
 			final SubClassesListBuilder SubClassesListBuilder = new SubClassesListBuilder((EClass) parent);
-
-			if (SubClassesListBuilder.getAllSubClasses().size() > 0) {
-
+			if (!SubClassesListBuilder.getAllSubClasses().isEmpty()) {
 				list.add(index++, SubClassesListBuilder);
 			}
 
@@ -153,7 +149,7 @@
 
 				final EList<EEnumLiteral> eLiterals = ((EEnum) parent).getELiterals();
 
-				final List<ENamedElement> list = new ArrayList<ENamedElement>();
+				final List<ENamedElement> list = new ArrayList<>();
 
 				list.addAll(eLiterals);
 
@@ -164,7 +160,7 @@
 
 			final EList<ETypeParameter> eTypeParameters = ((EDataType) parent).getETypeParameters();
 
-			final List<ENamedElement> list = new ArrayList<ENamedElement>();
+			final List<ENamedElement> list = new ArrayList<>();
 
 			list.addAll(eTypeParameters);
 
@@ -175,7 +171,7 @@
 
 			final EList<EEnumLiteral> eLiterals = ((EEnum) parent).getELiterals();
 
-			final List<ENamedElement> list = new ArrayList<ENamedElement>();
+			final List<ENamedElement> list = new ArrayList<>();
 
 			list.addAll(eLiterals);
 
@@ -184,12 +180,12 @@
 			return list.toArray();
 		} else if (parent instanceof SuperClassesListBuilder) {
 			final Set<EClass> allSuperClasses = ((SuperClassesListBuilder) parent).getAllSuperClasses();
-			final ArrayList<ENamedElement> arrayList = new ArrayList<ENamedElement>(allSuperClasses);
+			final ArrayList<ENamedElement> arrayList = new ArrayList<>(allSuperClasses);
 			Collections.sort(arrayList, this.comparator);
 			return arrayList.toArray();
 		} else if (parent instanceof SubClassesListBuilder) {
 			final Set<EClass> allSubClasses = ((SubClassesListBuilder) parent).getAllSubClasses();
-			final ArrayList<ENamedElement> arrayList = new ArrayList<ENamedElement>(allSubClasses);
+			final ArrayList<ENamedElement> arrayList = new ArrayList<>(allSubClasses);
 			Collections.sort(arrayList, this.comparator);
 			return arrayList.toArray();
 		} else if (parent instanceof EStructuralFeature) {
@@ -204,54 +200,38 @@
 
 	@Override
 	public boolean hasChildren(final Object parent) {
-		if (parent instanceof EPackage) {
+		if (parent instanceof EPackage || parent instanceof EClass || parent instanceof EStructuralFeature) {
 			return true;
-		} else if (parent instanceof EClass) {
-			return true;
-		} else if (parent instanceof EDataType) {
+		} 
 
-			if (parent instanceof EEnum) {
-				return ((EEnum) parent).getELiterals().size() > 0;
-			}
-			return ((EDataType) parent).getETypeParameters().size() > 0;
-		} else if (parent instanceof EEnum) {
-			return ((EEnum) parent).getELiterals().size() > 0;
+		// order is important: EEnum is a sub interface of EDataType
+		if (parent instanceof EEnum) {
+			return !((EEnum) parent).getELiterals().isEmpty();
+		}
+		
+		if (parent instanceof EDataType) {
+			return !((EDataType) parent).getETypeParameters().isEmpty();
 		}
 
-		else if (parent instanceof EStructuralFeature) {
-			return true;
+		if (parent instanceof SuperClassesListBuilder) {
+			return !((SuperClassesListBuilder) parent).getAllSuperClasses().isEmpty();
 		}
 
-		else if (parent instanceof SuperClassesListBuilder) {
-			return ((SuperClassesListBuilder) parent).getAllSuperClasses().size() > 0;
-		} else if (parent instanceof SubClassesListBuilder) {
-			return ((SubClassesListBuilder) parent).getAllSubClasses().size() > 0;
-		} else if (parent instanceof EEnumLiteral) {
+		if (parent instanceof SubClassesListBuilder) {
+			return !((SubClassesListBuilder) parent).getAllSubClasses().isEmpty();
+		}
+
+		if (parent instanceof EEnumLiteral) {
 			return false;
-		} else if (parent instanceof TypeElement) {
+		}
+
+		if (parent instanceof TypeElement) {
 			return true;
 		}
+		
 		return true;
 	}
 
-	@Override
-	public void dispose() {
-		// Auto-generated method stub
+	final Comparator<ENamedElement> comparator = ( (arg0, arg1) -> arg0.getName().compareTo(arg1.getName()) );
 
-	}
-
-	@Override
-	public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
-		// Auto-generated method stub
-
-	}
-
-	final Comparator<ENamedElement> comparator = new Comparator<ENamedElement>() {
-
-		@Override
-		public int compare(final ENamedElement arg0, final ENamedElement arg1) {
-			return arg0.getName().compareTo(arg1.getName());
-		}
-	};
-
-}
\ No newline at end of file
+}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/builders/EObjectRefsBuilder.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/builders/EObjectRefsBuilder.java
index 5438e70..d837aa0 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/builders/EObjectRefsBuilder.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/builders/EObjectRefsBuilder.java
@@ -112,7 +112,7 @@
 										: (allRefSettings.size() - 1));
 
 					} else {
-						subList = new ArrayList<Setting>(allRefSettings).subList(0, 99);
+						subList = new ArrayList<>(allRefSettings).subList(0, 99);
 					}
 					
 					allRefSettings.clear();
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/views/DiagramView.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/views/DiagramView.java
index 9ff0cfb..80efcad 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/views/DiagramView.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/views/DiagramView.java
@@ -15,10 +15,11 @@
 
 package org.eclipse.app4mc.emf.viewer.plantuml.views;
 
+import java.util.ArrayDeque;
 import java.util.Arrays;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Stack;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -103,7 +104,7 @@
 			value = PreferenceConstants.P_FOLDER_PATH) 
 	String genFolderPath;
 	
-	private Stack<String> history = new Stack<>();
+	private Deque<String> history = new ArrayDeque<>();
 	
 	/**
 	 * This is a callback that will allow us to create the viewer and initialize it.
@@ -112,7 +113,7 @@
 	public void createPartControl(Composite parent, MPart part) {
 		Map<String, String> state = part.getPersistedState();
 	    String value = state.get(LINKED_KEY);
-	    this.linkedWithEditor = value != null ? Boolean.valueOf(value) : false;
+	    this.linkedWithEditor = value != null && Boolean.valueOf(value);
 	    
 		this.browser = new Browser(parent, SWT.None);
 		this.browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
