generics
diff --git a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/SourceModuleStructureRequestor.java b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/SourceModuleStructureRequestor.java
index b2048e2..33310a2 100644
--- a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/SourceModuleStructureRequestor.java
+++ b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/SourceModuleStructureRequestor.java
@@ -10,7 +10,6 @@
 package org.eclipse.dltk.internal.core;
 
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Stack;
 
@@ -45,7 +44,7 @@
 	 * to the table as they are found by the parser. Keys are handles, values
 	 * are corresponding info objects.
 	 */
-	private Map newElements;
+	private Map<IModelElement, ModelElementInfo> newElements;
 
 	/**
 	 * Stack of parent scope info objects. The info on the top of the stack is
@@ -53,13 +52,13 @@
 	 * method, the parent info object will be the type the method is contained
 	 * in.
 	 */
-	private Stack infoStack;
+	private Stack<ModelElementInfo> infoStack;
 
 	/**
 	 * Stack of parent handles, corresponding to the info stack. We keep both,
 	 * since info objects do not have back pointers to handles.
 	 */
-	private Stack handleStack;
+	private Stack<ModelElement> handleStack;
 
 	protected boolean hasSyntaxErrors = false;
 
@@ -81,20 +80,20 @@
 	}
 
 	public void enterModule() {
-		this.infoStack = new Stack();
-		this.handleStack = new Stack();
+		this.infoStack = new Stack<ModelElementInfo>();
+		this.handleStack = new Stack<ModelElement>();
 		this.enterModuleRoot();
 	}
 
 	public void enterModuleRoot() {
 		this.infoStack.push(this.moduleInfo);
-		this.handleStack.push(this.module);
+		this.handleStack.push((ModelElement) this.module);
 	}
 
 	public void enterField(FieldInfo fieldInfo) {
 
-		ModelElementInfo parentInfo = (ModelElementInfo) this.infoStack.peek();
-		ModelElement parentHandle = (ModelElement) this.handleStack.peek();
+		ModelElementInfo parentInfo = this.infoStack.peek();
+		ModelElement parentHandle = this.handleStack.peek();
 
 		this.createField(fieldInfo, parentInfo, parentHandle);
 	}
@@ -149,14 +148,14 @@
 	}
 
 	public boolean enterFieldCheckDuplicates(FieldInfo fieldInfo) {
-		ModelElementInfo parentInfo = (ModelElementInfo) this.infoStack.peek();
-		ModelElement parentHandle = (ModelElement) this.handleStack.peek();
+		ModelElementInfo parentInfo = this.infoStack.peek();
+		ModelElement parentHandle = this.handleStack.peek();
 		return this.enterFieldCheckDuplicates(fieldInfo, parentInfo,
 				parentHandle);
 	}
 
 	public void enterMethodRemoveSame(MethodInfo methodInfo) {
-		ModelElementInfo parentInfo = (ModelElementInfo) this.infoStack.peek();
+		ModelElementInfo parentInfo = this.infoStack.peek();
 		IModelElement[] childrens = parentInfo.getChildren();
 		for (int i = 0; i < childrens.length; ++i) {
 			if (childrens[i].getElementName().equals(methodInfo.name)) {
@@ -167,8 +166,8 @@
 	}
 
 	public void enterMethod(MethodInfo methodInfo) {
-		ModelElementInfo parentInfo = (ModelElementInfo) this.infoStack.peek();
-		ModelElement parentHandle = (ModelElement) this.handleStack.peek();
+		ModelElementInfo parentInfo = this.infoStack.peek();
+		ModelElement parentHandle = this.handleStack.peek();
 
 		this.processMethod(methodInfo, parentInfo, parentHandle);
 	}
@@ -222,8 +221,7 @@
 	 */
 	private SourceType getCurrentType() {
 		SourceType t = null;
-		for (Iterator iter = this.handleStack.iterator(); iter.hasNext();) {
-			Object o = iter.next();
+		for (ModelElement o : this.handleStack) {
 			if (o instanceof SourceType) {
 				t = (SourceType) o;
 			}
@@ -233,7 +231,7 @@
 
 	/**
 	 * Searches for a type already in the model. If founds, returns it. If
-	 * <code>parentName</code> starts with a delimeter, searches starting from
+	 * <code>parentName</code> starts with a delimiter, searches starting from
 	 * current source module (i.e. in global), else from the current level.
 	 * 
 	 * @param parentName
@@ -339,8 +337,8 @@
 	}
 
 	public void enterType(TypeInfo typeInfo) {
-		ModelElementInfo parentInfo = (ModelElementInfo) this.infoStack.peek();
-		ModelElement parentHandle = (ModelElement) this.handleStack.peek();
+		ModelElementInfo parentInfo = this.infoStack.peek();
+		ModelElement parentHandle = this.handleStack.peek();
 		this.processType(typeInfo, parentInfo, parentHandle);
 	}
 
@@ -424,8 +422,8 @@
 
 	public void acceptPackage(int declarationStart, int declarationEnd,
 			char[] name) {
-		ModelElementInfo parentInfo = (ModelElementInfo) this.infoStack.peek();
-		ModelElement parentHandle = (ModelElement) this.handleStack.peek();
+		ModelElementInfo parentInfo = this.infoStack.peek();
+		ModelElement parentHandle = this.handleStack.peek();
 		PackageDeclaration handle = null;
 
 		// if (parentHandle.getElementType() == IModelElement.SOURCE_MODULE) {
@@ -456,7 +454,7 @@
 	}
 
 	public void acceptImport(ImportInfo importInfo) {
-		ModelElement parentHandle = (ModelElement) this.handleStack.peek();
+		ModelElement parentHandle = this.handleStack.peek();
 		if (!(parentHandle.getElementType() == IModelElement.SOURCE_MODULE)) {
 			// TODO review?
 			Assert.isTrue(false); // Should not happen
@@ -477,8 +475,7 @@
 					importInfo.containerName);
 			importContainers.put(importInfo.containerName, importContainer);
 			importContainerInfo = new ImportContainerInfo();
-			ModelElementInfo parentInfo = (ModelElementInfo) this.infoStack
-					.peek();
+			ModelElementInfo parentInfo = this.infoStack.peek();
 			parentInfo.addChild(importContainer);
 			this.newElements.put(importContainer, importContainerInfo);
 		} else {