diff --git a/plugins/org.eclipse.dltk.ruby.formatter/.classpath b/plugins/org.eclipse.dltk.ruby.formatter/.classpath
index 583a869..a5c0514 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/.classpath
+++ b/plugins/org.eclipse.dltk.ruby.formatter/.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-src"/>
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.dltk.ruby.formatter/.settings/org.eclipse.jdt.core.prefs
index 28c3f4f..7009624 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.dltk.ruby.formatter/.settings/org.eclipse.jdt.core.prefs
@@ -1,20 +1,33 @@
 eclipse.preferences.version=1
+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.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+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.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -22,31 +35,52 @@
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 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=warning
+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=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
@@ -56,14 +90,17 @@
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.dltk.ruby.formatter/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..72e1da1
--- /dev/null
+++ b/plugins/org.eclipse.dltk.ruby.formatter/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,59 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/META-INF/MANIFEST.MF b/plugins/org.eclipse.dltk.ruby.formatter/META-INF/MANIFEST.MF
index eabcf21..fe13762 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.dltk.ruby.formatter/META-INF/MANIFEST.MF
@@ -15,7 +15,7 @@
  org.eclipse.dltk.ruby.ui;bundle-version="0.0.0",
  org.eclipse.ui
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Export-Package: org.eclipse.dltk.ruby.formatter,
  org.eclipse.dltk.ruby.formatter.internal,
  org.eclipse.dltk.ruby.formatter.internal.nodes,
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/RubyFormatter.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/RubyFormatter.java
index 4675ace..c90d757 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/RubyFormatter.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/RubyFormatter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -63,11 +63,12 @@
 
 	private final String lineDelimiter;
 
