diff --git a/bundles/org.eclipse.e4.core.di/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.e4.core.di/.settings/org.eclipse.jdt.core.prefs
index f67d59b..54ee96e 100644
--- a/bundles/org.eclipse.e4.core.di/.settings/org.eclipse.jdt.core.prefs
+++ b/bundles/org.eclipse.e4.core.di/.settings/org.eclipse.jdt.core.prefs
@@ -9,8 +9,11 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
@@ -71,19 +74,21 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=warning
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
diff --git a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/di/suppliers/PrimaryObjectSupplier.java b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/di/suppliers/PrimaryObjectSupplier.java
index c9fcf6f..d74f27e 100644
--- a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/di/suppliers/PrimaryObjectSupplier.java
+++ b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/di/suppliers/PrimaryObjectSupplier.java
@@ -68,6 +68,6 @@
 	 * @return a new weak reference to the object
 	 */
 	public WeakReference<Object> makeReference(Object object) {
-		return new WeakReference<Object>(object);
+		return new WeakReference<>(object);
 	}
 }
diff --git a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/InjectorImpl.java b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/InjectorImpl.java
index 2074f42..544ed9e 100644
--- a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/InjectorImpl.java
+++ b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/InjectorImpl.java
@@ -96,19 +96,19 @@
 	final private static Short DEFAULT_SHORT = new Short((short) 0);
 	final private static Byte DEFAULT_BYTE = new Byte((byte) 0);
 
-	private Map<PrimaryObjectSupplier, List<WeakReference<?>>> injectedObjects = new HashMap<PrimaryObjectSupplier, List<WeakReference<?>>>();
-	private Set<WeakReference<Class<?>>> injectedClasses = new HashSet<WeakReference<Class<?>>>();
-	private HashMap<Class<?>, Object> singletonCache = new HashMap<Class<?>, Object>();
-	private Map<Class<?>, Set<Binding>> bindings = new HashMap<Class<?>, Set<Binding>>();
+	private Map<PrimaryObjectSupplier, List<WeakReference<?>>> injectedObjects = new HashMap<>();
+	private Set<WeakReference<Class<?>>> injectedClasses = new HashSet<>();
+	private HashMap<Class<?>, Object> singletonCache = new HashMap<>();
+	private Map<Class<?>, Set<Binding>> bindings = new HashMap<>();
 	private Map<Class<? extends Annotation>, Map<AnnotatedElement, Boolean>> annotationsPresent = new HashMap<>();
 
 	// Performance improvement:
-	private Map<Class<?>, Method[]> methodsCache = new WeakHashMap<Class<?>, Method[]>();
-	private Map<Class<?>, Field[]> fieldsCache = new WeakHashMap<Class<?>, Field[]>();
-	private Map<Class<?>, Constructor<?>[]> constructorsCache = new WeakHashMap<Class<?>, Constructor<?>[]>();
-	private Map<Class<?>, Map<Method, Boolean>> isOverriddenCache = new WeakHashMap<Class<?>, Map<Method, Boolean>>();
+	private Map<Class<?>, Method[]> methodsCache = new WeakHashMap<>();
+	private Map<Class<?>, Field[]> fieldsCache = new WeakHashMap<>();
+	private Map<Class<?>, Constructor<?>[]> constructorsCache = new WeakHashMap<>();
+	private Map<Class<?>, Map<Method, Boolean>> isOverriddenCache = new WeakHashMap<>();
 
-	private Set<Class<?>> classesBeingCreated = new HashSet<Class<?>>(5);
+	private Set<Class<?>> classesBeingCreated = new HashSet<>(5);
 
 	private PrimaryObjectSupplier defaultSupplier;
 
@@ -123,7 +123,7 @@
 
 	public void inject(Object object, PrimaryObjectSupplier objectSupplier, PrimaryObjectSupplier tempSupplier) {
 		// Two stages: first, go and collect {requestor, descriptor[] }
-		ArrayList<Requestor<?>> requestors = new ArrayList<Requestor<?>>();
+		ArrayList<Requestor<?>> requestors = new ArrayList<>();
 		processClassHierarchy(object, objectSupplier, tempSupplier, true /* track */, true /* normal order */, requestors);
 
 		// if we are not establishing any links to the injected object (nothing to inject,
@@ -160,7 +160,7 @@
 		synchronized (injectedObjects) {
 			List<WeakReference<?>> list;
 			if (!injectedObjects.containsKey(objectSupplier)) {
-				list = new ArrayList<WeakReference<?>>();
+				list = new ArrayList<>();
 				injectedObjects.put(objectSupplier, list);
 			} else
 				list = injectedObjects.get(objectSupplier);
@@ -168,7 +168,7 @@
 				if (object == ref.get())
 					return; // we already have it
 			}
-			list.add(new WeakReference<Object>(object));
+			list.add(new WeakReference<>(object));
 		}
 	}
 
@@ -211,7 +211,7 @@
 				return; // not injected at this time
 			processAnnotated(PreDestroy.class, object, object.getClass(), objectSupplier, null, new ArrayList<Class<?>>(5));
 
