Bug 550644 - Improve performance in InjectorImpl

This reverts commit b8eaf5ef4f430a2875ee7c7a1efe6625aac291b2 which was
a revert as we were in the release freeze for 4.13.
Includes the version increase for 4.14

Change-Id: Ic8e39ce7d6f78b6bdbff108bede56f92b7000dd8
Signed-off-by: Lars Vogel <Lars.Vogel@vogella.com>
diff --git a/bundles/org.eclipse.core.runtime/META-INF/MANIFEST.MF b/bundles/org.eclipse.core.runtime/META-INF/MANIFEST.MF
index 5880328..9d87683 100644
--- a/bundles/org.eclipse.core.runtime/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.core.runtime/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
-Bundle-Version: 3.16.0.qualifier
+Bundle-Version: 3.16.100.qualifier
 Bundle-SymbolicName: org.eclipse.core.runtime; singleton:=true
 Bundle-Vendor: %providerName
 Bundle-Activator: org.eclipse.core.internal.runtime.PlatformActivator
diff --git a/bundles/org.eclipse.core.runtime/pom.xml b/bundles/org.eclipse.core.runtime/pom.xml
index 8b539f2..299b5db 100644
--- a/bundles/org.eclipse.core.runtime/pom.xml
+++ b/bundles/org.eclipse.core.runtime/pom.xml
@@ -19,7 +19,7 @@
   </parent>
   <groupId>org.eclipse.core</groupId>
   <artifactId>org.eclipse.core.runtime</artifactId>
-  <version>3.16.0-SNAPSHOT</version>
+  <version>3.16.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <build>
     <plugins>
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 440c402..3d7d239 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
@@ -722,7 +722,9 @@
 	/**
 	 * Make the processor visit all declared methods on the given class.
 	 */
-	private boolean processMethods(final Object userObject, PrimaryObjectSupplier objectSupplier, PrimaryObjectSupplier tempSupplier, Class<?> objectsClass, ArrayList<Class<?>> classHierarchy, boolean track, List<Requestor<?>> requestors) {
+	private boolean processMethods(final Object userObject, PrimaryObjectSupplier objectSupplier,
+			PrimaryObjectSupplier tempSupplier, Class<?> objectsClass, ArrayList<Class<?>> classHierarchy,
+			boolean track, List<Requestor<?>> requestors) {
 		boolean injectedStatic = false;
 		Method[] methods = getDeclaredMethods(objectsClass);
 		for (Method method : methods) {
@@ -730,10 +732,9 @@
 			Boolean isOverridden = null;
 			Map<Method, Boolean> methodMap = null;
 			Class<?> originalClass = userObject.getClass();
-			if (isOverriddenCache.containsKey(originalClass)) {
-				methodMap = isOverriddenCache.get(originalClass);
-				if (methodMap.containsKey(method))
-					isOverridden = methodMap.get(method);
+			methodMap = isOverriddenCache.get(originalClass);
+			if (methodMap != null) {
+				isOverridden = methodMap.get(method);
 			}
 			if (isOverridden == null) {
 				isOverridden = isOverridden(method, classHierarchy);
@@ -744,15 +745,18 @@
 				methodMap.put(method, isOverridden);
 			}
 
-			if (isOverridden)
+			if (isOverridden) {
 				continue; // process in the subclass
+			}
 			if (Modifier.isStatic(method.getModifiers())) {
-				if (hasInjectedStatic(objectsClass))
+				if (hasInjectedStatic(objectsClass)) {
 					continue;
+				}
 				injectedStatic = true;
 			}
-			if (!isAnnotationPresent(method, Inject.class))
+			if (!isAnnotationPresent(method, Inject.class)) {
 				continue;
+			}
 			requestors.add(new MethodRequestor(method, this, objectSupplier, tempSupplier, userObject, track));
 		}
 		return injectedStatic;