diff --git a/plugins/org.eclipse.dltk.ruby.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.dltk.ruby.ui/.settings/org.eclipse.jdt.core.prefs
index b87100e..3ddc8d3 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.dltk.ruby.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,9 +1,111 @@
 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.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=1.8
+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=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+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=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+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=warning
+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=ignore
+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=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+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=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+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=enabled
+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.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+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.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
diff --git a/plugins/org.eclipse.dltk.ruby.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.dltk.ruby.ui/.settings/org.eclipse.jdt.ui.prefs
index 547a75e..2be769c 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.dltk.ruby.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,61 @@
-#Fri Oct 22 23:43:52 CEST 2010
 eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
 formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile
 formatter_settings_version=11
+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=true
+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=false
+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=true
+sp_cleanup.remove_trailing_whitespaces=true
+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=true
+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.ui/src/org/eclipse/dltk/ruby/internal/ui/docs/RiHelper.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/docs/RiHelper.java
index 3a19bdd..6edd550 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/docs/RiHelper.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/docs/RiHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2016 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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
@@ -19,7 +19,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.dltk.core.IShutdownListener;
 import org.eclipse.dltk.core.environment.IDeployment;
 import org.eclipse.dltk.core.environment.IEnvironment;
 import org.eclipse.dltk.core.environment.IExecutionEnvironment;
@@ -48,7 +47,7 @@
 		return instance;
 	}
 
-	private WeakHashMap<String, String> cache = new WeakHashMap<String, String>();
+	private WeakHashMap<String, String> cache = new WeakHashMap<>();
 
 	private Process riProcess;
 	private OutputStreamWriter writer;
@@ -66,8 +65,8 @@
 		}
 	}
 
