diff --git a/plugins/org.eclipse.dltk.ruby.core/.classpath b/plugins/org.eclipse.dltk.ruby.core/.classpath
index 4c13d62..76982f8 100644
--- a/plugins/org.eclipse.dltk.ruby.core/.classpath
+++ b/plugins/org.eclipse.dltk.ruby.core/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="jruby"/>
diff --git a/plugins/org.eclipse.dltk.ruby.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.dltk.ruby.core/.settings/org.eclipse.jdt.core.prefs
index 0e73ac4..8717e6c 100644
--- a/plugins/org.eclipse.dltk.ruby.core/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.dltk.ruby.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,15 +1,14 @@
-#Thu Oct 21 16:34:15 CEST 2010
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.compliance=1.6
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.source=1.6
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
@@ -88,9 +87,12 @@
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
 org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
diff --git a/plugins/org.eclipse.dltk.ruby.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.dltk.ruby.core/META-INF/MANIFEST.MF
index e622bd9..36d6f98 100644
--- a/plugins/org.eclipse.dltk.ruby.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.dltk.ruby.core/META-INF/MANIFEST.MF
@@ -9,7 +9,6 @@
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.dltk.core;bundle-version="0.0.0",
  org.eclipse.debug.core
-Eclipse-LazyStart: true
 Export-Package: org.eclipse.dltk.ruby.ast;
   uses:="org.eclipse.dltk.ast.expressions,
    org.eclipse.dltk.ast,
@@ -75,5 +74,5 @@
    org.eclipse.dltk.ast.declarations,
    org.eclipse.dltk.core,
    org.eclipse.dltk.ruby.typeinference.internal"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/RubyLanguageToolkit.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/RubyLanguageToolkit.java
index 5a1dbd8..577cb3d 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/RubyLanguageToolkit.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/RubyLanguageToolkit.java
@@ -21,6 +21,7 @@
 		return false;
 	}
 
+	@Override
 	public String getNatureId() {
 		return RubyNature.NATURE_ID;
 	}
@@ -29,10 +30,12 @@
 		return sToolkit;
 	}
 
+	@Override
 	public String getLanguageName() {
 		return "Ruby"; //$NON-NLS-1$
 	}
 
+	@Override
 	public String getLanguageContentType() {
 		return "org.eclipse.dltk.rubyContentType"; //$NON-NLS-1$
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/FakeField.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/FakeField.java
index 704b93b..d78085c 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/FakeField.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/FakeField.java
@@ -57,10 +57,12 @@
 		return hasFlags ? flags : super.getFlags();
 	}
 
+	@Override
 	public int getLength() {
 		return length;
 	}
 
+	@Override
 	public int getOffset() {
 		return offset;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/IElementKind.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/IElementKind.java
index a339a06..e4a72e7 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/IElementKind.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/IElementKind.java
@@ -23,6 +23,7 @@
 		
 		public static final int ID = FIRST_NON_VARIABLE_ID + 0;
 
+		@Override
 		public int getId() {
 			return ID;
 		}
@@ -33,6 +34,7 @@
 		
 		public static final int ID = FIRST_NON_VARIABLE_ID + 1;
 
+		@Override
 		public int getId() {
 			return ID;
 		}
@@ -43,6 +45,7 @@
 		
 		public static final int ID = FIRST_NON_VARIABLE_ID + 2;
 
+		@Override
 		public int getId() {
 			return ID;
 		}
@@ -61,6 +64,7 @@
 		
 		public static final int ID = FIRST_NON_VARIABLE_ID + 3;
 
+		@Override
 		public int getId() {
 			return ID;
 		}
@@ -72,6 +76,7 @@
 		
 		public static final int ID = FIRST_NON_VARIABLE_ID + 4;
 
+		@Override
 		public int getId() {
 			return ID;
 		}
@@ -82,6 +87,7 @@
 		
 		public static final int ID = FIRST_NON_VARIABLE_ID + 5;
 
+		@Override
 		public int getId() {
 			return ID;
 		}
@@ -93,6 +99,7 @@
 		
 		public static final int ID = FIRST_NON_VARIABLE_ID + 6;
 
+		@Override
 		public int getId() {
 			return ID;
 		}
@@ -111,6 +118,7 @@
 			return kind;
 		}
 
+		@Override
 		public int getId() {
 			return kind.getId();
 		}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/MethodArgument.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/MethodArgument.java
index ed282a7..00a4c5e 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/MethodArgument.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/MethodArgument.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.core.model;
 
@@ -22,10 +21,12 @@
 		this.kind = kind;
 	}
 
+	@Override
 	public MethodArgumentKind getKind() {
 		return kind;
 	}
 
+	@Override
 	public String getName() {
 		return name;
 	}			
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/internal/Model.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/internal/Model.java
index 3318762..e3067a9 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/internal/Model.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/internal/Model.java
@@ -41,6 +41,7 @@
 		this.project = project;
 	}
 
+	@Override
 	public ModuleDeclaration getASTNode(ISourceModule sourceModule,
 			ASTCaching caching) {
 		ModuleDeclaration result = null;
@@ -83,6 +84,7 @@
 		}
 	}
 
