diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionUnitStructureRequestor.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionUnitStructureRequestor.java
index 0db23c7..25d3f9e 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionUnitStructureRequestor.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionUnitStructureRequestor.java
@@ -42,6 +42,7 @@
 import org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference;
 import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference;
 import org.eclipse.jdt.internal.compiler.ast.TypeReference;
+import org.eclipse.jdt.internal.compiler.lookup.Binding;
 import org.eclipse.jdt.internal.compiler.parser.Parser;
 import org.eclipse.jdt.internal.core.AnnotatableInfo;
 import org.eclipse.jdt.internal.core.Annotation;
@@ -59,22 +60,22 @@
 import org.eclipse.jdt.internal.core.SourceType;
 import org.eclipse.jdt.internal.core.TypeParameter;
 
-@SuppressWarnings({"rawtypes", "unchecked"})
+@SuppressWarnings({"rawtypes"})
 public class CompletionUnitStructureRequestor extends CompilationUnitStructureRequestor {
 	private ASTNode assistNode;
 
-	private Map bindingCache;
-	private Map elementCache;
-	private Map elementWithProblemCache;
+	private Map<JavaElement, Binding> bindingCache;
+	private Map<Binding, JavaElement> elementCache;
+	private Map<ASTNode, JavaElement> elementWithProblemCache;
 
 	public CompletionUnitStructureRequestor(
 			ICompilationUnit unit,
 			CompilationUnitElementInfo unitInfo,
 			Parser parser,
 			ASTNode assistNode,
-			Map bindingCache,
-			Map elementCache,
-			Map elementWithProblemCache,
+			Map<JavaElement, Binding> bindingCache,
+			Map<Binding, JavaElement> elementCache,
+			Map<ASTNode, JavaElement> elementWithProblemCache,
 			Map newElements) {
 		super(unit, unitInfo, newElements);
 		this.parser = parser;
@@ -113,10 +114,10 @@
 		};
 		FieldDeclaration decl = (FieldDeclaration) (compInfo.node);
 		if (decl.binding != null) {
-			this.bindingCache.put(compName, decl.binding);
-			this.elementCache.put(decl.binding, compName);
+			this.bindingCache.put(comp, decl.binding);
+			this.elementCache.put(decl.binding, comp);
 		} else {
-			this.elementWithProblemCache.put(compInfo.node, compName);
+			this.elementWithProblemCache.put(compInfo.node, comp);
 		}
 		return comp;
 	}
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.java
index 7b87657..253234c 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.java
@@ -70,7 +70,7 @@
 import org.eclipse.jdt.internal.core.LocalVariable;
 import org.eclipse.jdt.internal.core.util.Util;
 
-@SuppressWarnings({"rawtypes", "unchecked"})
+@SuppressWarnings({"rawtypes"})
 public class InternalExtendedCompletionContext {
 	private static Util.BindingsToNodesMap EmptyNodeMap = new Util.BindingsToNodesMap() {
 		@Override
@@ -99,8 +99,8 @@
 	private ObjectVector visibleMethods;
 
 	private boolean hasComputedEnclosingJavaElements;
-	private Map bindingsToHandles;
-	private Map nodesWithProblemsToHandles;
+	private Map<Binding, JavaElement> bindingsToHandles;
+	private Map<ASTNode, JavaElement> nodesWithProblemsToHandles;
 	private ICompilationUnit compilationUnit;
 
 	public InternalExtendedCompletionContext(
@@ -132,10 +132,10 @@
 		if (this.typeRoot.getElementType() == IJavaElement.COMPILATION_UNIT) {
 	 		ICompilationUnit original = (org.eclipse.jdt.core.ICompilationUnit)this.typeRoot;
 
-			HashMap handleToBinding = new HashMap();
-			HashMap bindingToHandle = new HashMap();
-			HashMap nodeWithProblemToHandle = new HashMap();
-			HashMap handleToInfo = new HashMap();
+			HashMap<JavaElement, Binding> handleToBinding = new HashMap<>();
+			HashMap<Binding, JavaElement> bindingToHandle = new HashMap<>();
+			HashMap<ASTNode, JavaElement> nodeWithProblemToHandle = new HashMap<>();
+			HashMap<ICompilationUnit, CompilationUnitElementInfo> handleToInfo = new HashMap<ICompilationUnit, CompilationUnitElementInfo>();
 
 			org.eclipse.jdt.core.ICompilationUnit handle = new AssistCompilationUnit(original, this.owner, handleToBinding, handleToInfo);
 			CompilationUnitElementInfo info = new CompilationUnitElementInfo();
@@ -298,7 +298,7 @@
 			computeEnclosingJavaElements();
 		}
 		if (this.bindingsToHandles == null) return null;
-		return (JavaElement)this.bindingsToHandles.get(binding);
+		return this.bindingsToHandles.get(binding);
 	}
 
 	private JavaElement getJavaElementOfCompilationUnit(ASTNode node, Binding binding) {
@@ -307,10 +307,10 @@
 		}
 		if (binding != null) {
 			if (this.bindingsToHandles == null) return null;
-			return (JavaElement)this.bindingsToHandles.get(binding);
+			return this.bindingsToHandles.get(binding);
 		} else {
 			if (this.nodesWithProblemsToHandles == null) return null;
-			return (JavaElement)this.nodesWithProblemsToHandles.get(node);
+			return this.nodesWithProblemsToHandles.get(node);
 		}
 	}
 