-	protected synchronized void runRiProcess() throws CoreException,
-			IOException {
+	protected synchronized void runRiProcess()
+			throws CoreException, IOException {
 		IInterpreterInstall install = ScriptRuntime
 				.getDefaultInterpreterInstall(RubyNature.NATURE_ID,
 						LocalEnvironment.getInstance());
@@ -88,15 +87,15 @@
 
 		IFileHandle script = deployment.getFile(path);
 
-		riProcess = ScriptLaunchUtil.runScriptWithInterpreter(exeEnv, install
-				.getInstallLocation().toOSString(), script, null, null, null,
-				install.getEnvironmentVariables());
+		riProcess = ScriptLaunchUtil.runScriptWithInterpreter(exeEnv,
+				install.getInstallLocation().toOSString(), script, null, null,
+				null, install.getEnvironmentVariables());
 
 		writer = new OutputStreamWriter(riProcess.getOutputStream());
-		reader = new BufferedReader(new InputStreamReader(riProcess
-				.getInputStream()));
-		errorReader = new BufferedReader(new InputStreamReader(riProcess
-				.getErrorStream()));
+		reader = new BufferedReader(
+				new InputStreamReader(riProcess.getInputStream()));
+		errorReader = new BufferedReader(
+				new InputStreamReader(riProcess.getErrorStream()));
 	}
 
 	protected synchronized void destroyRiProcess() {
@@ -115,14 +114,7 @@
 		if (riProcess != null) {
 			try {
 				final Watchdog watchdog = new Watchdog(TERMINATE_WAIT_TIMEOUT);
-				watchdog.addListener(new WatchdogListener() {
-
-					@Override
-					public void timeoutOccured() {
-						riProcess.destroy();
-					}
-
-				});
+				watchdog.addListener(() -> riProcess.destroy());
 				watchdog.start();
 				try {
 					riProcess.waitFor();
@@ -215,8 +207,8 @@
 	}
 
 	protected RiHelper() {
-		ScriptRuntime
-				.addInterpreterInstallChangedListener(new IInterpreterInstallChangedListener() {
+		ScriptRuntime.addInterpreterInstallChangedListener(
+				new IInterpreterInstallChangedListener() {
 					@Override
 					public void defaultInterpreterInstallChanged(
 							IInterpreterInstall previous,
@@ -225,7 +217,8 @@
 					}
 
 					@Override
-					public void interpreterAdded(IInterpreterInstall Interpreter) {
+					public void interpreterAdded(
+							IInterpreterInstall Interpreter) {
 					}
 
 					@Override
@@ -237,14 +230,7 @@
 							IInterpreterInstall Interpreter) {
 					}
 				});
-		RubyUI.getDefault().addShutdownListener(new IShutdownListener() {
-
-			@Override
-			public void shutdown() {
-				destroyRiProcess();
-			}
-
-		});
+		RubyUI.getDefault().addShutdownListener(() -> destroyRiProcess());
 	}
 
 	public synchronized String getDocFor(String keyword) {
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/documentation/RubyDocumentationProvider.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/documentation/RubyDocumentationProvider.java
index 875ae8f..890e6c6 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/documentation/RubyDocumentationProvider.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/documentation/RubyDocumentationProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2016 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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
@@ -54,7 +54,7 @@
 
 	/**
 	 * Installs a partitioner with <code>document</code>.
-	 * 
+	 *
 	 * @param document
 	 *            the document
 	 */
@@ -73,13 +73,13 @@
 
 	/**
 	 * Removes partitioner with <code>document</code>.
-	 * 
+	 *
 	 * @param document
 	 *            the document
 	 */
 	private static void removeStuff(Document document) {
-		document
-				.setDocumentPartitioner(IRubyPartitions.RUBY_PARTITIONING, null);
+		document.setDocumentPartitioner(IRubyPartitions.RUBY_PARTITIONING,
+				null);
 	}
 
 	private static int findOffsetBeforeMethod(Document doc, int start)
@@ -101,11 +101,11 @@
 			if (PUBLIC.equals(s) || PROTECTED.equals(s) || PRIVATE.equals(s)) {
 				/**
 				 * skip access modifiers between method and comment, e.g.
-				 * 
+				 *
 				 * <code>
-				 * # foo-method	documentation 
-				 * public 
-				 * def foo 
+				 * # foo-method	documentation
+				 * public
+				 * def foo
 				 * end
 				 * </code>
 				 */
@@ -130,14 +130,13 @@
 			while (pos >= 0 && pos <= doc.getLength()) {
 				ITypedRegion region = TextUtilities.getPartition(doc,
 						IRubyPartitions.RUBY_PARTITIONING, pos, true);
-				if (region.getType().equals(IRubyPartitions.RUBY_DOC)
-						|| region.getType()
-								.equals(IRubyPartitions.RUBY_COMMENT)) {
+				if (region.getType().equals(IRubyPartitions.RUBY_DOC) || region
+						.getType().equals(IRubyPartitions.RUBY_COMMENT)) {
 					start = region.getOffset();
 				}
 				if (region.getType().equals(IDocument.DEFAULT_CONTENT_TYPE)) {
-					String content = doc.get(region.getOffset(),
-							region.getLength()).trim();
+					String content = doc
+							.get(region.getOffset(), region.getLength()).trim();
 					if (content.length() > 0 && !content.startsWith("public") //$NON-NLS-1$
 							&& !content.startsWith("protected") //$NON-NLS-1$
 							&& !content.startsWith("private")) //$NON-NLS-1$
@@ -151,14 +150,13 @@
 			while (pos <= doc.getLength()) {
 				ITypedRegion region = TextUtilities.getPartition(doc,
 						IRubyPartitions.RUBY_PARTITIONING, pos, true);
-				if (region.getType().equals(IRubyPartitions.RUBY_DOC)
-						|| region.getType()
-								.equals(IRubyPartitions.RUBY_COMMENT)) {
+				if (region.getType().equals(IRubyPartitions.RUBY_DOC) || region
+						.getType().equals(IRubyPartitions.RUBY_COMMENT)) {
 					end = region.getOffset() + region.getLength();
 				}
 				if (region.getType().equals(IDocument.DEFAULT_CONTENT_TYPE)) {
-					String content = doc.get(region.getOffset(),
-							region.getLength()).trim();
+					String content = doc
+							.get(region.getOffset(), region.getLength()).trim();
 					if (content.length() > 0 && !content.startsWith("public") //$NON-NLS-1$
 							&& !content.startsWith("protected") //$NON-NLS-1$
 							&& !content.startsWith("private")) //$NON-NLS-1$
@@ -252,7 +250,8 @@
 	@Override
 	public Reader getInfo(IMember member, boolean lookIntoParents,
 			boolean lookIntoExternal) {
-		boolean isBuiltin = member.getAncestor(IModelElement.PROJECT_FRAGMENT) instanceof BuiltinProjectFragment;
+		boolean isBuiltin = member.getAncestor(
+				IModelElement.PROJECT_FRAGMENT) instanceof BuiltinProjectFragment;
 		if (isBuiltin && member instanceof IMethod) {
 			IMethod method = (IMethod) member;
 			return proccessBuiltinMethod(method);
@@ -271,7 +270,8 @@
 		return new StringReader(convertToHTML(header));
 	}
 
-	private static String replaceSpecTag(String original, String sc, String tag) {
+	private static String replaceSpecTag(String original, String sc,
+			String tag) {
 		String filtered = original;
 		if (sc.equals("*") || sc.equals("+")) //$NON-NLS-1$ //$NON-NLS-2$
 			sc = "\\" + sc; //$NON-NLS-1$
@@ -360,7 +360,7 @@
 
 	/**
 	 * Checks if a String is whitespace, empty ("") or null.
-	 * 
+	 *
 	 * @param str
 	 *            the String to check, may be null
 	 * @return <code>true</code> if the String is null, empty or whitespace
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/editor/RubyOutlinePage.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/editor/RubyOutlinePage.java
index 43f917f..7a4841b 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/editor/RubyOutlinePage.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/editor/RubyOutlinePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2016 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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
@@ -38,19 +38,20 @@
 				fOutlineViewer, fStore);
 
 		String title, helpContext;
-		ArrayList<MemberFilterAction> actions = new ArrayList<MemberFilterAction>(3);
+		ArrayList<MemberFilterAction> actions = new ArrayList<>(
+				3);
 
 		// Hide variables
 		title = ActionMessages.MemberFilterActionGroup_hide_variables_label;
 
 		helpContext = "";// IDLTKHelpContextIds.FILTER_FIELDS_ACTION; //$NON-NLS-1$
 		MemberFilterAction hideVariables = new MemberFilterAction(
-				fMemberFilterActionGroup, title, new ModelElementFilter(
-						IModelElement.FIELD), helpContext, true);
-		hideVariables
-				.setDescription(ActionMessages.MemberFilterActionGroup_hide_variables_description);
-		hideVariables
-				.setToolTipText(ActionMessages.MemberFilterActionGroup_hide_variables_tooltip);
+				fMemberFilterActionGroup, title,
+				new ModelElementFilter(IModelElement.FIELD), helpContext, true);
+		hideVariables.setDescription(
+				ActionMessages.MemberFilterActionGroup_hide_variables_description);
+		hideVariables.setToolTipText(
+				ActionMessages.MemberFilterActionGroup_hide_variables_tooltip);
 		DLTKPluginImages.setLocalImageDescriptors(hideVariables,
 				"filter_fields.gif"); //$NON-NLS-1$
 		actions.add(hideVariables);
@@ -59,12 +60,13 @@
 		title = ActionMessages.MemberFilterActionGroup_hide_functions_label;
 		helpContext = "";// IDLTKHelpContextIds.FILTER_STATIC_ACTION; //$NON-NLS-1$
 		MemberFilterAction hideProcedures = new MemberFilterAction(
-				fMemberFilterActionGroup, title, new ModelElementFilter(
-						IModelElement.METHOD), helpContext, true);
-		hideProcedures
-				.setDescription(ActionMessages.MemberFilterActionGroup_hide_functions_description);
-		hideProcedures
-				.setToolTipText(ActionMessages.MemberFilterActionGroup_hide_functions_tooltip);
+				fMemberFilterActionGroup, title,
+				new ModelElementFilter(IModelElement.METHOD), helpContext,
+				true);
+		hideProcedures.setDescription(
+				ActionMessages.MemberFilterActionGroup_hide_functions_description);
+		hideProcedures.setToolTipText(
+				ActionMessages.MemberFilterActionGroup_hide_functions_tooltip);
 		// TODO: add correct icon
 		DLTKPluginImages.setLocalImageDescriptors(hideProcedures,
 				"filter_methods.gif"); //$NON-NLS-1$
@@ -74,18 +76,19 @@
 		title = ActionMessages.MemberFilterActionGroup_hide_classes_label;
 		helpContext = "";// IDLTKHelpContextIds.FILTER_PUBLIC_ACTION; //$NON-NLS-1$
 		MemberFilterAction hideNamespaces = new MemberFilterAction(
-				fMemberFilterActionGroup, title, new ModelElementFilter(
-						IModelElement.TYPE), helpContext, true);
-		hideNamespaces
-				.setDescription(ActionMessages.MemberFilterActionGroup_hide_classes_description);
-		hideNamespaces
-				.setToolTipText(ActionMessages.MemberFilterActionGroup_hide_classes_tooltip);
+				fMemberFilterActionGroup, title,
+				new ModelElementFilter(IModelElement.TYPE), helpContext, true);
+		hideNamespaces.setDescription(
+				ActionMessages.MemberFilterActionGroup_hide_classes_description);
+		hideNamespaces.setToolTipText(
+				ActionMessages.MemberFilterActionGroup_hide_classes_tooltip);
 		DLTKPluginImages.setLocalImageDescriptors(hideNamespaces,
 				"filter_classes.gif"); //$NON-NLS-1$
 		actions.add(hideNamespaces);
 
 		// Adding actions to toobar
-		MemberFilterAction[] fFilterActions = actions.toArray(new MemberFilterAction[actions.size()]);
+		MemberFilterAction[] fFilterActions = actions
+				.toArray(new MemberFilterAction[actions.size()]);
 
 		fMemberFilterActionGroup.setActions(fFilterActions);
 		fMemberFilterActionGroup.contributeToToolBar(toolBarManager);
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyCodeScanner.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyCodeScanner.java
index 0d14bbc..6f9e1ad 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyCodeScanner.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyCodeScanner.java
@@ -80,7 +80,7 @@
 
 	@Override
 	protected List<IRule> createRules() {
-		List<IRule> rules = new ArrayList<IRule>();
+		List<IRule> rules = new ArrayList<>();
 		IToken keyword = getToken(IRubyColorConstants.RUBY_KEYWORD);
 		IToken keywordReturn = getToken(IRubyColorConstants.RUBY_KEYWORD_RETURN);
 		IToken other = getToken(IRubyColorConstants.RUBY_DEFAULT);
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyDocScanner.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyDocScanner.java
index 9370c33..ad1abeb 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyDocScanner.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyDocScanner.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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.ui.text;
 
@@ -40,7 +39,7 @@
 
 	@Override
 	protected List<IRule> createRules() {
-		final List<IRule> rules = new ArrayList<IRule>();
+		final List<IRule> rules = new ArrayList<>();
 
 		final IToken topic = getToken(IRubyColorConstants.RUBY_DOC_TOPIC);
 		final IToken other = getToken(IRubyColorConstants.RUBY_DOC);
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyPartitionScanner.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyPartitionScanner.java
index 0755db3..572b4bb 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyPartitionScanner.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyPartitionScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2016 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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
@@ -49,7 +49,7 @@
 
 		rubyDoc = new Token(IRubyPartitions.RUBY_DOC);
 
-		List<IPredicateRule> rules = new ArrayList<IPredicateRule>();
+		List<IPredicateRule> rules = new ArrayList<>();
 
 		rules.add(new RDocRule(rubyDoc));
 
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySemanticUpdateWorker.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySemanticUpdateWorker.java
index 0fbfe3e..668bcbf 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySemanticUpdateWorker.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySemanticUpdateWorker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2016 xored software, Inc.
+ * Copyright (c) 2008, 2017 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
@@ -50,8 +50,8 @@
 import org.eclipse.dltk.ui.editor.highlighting.SemanticHighlighting;
 import org.eclipse.dltk.ui.preferences.PreferencesMessages;
 
-public class RubySemanticUpdateWorker extends ASTVisitor implements
-		ISemanticHighlighter, ISemanticHighlighterExtension {
+public class RubySemanticUpdateWorker extends ASTVisitor
+		implements ISemanticHighlighter, ISemanticHighlighterExtension {
 
 	@Override
 	public SemanticHighlighting[] getSemanticHighlightings() {
@@ -138,9 +138,9 @@
 			handleEvaluatableExpression(node);
 		} else if (node instanceof CallExpression) {
 			final CallExpression call = (CallExpression) node;
-			if (!(RubySyntaxUtils.isRubyOperator(call.getName()) || call
-					.getReceiver() == null
-					&& RubyCodeScanner.isPseudoKeyword(call.getName()))) {
+			if (!(RubySyntaxUtils.isRubyOperator(call.getName())
+					|| call.getReceiver() == null && RubyCodeScanner
+							.isPseudoKeyword(call.getName()))) {
 				final SimpleReference callName = call.getCallName();
 				if (callName.sourceStart() >= 0
 						&& callName.sourceEnd() > callName.sourceStart()) {
@@ -182,7 +182,7 @@
 		stack.pop();
 	}
 
-	private final Stack<ASTNode> stack = new Stack<ASTNode>();
+	private final Stack<ASTNode> stack = new Stack<>();
 
 	private void handleVariableReference(VariableReference ref) {
 		final String varName = ref.getName();
@@ -240,8 +240,8 @@
 					&& content[end] == terminator) {
 				start -= 3;
 				++end;
-				while (end < content.length
-						&& RubySyntaxUtils.isValidRegexpModifier(content[end])) {
+				while (end < content.length && RubySyntaxUtils
+						.isValidRegexpModifier(content[end])) {
 					++end;
 				}
 			}
@@ -251,7 +251,7 @@
 
 	@Override
 	public String[] getHighlightingKeys() {
-		final Set<String> result = new HashSet<String>();
+		final Set<String> result = new HashSet<>();
 		for (SemanticHighlighting highlighting : getSemanticHighlightings()) {
 			result.add(highlighting.getPreferenceKey());
 		}
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySingleQuoteStringScanner.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySingleQuoteStringScanner.java
index c2a8c9e..91bac40 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySingleQuoteStringScanner.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySingleQuoteStringScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2016 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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
@@ -11,7 +11,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.dltk.ruby.internal.ui.text.IRubyColorConstants;
 import org.eclipse.dltk.ui.text.AbstractScriptScanner;
 import org.eclipse.dltk.ui.text.IColorManager;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -20,7 +19,8 @@
 
 public class RubySingleQuoteStringScanner extends AbstractScriptScanner {
 
-	private static final String[] fgTokenProperties = new String[] { IRubyColorConstants.RUBY_STRING };
+	private static final String[] fgTokenProperties = new String[] {
+			IRubyColorConstants.RUBY_STRING };
 
 	public RubySingleQuoteStringScanner(IColorManager manager,
 			IPreferenceStore store) {
@@ -36,7 +36,7 @@
 
 	@Override
 	protected List<IRule> createRules() {
-		List<IRule> rules = new ArrayList<IRule>();
+		List<IRule> rules = new ArrayList<>();
 
 		// Add generic whitespace rule.
 		rules.add(new WhitespaceRule(new RubyWhitespaceDetector()));
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySourceViewerConfiguration.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySourceViewerConfiguration.java
index 948b887..acaff70 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySourceViewerConfiguration.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubySourceViewerConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2016 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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
@@ -7,13 +7,14 @@
  *
  *  Contributors:
  *     xored software, Inc. - initial API and implementation
- *     xored software, Inc. - fix tab handling (Bug# 200024) (Alex Panchenko) 
+ *     xored software, Inc. - fix tab handling (Bug# 200024) (Alex Panchenko)
  *******************************************************************************/
 package org.eclipse.dltk.ruby.internal.ui.text;
 
 import java.util.Map;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.dltk.internal.ui.editor.EditorUtility;
 import org.eclipse.dltk.internal.ui.editor.ScriptSourceViewer;
 import org.eclipse.dltk.internal.ui.text.ScriptElementProvider;
@@ -29,7 +30,6 @@
 import org.eclipse.jface.text.AbstractInformationControlManager;
 import org.eclipse.jface.text.IAutoEditStrategy;
 import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IInformationControl;
 import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.contentassist.ContentAssistant;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
@@ -44,11 +44,10 @@
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.texteditor.ITextEditor;
 
-public class RubySourceViewerConfiguration extends
-		ScriptSourceViewerConfiguration {
+public class RubySourceViewerConfiguration
+		extends ScriptSourceViewerConfiguration {
 
 	private RubyTextTools fTextTools;
 
@@ -108,8 +107,8 @@
 	public IPresentationReconciler getPresentationReconciler(
 			ISourceViewer sourceViewer) {
 		PresentationReconciler reconciler = new ScriptPresentationReconciler();
-		reconciler
-				.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
+		reconciler.setDocumentPartitioning(
+				getConfiguredDocumentPartitioning(sourceViewer));
 
 		DefaultDamagerRepairer dr = new DefaultDamagerRepairer(fCodeScanner);
 		reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
@@ -153,7 +152,7 @@
 	 * Clients are not allowed to call this method if the old setup with text
 	 * tools is in use.
 	 * </p>
-	 * 
+	 *
 	 * @param event
 	 *            the event to which to adapt
 	 * @see RubySourceViewerConfiguration#ScriptSourceViewerConfiguration(IColorManager,
@@ -177,11 +176,11 @@
 	/**
 	 * Determines whether the preference change encoded by the given event
 	 * changes the behavior of one of its contained components.
-	 * 
+	 *
 	 * @param event
 	 *            the event to be investigated
 	 * @return <code>true</code> if event causes a behavioral change
-	 * 
+	 *
 	 */
 	@Override
 	public boolean affectsTextPresentation(PropertyChangeEvent event) {
@@ -194,14 +193,11 @@
 
 	private IInformationControlCreator getHierarchyPresenterControlCreator(
 			ISourceViewer sourceViewer) {
-		return new IInformationControlCreator() {
-			@Override
-			public IInformationControl createInformationControl(Shell parent) {
-				int shellStyle = SWT.RESIZE;
-				int treeStyle = SWT.V_SCROLL | SWT.H_SCROLL;
-				return new RubyHierarchyInformationControl(parent, shellStyle,
-						treeStyle);
-			}
+		return parent -> {
+			int shellStyle = SWT.RESIZE;
+			int treeStyle = SWT.V_SCROLL | SWT.H_SCROLL;
+			return new RubyHierarchyInformationControl(parent, shellStyle,
+					treeStyle);
 		};
 	}
 
@@ -209,15 +205,15 @@
 	public IInformationPresenter getHierarchyPresenter(
 			ScriptSourceViewer sourceViewer, boolean doCodeResolve) {
 		// Do not create hierarchy presenter if there's no CU.
-		if (getEditor() != null
-				&& getEditor().getEditorInput() != null
-				&& EditorUtility.getEditorInputModelElement(getEditor(), true) == null)
+		if (getEditor() != null && getEditor().getEditorInput() != null
+				&& EditorUtility.getEditorInputModelElement(getEditor(),
+						true) == null)
 			return null;
 
 		InformationPresenter presenter = new InformationPresenter(
 				getHierarchyPresenterControlCreator(sourceViewer));
-		presenter
-				.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
+		presenter.setDocumentPartitioning(
+				getConfiguredDocumentPartitioning(sourceViewer));
 		presenter.setAnchor(AbstractInformationControlManager.ANCHOR_GLOBAL);
 		IInformationProvider provider = new ScriptElementProvider(getEditor(),
 				doCodeResolve);
@@ -229,11 +225,12 @@
 	}
 
 	@Override
-	public IAutoEditStrategy[] getAutoEditStrategies(
-			ISourceViewer sourceViewer, String contentType) {
+	public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer,
+			String contentType) {
 		// // TODO: check contentType. think, do we really need it? :)
 		String partitioning = getConfiguredDocumentPartitioning(sourceViewer);
-		return new IAutoEditStrategy[] { new RubyAutoEditStrategy(partitioning) };
+		return new IAutoEditStrategy[] {
+				new RubyAutoEditStrategy(partitioning) };
 	}
 
 	@Override
@@ -254,8 +251,10 @@
 	}
 
 	@Override
-	protected Map getHyperlinkDetectorTargets(final ISourceViewer sourceViewer) {
-		final Map targets = super.getHyperlinkDetectorTargets(sourceViewer);
+	protected Map<String, IAdaptable> getHyperlinkDetectorTargets(
+			final ISourceViewer sourceViewer) {
+		final Map<String, IAdaptable> targets = super.getHyperlinkDetectorTargets(
+				sourceViewer);
 		targets.put("org.eclipse.dltk.ruby.code", getEditor()); //$NON-NLS-1$
 		return targets;
 	}
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyStringScanner.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyStringScanner.java
index 6feef70..562c405 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyStringScanner.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/RubyStringScanner.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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.ui.text;
 
@@ -40,7 +39,7 @@
 
 	@Override
 	protected List<IRule> createRules() {
-		List<IRule> rules = new ArrayList<IRule>();
+		List<IRule> rules = new ArrayList<>();
 
 		// Add generic whitespace rule.
 		rules.add(new WhitespaceRule(new RubyWhitespaceDetector()));
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/folding/RubyFoldingStructureProvider.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/folding/RubyFoldingStructureProvider.java
index 9bc9c19..d40279a 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/folding/RubyFoldingStructureProvider.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/folding/RubyFoldingStructureProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2016 IBM Corporation and others.
+ * Copyright (c) 2005, 2017 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
@@ -31,8 +31,8 @@
 import org.eclipse.jface.text.Region;
 import org.eclipse.jface.text.rules.IPartitionTokenScanner;
 
-public class RubyFoldingStructureProvider extends
-		AbstractASTFoldingStructureProvider {
+public class RubyFoldingStructureProvider
+		extends AbstractASTFoldingStructureProvider {
 
 	@Override
 	protected String getCommentPartition() {
@@ -95,8 +95,8 @@
 	@Override
 	protected void initializePreferences(IPreferenceStore store) {
 		super.initializePreferences(store);
-		fInitCollapseRequires = store
-				.getBoolean(RubyPreferenceConstants.EDITOR_FOLDING_INIT_REQUIRES);
+		fInitCollapseRequires = store.getBoolean(
+				RubyPreferenceConstants.EDITOR_FOLDING_INIT_REQUIRES);
 	}
 
 	/**
@@ -107,7 +107,7 @@
 	protected static class RubyFoldingASTVisitor extends FoldingASTVisitor {
 
 		static class DeclarationContainer {
-			final List<Object> children = new ArrayList<Object>();
+			final List<Object> children = new ArrayList<>();
 			final Declaration declaration;
 			final boolean foldAlways;
 
@@ -134,7 +134,7 @@
 
 		static class ModuleDeclarationContainer extends DeclarationContainer {
 
-			final List<CallExpression> requires = new ArrayList<CallExpression>();
+			final List<CallExpression> requires = new ArrayList<>();
 
 			public ModuleDeclarationContainer() {
 				super(null, false);
@@ -146,7 +146,7 @@
 
 		}
 
-		private final Stack<DeclarationContainer> declarations = new Stack<DeclarationContainer>();
+		private final Stack<DeclarationContainer> declarations = new Stack<>();
 
 		private DeclarationContainer peekDeclaration() {
 			return declarations.peek();
@@ -195,7 +195,8 @@
 		@Override
 		public boolean visit(MethodDeclaration s) throws Exception {
 			handleRequireStatements();
-			final DeclarationContainer child = new DeclarationContainer(s, true);
+			final DeclarationContainer child = new DeclarationContainer(s,
+					true);
 			peekDeclaration().addChild(child);
 			declarations.push(child);
 			return visitGeneral(s);
@@ -218,8 +219,8 @@
 			for (Iterator<?> i = container.children.iterator(); i.hasNext();) {
 				final Object child = i.next();
 				if (child instanceof DeclarationContainer) {
-					processDeclarations((DeclarationContainer) child,
-							level + 1, nextCollabsible);
+					processDeclarations((DeclarationContainer) child, level + 1,
+							nextCollabsible);
 				} else if (child instanceof CodeBlock) {
 					add((CodeBlock) child);
 				}
@@ -260,8 +261,8 @@
 				final CallExpression lastRequire = container.requires
 						.get(container.requires.size() - 1);
 				container.addChild(new CodeBlock(firstRequire, new Region(
-						firstRequire.sourceStart(), lastRequire.sourceEnd()
-								- firstRequire.sourceStart())));
+						firstRequire.sourceStart(),
+						lastRequire.sourceEnd() - firstRequire.sourceStart())));
 				container.requires.clear();
 			}
 		}
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/hyperlink/RubyRequireHyperlink.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/hyperlink/RubyRequireHyperlink.java
index d7d6eba..e6ee5df 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/hyperlink/RubyRequireHyperlink.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/hyperlink/RubyRequireHyperlink.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2016 xored software, Inc.
+ * Copyright (c) 2008, 2017 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
@@ -38,7 +38,8 @@
 	private final IRegion region;
 	private final ITextEditor editor;
 
-	public RubyRequireHyperlink(String path, IRegion region, ITextEditor editor) {
+	public RubyRequireHyperlink(String path, IRegion region,
+			ITextEditor editor) {
 		this.path = path;
 		this.region = region;
 		this.editor = editor;
@@ -75,15 +76,15 @@
 	private static final String DEFAULT_EXTENSION = ".rb"; //$NON-NLS-1$
 
 	private void doOpen() throws ModelException {
-		final IModelElement input = EditorUtility.getEditorInputModelElement(
-				editor, false);
+		final IModelElement input = EditorUtility
+				.getEditorInputModelElement(editor, false);
 		if (input != null) {
 			final OpenAction openAction = (OpenAction) editor
 					.getAction("OpenEditor"); //$NON-NLS-1$
 			if (openAction != null) {
 				final IScriptProject project = input.getScriptProject();
-				final ISourceModule[] modules = SourceModuleLookup.lookup(
-						project, path, DEFAULT_EXTENSION);
+				final ISourceModule[] modules = SourceModuleLookup
+						.lookup(project, path, DEFAULT_EXTENSION);
 				if (modules.length > 0) {
 					if (modules.length == 1) {
 						openAction.run(modules);
@@ -94,7 +95,8 @@
 						}
 					}
 				} else {
-					showMessage(RubyHyperlinkMessages.RequireHyperlink_BadSelection);
+					showMessage(
+							RubyHyperlinkMessages.RequireHyperlink_BadSelection);
 				}
 			}
 		}
@@ -113,7 +115,7 @@
 		if (dialog.open() == Window.OK) {
 			final Object[] selection = dialog.getResult();
 			if (selection != null && selection.length > 0) {
-				final List<ISourceModule> result = new ArrayList<ISourceModule>();
+				final List<ISourceModule> result = new ArrayList<>();
 				for (int i = 0, size = selection.length; i < size; i++) {
 					final Object current = selection[i];
 					if (current instanceof ISourceModule) {
diff --git a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/hyperlink/SourceModuleLookup.java b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/hyperlink/SourceModuleLookup.java
index 4e65745..0c9c3ef 100644
--- a/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/hyperlink/SourceModuleLookup.java
+++ b/plugins/org.eclipse.dltk.ruby.ui/src/org/eclipse/dltk/ruby/internal/ui/text/hyperlink/SourceModuleLookup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2016 xored software, Inc.
+ * Copyright (c) 2008, 2017 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
@@ -26,7 +26,7 @@
 	/**
 	 * Lookups {@link ISourceModule}s with the specified
 	 * <code>modulePath</code>. Returns the array of the matched modules.
-	 * 
+	 *
 	 * @param project
 	 *            project to lookup
 	 * @param modulePath
@@ -38,7 +38,7 @@
 	 */
 	public static ISourceModule[] lookup(IScriptProject project,
 			String modulePath, String suffix) throws ModelException {
-		final List<ISourceModule> result = new ArrayList<ISourceModule>();
+		final List<ISourceModule> result = new ArrayList<>();
 		final IPath path = new Path(modulePath);
 		final String fileName = path.lastSegment();
 		final String folderPath = path.removeLastSegments(1).toString();