-			ArrayList<Requestor<?>> requestors = new ArrayList<Requestor<?>>();
+			ArrayList<Requestor<?>> requestors = new ArrayList<>();
 			processClassHierarchy(object, objectSupplier, null, true /* track */, false /* inverse order */, requestors);
 
 			for (Requestor<?> requestor : requestors) {
@@ -342,7 +342,7 @@
 
 			Constructor<?>[] constructors = getDeclaredConstructors(clazz);
 			// Sort the constructors by descending number of constructor arguments
-			ArrayList<Constructor<?>> sortedConstructors = new ArrayList<Constructor<?>>(constructors.length);
+			ArrayList<Constructor<?>> sortedConstructors = new ArrayList<>(constructors.length);
 			for (Constructor<?> constructor : constructors)
 				sortedConstructors.add(constructor);
 			Collections.sort(sortedConstructors, new Comparator<Constructor<?>>() {
@@ -705,7 +705,7 @@
 			if (isOverridden == null) {
 				isOverridden = isOverridden(method, classHierarchy);
 				if (methodMap == null) {
-					methodMap = new WeakHashMap<Method, Boolean>();
+					methodMap = new WeakHashMap<>();
 					isOverriddenCache.put(originalClass, methodMap);
 				}
 				methodMap.put(method, isOverridden);
@@ -866,7 +866,7 @@
 				}
 				collection.add(internalBinding);
 			} else {
-				Set<Binding> collection = new HashSet<Binding>(1);
+				Set<Binding> collection = new HashSet<>(1);
 				collection.add(internalBinding);
 				bindings.put(clazz, collection);
 			}
diff --git a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/MethodRequestor.java b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/MethodRequestor.java
index 28b2895..20fb37c 100644
--- a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/MethodRequestor.java
+++ b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/MethodRequestor.java
@@ -26,7 +26,7 @@
 	/**
 	 * The parameters annotation cache.  Having a *static* map is valuable as it changes the hit rate from about 60% to about 90%.
 	 */
-	private static Map<Method, Annotation[][]> annotationCache = new WeakHashMap<Method, Annotation[][]>();
+	private static Map<Method, Annotation[][]> annotationCache = new WeakHashMap<>();
 
 	public MethodRequestor(Method method, IInjector injector, PrimaryObjectSupplier primarySupplier, PrimaryObjectSupplier tempSupplier, Object requestingObject, boolean track) {
 		super(method, injector, primarySupplier, tempSupplier, requestingObject, track);
diff --git a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/ObjectDescriptor.java b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/ObjectDescriptor.java
index 3483d8f..0351372 100644
--- a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/ObjectDescriptor.java
+++ b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/ObjectDescriptor.java
@@ -92,7 +92,7 @@
 		if (allAnnotations.length == 0)
 			return null;
 		Annotation[] result;
-		List<Annotation> qualifiers = new ArrayList<Annotation>();
+		List<Annotation> qualifiers = new ArrayList<>();
 		for (Annotation annotation : allAnnotations) {
 			if (annotation.annotationType().isAnnotationPresent(Qualifier.class))
 				qualifiers.add(annotation);
diff --git a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/Requestor.java b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/Requestor.java
index cba3b11..519e3e3 100644
--- a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/Requestor.java
+++ b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/Requestor.java
@@ -59,7 +59,7 @@
 			if (primarySupplier != null)
 				objectRef = primarySupplier.makeReference(requestingObject);
 			else
-				objectRef = new WeakReference<Object>(requestingObject);
+				objectRef = new WeakReference<>(requestingObject);
 			objectHashcode = requestingObject.hashCode();
 		} else {
 			objectRef = null;
diff --git a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/WeakRefList.java b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/WeakRefList.java
index 6c9af6f..f32ac9a 100644
--- a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/WeakRefList.java
+++ b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/WeakRefList.java
@@ -21,7 +21,7 @@
 	private List<WeakReference<?>> userObjects;
 
 	public WeakRefList(int initialSize) {
-		userObjects = new ArrayList<WeakReference<?>>(initialSize);
+		userObjects = new ArrayList<>(initialSize);
 	}
 
 	public Object[] getSafeCopy() {
@@ -50,7 +50,7 @@
 	}
 
 	public void add(Object object) {
-		WeakReference<?> ref = new WeakReference<Object>(object);
+		WeakReference<?> ref = new WeakReference<>(object);
 		synchronized (userObjects) {
 			userObjects.add(ref);
 		}
diff --git a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/osgi/LogHelper.java b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/osgi/LogHelper.java
index 530ef68..1470e72 100644
--- a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/osgi/LogHelper.java
+++ b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/osgi/LogHelper.java
@@ -21,7 +21,7 @@
 
 	private static ServiceTracker<FrameworkLog, FrameworkLog> openLogTracker() {
 		try {
-			ServiceTracker<FrameworkLog, FrameworkLog> st = new ServiceTracker<FrameworkLog, FrameworkLog>(
+			ServiceTracker<FrameworkLog, FrameworkLog> st = new ServiceTracker<>(
 					FrameworkUtil.getBundle(LogHelper.class).getBundleContext(), FrameworkLog.class, null);
 			st.open();
 			return st;
diff --git a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/osgi/ProviderHelper.java b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/osgi/ProviderHelper.java
index 3748770..2c65457 100644
--- a/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/osgi/ProviderHelper.java
+++ b/bundles/org.eclipse.e4.core.di/src/org/eclipse/e4/core/internal/di/osgi/ProviderHelper.java
@@ -33,7 +33,7 @@
  */
 public class ProviderHelper {
 
-	static protected Map<String, ExtendedObjectSupplier> extendedSuppliers = new HashMap<String, ExtendedObjectSupplier>();
+	static protected Map<String, ExtendedObjectSupplier> extendedSuppliers = new HashMap<>();
 
 	static {
 		// in case if any extended object supplier changes, clear the supplier cache