+	@Override
 	public IElement[] findChildren(IElementCriteria criteria, String name,
 			IProgressMonitor pm) {
 		if (criteria == IElementCriteria.CLASS_OR_MIXIN) {
@@ -91,10 +93,12 @@
 		return null;
 	}
 
+	@Override
 	public IElement getAncestor(IElementCriteria criteria) {
 		return null;
 	}
 
+	@Override
 	public IElementKind getElementKind() {
 		return IElementKind.MODEL;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/internal/RubyTypeCalculator.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/internal/RubyTypeCalculator.java
index 54c2ee6..9a7806e 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/internal/RubyTypeCalculator.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/core/model/internal/RubyTypeCalculator.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.core.model.internal;
 
@@ -38,15 +37,18 @@
 	private ICalculatedType createFixnum() {
 		final ICalculatedType type = new ICalculatedType() {
 
+			@Override
 			public IElement[] findChildren(IElementCriteria criteria, String name, IProgressMonitor pm) {
 				if (criteria == IElementCriteria.ByKind.METHOD) {
 					final IElement typeParent = this;
 					IElement ceil = new IMethod() {
 
+						@Override
 						public IElement[] findChildren(IElementCriteria criteria, String name, IProgressMonitor pm) {
 							return IElement.EMPTY_ARRAY;
 						}
 
+						@Override
 						public IElement getAncestor(IElementCriteria criteria) {
 							if (criteria == IElementCriteria.ByKind.MODEL)
 								return model;
@@ -56,10 +58,12 @@
 							return null;
 						}
 
+						@Override
 						public IElementKind getElementKind() {
 							return IElementKind.METHOD;
 						}
 
+						@Override
 						public String getName() {
 							return "ceil"; //$NON-NLS-1$
 						}
@@ -70,12 +74,14 @@
 				return IElement.EMPTY_ARRAY;
 			}
 
+			@Override
 			public IElement getAncestor(IElementCriteria criteria) {
 				if (criteria == IElementCriteria.ByKind.MODEL)
 					return model;
 				return null;
 			}
 
+			@Override
 			public IElementKind getElementKind() {
 				return IElementKind.CLASS;
 			}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCallHierarchyFactory.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCallHierarchyFactory.java
index 167b23b..005f0f1 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCallHierarchyFactory.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCallHierarchyFactory.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.internal.callhierarchy;
 
@@ -18,11 +17,13 @@
 
 public class RubyCallHierarchyFactory implements ICallHierarchyFactory {
 
+	@Override
 	public ICalleeProcessor createCalleeProcessor(IMethod method,
 			IProgressMonitor monitor, IDLTKSearchScope scope) {
 		return new RubyCalleeProcessor( method, monitor, scope );
 	}
 
+	@Override
 	public ICallProcessor createCallProcessor() {
 		return new RubyCallProcessor();
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCallProcessor.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCallProcessor.java
index 3fbfb74..d6df533 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCallProcessor.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCallProcessor.java
@@ -30,6 +30,7 @@
 
 	private SearchEngine searchEngine = new SearchEngine();
 
+	@Override
 	public Map<SimpleReference, IModelElement> process(final IModelElement parent, IModelElement element,
 			IDLTKSearchScope scope, IProgressMonitor monitor) {
 		final Map<SimpleReference, IModelElement> elements = new HashMap<SimpleReference, IModelElement>();
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCalleeProcessor.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCalleeProcessor.java
index 1f4e400..1dce32b 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCalleeProcessor.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/callhierarchy/RubyCalleeProcessor.java
@@ -69,6 +69,7 @@
 
 	}
 
+	@Override
 	public Map<SimpleReference, IMethod[]> doOperation() {
 		CaleeSourceElementRequestor requestor = new CaleeSourceElementRequestor();
 		ISourceElementParser parser = null;
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/ProjectTypeComparator.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/ProjectTypeComparator.java
index 8eeedf9..64d3afb 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/ProjectTypeComparator.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/ProjectTypeComparator.java
@@ -36,6 +36,7 @@
 		this.module = module;
 	}
 
+	@Override
 	public int compare(IType type1, IType type2) {
 		if (type1.getParent() instanceof ISourceModule
 				&& type2.getParent() instanceof ISourceModule) {
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubyAssistParser.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubyAssistParser.java
index a9e3f80..b0e5cef 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubyAssistParser.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubyAssistParser.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.internal.core.codeassist;
 
@@ -21,14 +20,17 @@
 
 	protected ASTNode assistNodeParent = null;
 
+	@Override
 	public ASTNode getAssistNodeParent() {
 		return assistNodeParent;
 	}
 
+	@Override
 	public void setSource(ModuleDeclaration unit) {
 		this.module = unit;
 	}
 
+	@Override
 	public ModuleDeclaration parse(IModuleSource sourceUnit) {
 		ModuleDeclaration module = null;
 		module = SourceParserUtil
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubyCompletionEngine.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubyCompletionEngine.java
index ad65d86..dad4ea2 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubyCompletionEngine.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubyCompletionEngine.java
@@ -187,6 +187,7 @@
 		return content.substring(position, original);
 	}
 
+	@Override
 	public void complete(IModuleSource module, int position, int i) {
 		this.currentModule = (ISourceModule) module;
 		this.mixinModel = RubyMixinModel.getInstance(currentModule
@@ -463,6 +464,7 @@
 			return false;
 		}
 
+		@Override
 		public void acceptResult(IRubyMixinElement element) {
 			if (element instanceof RubyMixinMethod) {
 				final RubyMixinMethod method = (RubyMixinMethod) element;
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubySelectionEngine.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubySelectionEngine.java
index 3da874e..c07295a 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubySelectionEngine.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubySelectionEngine.java
@@ -107,6 +107,7 @@
 
 	private RubyMixinModel mixinModel;
 
+	@Override
 	public IModelElement[] select(IModuleSource sourceUnit,
 			int selectionSourceStart, int selectionSourceEnd) {
 		sourceModule = (ISourceModule) sourceUnit.getModelElement();
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubySelectionParser.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubySelectionParser.java
index e956bbf..ee2799a 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubySelectionParser.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/codeassist/RubySelectionParser.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.internal.core.codeassist;
 
@@ -16,9 +15,11 @@
 
 public class RubySelectionParser extends RubyAssistParser {
 
+	@Override
 	public void handleNotInElement(ASTNode node, int position) {
 	}
 
+	@Override
 	public void parseBlockStatements(ASTNode node, ASTNode inNode, int position) {
 		// /**
 		// * This is possible function completion.
@@ -160,6 +161,7 @@
 		// }
 	}
 
+	@Override
 	public ModuleDeclaration getModule() {
 		return module;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/search/RubyMatchLocatorParser.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/search/RubyMatchLocatorParser.java
index e38ba2f..582b511 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/search/RubyMatchLocatorParser.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/core/search/RubyMatchLocatorParser.java
@@ -121,6 +121,7 @@
 	protected class RubyMatchVisitor extends MatchVisitor implements
 			IRubyASTVisitor {
 
+		@Override
 		public void visitTypeName(ASTNode node) {
 			// empty
 		}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/JRubySourceParser.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/JRubySourceParser.java
index f317e95..c3e0c45 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/JRubySourceParser.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/JRubySourceParser.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.internal.parser;
 
@@ -80,6 +79,7 @@
 			this.original = original;
 		}
 
+		@Override
 		public void reportProblem(IProblem problem) {
 			if (original != null)
 				original.reportProblem(problem);
@@ -106,6 +106,7 @@
 		return new RubyASTBuildVisitor(module, content);
 	}
 
+	@Override
 	public ModuleDeclaration parse(IModuleSource input,
 			IProblemReporter reporter) {
 		try {
@@ -159,6 +160,7 @@
 						node2 = parser.parse(fileName, new StringReader(
 								content2), new AbstractProblemReporter() {
 
+							@Override
 							public void reportProblem(IProblem problem) {
 								if (DLTKCore.DEBUG) {
 									System.out
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/JRubySourceParserFactory.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/JRubySourceParserFactory.java
index 913fae7..7ba299a 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/JRubySourceParserFactory.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/JRubySourceParserFactory.java
@@ -8,9 +8,7 @@
  */
 public class JRubySourceParserFactory implements ISourceParserFactory {
 
-	/*
-	 * @see org.eclipse.dltk.ast.parser.ISourceParserFactory#createSourceParser()
-	 */
+	@Override
 	public ISourceParser createSourceParser() {
 		return new JRubySourceParser();
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/ExactMixinSearchPattern.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/ExactMixinSearchPattern.java
index 773f3fa..3f89b6a 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/ExactMixinSearchPattern.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/ExactMixinSearchPattern.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -22,10 +22,12 @@
 		this.key = key;
 	}
 
+	@Override
 	public boolean evaluate(String lastSegment) {
 		return key.equals(lastSegment);
 	}
 
+	@Override
 	public String getKey() {
 		return key;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/PrefixMixinSearchPattern.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/PrefixMixinSearchPattern.java
index aa1ca96..0796aaf 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/PrefixMixinSearchPattern.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/PrefixMixinSearchPattern.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -22,10 +22,12 @@
 		this.prefix = prefix;
 	}
 
+	@Override
 	public final boolean evaluate(String lastSegment) {
 		return lastSegment.startsWith(prefix);
 	}
 
+	@Override
 	public String getKey() {
 		return prefix;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/PrefixNoCaseMixinSearchPattern.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/PrefixNoCaseMixinSearchPattern.java
index 04481fb..4239468 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/PrefixNoCaseMixinSearchPattern.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/PrefixNoCaseMixinSearchPattern.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -21,6 +21,7 @@
 		chars = key.toLowerCase().toCharArray();
 	}
 
+	@Override
 	public boolean evaluate(String lastSegment) {
 		final int length = chars.length;
 		if (lastSegment.length() < length) {
@@ -34,6 +35,7 @@
 		return true;
 	}
 
+	@Override
 	public String getKey() {
 		return key;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixin.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixin.java
index ff94784..42002d3 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixin.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixin.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.internal.parser.mixin;
 
@@ -25,6 +24,7 @@
 
 	private IMixinRequestor requestor;
 
+	@Override
 	public void parserSourceModule(boolean signature, ISourceModule module) {
 		try {
 			ModuleDeclaration moduleDeclaration = SourceParserUtil
@@ -37,6 +37,7 @@
 		}
 	}
 
+	@Override
 	public void setRequirestor(IMixinRequestor requestor) {
 		this.requestor = requestor;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinAlias.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinAlias.java
index 50d1ba7..f976fb7 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinAlias.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinAlias.java
@@ -46,6 +46,7 @@
 		return model.createRubyElement(getOldKey());
 	}
 
+	@Override
 	public String getKey() {
 		return element.getKey();
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinClass.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinClass.java
index 6265771..b28a0d4 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinClass.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinClass.java
@@ -36,6 +36,7 @@
 		this.module = module;
 	}
 
+	@Override
 	public String getKey() {
 		return key;
 	}
@@ -297,6 +298,7 @@
 		this.findMethods(pattern, new IMixinSearchRequestor() {
 			final Set<String> names = new HashSet<String>();
 
+			@Override
 			public void acceptResult(IRubyMixinElement element) {
 				if (element instanceof RubyMixinMethod) {
 					RubyMixinMethod method = (RubyMixinMethod) element;
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinMethod.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinMethod.java
index 867e830..f6d2307 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinMethod.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinMethod.java
@@ -42,6 +42,7 @@
 		this.sourceMethods = sourceMethods;
 	}
 
+	@Override
 	public String getKey() {
 		return key;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinModel.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinModel.java
index b29736f..28b46f8 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinModel.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinModel.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.internal.parser.mixin;
 
@@ -125,9 +124,7 @@
 		return null;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.core.IShutdownListener#shutdown()
-	 */
+	@Override
 	public void shutdown() {
 		model.stop();
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinVariable.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinVariable.java
index fcf6cb3..6326a58 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinVariable.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinVariable.java
@@ -25,6 +25,7 @@
 		this.key = key;
 	}
 
+	@Override
 	public String getKey() {
 		return key;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/visitors/RubySourceElementRequestor.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/visitors/RubySourceElementRequestor.java
index 0e2597a..49461f6 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/visitors/RubySourceElementRequestor.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/visitors/RubySourceElementRequestor.java
@@ -237,6 +237,7 @@
 		}
 	}
 
+	@Override
 	public void visitTypeName(ASTNode node) {
 		// empty
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/DLTKRubyNullWarnings.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/DLTKRubyNullWarnings.java
index 92108ed..83fdd48 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/DLTKRubyNullWarnings.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/DLTKRubyNullWarnings.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.internal.parsers.jruby;
 
@@ -14,6 +13,7 @@
 
 public class DLTKRubyNullWarnings extends NullWarnings implements IDLTKRubyWarnings {
 
+	@Override
 	public void error(ISourcePosition position, String message) {}
 
 	
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/DLTKRubyWarnings.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/DLTKRubyWarnings.java
index 469b6d4..2863395 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/DLTKRubyWarnings.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/DLTKRubyWarnings.java
@@ -18,6 +18,7 @@
 		this.problemReporter = problemReporter;
 	}
 
+	@Override
 	public void warn(ISourcePosition position, String message) {
 		DefaultProblem problem = new DefaultProblem(position.getFile(),
 				message, IProblem.Unclassified, new String[0],
@@ -26,10 +27,12 @@
 		problemReporter.reportProblem(problem);
 	}
 
+	@Override
 	public boolean isVerbose() {
 		return false;
 	}
 
+	@Override
 	public void warning(ISourcePosition position, String message) {
 		if (isVerbose()) {
 			DefaultProblem problem = new DefaultProblem(position.getFile(),
@@ -40,6 +43,7 @@
 		}
 	}
 
+	@Override
 	public void error(ISourcePosition position, String message) {
 		DefaultProblem problem = new DefaultProblem(position.getFile(),
 				message, IProblem.Unclassified, new String[0],
@@ -48,10 +52,12 @@
 		problemReporter.reportProblem(problem);
 	}
 
+	@Override
 	public void warn(String message) {
 		warn(new SourcePosition(), message);
 	}
 
+	@Override
 	public void warning(String message) {
 		warning(new SourcePosition(), message);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/RubyASTBuildVisitor.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/RubyASTBuildVisitor.java
index d4745b4..425989d 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/RubyASTBuildVisitor.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parsers/jruby/RubyASTBuildVisitor.java
@@ -235,6 +235,7 @@
 			list = new ArrayList<ASTNode>();
 		}
 
+		@Override
 		public void add(ASTNode s) {
 			list.add(s);
 		}
@@ -261,6 +262,7 @@
 			this.list = list;
 		}
 
+		@Override
 		public void add(ASTNode s) {
 			list.addArgument(s, 0);
 		}
@@ -278,6 +280,7 @@
 			this.module = module;
 		}
 
+		@Override
 		public void add(ASTNode statement) {
 			module.getStatements().add(statement);
 		}
@@ -300,6 +303,7 @@
 			visibility = Modifiers.AccPublic;
 		}
 
+		@Override
 		public void add(ASTNode statement) {
 			type.getStatements().add(statement);
 		}
@@ -334,6 +338,7 @@
 			this.method = method;
 		}
 
+		@Override
 		public void add(ASTNode statement) {
 			method.getStatements().add(statement);
 		}
@@ -352,6 +357,7 @@
 			this.block = block;
 		}
 
+		@Override
 		public void add(ASTNode statement) {
 			block.getStatements().add(statement);
 		}
@@ -500,6 +506,7 @@
 		states.push(new TopLevelState(this.module));
 	}
 
+	@Override
 	public Instruction visitAliasNode(AliasNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		final int start = pos.getStartOffset();
@@ -513,6 +520,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitAndNode(AndNode iVisited) { // done
 		ASTNode left = collectSingleNodeSafe(iVisited.getFirstNode());
 		ASTNode right = collectSingleNodeSafe(iVisited.getSecondNode());
@@ -523,6 +531,7 @@
 	}
 
 	// should never get here
+	@Override
 	public Instruction visitArgsNode(ArgsNode iVisited) {
 		if (iVisited.getOptArgs() != null) {
 			iVisited.getOptArgs().accept(this);
@@ -531,6 +540,7 @@
 	}
 
 	// should never get here
+	@Override
 	public Instruction visitArgsCatNode(ArgsCatNode iVisited) {
 		if (iVisited.getFirstNode() != null) {
 			iVisited.getFirstNode().accept(this);
@@ -554,6 +564,7 @@
 		return coll.getList();
 	}
 
+	@Override
 	public Instruction visitArrayNode(ArrayNode iVisited) { // done
 		List<ASTNode> exprs = processListNode(iVisited);
 
@@ -567,6 +578,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitBackRefNode(BackRefNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		VariableReference ref = new VariableReference(pos.getStartOffset(), pos
@@ -575,6 +587,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitBeginNode(BeginNode iVisited) { // done
 		ASTNode body = collectSingleNodeSafe(iVisited.getBodyNode());
 		ISourcePosition pos = iVisited.getPosition();
@@ -585,10 +598,12 @@
 	}
 
 	// should never get here
+	@Override
 	public Instruction visitBlockArgNode(BlockArgNode iVisited) {
 		return null;
 	}
 
+	@Override
 	public Instruction visitBlockNode(BlockNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		Block block = new Block(pos.getStartOffset(), pos.getEndOffset());
@@ -602,6 +617,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitBlockPassNode(BlockPassNode iVisited) {
 		// ASTNode args = collectSingleNodeSafe(iVisited.getArgsNode());
 		ASTNode body = collectSingleNodeSafe(iVisited.getBodyNode());
@@ -613,6 +629,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitBreakNode(BreakNode iVisited) { // done
 		ASTNode value = collectSingleNodeSafe(iVisited.getValueNode());
 		ISourcePosition pos = iVisited.getPosition();
@@ -622,6 +639,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitConstDeclNode(ConstDeclNode iVisited) {
 		Node pathNode = iVisited.getConstNode();
 		ASTNode pathResult = null;
@@ -646,18 +664,21 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitClassVarAsgnNode(ClassVarAsgnNode iVisited) {
 		processVariableAssignment(iVisited, iVisited.getName(),
 				RubyVariableKind.CLASS, iVisited.getValueNode());
 		return null;
 	}
 
+	@Override
 	public Instruction visitClassVarDeclNode(ClassVarDeclNode iVisited) {
 		processVariableAssignment(iVisited, iVisited.getName(),
 				RubyVariableKind.CLASS, iVisited.getValueNode());
 		return null;
 	}
 
+	@Override
 	public Instruction visitClassVarNode(ClassVarNode iVisited) {
 		processVariableReference(iVisited, iVisited.getName(),
 				RubyVariableKind.CLASS);
@@ -778,6 +799,7 @@
 	/**
 	 * @fixme iteration not correctly defined
 	 */
+	@Override
 	public Instruction visitCallNode(CallNode iVisited) {
 		String methodName = iVisited.getName();
 		CollectingState collector = new CollectingState();
@@ -863,6 +885,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitCaseNode(CaseNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		RubyCaseStatement statement = new RubyCaseStatement(pos
@@ -941,6 +964,7 @@
 				.getEndLine(), start, end);
 	}
 
+	@Override
 	public Instruction visitClassNode(ClassNode iVisited) {
 		Node cpathNode = iVisited.getCPath();
 		Node superClassNode = iVisited.getSuperNode();
@@ -992,6 +1016,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitColon2Node(Colon2Node iVisited) {
 
 		CollectingState collector = new CollectingState();
@@ -1025,6 +1050,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitColon3Node(Colon3Node iVisited) {
 		ISourcePosition position = iVisited.getPosition();
 		RubyColonExpression colon = new RubyColonExpression(iVisited.getName(),
@@ -1035,6 +1061,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitConstNode(ConstNode iVisited) {
 		String name = iVisited.getName();
 		ISourcePosition pos = iVisited.getPosition();
@@ -1045,6 +1072,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitDAsgnNode(DAsgnNode iVisited) {
 		ISourcePosition pos = iVisited.getPosition();
 		ASTNode valueNode = this.collectSingleNodeSafe(iVisited.getValueNode(),
@@ -1057,6 +1085,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitDRegxNode(DRegexpNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		List<ASTNode> list = processListNode(iVisited);
@@ -1067,6 +1096,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitDStrNode(DStrNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		List<ASTNode> list = processListNode(iVisited);
@@ -1080,6 +1110,7 @@
 	/**
 	 * @see NodeVisitor#visitDSymbolNode(DSymbolNode)
 	 */
+	@Override
 	public Instruction visitDSymbolNode(DSymbolNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		List<ASTNode> list = processListNode(iVisited);
@@ -1090,6 +1121,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitDVarNode(DVarNode iVisited) { // done (?)
 		String name = iVisited.getName();
 		ISourcePosition pos = iVisited.getPosition();
@@ -1099,6 +1131,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitDXStrNode(DXStrNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		List<ASTNode> list = processListNode(iVisited);
@@ -1109,6 +1142,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitDefinedNode(DefinedNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		ASTNode value = collectSingleNodeSafe(iVisited.getExpressionNode());
@@ -1244,6 +1278,7 @@
 	}
 
 	// method
+	@Override
 	public Instruction visitDefnNode(DefnNode iVisited) {
 		// Collection comments = iVisited.getComments();
 		// System.out.println(comments);
@@ -1311,6 +1346,7 @@
 	}
 
 	// singleton method
+	@Override
 	public Instruction visitDefsNode(DefsNode iVisited) {
 		ASTNode receiverExpression = null;
 		Node receiverNode = iVisited.getReceiverNode();
@@ -1368,6 +1404,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitDotNode(DotNode iVisited) { // done
 		ASTNode begin = collectSingleNodeSafe(iVisited.getBeginNode());
 		ASTNode end = collectSingleNodeSafe(iVisited.getEndNode());
@@ -1378,6 +1415,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitEnsureNode(EnsureNode iVisited) { // done
 		ASTNode body = collectSingleNodeSafe(iVisited.getBodyNode());
 		ASTNode ensure = collectSingleNodeSafe(iVisited.getEnsureNode());
@@ -1388,6 +1426,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitEvStrNode(EvStrNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		ASTNode body = collectSingleNodeSafe(iVisited.getBody());
@@ -1397,6 +1436,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitFCallNode(FCallNode iVisited) {
 
 		String methodName = iVisited.getName();
@@ -1483,6 +1523,7 @@
 		}
 	}
 
+	@Override
 	public Instruction visitFalseNode(FalseNode iVisited) { // done
 		ISourcePosition position = iVisited.getPosition();
 		states.peek().add(
@@ -1491,11 +1532,13 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitFlipNode(FlipNode iVisited) {
 
 		return null;
 	}
 
+	@Override
 	public Instruction visitForNode(ForNode iVisited) { // done
 		ASTNode varNode = collectSingleNodeSafe(iVisited.getVarNode());
 		ASTNode listSt = collectSingleNodeSafe(iVisited.getIterNode());
@@ -1515,18 +1558,21 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitGlobalAsgnNode(GlobalAsgnNode iVisited) {
 		processVariableAssignment(iVisited, iVisited.getName(),
 				RubyVariableKind.GLOBAL, iVisited.getValueNode());
 		return null;
 	}
 
+	@Override
 	public Instruction visitGlobalVarNode(GlobalVarNode iVisited) {
 		processVariableReference(iVisited, iVisited.getName(),
 				RubyVariableKind.GLOBAL);
 		return null;
 	}
 
+	@Override
 	public Instruction visitHashNode(HashNode iVisited) { // done
 		ListNode listNode = iVisited.getListNode();
 		List<ASTNode> exprs = processListNode(listNode);
@@ -1564,18 +1610,21 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitInstAsgnNode(InstAsgnNode iVisited) {
 		processVariableAssignment(iVisited, iVisited.getName(),
 				RubyVariableKind.INSTANCE, iVisited.getValueNode());
 		return null;
 	}
 
+	@Override
 	public Instruction visitInstVarNode(InstVarNode iVisited) {
 		processVariableReference(iVisited, iVisited.getName(),
 				RubyVariableKind.INSTANCE);
 		return null;
 	}
 
+	@Override
 	public Instruction visitIfNode(IfNode iVisited) { // done
 		ASTNode condition = collectSingleNodeSafe(iVisited.getCondition());
 		ASTNode thenPart = collectSingleNodeSafe(iVisited.getThenBody());
@@ -1587,6 +1636,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitIterNode(IterNode iVisited) { // done
 		ASTNode bodyNode = collectSingleNodeSafe(iVisited.getBodyNode());
 		ASTNode varNode = collectSingleNodeSafe(iVisited.getVarNode());
@@ -1598,6 +1648,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitLocalAsgnNode(LocalAsgnNode iVisited) {
 		processVariableAssignment(iVisited, iVisited.getName(),
 				RubyVariableKind.LOCAL, iVisited.getValueNode());
@@ -1616,6 +1667,7 @@
 		states.peek().add(assgn);
 	}
 
+	@Override
 	public Instruction visitLocalVarNode(LocalVarNode iVisited) {
 		processVariableReference(iVisited, iVisited.getName(),
 				RubyVariableKind.LOCAL);
@@ -1641,6 +1693,7 @@
 		target.setEnd(pos.getEndOffset());
 	}
 
+	@Override
 	public Instruction visitMultipleAsgnNode(MultipleAsgnNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		RubyMultipleAssignmentStatement s = new RubyMultipleAssignmentStatement(
@@ -1697,6 +1750,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitMatch2Node(Match2Node iVisited) {// done
 		ISourcePosition pos = iVisited.getPosition();
 		ASTNode receiverNode = collectSingleNodeSafe(iVisited.getReceiverNode());
@@ -1707,6 +1761,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitMatch3Node(Match3Node iVisited) {// done
 		ISourcePosition pos = iVisited.getPosition();
 		ASTNode receiverNode = collectSingleNodeSafe(iVisited.getReceiverNode());
@@ -1717,6 +1772,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitMatchNode(MatchNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		ASTNode regexp = collectSingleNodeSafe(iVisited.getRegexpNode());
@@ -1726,6 +1782,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitModuleNode(ModuleNode iVisited) {
 		String name = ""; //$NON-NLS-1$
 		Node cpathNode = iVisited.getCPath();
@@ -1771,11 +1828,13 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitNewlineNode(NewlineNode iVisited) { // done
 		iVisited.getNextNode().accept(this);
 		return null;
 	}
 
+	@Override
 	public Instruction visitNextNode(NextNode iVisited) { // done
 		ISourcePosition position = iVisited.getPosition();
 		RubyCallArgumentsList args = new RubyCallArgumentsList();
@@ -1790,6 +1849,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitNilNode(NilNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		states.peek().add(
@@ -1797,6 +1857,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitNotNode(NotNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		ASTNode expr = collectSingleNodeSafe(iVisited.getConditionNode());
@@ -1806,6 +1867,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitNthRefNode(NthRefNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		states.peek().add(
@@ -1816,32 +1878,38 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitOpElementAsgnNode(OpElementAsgnNode iVisited) {
 
 		return null;
 	}
 
+	@Override
 	public Instruction visitOpAsgnNode(OpAsgnNode iVisited) {
 
 		return null;
 	}
 
+	@Override
 	public Instruction visitOpAsgnAndNode(OpAsgnAndNode iVisited) {
 
 		return null;
 	}
 
+	@Override
 	public Instruction visitOpAsgnOrNode(OpAsgnOrNode iVisited) {
 
 		return null;
 	}
 
+	@Override
 	public Instruction visitOptNNode(OptNNode iVisited) {
 		// System.out.println("DLTKASTBuildVisitor.visitOptNNode()");
 		iVisited.getBodyNode().accept(this);
 		return null;
 	}
 
+	@Override
 	public Instruction visitOrNode(OrNode iVisited) { // done
 		ASTNode leftSt = collectSingleNodeSafe(iVisited.getFirstNode());
 		ASTNode rightSt = collectSingleNodeSafe(iVisited.getSecondNode());
@@ -1852,11 +1920,13 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitPostExeNode(PostExeNode iVisited) {
 
 		return null;
 	}
 
+	@Override
 	public Instruction visitRedoNode(RedoNode iVisited) {
 		ISourcePosition position = iVisited.getPosition();
 		states.peek().add(
@@ -1865,6 +1935,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitRescueBodyNode(RescueBodyNode iVisited) { // done
 		ASTNode bodyNode = collectSingleNodeSafe(iVisited.getBodyNode());
 		ASTNode exceptionNodes = collectSingleNodeSafe(iVisited
@@ -1887,6 +1958,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitRescueNode(RescueNode iVisited) { // done
 		ASTNode bodyNode = collectSingleNodeSafe(iVisited.getBodyNode());
 		ASTNode elseNode = collectSingleNodeSafe(iVisited.getElseNode());
@@ -1905,6 +1977,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitRetryNode(RetryNode iVisited) { // done
 		ISourcePosition position = iVisited.getPosition();
 		states.peek().add(
@@ -1913,6 +1986,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitReturnNode(ReturnNode iVisited) {
 		ISourcePosition position = iVisited.getPosition();
 		ASTNode value = null;
@@ -1928,6 +2002,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitSClassNode(SClassNode iVisited) {
 		String name = ""; //$NON-NLS-1$
 		Node receiver = iVisited.getReceiverNode();
@@ -1973,6 +2048,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitSelfNode(SelfNode iVisited) {
 		ISourcePosition position = fixNamePosition(iVisited.getPosition());
 		states.peek().add(
@@ -1981,6 +2057,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitSplatNode(SplatNode iVisited) {
 		Iterator<Node> iterator = iVisited.childNodes().iterator();
 		while (iterator.hasNext()) {
@@ -1990,6 +2067,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitStrNode(StrNode iVisited) {
 		String value = iVisited.getValue().toString();
 		ISourcePosition position = iVisited.getPosition();
@@ -2037,6 +2115,7 @@
 		return false;
 	}
 
+	@Override
 	public Instruction visitSValueNode(SValueNode iVisited) {
 		Iterator<Node> iterator = iVisited.childNodes().iterator();
 		while (iterator.hasNext()) {
@@ -2081,6 +2160,7 @@
 		return argList;
 	}
 
+	@Override
 	public Instruction visitSuperNode(SuperNode iVisited) { // done
 		Node argsNode = iVisited.getArgsNode();
 		CallArgumentsList callArguments = processCallArguments(argsNode);
@@ -2098,6 +2178,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitToAryNode(ToAryNode iVisited) {
 		Iterator<Node> iterator = iVisited.childNodes().iterator();
 		while (iterator.hasNext()) {
@@ -2106,6 +2187,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitTrueNode(TrueNode iVisited) { // done
 		ISourcePosition position = iVisited.getPosition();
 		states.peek().add(
@@ -2114,6 +2196,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitUndefNode(UndefNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		RubyUndefStatement s = new RubyUndefStatement(pos.getStartOffset(), pos
@@ -2122,6 +2205,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitUntilNode(UntilNode iVisited) { // done
 		ASTNode condition = collectSingleNodeSafe(iVisited.getConditionNode());
 		ASTNode body = collectSingleNodeSafe(iVisited.getBodyNode());
@@ -2133,11 +2217,13 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitVAliasNode(VAliasNode iVisited) {
 
 		return null;
 	}
 
+	@Override
 	public Instruction visitVCallNode(VCallNode iVisited) {
 		String methodName = iVisited.getName();
 
@@ -2165,6 +2251,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitWhenNode(WhenNode iVisited) { // done
 		ISourcePosition position = iVisited.getPosition();
 		RubyWhenStatement statement = new RubyWhenStatement(position
@@ -2187,6 +2274,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitWhileNode(WhileNode iVisited) { // done
 		ASTNode condition = collectSingleNodeSafe(iVisited.getConditionNode());
 		ASTNode body = collectSingleNodeSafe(iVisited.getBodyNode());
@@ -2198,6 +2286,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitXStrNode(XStrNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		String value = iVisited.getValue().toString();
@@ -2207,6 +2296,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitYieldNode(YieldNode iVisited) {
 		ISourcePosition position = iVisited.getPosition();
 		RubyCallArgumentsList args = new RubyCallArgumentsList();
@@ -2221,6 +2311,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitZArrayNode(ZArrayNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		RubyArrayExpression arr = new RubyArrayExpression();
@@ -2230,6 +2321,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitZSuperNode(ZSuperNode iVisited) { // done
 
 		CallArgumentsList callArguments = new CallArgumentsList(); // no
@@ -2251,6 +2343,7 @@
 	/**
 	 * @see NodeVisitor#visitBignumNode(BignumNode)
 	 */
+	@Override
 	public Instruction visitBignumNode(BignumNode iVisited) {// done
 		ISourcePosition pos = iVisited.getPosition();
 		BigInteger value = iVisited.getValue();
@@ -2263,6 +2356,7 @@
 	/**
 	 * @see NodeVisitor#visitFixnumNode(FixnumNode)
 	 */
+	@Override
 	public Instruction visitFixnumNode(FixnumNode iVisited) {
 		ISourcePosition pos = iVisited.getPosition();
 		NumericLiteral node = new NumericLiteral(pos.getStartOffset(), pos
@@ -2274,6 +2368,7 @@
 	/**
 	 * @see NodeVisitor#visitFloatNode(FloatNode)
 	 */
+	@Override
 	public Instruction visitFloatNode(FloatNode iVisited) { // done
 		ISourcePosition pos = iVisited.getPosition();
 		double value = iVisited.getValue();
@@ -2286,6 +2381,7 @@
 	/**
 	 * @see NodeVisitor#visitRegexpNode(RegexpNode)
 	 */
+	@Override
 	public Instruction visitRegexpNode(RegexpNode iVisited) { // done
 		Pattern pattern = iVisited.getPattern();
 		ISourcePosition position = iVisited.getPosition();
@@ -2300,6 +2396,7 @@
 	/**
 	 * @see NodeVisitor#visitSymbolNode(SymbolNode)
 	 */
+	@Override
 	public Instruction visitSymbolNode(SymbolNode iVisited) { // done
 		final String symName = iVisited.getName();
 		final ISourcePosition position = iVisited.getPosition();
@@ -2318,11 +2415,13 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitArgsPushNode(ArgsPushNode arg0) {
 		// TODO Auto-generated method stub
 		return null;
 	}
 
+	@Override
 	public Instruction visitAttrAssignNode(AttrAssignNode arg0) { // done
 		ASTNode receiver = collectSingleNodeSafe(arg0.getReceiverNode());
 		CallArgumentsList list = processCallArguments(arg0.getArgsNode());
@@ -2337,6 +2436,7 @@
 		return null;
 	}
 
+	@Override
 	public Instruction visitRootNode(RootNode arg0) { // done
 		Node bodyNode = arg0.getBodyNode();
 		if (bodyNode instanceof BlockNode) {
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/BuiltinMethods.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/BuiltinMethods.java
index feadec4..124dff7 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/BuiltinMethods.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/BuiltinMethods.java
@@ -34,18 +34,22 @@
 			new RubyClassType("FalseClass")}); //$NON-NLS-1$
 
 	private static final class NewMethod implements IntrinsicMethod {
+		@Override
 		public boolean dependsOnArguments() {
 			return false;
 		}
 
+		@Override
 		public boolean dependsOnReceiver() {
 			return true;
 		}
 
+		@Override
 		public IEvaluatedType getReturnType() {
 			return null;
 		}
 
+		@Override
 		public IEvaluatedType getReturnType(IEvaluatedType receiver, IEvaluatedType[] arguments) {
 			if (receiver instanceof RubyClassType) {
 				RubyClassType rubyClassType = (RubyClassType) receiver;
@@ -70,36 +74,44 @@
 
 	private static final class ClassMethod implements IntrinsicMethod {
 
+		@Override
 		public boolean dependsOnArguments() {
 			return false;
 		}
 
+		@Override
 		public boolean dependsOnReceiver() {
 			return true;
 		}
 
+		@Override
 		public IEvaluatedType getReturnType() {
 			return classType;
 		}
 
+		@Override
 		public IEvaluatedType getReturnType(IEvaluatedType receiver, IEvaluatedType[] arguments) {
 			return RubyTypeInferencingUtils.getAmbiguousMetaType(receiver);
 		}
 	}
 
 	private static final class ReceiverTypeReturningMethod implements IntrinsicMethod {
+		@Override
 		public boolean dependsOnArguments() {
 			return false;
 		}
 
+		@Override
 		public boolean dependsOnReceiver() {
 			return true;
 		}
 
+		@Override
 		public IEvaluatedType getReturnType() {
 			return null;
 		}
 
+		@Override
 		public IEvaluatedType getReturnType(IEvaluatedType receiver, IEvaluatedType[] arguments) {
 			return receiver;
 		}
@@ -125,18 +137,22 @@
 			this.returnType = returnType;
 		}
 
+		@Override
 		public boolean dependsOnArguments() {
 			return false;
 		}
 
+		@Override
 		public boolean dependsOnReceiver() {
 			return false;
 		}
 
+		@Override
 		public IEvaluatedType getReturnType() {
 			return returnType;
 		}
 
+		@Override
 		public IEvaluatedType getReturnType(IEvaluatedType receiver, IEvaluatedType[] arguments) {
 			return getReturnType();
 		}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/DefaultRubyEvaluatorFactory.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/DefaultRubyEvaluatorFactory.java
index d41b08e..72b5604 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/DefaultRubyEvaluatorFactory.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/DefaultRubyEvaluatorFactory.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.ruby.typeinference;
 
@@ -124,6 +123,7 @@
 		return null;
 	}
 
+	@Override
 	public GoalEvaluator createEvaluator(IGoal goal) {
 		if (goal instanceof FieldPositionVerificationGoal)
 			return new FieldParentKeyVerificator(goal);
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/MethodContext.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/MethodContext.java
index 44ffe57..946071f 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/MethodContext.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/MethodContext.java
@@ -38,6 +38,7 @@
 		}
 	}
 
+	@Override
 	public IEvaluatedType getArgumentType(String name) {
 		for (int i = 0; i < argNames.length; i++) {
 			String argName = argNames[i];
@@ -50,6 +51,7 @@
 		return null;
 	}
 
+	@Override
 	public IEvaluatedType getInstanceType() {
 		return instanceType;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyClassType.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyClassType.java
index d5cc70a..84fc2c9 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyClassType.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyClassType.java
@@ -20,6 +20,7 @@
 		this.modelKey = modelKey;
 	}
 
+	@Override
 	public boolean subtypeOf(IEvaluatedType type) {
 		return false; //TODO
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyEvaluatorFactory.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyEvaluatorFactory.java
index f4a2f86..27f1eb4 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyEvaluatorFactory.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyEvaluatorFactory.java
@@ -58,12 +58,14 @@
 		}
 		f = factories.toArray(new FactoryInfo[factories.size()]);
 		Arrays.sort(f, new Comparator<FactoryInfo>() {
+			@Override
 			public int compare(FactoryInfo f1, FactoryInfo f2) {
 				return f2.priority - f1.priority; 
 			}
 		});
 	}
 
+	@Override
 	public GoalEvaluator createEvaluator(IGoal goal) {
 		if (f == null)
 			return null;
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyTypeInferencer.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyTypeInferencer.java
index 1e548b3..9200d49 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyTypeInferencer.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/typeinference/RubyTypeInferencer.java
@@ -28,10 +28,12 @@
 			this.timeLimit = timeLimit;
 		}
 
+		@Override
 		public void init() {
 			this.timeStart = System.currentTimeMillis();
 		}
 
+		@Override
 		public boolean prune(IGoal goal, EvaluatorStatistics stat) {
 			long currentTime = System.currentTimeMillis();
 			if (timeLimit != -1 && currentTime - timeStart > timeLimit)