-	public RubyFormatter(String lineDelimiter, Map preferences) {
+	public RubyFormatter(String lineDelimiter, Map<String, ? extends Object> preferences) {
 		super(preferences);
 		this.lineDelimiter = lineDelimiter;
 	}
 
+	@Override
 	public int detectIndentationLevel(IDocument document, int offset) {
 		final String input = document.get();
 		final RubyParserResult result;
@@ -93,6 +94,7 @@
 		return 0;
 	}
 
+	@Override
 	public TextEdit format(String source, int offset, int length, int indent)
 			throws FormatterException {
 		final String input = source.substring(offset, offset + length);
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/RubyFormatterFactory.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/RubyFormatterFactory.java
index 9ce9ca5..b80e2e2 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/RubyFormatterFactory.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/RubyFormatterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -25,11 +25,13 @@
 
 public class RubyFormatterFactory extends AbstractScriptFormatterFactory {
 
+	@Override
 	public PreferenceKey getProfilesKey() {
 		return new PreferenceKey(RubyFormatterPlugin.PLUGIN_ID,
 				RubyFormatterConstants.FORMATTER_PROFILES);
 	}
 
+	@Override
 	public PreferenceKey getActiveProfileKey() {
 		return new PreferenceKey(RubyFormatterPlugin.PLUGIN_ID,
 				RubyFormatterConstants.FORMATTER_ACTIVE_PROFILE);
@@ -58,6 +60,7 @@
 			RubyFormatterConstants.WRAP_COMMENTS,
 			RubyFormatterConstants.WRAP_COMMENTS_LENGTH };
 
+	@Override
 	public PreferenceKey[] getPreferenceKeys() {
 		final PreferenceKey[] result = new PreferenceKey[KEYS.length];
 		for (int i = 0; i < KEYS.length; ++i) {
@@ -76,15 +79,18 @@
 		return result;
 	}
 
+	@Override
 	public IScriptFormatter createFormatter(String lineDelimiter,
-			Map preferences) {
+			Map<String, String> preferences) {
 		return new RubyFormatter(lineDelimiter, preferences);
 	}
 
+	@Override
 	public URL getPreviewContent() {
 		return getClass().getResource("formatterPreview.rb"); //$NON-NLS-1$
 	}
 
+	@Override
 	public IFormatterModifyDialog createDialog(
 			IFormatterModifyDialogOwner dialogOwner) {
 		return new RubyFormatterModifyDialog(dialogOwner, this);
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/DumpContentException.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/DumpContentException.java
index 03f3acc..46d4f04 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/DumpContentException.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/DumpContentException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(message);
 	}
 
+	@Override
 	public void printStackTrace(PrintStream s) {
 		synchronized (s) {
 			s.println("========"); //$NON-NLS-1$
@@ -31,6 +32,7 @@
 		}
 	}
 
+	@Override
 	public void printStackTrace(PrintWriter s) {
 		synchronized (s) {
 			s.println("========"); //$NON-NLS-1$
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterContext.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterContext.java
index 3224614..897874d 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterContext.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -22,6 +22,7 @@
 		super(indent);
 	}
 
+	@Override
 	protected boolean isCountable(IFormatterNode node) {
 		return node instanceof IFormatterContainerNode
 				|| node instanceof FormatterRequireNode;
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterNodeBuilder.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterNodeBuilder.java
index 93493ee..d274800 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterNodeBuilder.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterNodeBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -100,11 +100,13 @@
 		start(root);
 		result.getAST().accept(new AbstractVisitor() {
 
+			@Override
 			protected Instruction visitNode(Node visited) {
 				visitChildren(visited);
 				return null;
 			}
 
+			@Override
 			public Instruction visitClassNode(ClassNode visited) {
 				FormatterClassNode classNode = new FormatterClassNode(document);
 				classNode.setBegin(createTextNode(document, visited
@@ -117,6 +119,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitSClassNode(SClassNode visited) {
 				FormatterClassNode classNode = new FormatterClassNode(document);
 				classNode.setBegin(createTextNode(document, visited
@@ -129,6 +132,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitModuleNode(ModuleNode visited) {
 				FormatterModuleNode moduleNode = new FormatterModuleNode(
 						document);
@@ -142,10 +146,12 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitDefnNode(DefnNode visited) {
 				return visitMethodDefNode(visited);
 			}
 
+			@Override
 			public Instruction visitDefsNode(DefsNode visited) {
 				return visitMethodDefNode(visited);
 			}
@@ -165,6 +171,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitWhileNode(WhileNode visited) {
 				if (!visited.isBlock()) {
 					visitChildren(visited);
@@ -181,6 +188,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitIterNode(IterNode visited) {
 				FormatterDoNode forNode = new FormatterDoNode(document);
 				forNode.setBegin(createTextNode(document, visited.getBegin()));
@@ -192,6 +200,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitForNode(ForNode visited) {
 				FormatterForNode forNode = new FormatterForNode(document);
 				forNode.setBegin(createTextNode(document, visited.getBegin()));
@@ -203,6 +212,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitUntilNode(UntilNode visited) {
 				if (!visited.isBlock()) {
 					visitChild(visited.getBodyNode());
@@ -226,6 +236,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitCaseNode(CaseNode visited) {
 				FormatterCaseNode caseNode = new FormatterCaseNode(document);
 				final int caseEnd = visited.getCaseKeyword().getPosition()
@@ -275,6 +286,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitCommentNode(CommentNode visited) {
 				FormatterRDocNode commentNode = new FormatterRDocNode(document,
 						visited.getStartOffset(), visited.getEndOffset());
@@ -282,9 +294,10 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitIfNode(IfNode visited) {
 				if (visited.isInline()) {
-					List children = new ArrayList(3);
+					List<Node> children = new ArrayList<Node>(3);
 					if (visited.getThenBody() != null) {
 						children.add(visited.getThenBody());
 					}
@@ -353,6 +366,7 @@
 			 * org.jruby.ast.visitor.AbstractVisitor#visitBeginNode(org.jruby
 			 * .ast.BeginNode)
 			 */
+			@Override
 			public Instruction visitBeginNode(BeginNode visited) {
 				FormatterBeginNode beginNode = new FormatterBeginNode(document);
 				beginNode.setBegin(createTextNode(document, visited
@@ -366,6 +380,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitRescueNode(RescueNode visited) {
 				if (visited.isInline()) {
 					return null;
@@ -408,6 +423,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitEnsureNode(EnsureNode visited) {
 				visitChild(visited.getBodyNode());
 				FormatterEnsureNode ensureNode = new FormatterEnsureNode(
@@ -420,6 +436,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitPreExeNode(PreExeNode visited) {
 				FormatterAtBeginNode endNode = new FormatterAtBeginNode(
 						document);
@@ -436,6 +453,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitPostExeNode(PostExeNode visited) {
 				FormatterAtEndNode endNode = new FormatterAtEndNode(document);
 				endNode.setBegin(createTextNode(document, visited
@@ -451,6 +469,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitStrNode(StrNode visited) {
 				FormatterStringNode strNode = new FormatterStringNode(document,
 						visited.getStartOffset(), visited.getEndOffset());
@@ -458,6 +477,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitDStrNode(DStrNode visited) {
 				FormatterStringNode strNode = new FormatterStringNode(document,
 						visited.getStartOffset(), visited.getEndOffset());
@@ -465,6 +485,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitRegexpNode(RegexpNode visited) {
 				FormatterStringNode strNode = new FormatterStringNode(document,
 						visited.getStartOffset(), visited.getEndOffset());
@@ -472,6 +493,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitDRegxNode(DRegexpNode visited) {
 				FormatterStringNode strNode = new FormatterStringNode(document,
 						visited.getStartOffset(), visited.getEndOffset());
@@ -479,6 +501,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitXStrNode(XStrNode visited) {
 				FormatterStringNode strNode = new FormatterStringNode(document,
 						visited.getStartOffset(), visited.getEndOffset());
@@ -486,6 +509,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitHeredocNode(HeredocNode visited) {
 				FormatterHereDocNode heredocNode = new FormatterHereDocNode(
 						document, visited.getStartOffset(), visited
@@ -498,6 +522,7 @@
 				return null;
 			}
 
+			@Override
 			public Instruction visitFCallNode(FCallNode visited) {
 				if (isRequireMethod(visited)) {
 					FormatterRequireNode requireNode = new FormatterRequireNode(
@@ -510,6 +535,7 @@
 				}
 			}
 
+			@Override
 			public Instruction visitArrayNode(ArrayNode visited) {
 				if (visited.getLeftBracketPosition() != null
 						&& visited.getRightBracketPosition() != null) {
@@ -528,6 +554,7 @@
 				}
 			}
 
+			@Override
 			public Instruction visitHashNode(HashNode visited) {
 				if (visited.getLeftBrace() != null
 						&& visited.getRightBrace() != null) {
@@ -556,15 +583,15 @@
 			}
 
 			private void visitChildren(Node visited) {
-				final List children = visited.childNodes();
+				final List<Node> children = visited.childNodes();
 				if (!children.isEmpty()) {
 					visitChildren(children);
 				}
 			}
 
-			private void visitChildren(List children) {
-				for (Iterator i = children.iterator(); i.hasNext();) {
-					final Node child = (Node) i.next();
+			private void visitChildren(List<Node> children) {
+				for (Iterator<Node> i = children.iterator(); i.hasNext();) {
+					final Node child = i.next();
 					visitChild(child);
 				}
 			}
@@ -609,11 +636,10 @@
 				- position.getStartOffset());
 	}
 
-	protected static final Comparator POSITION_COMPARATOR = new Comparator() {
+	protected static final Comparator<Node> POSITION_COMPARATOR = new Comparator<Node>() {
 
-		public int compare(Object o1, Object o2) {
-			final Node node1 = (Node) o1;
-			final Node node2 = (Node) o2;
+		@Override
+		public int compare(Node node1, Node node2) {
 			return node1.getStartOffset() - node2.getStartOffset();
 		}
 
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterNodeRewriter.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterNodeRewriter.java
index 4665a2c..beb7e2c 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterNodeRewriter.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterNodeRewriter.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2016 xored software, Inc. 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
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.internal;
 
 import java.util.ArrayList;
@@ -5,6 +15,7 @@
 import java.util.List;
 
 import org.eclipse.dltk.formatter.FormatterNodeRewriter;
+import org.eclipse.dltk.formatter.FormatterTextNode;
 import org.eclipse.dltk.formatter.FormatterUtils;
 import org.eclipse.dltk.formatter.IFormatterCommentableNode;
 import org.eclipse.dltk.formatter.IFormatterContainerNode;
@@ -17,8 +28,8 @@
 public class RubyFormatterNodeRewriter extends FormatterNodeRewriter {
 
 	public RubyFormatterNodeRewriter(RubyParserResult result) {
-		for (Iterator i = result.getCommentNodes().iterator(); i.hasNext();) {
-			CommentNode commentNode = (CommentNode) i.next();
+		for (Iterator<CommentNode> i = result.getCommentNodes().iterator(); i.hasNext();) {
+			CommentNode commentNode = i.next();
 			if (!commentNode.isBlock()) {
 				addComment(commentNode.getStartOffset(), commentNode
 						.getEndOffset(), commentNode);
@@ -33,17 +44,17 @@
 	}
 
 	private void attachComments(IFormatterContainerNode root) {
-		final List commentNodes = new ArrayList();
-		final List comments = new ArrayList();
-		final List body = root.getBody();
-		for (Iterator i = body.iterator(); i.hasNext();) {
-			IFormatterNode node = (IFormatterNode) i.next();
+		final List<FormatterTextNode> commentNodes = new ArrayList<FormatterTextNode>();
+		final List<FormatterTextNode> comments = new ArrayList<FormatterTextNode>();
+		final List<IFormatterNode> body = root.getBody();
+		for (Iterator<IFormatterNode> i = body.iterator(); i.hasNext();) {
+			IFormatterNode node = i.next();
 			if (node instanceof FormatterCommentNode) {
-				comments.add(node);
+				comments.add((FormatterCommentNode) node);
 			} else if (FormatterUtils.isNewLine(node)
 					&& !comments.isEmpty()
 					&& comments.get(comments.size() - 1) instanceof FormatterCommentNode) {
-				comments.add(node);
+				comments.add((FormatterTextNode) node);
 			} else if (!comments.isEmpty()) {
 				if (node instanceof IFormatterCommentableNode) {
 					((IFormatterCommentableNode) node).insertBefore(comments);
@@ -53,14 +64,15 @@
 			}
 		}
 		body.removeAll(commentNodes);
-		for (Iterator i = body.iterator(); i.hasNext();) {
-			final IFormatterNode node = (IFormatterNode) i.next();
+		for (Iterator<IFormatterNode> i = body.iterator(); i.hasNext();) {
+			final IFormatterNode node = i.next();
 			if (node instanceof IFormatterContainerNode) {
 				attachComments((IFormatterContainerNode) node);
 			}
 		}
 	}
 
+	@Override
 	protected IFormatterNode createCommentNode(IFormatterDocument document,
 			int startOffset, int endOffset, Object object) {
 		return new FormatterCommentNode(document, startOffset, endOffset);
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterPlugin.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterPlugin.java
index 6c10827..10d64dd 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterPlugin.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterPlugin.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2016 xored software, Inc. 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
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.internal;
 
 import org.eclipse.core.runtime.IStatus;
@@ -22,11 +32,13 @@
 	public RubyFormatterPlugin() {
 	}
 
+	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
 	}
 
+	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
 		super.stop(context);
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterPreferenceInitializer.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterPreferenceInitializer.java
index 026f054..0488a76 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterPreferenceInitializer.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/RubyFormatterPreferenceInitializer.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 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.formatter.internal;
 
@@ -16,6 +15,7 @@
 public class RubyFormatterPreferenceInitializer extends
 		AbstractPreferenceInitializer {
 
+	@Override
 	public void initializeDefaultPreferences() {
 		IPreferenceStore store = RubyFormatterPlugin.getDefault()
 				.getPreferenceStore();
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterBlockWithBeginEndNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterBlockWithBeginEndNode.java
index 27e02bf..4a8c32b 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterBlockWithBeginEndNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterBlockWithBeginEndNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -32,15 +32,16 @@
 		super(document);
 	}
 
-	private List begin = null;
+	private List<IFormatterNode> begin = null;
 	private IFormatterTextNode end;
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		context.setBlankLines(getBlankLinesBefore(context));
 		if (begin != null) {
-			for (Iterator i = begin.iterator(); i.hasNext();) {
-				((IFormatterNode) i.next()).accept(context, visitor);
+			for (Iterator<IFormatterNode> i = begin.iterator(); i.hasNext();) {
+				i.next().accept(context, visitor);
 			}
 		}
 		context.resetBlankLines();
@@ -80,14 +81,14 @@
 	 */
 	public void setBegin(IFormatterTextNode begin) {
 		if (this.begin == null) {
-			this.begin = new ArrayList();
+			this.begin = new ArrayList<IFormatterNode>();
 		}
 		this.begin.add(begin);
 	}
 
-	public void insertBefore(List nodes) {
+	public void insertBefore(List<? extends IFormatterNode> nodes) {
 		if (this.begin == null) {
-			this.begin = new ArrayList();
+			this.begin = new ArrayList<IFormatterNode>();
 		}
 		this.begin.addAll(0, nodes);
 	}
@@ -106,10 +107,7 @@
 		this.end = node;
 	}
 
-	/*
-	 * @see
-	 * org.eclipse.dltk.ruby.formatter.node.FormatterBlockNode#getStartOffset()
-	 */
+	@Override
 	public int getStartOffset() {
 		if (begin != null) {
 			return ((IFormatterTextNode) begin.get(0)).getStartOffset();
@@ -117,10 +115,7 @@
 		return super.getStartOffset();
 	}
 
-	/*
-	 * @see
-	 * org.eclipse.dltk.ruby.formatter.node.FormatterBlockNode#getEndOffset()
-	 */
+	@Override
 	public int getEndOffset() {
 		if (end != null) {
 			return end.getEndOffset();
@@ -135,21 +130,17 @@
 		return DEFAULT_OFFSET;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ruby.formatter.node.FormatterBlockNode#isEmpty()
-	 */
+	@Override
 	public boolean isEmpty() {
 		return begin == null && end == null && super.isEmpty();
 	}
 
-	/*
-	 * @see org.eclipse.dltk.formatter.nodes.FormatterBlockNode#getChildren()
-	 */
-	public List getChildren() {
+	@Override
+	public List<IFormatterNode> getChildren() {
 		if (begin == null && end == null) {
 			return super.getChildren();
 		} else {
-			List result = new ArrayList();
+			List<IFormatterNode> result = new ArrayList<IFormatterNode>();
 			if (begin != null) {
 				result.addAll(begin);
 			}
@@ -161,9 +152,7 @@
 		}
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ruby.formatter.node.FormatterBlockNode#toString()
-	 */
+	@Override
 	public String toString() {
 		return begin + "\n" + super.toString() + "\n" + end; //$NON-NLS-1$ //$NON-NLS-2$
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterBlockWithBeginNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterBlockWithBeginNode.java
index db74651..17f0877 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterBlockWithBeginNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterBlockWithBeginNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -17,6 +17,7 @@
 import org.eclipse.dltk.formatter.FormatterBlockNode;
 import org.eclipse.dltk.formatter.IFormatterContext;
 import org.eclipse.dltk.formatter.IFormatterDocument;
+import org.eclipse.dltk.formatter.IFormatterNode;
 import org.eclipse.dltk.formatter.IFormatterTextNode;
 import org.eclipse.dltk.formatter.IFormatterWriter;
 
@@ -31,6 +32,7 @@
 
 	private IFormatterTextNode begin;
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		if (begin != null) {
@@ -63,10 +65,7 @@
 		this.begin = begin;
 	}
 
-	/*
-	 * @see
-	 * org.eclipse.dltk.ruby.formatter.node.FormatterBlockNode#getStartOffset()
-	 */
+	@Override
 	public int getStartOffset() {
 		if (begin != null) {
 			return begin.getStartOffset();
@@ -74,10 +73,7 @@
 		return super.getStartOffset();
 	}
 
-	/*
-	 * @see
-	 * org.eclipse.dltk.ruby.formatter.node.FormatterBlockNode#getEndOffset()
-	 */
+	@Override
 	public int getEndOffset() {
 		if (!super.isEmpty()) {
 			return super.getEndOffset();
@@ -88,21 +84,17 @@
 		return DEFAULT_OFFSET;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ruby.formatter.node.FormatterBlockNode#isEmpty()
-	 */
+	@Override
 	public boolean isEmpty() {
 		return begin == null && super.isEmpty();
 	}
 
-	/*
-	 * @see org.eclipse.dltk.formatter.nodes.FormatterBlockNode#getChildren()
-	 */
-	public List getChildren() {
+	@Override
+	public List<IFormatterNode> getChildren() {
 		if (begin == null) {
 			return super.getChildren();
 		} else {
-			List result = new ArrayList();
+			List<IFormatterNode> result = new ArrayList<IFormatterNode>();
 			if (begin != null) {
 				result.add(begin);
 			}
@@ -111,9 +103,7 @@
 		}
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ruby.formatter.node.FormatterBlockNode#toString()
-	 */
+	@Override
 	public String toString() {
 		return begin + "\n" + super.toString(); //$NON-NLS-1$
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterCaseNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterCaseNode.java
index 13f134e..f4e735a 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterCaseNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterCaseNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_CASE);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterClassNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterClassNode.java
index 0bdb839..fb10742 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterClassNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterClassNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -26,10 +26,12 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_CLASS);
 	}
 
+	@Override
 	protected int getBlankLinesBefore(IFormatterContext context) {
 		if (context.getParent() == null) {
 			return getInt(RubyFormatterConstants.LINES_FILE_BETWEEN_CLASS);
@@ -40,6 +42,7 @@
 		}
 	}
 
+	@Override
 	protected int getBlankLinesAfter(IFormatterContext context) {
 		if (context.getParent() == null) {
 			return getInt(RubyFormatterConstants.LINES_FILE_BETWEEN_CLASS);
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterCommentNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterCommentNode.java
index 96c96fe..0098c4e 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterCommentNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterCommentNode.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2016 xored software, Inc. 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
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.internal.nodes;
 
 import org.eclipse.dltk.formatter.FormatterTextNode;
@@ -13,6 +23,7 @@
 		super(document, startOffset, endOffset);
 	}
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		final boolean savedWrapping = context.isWrapping();
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterDoNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterDoNode.java
index 1d7afae..47f0903 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterDoNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterDoNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_BLOCKS);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterElseIfNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterElseIfNode.java
index f832d09..ef9c019 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterElseIfNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterElseIfNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_IF);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterEnsureNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterEnsureNode.java
index e8656db..bd58ffc 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterEnsureNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterEnsureNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -25,6 +25,7 @@
 		super(document);
 	}
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		if (getBegin() != null) {
@@ -41,6 +42,7 @@
 		acceptBody(context, visitor);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_BLOCKS);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterForNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterForNode.java
index 0180463..59d12d8 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterForNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterForNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_BLOCKS);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterHereDocNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterHereDocNode.java
index b040136..e60223c 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterHereDocNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterHereDocNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -16,8 +16,8 @@
 import org.eclipse.dltk.formatter.IFormatterCallback;
 import org.eclipse.dltk.formatter.IFormatterContext;
 import org.eclipse.dltk.formatter.IFormatterDocument;
-import org.eclipse.dltk.formatter.IFormatterWriter;
 import org.eclipse.dltk.formatter.IFormatterRawWriter;
+import org.eclipse.dltk.formatter.IFormatterWriter;
 import org.eclipse.jface.text.IRegion;
 
 public class FormatterHereDocNode extends FormatterTextNode implements
@@ -68,6 +68,7 @@
 		this.endMarkerRegion = endMarkerRegion;
 	}
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		IFormatterContext heredocContext = context.copy();
@@ -82,6 +83,7 @@
 		visitor.addNewLineCallback(this);
 	}
 
+	@Override
 	public void call(IFormatterContext context, IFormatterRawWriter writer) {
 		final IFormatterDocument doc = getDocument();
 		if (contentRegion != null && contentRegion.getLength() > 0) {
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterIfElseNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterIfElseNode.java
index 292d765..cbfd491 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterIfElseNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterIfElseNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_IF);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterIfNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterIfNode.java
index e33bee8..e4faae2 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterIfNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterIfNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_IF);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterMethodNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterMethodNode.java
index ca5e70c..6ac5c2d 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterMethodNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterMethodNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -26,10 +26,12 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_METHOD);
 	}
 
+	@Override
 	protected int getBlankLinesBefore(IFormatterContext context) {
 		if (context.getParent() == null) {
 			return getInt(RubyFormatterConstants.LINES_FILE_BETWEEN_METHOD);
@@ -40,6 +42,7 @@
 		}
 	}
 
+	@Override
 	protected int getBlankLinesAfter(IFormatterContext context) {
 		if (context.getParent() == null) {
 			return getInt(RubyFormatterConstants.LINES_FILE_BETWEEN_METHOD);
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterModifierNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterModifierNode.java
index aa9845c..796e38c 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterModifierNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterModifierNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -26,6 +26,7 @@
 		super(document);
 	}
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		final boolean indenting = isIndenting();
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterModuleNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterModuleNode.java
index 08e2d6a..2b76e8d 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterModuleNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterModuleNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -26,10 +26,12 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_MODULE);
 	}
 
+	@Override
 	protected int getBlankLinesBefore(IFormatterContext context) {
 		if (context.getParent() == null) {
 			return getInt(RubyFormatterConstants.LINES_FILE_BETWEEN_MODULE);
@@ -40,6 +42,7 @@
 		}
 	}
 
+	@Override
 	protected int getBlankLinesAfter(IFormatterContext context) {
 		if (context.getParent() == null) {
 			return getInt(RubyFormatterConstants.LINES_FILE_BETWEEN_MODULE);
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRDocNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRDocNode.java
index fe66517..d4b217d 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRDocNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRDocNode.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2016 xored software, Inc. 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
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.internal.nodes;
 
 import org.eclipse.dltk.formatter.FormatterTextNode;
@@ -12,6 +22,7 @@
 		super(document, startOffset, endOffset);
 	}
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		IFormatterContext commentContext = context.copy();
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRescueElseNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRescueElseNode.java
index a87d51b..0dc00f2 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRescueElseNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRescueElseNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -25,6 +25,7 @@
 		super(document);
 	}
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		if (getBegin() != null) {
@@ -41,6 +42,7 @@
 		acceptBody(context, visitor);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_BLOCKS);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRescueNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRescueNode.java
index e608b79..cac708a 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRescueNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRescueNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -25,6 +25,7 @@
 		super(document);
 	}
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		if (getBegin() != null) {
@@ -41,6 +42,7 @@
 		acceptBody(context, visitor);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_BLOCKS);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRootNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRootNode.java
index 7750d85..3cb3cf2 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRootNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterRootNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -32,11 +32,12 @@
 		super(document);
 	}
 
-	protected void acceptNodes(final List nodes, IFormatterContext context,
+	@Override
+	protected void acceptNodes(final List<IFormatterNode> nodes, IFormatterContext context,
 			IFormatterWriter visitor) throws Exception {
 		boolean wasRequire = false;
-		for (Iterator i = nodes.iterator(); i.hasNext();) {
-			IFormatterNode node = (IFormatterNode) i.next();
+		for (Iterator<IFormatterNode> i = nodes.iterator(); i.hasNext();) {
+			IFormatterNode node = i.next();
 			context.enter(node);
 			if (node instanceof FormatterRequireNode) {
 				if (wasRequire) {
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterStringNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterStringNode.java
index 30552cc..51f3572 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterStringNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterStringNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -28,6 +28,7 @@
 		super(document, startOffset, endOffset);
 	}
 
+	@Override
 	public void accept(IFormatterContext context, IFormatterWriter visitor)
 			throws Exception {
 		visitor.ensureLineStarted(context);
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterUntilNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterUntilNode.java
index ab12f5e..2949c1b 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterUntilNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterUntilNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_BLOCKS);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhenElseNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhenElseNode.java
index fd85519..598f668 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhenElseNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhenElseNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_WHEN);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhenNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhenNode.java
index a52cd66..83c755c 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhenNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhenNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_WHEN);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhileNode.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhileNode.java
index d1f060e..08c95d5 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhileNode.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/internal/nodes/FormatterWhileNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -23,6 +23,7 @@
 		super(document);
 	}
 
+	@Override
 	protected boolean isIndenting() {
 		return getDocument().getBoolean(RubyFormatterConstants.INDENT_BLOCKS);
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterBlankLinesPage.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterBlankLinesPage.java
index 6f74fba..f3c136b 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterBlankLinesPage.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterBlankLinesPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -31,6 +31,7 @@
 		super(dialog);
 	}
 
+	@Override
 	protected void createOptions(IFormatterControlManager manager,
 			Composite parent) {
 		Group emptyLinesGroup = SWTFactory.createGroup(parent,
@@ -71,6 +72,7 @@
 				Messages.RubyFormatterBlankLinesPage_numberOfEmptyLinesToPreserve);
 	}
 
+	@Override
 	protected URL getPreviewContent() {
 		return getClass().getResource("blank-lines-preview.rb"); //$NON-NLS-1$
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterCommentsPage.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterCommentsPage.java
index a34c247..a567081 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterCommentsPage.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterCommentsPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -31,6 +31,7 @@
 		super(dialog);
 	}
 
+	@Override
 	protected void createOptions(IFormatterControlManager manager,
 			Composite parent) {
 		Group commentWrappingGroup = SWTFactory.createGroup(parent,
@@ -43,6 +44,7 @@
 				Messages.RubyFormatterCommentsPage_maximumLineWidthForComments);
 	}
 
+	@Override
 	protected URL getPreviewContent() {
 		return getClass().getResource("wrapping-preview.rb"); //$NON-NLS-1$
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterIndentationTabPage.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterIndentationTabPage.java
index 9558040..2b24224 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterIndentationTabPage.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterIndentationTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -32,6 +32,7 @@
 		super(dialog);
 	}
 
+	@Override
 	protected void createOptions(final IFormatterControlManager manager,
 			Composite parent) {
 		new FormatterIndentationGroup(manager, parent);
@@ -81,6 +82,7 @@
 						Messages.RubyFormatterIndentationTabPage_StatementsWithinWhenBody);
 	}
 
+	@Override
 	protected URL getPreviewContent() {
 		return getClass().getResource("indentation-preview.rb"); //$NON-NLS-1$
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterModifyDialog.java b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterModifyDialog.java
index ebd76df..29d53d2 100644
--- a/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterModifyDialog.java
+++ b/plugins/org.eclipse.dltk.ruby.formatter/src/org/eclipse/dltk/ruby/formatter/preferences/RubyFormatterModifyDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
+ * Copyright (c) 2008, 2016 xored software, Inc. and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -25,6 +25,7 @@
 		super(dialogOwner, formatterFactory);
 	}
 
+	@Override
 	protected void addPages() {
 		addTabPage(Messages.RubyFormatterModifyDialog_indentation,
 				new RubyFormatterIndentationTabPage(this));
