Fix warnings in o.e.team.examples.filesystem.

Change-Id: I3d30a6ed0f817e3d449d68a81f85d80bbfc82633
diff --git a/examples/org.eclipse.team.examples.filesystem/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.team.examples.filesystem/.settings/org.eclipse.jdt.core.prefs
index 8743813..c281c8a 100644
--- a/examples/org.eclipse.team.examples.filesystem/.settings/org.eclipse.jdt.core.prefs
+++ b/examples/org.eclipse.team.examples.filesystem/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,13 @@
 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
@@ -7,56 +16,412 @@
 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.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+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=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+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=error
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
 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=error
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
 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=error
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+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=error
+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=warning
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 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=warning
 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=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=error
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+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.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/examples/org.eclipse.team.examples.filesystem/.settings/org.eclipse.jdt.ui.prefs b/examples/org.eclipse.team.examples.filesystem/.settings/org.eclipse.jdt.ui.prefs
index b35e41a..9018675 100644
--- a/examples/org.eclipse.team.examples.filesystem/.settings/org.eclipse.jdt.ui.prefs
+++ b/examples/org.eclipse.team.examples.filesystem/.settings/org.eclipse.jdt.ui.prefs
@@ -1,3 +1,64 @@
-#Wed Mar 15 21:17:48 EST 2006
 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=14
 internal.default.compliance=user
+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=true
+sp_cleanup.correct_indentation=true
+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_modifiers=true
+sp_cleanup.remove_redundant_semicolons=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=true
+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/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java
index 180fb63..130b77d 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java
@@ -31,7 +31,7 @@
  * only has two methods and their implementation is straight forward.
  */
 public final class FileModificationValidator extends org.eclipse.core.resources.team.FileModificationValidator {
-	
+
 	private FileSystemOperations operations;
 
 	/**
@@ -60,17 +60,18 @@
 	 * The idea is to prevent anyone from accidentally working on a file that they won't be able to check in changes to.
 	 * @see org.eclipse.core.resources.IFileModificationValidator#validateEdit(IFile[], Object)
 	 */
+	@Override
 	public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
-		Collection toBeCheckedOut = new ArrayList();
+		Collection<IResource> toBeCheckedOut = new ArrayList<>();
 
 		//Make a list of all the files that need to be checked out:
-		for (int i = 0; i < files.length; i++) {
-			if (!operations.isCheckedOut(files[i])) {
-				toBeCheckedOut.add(files[i]);
+		for (IFile file : files) {
+			if (!operations.isCheckedOut(file)) {
+				toBeCheckedOut.add(file);
 			}
 		}
-		
-		return checkout((IResource[]) toBeCheckedOut.toArray(new IResource[toBeCheckedOut.size()]));
+
+		return checkout(toBeCheckedOut.toArray(new IResource[toBeCheckedOut.size()]));
 	}
 
 	/**
@@ -78,6 +79,7 @@
 	 * It should not attempt to save any files that don't receive an OK status here.
 	 * @see org.eclipse.core.resources.IFileModificationValidator#validateSave(IFile)
 	 */
+	@Override
 	public IStatus validateSave(IFile file) {
 		if (file.isReadOnly()) {
 			return checkout(new IResource[] { file });
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemOperations.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemOperations.java
index 97de435..46276b4 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemOperations.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemOperations.java
@@ -10,7 +10,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- * 	   Andreas Voss <av@tonbeller.com> - Bug 181141 [Examples] Team: filesystem provider example can not handle deletions     
+ * 	   Andreas Voss <av@tonbeller.com> - Bug 181141 [Examples] Team: filesystem provider example can not handle deletions
  *******************************************************************************/
 package org.eclipse.team.examples.filesystem;
 
@@ -19,7 +19,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.resources.IContainer;
@@ -51,7 +50,7 @@
 	}
 
 	/**
-	 * Make the local state of the project match the remote state by getting any out-of-sync 
+	 * Make the local state of the project match the remote state by getting any out-of-sync
 	 * resources. The overrideOutgoing flag is used to indicate whether locally modified
 	 * files should also be replaced or left alone.
 	 * @param resources the resources to get
@@ -74,7 +73,7 @@
 	}
 
 	/**
-	 * Make the local state of the traversals match the remote state by getting any out-of-sync 
+	 * Make the local state of the traversals match the remote state by getting any out-of-sync
 	 * resources. The overrideOutgoing flag is used to indicate whether locally modified
 	 * files should also be replaced or left alone.
 	 * @param traversals the traversals that cover the resources to get
@@ -87,15 +86,14 @@
 			// ensure the progress monitor is not null
 			monitor = Policy.monitorFor(monitor);
 			monitor.beginTask(null, 100* traversals.length);
-			for (int i = 0; i < traversals.length; i++) {
-				ResourceTraversal traversal = traversals[i];
+			for (ResourceTraversal traversal : traversals) {
 				get(traversal.getResources(), traversal.getDepth(), overrideOutgoing, SubMonitor.convert(monitor, 100));
 			}
 		} finally {
 			monitor.done();
 		}
 	}
-	
+
 	/**
 	 * Checkout the given resources to the given depth by setting any files
 	 * to writable (i.e set read-only to <code>false</code>.
@@ -108,16 +106,14 @@
 		try {
 			progress = Policy.monitorFor(progress);
 			progress.beginTask(Policy.bind("FileSystemSimpleAccessOperations.1"), resources.length); //$NON-NLS-1$
-			for (int i = 0; i < resources.length; i++) {
+			for (IResource resource2 : resources) {
 				Policy.checkCanceled(progress);
-				resources[i].accept(new IResourceVisitor() {
-					public boolean visit(IResource resource) throws CoreException {
-						if (resource.getType() == IResource.FILE) {
-							//TODO: lock the file on the 'server'.
-							resource.setReadOnly(false);
-						}
-						return true;
+				resource2.accept((IResourceVisitor) resource -> {
+					if (resource.getType() == IResource.FILE) {
+						//TODO: lock the file on the 'server'.
+						resource.setReadOnly(false);
 					}
+					return true;
 				}, depth, false /* include phantoms */);
 				progress.worked(1);
 			}
@@ -130,7 +126,7 @@
 
 	/**
 	 * Check-in the given resources to the given depth by replacing the remote (i.e. file system)
-	 * contents with the local workspace contents. 
+	 * contents with the local workspace contents.
 	 * @param resources the resources
 	 * @param depth the depth of the operation
 	 * @param overrideIncoming indicate whether incoming remote changes should be replaced
@@ -152,7 +148,7 @@
 
 	/**
 	 * Check-in the given resources to the given depth by replacing the remote (i.e. file system)
-	 * contents with the local workspace contents. 
+	 * contents with the local workspace contents.
 	 * @param traversals the traversals that cover the resources to check in
 	 * @param overrideIncoming indicate whether incoming remote changes should be replaced
 	 * @param progress a progress monitor
@@ -163,15 +159,14 @@
 			// ensure the progress monitor is not null
 			monitor = Policy.monitorFor(monitor);
 			monitor.beginTask(null, 100* traversals.length);
-			for (int i = 0; i < traversals.length; i++) {
-				ResourceTraversal traversal = traversals[i];
+			for (ResourceTraversal traversal : traversals) {
 				checkin(traversal.getResources(), traversal.getDepth(), overrideIncoming, SubMonitor.convert(monitor, 100));
 			}
 		} finally {
 			monitor.done();
 		}
 	}
-	
+
 	/**
 	 * Return whether the local resource is checked out. A resource
 	 * is checked out if it is a file that is not read-only. Folders
@@ -190,16 +185,16 @@
 	private FileSystemResourceVariant getResourceVariant(IResource resource) {
 		return (FileSystemResourceVariant)provider.getResourceVariant(resource);
 	}
-	
+
 	private void internalGet(IResource[] resources, int depth, boolean overrideOutgoing, IProgressMonitor progress) throws TeamException {
 		// Traverse the resources and get any that are out-of-sync
 		progress.beginTask(Policy.bind("GetAction.working"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$
-		for (int i = 0; i < resources.length; i++) {
+		for (IResource resource : resources) {
 			Policy.checkCanceled(progress);
-			if (resources[i].getType() == IResource.FILE) {
-				internalGet((IFile) resources[i], overrideOutgoing, progress);
+			if (resource.getType() == IResource.FILE) {
+				internalGet((IFile) resource, overrideOutgoing, progress);
 			} else if (depth != IResource.DEPTH_ZERO) {
-				internalGet((IContainer)resources[i], depth, overrideOutgoing, progress);
+				internalGet((IContainer)resource, depth, overrideOutgoing, progress);
 			}
 			progress.worked(1);
 		}
@@ -212,7 +207,7 @@
 		try {
 			ThreeWaySynchronizer synchronizer = FileSystemSubscriber.getInstance().getSynchronizer();
 			// Make the local folder state match the remote folder state
-			List toDelete = new ArrayList();
+			List<IFolder> toDelete = new ArrayList<>();
 			if (container.getType() == IResource.FOLDER) {
 				IFolder folder = (IFolder)container;
 				FileSystemResourceVariant remote = getResourceVariant(container);
@@ -226,16 +221,15 @@
 					toDelete.add(folder);
 				}
 			}
-			
+
 			// Get the children
 			IResource[] children = synchronizer.members(container);
 			if (children.length > 0) {
 				internalGet(children, depth == IResource.DEPTH_INFINITE ? IResource.DEPTH_INFINITE : IResource.DEPTH_ZERO, overrideOutgoing, progress);
 			}
-		
+
 			// Remove any empty folders
-			for (Iterator iter = toDelete.iterator(); iter.hasNext(); ) {
-				IFolder folder = (IFolder) iter.next();
+			for (IFolder folder : toDelete) {
 				if (folder.members().length == 0) {
 					folder.delete(false, true, progress);
 					synchronizer.flush(folder, IResource.DEPTH_INFINITE);
@@ -255,7 +249,7 @@
 		FileSystemResourceVariant remote = getResourceVariant(localFile);
 		byte[] baseBytes = synchronizer.getBaseBytes(localFile);
 		IResourceVariant base = provider.getResourceVariant(localFile, baseBytes);
-		if (!synchronizer.hasSyncBytes(localFile) 
+		if (!synchronizer.hasSyncBytes(localFile)
 				|| (isLocallyModified(localFile) && !overrideOutgoing)) {
 			// Do not overwrite the local modification
 			return;
@@ -270,9 +264,9 @@
 				throw TeamException.asTeamException(e);
 			}
 		}
-		if (!synchronizer.isLocallyModified(localFile) 
-				&& base != null 
-				&& remote != null 
+		if (!synchronizer.isLocallyModified(localFile)
+				&& base != null
+				&& remote != null
 				&& comparator.compare(base, remote)) {
 			// The base and remote are the same and there's no local changes
 			// so nothing needs to be done
@@ -302,23 +296,23 @@
 			throw FileSystemPlugin.wrapException(e);
 		}
 	}
-	
+
 	private void internalPut(IResource[] resources, int depth, boolean overrideIncoming, IProgressMonitor progress) throws TeamException {
 		// ensure the progress monitor is not null
 		progress = Policy.monitorFor(progress);
 		progress.beginTask(Policy.bind("PutAction.working"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$
-		for (int i = 0; i < resources.length; i++) {
+		for (IResource resource : resources) {
 			Policy.checkCanceled(progress);
-			if (resources[i].getType() == IResource.FILE) {
-				internalPut((IFile)resources[i], overrideIncoming, progress);
+			if (resource.getType() == IResource.FILE) {
+				internalPut((IFile)resource, overrideIncoming, progress);
 			} else if (depth > 0) { //Assume that resources are either files or containers.
-				internalPut((IContainer)resources[i], depth, overrideIncoming, progress);
+				internalPut((IContainer)resource, depth, overrideIncoming, progress);
 			}
 			progress.worked(1);
 		}
 		progress.done();
 	}
-	
+
 	/**
 	 * Put the file if the sync state allows it.
 	 * @param localFile the local file
@@ -333,7 +327,7 @@
 		FileSystemResourceVariant remote = getResourceVariant(localFile);
 		byte[] baseBytes = synchronizer.getBaseBytes(localFile);
 		IResourceVariant base = provider.getResourceVariant(localFile, baseBytes);
-		
+
 		// Check whether we are overriding a remote change
 		if (base == null && remote != null && !overrideIncoming) {
 			// The remote is an incoming (or conflicting) addition.
@@ -360,10 +354,10 @@
 				return false;
 			}
 		}
-		
+
 		// Handle an outgoing deletion
 		File diskFile = provider.getFile(localFile);
-		if (!localFile.exists()) { 
+		if (!localFile.exists()) {
 			diskFile.delete();
 			synchronizer.flush(localFile, IResource.DEPTH_ZERO);
 		} else {
@@ -399,7 +393,7 @@
 		}
 		return true;
 	}
-	
+
 	private boolean isLocallyModified(IFile localFile) throws TeamException {
 		ThreeWaySynchronizer synchronizer = FileSystemSubscriber.getInstance().getSynchronizer();
 		if (!localFile.exists()) {
@@ -416,7 +410,7 @@
 		try {
 			ThreeWaySynchronizer synchronizer = FileSystemSubscriber.getInstance().getSynchronizer();
 			// Make the local folder state match the remote folder state
-			List toDelete = new ArrayList();
+			List<File> toDelete = new ArrayList<>();
 			if (container.getType() == IResource.FOLDER) {
 				IFolder folder = (IFolder)container;
 				File diskFile = provider.getFile(container);
@@ -431,16 +425,15 @@
 					synchronizer.setBaseBytes(folder, provider.getResourceVariant(folder).asBytes());
 				}
 			}
-			
+
 			// Get the children
 			IResource[] children = synchronizer.members(container);
 			if (children.length > 0) {
 				internalPut(children, depth == IResource.DEPTH_INFINITE ? IResource.DEPTH_INFINITE : IResource.DEPTH_ZERO, overrideIncoming, progress);
 			}
-		
+
 			// Remove any empty folders
-			for (Iterator iter = toDelete.iterator(); iter.hasNext(); ) {
-				File diskFile = (File) iter.next();
+			for (File diskFile : toDelete) {
 				File[] fileList = diskFile.listFiles();
 				if(fileList == null) {
 					throw new TeamException("Content from directory '" + diskFile.getAbsolutePath() + "' can not be listed."); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/subscriber/FileSystemSubscriber.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/subscriber/FileSystemSubscriber.java
index 974256a..4aacbeb 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/subscriber/FileSystemSubscriber.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/subscriber/FileSystemSubscriber.java
@@ -16,12 +16,19 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.team.core.RepositoryProvider;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.synchronize.SyncInfo;
-import org.eclipse.team.core.variants.*;
+import org.eclipse.team.core.variants.IResourceVariant;
+import org.eclipse.team.core.variants.ThreeWayRemoteTree;
+import org.eclipse.team.core.variants.ThreeWaySubscriber;
+import org.eclipse.team.core.variants.ThreeWaySynchronizer;
 import org.eclipse.team.examples.filesystem.FileSystemPlugin;
 import org.eclipse.team.examples.filesystem.FileSystemProvider;
 
@@ -32,7 +39,7 @@
  * manage the roots and to create resource variants. It also makes
  * use of a file system specific remote tree (<code>FileSystemRemoteTree</code>)
  * for provided the remote tree access and refresh.
- * 
+ *
  * @see ThreeWaySubscriber
  * @see ThreeWaySynchronizer
  * @see FileSystemProvider
@@ -41,7 +48,7 @@
 public class FileSystemSubscriber extends ThreeWaySubscriber {
 
 	private static FileSystemSubscriber instance;
-	
+
 	/**
 	 * Return the file system subscriber singleton.
 	 * @return the file system subscriber singleton.
@@ -52,7 +59,7 @@
 		}
 		return instance;
 	}
-	
+
 	/**
 	 * Create the file system subscriber.
 	 */
@@ -60,9 +67,7 @@
 		super(new ThreeWaySynchronizer(new QualifiedName(FileSystemPlugin.ID, "workpsace-sync"))); //$NON-NLS-1$
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.variants.ThreeWaySubscriber#getResourceVariant(org.eclipse.core.resources.IResource, byte[])
-	 */
+	@Override
 	public IResourceVariant getResourceVariant(IResource resource, byte[] bytes) {
 		RepositoryProvider provider = RepositoryProvider.getProvider(resource.getProject(), FileSystemPlugin.PROVIDER_ID);
 		if (provider != null) {
@@ -71,28 +76,21 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.variants.ThreeWaySubscriber#createRemoteTree()
-	 */
+	@Override
 	protected ThreeWayRemoteTree createRemoteTree() {
 		return new FileSystemRemoteTree(this);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.subscribers.Subscriber#getName()
-	 */
+	@Override
 	public String getName() {
 		return "File System Example"; //$NON-NLS-1$
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.subscribers.Subscriber#roots()
-	 */
+	@Override
 	public IResource[] roots() {
-		List result = new ArrayList();
+		List<IProject> result = new ArrayList<>();
 		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-		for (int i = 0; i < projects.length; i++) {
-			IProject project = projects[i];
+		for (IProject project : projects) {
 			if(project.isAccessible()) {
 				RepositoryProvider provider = RepositoryProvider.getProvider(project, FileSystemPlugin.PROVIDER_ID);
 				if(provider != null) {
@@ -100,20 +98,16 @@
 				}
 			}
 		}
-		return (IProject[]) result.toArray(new IProject[result.size()]);
+		return result.toArray(new IProject[result.size()]);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.variants.ThreeWaySubscriber#handleRootChanged(org.eclipse.core.resources.IResource, boolean)
-	 */
+	@Override
 	public void handleRootChanged(IResource resource, boolean added) {
 		// Override to allow FileSystemProvider to signal the addition and removal of roots
 		super.handleRootChanged(resource, added);
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.variants.ResourceVariantTreeSubscriber#getSyncInfo(org.eclipse.core.resources.IResource, org.eclipse.team.core.variants.IResourceVariant, org.eclipse.team.core.variants.IResourceVariant)
-	 */
+
+	@Override
 	protected SyncInfo getSyncInfo(IResource local, IResourceVariant base, IResourceVariant remote) throws TeamException {
 		// Override to use a custom sync info
 		FileSystemSyncInfo info = new FileSystemSyncInfo(local, base, remote, this.getResourceComparator());
@@ -140,7 +134,7 @@
 	/**
 	 * Make the change an outgoing change
 	 * @param resource
-	 * @throws TeamException 
+	 * @throws TeamException
 	 */
 	public void markAsMerged(IResource resource, IProgressMonitor monitor) throws TeamException {
 		makeInSync(resource);
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/CompoundResourceTraversal.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/CompoundResourceTraversal.java
index 143fc39..4a009a8 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/CompoundResourceTraversal.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/CompoundResourceTraversal.java
@@ -13,7 +13,11 @@
  *******************************************************************************/
 package org.eclipse.team.examples.filesystem.ui;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.mapping.ResourceTraversal;
@@ -23,28 +27,26 @@
  * Helper class that accumulates several traversals in order
  * to generate a final set of traversals and to perform certain
  * queries on a set of traversals.
- * 
+ *
  * TODO: This class was copied from the Team Core plugin since it was an internal
  * class. It should probably be made API at some point.
  */
 public class CompoundResourceTraversal {
-	
-	private Set deepFolders = new HashSet();
-	private Set shallowFolders = new HashSet();
-	private Set zeroFolders = new HashSet();
-	private Set files = new HashSet();
-	
+
+	private Set<IResource> deepFolders = new HashSet<>();
+	private Set<IResource> shallowFolders = new HashSet<>();
+	private Set<IResource> zeroFolders = new HashSet<>();
+	private Set<IResource> files = new HashSet<>();
+
 	public void addTraversals(ResourceTraversal[] traversals) {
-		for (int i = 0; i < traversals.length; i++) {
-			ResourceTraversal traversal = traversals[i];
+		for (ResourceTraversal traversal : traversals) {
 			addTraversal(traversal);
 		}
 	}
 
 	public void addTraversal(ResourceTraversal traversal) {
 		IResource[] resources = traversal.getResources();
-		for (int i = 0; i < resources.length; i++) {
-			IResource resource = resources[i];
+		for (IResource resource : resources) {
 			addResource(resource, traversal.getDepth());
 		}
 	}
@@ -77,8 +79,8 @@
 	public boolean isCovered(IResource resource, int depth) {
 		IPath fullPath = resource.getFullPath();
 		// Regardless of the depth, look for a deep folder that covers the resource
-		for (Iterator iter = deepFolders.iterator(); iter.hasNext();) {
-			IResource deepFolder = (IResource) iter.next();
+		for (Object element : deepFolders) {
+			IResource deepFolder = (IResource) element;
 			if (deepFolder.getFullPath().isPrefixOf(fullPath)) {
 				return true;
 			}
@@ -157,25 +159,24 @@
 
 	public void add(CompoundResourceTraversal compoundTraversal) {
 		addResources(
-				(IResource[]) compoundTraversal.deepFolders.toArray(new IResource[compoundTraversal.deepFolders.size()]), 
+				compoundTraversal.deepFolders.toArray(new IResource[compoundTraversal.deepFolders.size()]),
 				IResource.DEPTH_INFINITE);
 		addResources(
-				(IResource[]) compoundTraversal.shallowFolders.toArray(new IResource[compoundTraversal.shallowFolders.size()]), 
+				compoundTraversal.shallowFolders.toArray(new IResource[compoundTraversal.shallowFolders.size()]),
 				IResource.DEPTH_ONE);
 		addResources(
-				(IResource[]) compoundTraversal.zeroFolders.toArray(new IResource[compoundTraversal.zeroFolders.size()]), 
+				compoundTraversal.zeroFolders.toArray(new IResource[compoundTraversal.zeroFolders.size()]),
 				IResource.DEPTH_ZERO);
 		addResources(
-				(IResource[]) compoundTraversal.files.toArray(new IResource[compoundTraversal.files.size()]), 
+				compoundTraversal.files.toArray(new IResource[compoundTraversal.files.size()]),
 				IResource.DEPTH_ZERO);
 	}
 
 	public void addResources(IResource[] resources, int depth) {
-		for (int i = 0; i < resources.length; i++) {
-			IResource resource = resources[i];
+		for (IResource resource : resources) {
 			addResource(resource, depth);
 		}
-		
+
 	}
 
 	/**
@@ -193,58 +194,54 @@
 	 * Return any resources in the other traversal that are not covered by this traversal
 	 */
 	private IResource[] getUncoveredResources(CompoundResourceTraversal otherTraversal) {
-		Set result = new HashSet();
-		for (Iterator iter = otherTraversal.files.iterator(); iter.hasNext();) {
-			IResource resource = (IResource) iter.next();
+		Set<IResource> result = new HashSet<>();
+		for (IResource resource : otherTraversal.files) {
 			if (!isCovered(resource, IResource.DEPTH_ZERO)) {
 				result.add(resource);
 			}
 		}
-		for (Iterator iter = otherTraversal.zeroFolders.iterator(); iter.hasNext();) {
-			IResource resource = (IResource) iter.next();
+		for (IResource resource : otherTraversal.zeroFolders) {
 			if (!isCovered(resource, IResource.DEPTH_ZERO)) {
 				result.add(resource);
 			}
 		}
-		for (Iterator iter = otherTraversal.shallowFolders.iterator(); iter.hasNext();) {
-			IResource resource = (IResource) iter.next();
+		for (IResource resource : otherTraversal.shallowFolders) {
 			if (!isCovered(resource, IResource.DEPTH_ONE)) {
 				result.add(resource);
 			}
 		}
-		for (Iterator iter = otherTraversal.deepFolders.iterator(); iter.hasNext();) {
-			IResource resource = (IResource) iter.next();
+		for (IResource resource : otherTraversal.deepFolders) {
 			if (!isCovered(resource, IResource.DEPTH_INFINITE)) {
 				result.add(resource);
 			}
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	public ResourceTraversal[] asTraversals() {
-		List result = new ArrayList();
+		List<ResourceTraversal> result = new ArrayList<>();
 		if (!files.isEmpty() || ! zeroFolders.isEmpty()) {
-			Set combined = new HashSet();
+			Set<IResource> combined = new HashSet<>();
 			combined.addAll(files);
 			combined.addAll(zeroFolders);
-			result.add(new ResourceTraversal((IResource[]) combined.toArray(new IResource[combined.size()]), IResource.DEPTH_ZERO, IResource.NONE));
+			result.add(new ResourceTraversal(combined.toArray(new IResource[combined.size()]), IResource.DEPTH_ZERO, IResource.NONE));
 		}
 		if (!shallowFolders.isEmpty()) {
-			result.add(new ResourceTraversal((IResource[]) shallowFolders.toArray(new IResource[shallowFolders.size()]), IResource.DEPTH_ONE, IResource.NONE));
+			result.add(new ResourceTraversal(shallowFolders.toArray(new IResource[shallowFolders.size()]), IResource.DEPTH_ONE, IResource.NONE));
 		}
 		if (!deepFolders.isEmpty()) {
-			result.add(new ResourceTraversal((IResource[]) deepFolders.toArray(new IResource[deepFolders.size()]), IResource.DEPTH_INFINITE, IResource.NONE));
+			result.add(new ResourceTraversal(deepFolders.toArray(new IResource[deepFolders.size()]), IResource.DEPTH_INFINITE, IResource.NONE));
 		}
-		return (ResourceTraversal[]) result.toArray(new ResourceTraversal[result.size()]);
+		return result.toArray(new ResourceTraversal[result.size()]);
 	}
 
 	public IResource[] getRoots() {
-		List result = new ArrayList();
+		List<IResource> result = new ArrayList<>();
 		result.addAll(files);
 		result.addAll(zeroFolders);
 		result.addAll(shallowFolders);
 		result.addAll(deepFolders);
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	public ResourceTraversal[] getUncoveredTraversals(ResourceTraversal[] traversals) {
@@ -255,26 +252,22 @@
 
 	public ResourceTraversal[] getUncoveredTraversals(CompoundResourceTraversal otherTraversal) {
 		CompoundResourceTraversal uncovered = new CompoundResourceTraversal();
-		for (Iterator iter = otherTraversal.files.iterator(); iter.hasNext();) {
-			IResource resource = (IResource) iter.next();
+		for (IResource resource : otherTraversal.files) {
 			if (!isCovered(resource, IResource.DEPTH_ZERO)) {
 				uncovered.addResource(resource, IResource.DEPTH_ZERO);
 			}
 		}
-		for (Iterator iter = otherTraversal.zeroFolders.iterator(); iter.hasNext();) {
-			IResource resource = (IResource) iter.next();
+		for (IResource resource : otherTraversal.zeroFolders) {
 			if (!isCovered(resource, IResource.DEPTH_ZERO)) {
 				uncovered.addResource(resource, IResource.DEPTH_ZERO);
 			}
 		}
-		for (Iterator iter = otherTraversal.shallowFolders.iterator(); iter.hasNext();) {
-			IResource resource = (IResource) iter.next();
+		for (IResource resource : otherTraversal.shallowFolders) {
 			if (!isCovered(resource, IResource.DEPTH_ONE)) {
 				uncovered.addResource(resource, IResource.DEPTH_ONE);
 			}
 		}
-		for (Iterator iter = otherTraversal.deepFolders.iterator(); iter.hasNext();) {
-			IResource resource = (IResource) iter.next();
+		for (IResource resource : otherTraversal.deepFolders) {
 			if (!isCovered(resource, IResource.DEPTH_INFINITE)) {
 				uncovered.addResource(resource, IResource.DEPTH_INFINITE);
 			}
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java
index 47c5fd3..573bec3 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java
@@ -13,7 +13,10 @@
  *******************************************************************************/
 package org.eclipse.team.examples.filesystem.ui;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.mapping.ResourceMapping;
@@ -27,9 +30,7 @@
  */
 public abstract class FileSystemAction extends TeamAction {
 
-	/**
-	 * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled()
-	 */
+	@Override
 	public boolean isEnabled() {
 		return getSelectedMappings().length > 0;
 	}
@@ -38,20 +39,20 @@
 	 * Split the resources into sets associated with their project/provider
 	 */
 	protected Map getRepositoryProviderMapping() {
-		HashMap result = new HashMap();
+		HashMap<RepositoryProvider, List<IResource>> result = new HashMap<>();
 		IResource[] resources = getSelectedResources();
-		for (int i = 0; i < resources.length; i++) {
-			RepositoryProvider provider = RepositoryProvider.getProvider(resources[i].getProject());
-			List list = (List) result.get(provider);
+		for (IResource resource : resources) {
+			RepositoryProvider provider = RepositoryProvider.getProvider(resource.getProject());
+			List<IResource> list = result.get(provider);
 			if (list == null) {
-				list = new ArrayList();
+				list = new ArrayList<>();
 				result.put(provider, list);
 			}
-			list.add(resources[i]);
+			list.add(resource);
 		}
 		return result;
 	}
-	
+
 	/**
 	 * Return the selected resource mappings that are associated with the
 	 * file system provider.
@@ -61,5 +62,5 @@
 	protected ResourceMapping[] getSelectedMappings() {
 		return getSelectedResourceMappings(FileSystemPlugin.PROVIDER_ID);
 	}
-	
+
 }
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java
index fb980c4..9718fe1 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java
@@ -40,12 +40,12 @@
  * location can be accessed using the <code>getLocation()</code> method.
  */
 public class FileSystemMainPage extends WizardPage {
-	
+
 	private static final int COMBO_HISTORY_LENGTH = 5;
-	
+
 	String location;
 	Combo locationCombo;
-	
+
 	/*
 	 * WizardPage constructor comment.
 	 * @param pageName  the name of the page
@@ -59,14 +59,14 @@
 		setDescription(description);
 		setTitle(title);
 	}
-		
+
 	/*
 	 * Creates a new checkbox instance and sets the default layout data.
 	 *
 	 * @param group  the composite in which to create the checkbox
 	 * @param label  the string to set into the checkbox
 	 * @return the new checkbox
-	 */ 
+	 */
 	protected Button createCheckBox(Composite group, String label) {
 		Button button = new Button(group, SWT.CHECK | SWT.LEFT);
 		button.setText(label);
@@ -75,7 +75,7 @@
 		button.setLayoutData(data);
 		return button;
 	}
-	
+
 	/*
 	 * Utility method that creates a combo box
 	 *
@@ -89,7 +89,7 @@
 		combo.setLayoutData(data);
 		return combo;
 	}
-	
+
 	/*
 	 * Creates composite control and sets the default layout data.
 	 *
@@ -99,12 +99,12 @@
 	 */
 	protected Composite createComposite(Composite parent, int numColumns) {
 		Composite composite = new Composite(parent, SWT.NULL);
-	
+
 		// GridLayout
 		GridLayout layout = new GridLayout();
 		layout.numColumns = numColumns;
 		composite.setLayout(layout);
-	
+
 		// GridData
 		GridData data = new GridData();
 		data.verticalAlignment = GridData.FILL;
@@ -112,7 +112,7 @@
 		composite.setLayoutData(data);
 		return composite;
 	}
-	
+
 	/*
 	 * Utility method that creates a label instance
 	 * and sets the default layout data.
@@ -130,7 +130,7 @@
 		label.setLayoutData(data);
 		return label;
 	}
-	
+
 	/*
 	 * Create a text field specific for this application
 	 *
@@ -146,7 +146,7 @@
 		text.setLayoutData(data);
 		return text;
 	}
-	
+
 	/*
 	 * Adds an entry to a history, while taking care of duplicate history items
 	 * and excessively long histories.  The assumption is made that all histories
@@ -157,13 +157,13 @@
 	 * @return the history with the new entry appended
 	 */
 	protected String[] addToHistory(String[] history, String newEntry) {
-		ArrayList l = new ArrayList(Arrays.asList(history));
+		ArrayList<String> l = new ArrayList<>(Arrays.asList(history));
 		addToHistory(l, newEntry);
 		String[] r = new String[l.size()];
 		l.toArray(r);
 		return r;
 	}
-	
+
 	/*
 	 * Adds an entry to a history, while taking care of duplicate history items
 	 * and excessively long histories.  The assumption is made that all histories
@@ -172,19 +172,19 @@
 	 * @param history the current history
 	 * @param newEntry the entry to add to the history
 	 */
-	protected void addToHistory(List history, String newEntry) {
+	protected void addToHistory(List<String> history, String newEntry) {
 		history.remove(newEntry);
 		history.add(0,newEntry);
-	
+
 		// since only one new item was added, we can be over the limit
 		// by at most one item
 		if (history.size() > COMBO_HISTORY_LENGTH)
 			history.remove(COMBO_HISTORY_LENGTH);
 	}
-	
+
 	/*
 	 * Utility method to create an editable combo box
-	 * 
+	 *
 	 * @param parent  the parent of the combo box
 	 * @return the created combo
 	 */
@@ -195,11 +195,12 @@
 		combo.setLayoutData(data);
 		return combo;
 	}
-	
+
 	// Dialog store id constants
 	private static final String STORE_LOCATION =
-		"ExamplesFSWizardMainPage.STORE_LOCATION";//$NON-NLS-1$
-	
+			"ExamplesFSWizardMainPage.STORE_LOCATION";//$NON-NLS-1$
+
+	@Override
 	public void createControl(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NULL);
 		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
@@ -207,20 +208,20 @@
 		layout.numColumns = 2;
 		composite.setLayout(layout);
 		setControl(composite);
-		
+
 		Label label = new Label(composite, SWT.NULL);
 		label.setText(Policy.bind("FileSystemMainPage.location")); //$NON-NLS-1$
 		label.setLayoutData(new GridData());
-		
+
 		locationCombo = createEditableCombo(composite);
 		locationCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		locationCombo.addListener(SWT.Modify, e -> {
 			location = ((Combo)e.widget).getText();
-			FileSystemMainPage.this.validateFields();		
+			FileSystemMainPage.this.validateFields();
 		});
-		
+
 		locationCombo.setFocus();
-		
+
 		new Label(composite, SWT.NULL);
 		Button browse = new Button(composite, SWT.NULL);
 		browse.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
@@ -230,13 +231,13 @@
 			String directory = d.open();
 			if(directory!=null) {
 				locationCombo.setText(directory);
-			}			
+			}
 		});
-	
+
 		initializeValues();
 		validateFields();
 	}
-	
+
 	public String getLocation() {
 		return location;
 	}
@@ -253,8 +254,8 @@
 		if (settings != null) {
 			String[] locations = settings.getArray(STORE_LOCATION);
 			if (locations != null) {
-				for (int i = 0; i < locations.length; i++) {
-					locationCombo.add(locations[i]);
+				for (String location2 : locations) {
+					locationCombo.add(location2);
 				}
 				locationCombo.select(0);
 			}
@@ -270,12 +271,12 @@
 			String[] locations = settings.getArray(STORE_LOCATION);
 			if (locations == null) locations = new String[0];
 			locations = addToHistory(locations, locationCombo.getText());
-			settings.put(STORE_LOCATION, locations);	
+			settings.put(STORE_LOCATION, locations);
 		}
 	}
-	
+
 	/*
-	 * Validates the contents of the editable fields and set page completion 
+	 * Validates the contents of the editable fields and set page completion
 	 * and error messages appropriately.
 	 */
 	void validateFields() {
@@ -289,7 +290,7 @@
 		if(!file.exists() || !file.isDirectory()) {
 			setErrorMessage(Policy.bind("FileSystemMainPage.notValidLocation")); //$NON-NLS-1$
 			setPageComplete(false);
-			return;				
+			return;
 		}
 		setErrorMessage(null);
 		setPageComplete(true);
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemOperation.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemOperation.java
index a1e6e5c..0f485c7 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemOperation.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemOperation.java
@@ -14,13 +14,16 @@
 package org.eclipse.team.examples.filesystem.ui;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.mapping.ResourceMapping;
 import org.eclipse.core.resources.mapping.ResourceTraversal;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.team.core.RepositoryProvider;
 import org.eclipse.team.core.mapping.ISynchronizationScope;
 import org.eclipse.team.core.subscribers.SubscriberScopeManager;
@@ -41,7 +44,7 @@
 	public static SubscriberScopeManager createScopeManager(String name, ResourceMapping[] inputMappings) {
 		return new SubscriberScopeManager(name, inputMappings, FileSystemSubscriber.getInstance(), true);
 	}
-	
+
 	/**
 	 * Create a file system operation.
 	 * @param part the part from which the operation was launched
@@ -51,19 +54,16 @@
 		super(part, manager);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.ui.synchronize.ModelOperation#execute(org.eclipse.core.runtime.IProgressMonitor)
-	 */
+	@Override
 	protected void execute(IProgressMonitor monitor) throws InvocationTargetException {
 		try {
-			Map providerToTraversals = getProviderToTraversalsMap();
+			Map<FileSystemProvider, CompoundResourceTraversal> providerToTraversals = getProviderToTraversalsMap();
 			monitor.beginTask(getTaskName(), providerToTraversals.size() * 100);
 			monitor.setTaskName(getTaskName());
-			for (Iterator iter = providerToTraversals.keySet().iterator(); iter.hasNext();) {
-				FileSystemProvider provider = (FileSystemProvider) iter.next();
+			for (FileSystemProvider provider : providerToTraversals.keySet()) {
 				ResourceTraversal[] traversals = getTraversals(providerToTraversals, provider);
-				execute(provider, 
-						traversals, 
+				execute(provider,
+						traversals,
 						SubMonitor.convert(monitor, 100));
 			}
 		} catch (CoreException e) {
@@ -77,25 +77,22 @@
 	 * Return a map of FileSystemProvider to ResourceTraversals.
 	 * @return a map of FileSystemProvider to ResourceTraversals
 	 */
-	private Map getProviderToTraversalsMap() {
-		HashMap result = new HashMap();
+	private Map<FileSystemProvider, CompoundResourceTraversal> getProviderToTraversalsMap() {
+		HashMap<FileSystemProvider, CompoundResourceTraversal> result = new HashMap<>();
 		ISynchronizationScope scope = getScope();
 		ResourceMapping[] mappings = scope.getMappings();
-		for (int i = 0; i < mappings.length; i++) {
-			ResourceMapping mapping = mappings[i];
+		for (ResourceMapping mapping : mappings) {
 			ResourceTraversal[] traversals = scope.getTraversals(mapping);
-			for (int j = 0; j < traversals.length; j++) {
-				ResourceTraversal traversal = traversals[j];
+			for (ResourceTraversal traversal : traversals) {
 				IResource[] resources = traversal.getResources();
-				for (int k = 0; k < resources.length; k++) {
-					IResource resource = resources[k];
+				for (IResource resource : resources) {
 					recordResourceAndDepth(result, resource, traversal.getDepth());
 				}
 			}
 		}
 		return result;
 	}
-	
+
 	/**
 	 * Return the file system provider associated with the given project or <code>null</code>
 	 * if the project is not mapped to the file system provider.
@@ -105,11 +102,12 @@
 	protected FileSystemProvider getProviderFor(IProject project) {
 		return (FileSystemProvider)RepositoryProvider.getProvider(project, FileSystemPlugin.PROVIDER_ID);
 	}
-	
-	private void recordResourceAndDepth(HashMap providerToTraversals, IResource resource, int depth) {
+
+	private void recordResourceAndDepth(HashMap<FileSystemProvider, CompoundResourceTraversal> providerToTraversals,
+			IResource resource, int depth) {
 		FileSystemProvider provider = getProviderFor(resource.getProject());
 		if (provider != null) {
-			CompoundResourceTraversal traversal = (CompoundResourceTraversal)providerToTraversals.get(provider);
+			CompoundResourceTraversal traversal = providerToTraversals.get(provider);
 			if (traversal == null) {
 				traversal = new CompoundResourceTraversal();
 				providerToTraversals.put(provider, traversal);
@@ -125,8 +123,9 @@
 	 * @param provider the provider
 	 * @return the traversals for the given provider
 	 */
-	private ResourceTraversal[] getTraversals(Map providerToTraversals, FileSystemProvider provider) {
-		CompoundResourceTraversal traversal = (CompoundResourceTraversal)providerToTraversals.get(provider);
+	private ResourceTraversal[] getTraversals(Map<FileSystemProvider, CompoundResourceTraversal> providerToTraversals,
+			FileSystemProvider provider) {
+		CompoundResourceTraversal traversal = providerToTraversals.get(provider);
 		return traversal.asTraversals();
 	}
 
@@ -144,10 +143,8 @@
 	 * @return the task name for this operation
 	 */
 	protected abstract String getTaskName();
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.ui.TeamOperation#canRunAsJob()
-	 */
+
+	@Override
 	protected boolean canRunAsJob() {
 		return true;
 	}
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ModelPutAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ModelPutAction.java
index 037b2e4..c9233bb 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ModelPutAction.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ModelPutAction.java
@@ -14,7 +14,9 @@
 package org.eclipse.team.examples.filesystem.ui;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.core.resources.mapping.ResourceMapping;
 import org.eclipse.core.runtime.IStatus;
@@ -36,6 +38,7 @@
 		super(text, configuration);
 	}
 
+	@Override
 	protected boolean isEnabledForSelection(IStructuredSelection selection) {
 		// Only enable the put in outgoing or both modes
 		int mode = getConfiguration().getMode();
@@ -46,19 +49,17 @@
 	}
 
 	private ResourceMapping[] getResourceMappings(IStructuredSelection selection) {
-		List mappings = new ArrayList();
+		List<ResourceMapping> mappings = new ArrayList<>();
 		for (Iterator iter = selection.iterator(); iter.hasNext();) {
 			Object element = iter.next();
 			ResourceMapping mapping = Utils.getResourceMapping(element);
 			if (mapping != null)
 				mappings.add(mapping);
 		}
-		return (ResourceMapping[]) mappings.toArray(new ResourceMapping[mappings.size()]);
+		return mappings.toArray(new ResourceMapping[mappings.size()]);
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.action.Action#run()
-	 */
+
+	@Override
 	public void run() {
 		ResourceMapping[] resourceMappings = getResourceMappings(getStructuredSelection());
 		SubscriberScopeManager manager = FileSystemOperation.createScopeManager("Put", resourceMappings);
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/NonSyncModelMergePage.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/NonSyncModelMergePage.java
index cbc4b0c..b6cba56 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/NonSyncModelMergePage.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/NonSyncModelMergePage.java
@@ -14,17 +14,38 @@
 package org.eclipse.team.examples.filesystem.ui;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.eclipse.compare.structuremergeviewer.ICompareInput;
-import org.eclipse.core.resources.*;
-import org.eclipse.core.resources.mapping.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.action.*;
-import org.eclipse.jface.viewers.*;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.mapping.IModelProviderDescriptor;
+import org.eclipse.core.resources.mapping.ModelProvider;
+import org.eclipse.core.resources.mapping.ResourceMapping;
+import org.eclipse.core.resources.mapping.ResourceTraversal;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
 import org.eclipse.team.core.diff.IDiff;
 import org.eclipse.team.core.mapping.IMergeContext;
 import org.eclipse.team.core.mapping.provider.ResourceDiffTree;
@@ -39,15 +60,16 @@
  * This class provides the page for the {@link NonSyncMergePart}.
  */
 public class NonSyncModelMergePage extends Page {
-	
+
 	IMergeContext context;
 	TreeViewer viewer;
 	List mappings;
-	
+
 	/*
 	 * Content provider that returns the list of conflicting mappings
 	 */
 	class PageContentProvider implements ITreeContentProvider {
+		@Override
 		public Object[] getChildren(Object parentElement) {
 			if (parentElement instanceof IMergeContext) {
 				if (mappings == null)
@@ -57,33 +79,39 @@
 			}
 			return new Object[0];
 		}
+		@Override
 		public Object getParent(Object element) {
 			if (element instanceof ResourceMapping) {
 				return context;
 			}
 			return null;
 		}
+		@Override
 		public boolean hasChildren(Object element) {
 			if (element instanceof IMergeContext) {
 				return true;
 			}
 			return false;
 		}
+		@Override
 		public Object[] getElements(Object inputElement) {
 			return getChildren(inputElement);
 		}
+		@Override
 		public void dispose() {
 			// Nothing to do
 		}
+		@Override
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 			// Nothing to do
 		}
 	}
-	
+
 	/*
 	 * Label provider that provides a label and image for conflicting resource mappings
 	 */
 	class PageLabelProvider extends LabelProvider {
+		@Override
 		public String getText(Object element) {
 			if (element instanceof ResourceMapping) {
 				ResourceMapping mapping = (ResourceMapping) element;
@@ -97,6 +125,7 @@
 			}
 			return super.getText(element);
 		}
+		@Override
 		public Image getImage(Object element) {
 			if (element instanceof ICompareInput) {
 				ICompareInput ci = (ICompareInput) element;
@@ -116,7 +145,8 @@
 	/*
 	 * Sorter that sorts mappings by model and then name
 	 */
-	class PageSorter extends ViewerSorter {
+	class PageSorter extends ViewerComparator {
+		@Override
 		public int compare(Viewer viewer, Object e1, Object e2) {
 			if (e1 instanceof ResourceMapping && e2 instanceof ResourceMapping) {
 				ResourceMapping m1 = (ResourceMapping) e1;
@@ -139,45 +169,43 @@
 			return "";
 		}
 	}
-	
+
 	public NonSyncModelMergePage(IMergeContext context) {
 		super();
 		this.context = context;
 	}
-	
+
 	/**
 	 * Create the list of all mappings that overlap with the out-of-sync files.
 	 */
 	public void computeMappings(IProgressMonitor monitor) {
-	    IModelProviderDescriptor[] descriptors = ModelProvider.getModelProviderDescriptors();
-	    mappings = new ArrayList();
-	    for (int i = 0; i < descriptors.length; i++) {
-	        IModelProviderDescriptor descriptor = descriptors[i];
-	        // Get the subset of files that this model provider cares about
-	        try {
+		IModelProviderDescriptor[] descriptors = ModelProvider.getModelProviderDescriptors();
+		mappings = new ArrayList();
+		for (IModelProviderDescriptor descriptor : descriptors) {
+			// Get the subset of files that this model provider cares about
+			try {
 				IResource[] resources = descriptor.getMatchingResources(getOutOfSyncFiles());
 				if (resources.length > 0) {
-				    ModelProvider provider = descriptor.getModelProvider();
-				    // Get the mappings for those resources
-				    ResourceMapping[] mappings = provider.getMappings(resources, new SynchronizationResourceMappingContext(context), monitor);
-				    this.mappings.addAll(Arrays.asList(mappings ));
+					ModelProvider provider = descriptor.getModelProvider();
+					// Get the mappings for those resources
+					ResourceMapping[] mappings = provider.getMappings(resources, new SynchronizationResourceMappingContext(context), monitor);
+					this.mappings.addAll(Arrays.asList(mappings ));
 				}
 			} catch (CoreException e) {
 				FileSystemPlugin.log(e);
 			}
-	    }
+		}
 	}
 
 	private IResource[] getOutOfSyncFiles() {
 		IDiff[] diffs = getContext().getDiffTree().getDiffs(ResourcesPlugin.getWorkspace().getRoot(), IResource.DEPTH_INFINITE);
-		List result = new ArrayList();
-		for (int i = 0; i < diffs.length; i++) {
-			IDiff diff = diffs[i];
+		List<IResource> result = new ArrayList<>();
+		for (IDiff diff : diffs) {
 			IResource resource = ResourceDiffTree.getResourceFor(diff);
 			if (resource.getType() == IResource.FILE)
 				result.add(resource);
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	/**
@@ -188,14 +216,12 @@
 		return context;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.Page#createControl(org.eclipse.swt.widgets.Composite)
-	 */
+	@Override
 	public void createControl(Composite parent) {
 		viewer = new TreeViewer(parent);
 		viewer.setContentProvider(new PageContentProvider());
 		viewer.setLabelProvider(new PageLabelProvider());
-		viewer.setSorter(new PageSorter());
+		viewer.setComparator(new PageSorter());
 		hookContextMenu(viewer);
 		viewer.setInput(context);
 	}
@@ -204,7 +230,7 @@
 	 * Hook the context menu to display the Overwrite and Mark-as-merged actions
 	 */
 	private void hookContextMenu(final TreeViewer viewer) {
-		final MenuManager menuMgr = new MenuManager(); 
+		final MenuManager menuMgr = new MenuManager();
 		menuMgr.setRemoveAllWhenShown(true);
 		menuMgr.addMenuListener(manager -> fillContextMenu(manager));
 		Menu menu = menuMgr.createContextMenu(viewer.getControl());
@@ -217,7 +243,7 @@
 	 */
 	protected void fillContextMenu(IMenuManager manager) {
 		/*
-		 * Add a mark as merged action. Because we are not using the 
+		 * Add a mark as merged action. Because we are not using the
 		 * Synchronization framework and, more specifically, the
 		 * Common Navigator content provider for the model providers,
 		 * we do not have access to the merge handlers of the model.
@@ -226,6 +252,7 @@
 		 * unselected model elements.
 		 */
 		Action markAsMerged = new Action("Mark as Merged") {
+			@Override
 			public void run() {
 				try {
 					final IStructuredSelection selection = viewer.getStructuredSelection();
@@ -256,9 +283,8 @@
 	}
 
 	private IDiff[] getDiffs(Object[] elements, IProgressMonitor monitor) {
-		Set result = new HashSet();
-		for (int i = 0; i < elements.length; i++) {
-			Object element = elements[i];
+		Set<IDiff> result = new HashSet<>();
+		for (Object element : elements) {
 			try {
 				if (element instanceof ResourceMapping) {
 					ResourceMapping mapping = (ResourceMapping) element;
@@ -269,7 +295,7 @@
 				FileSystemPlugin.log(e);
 			}
 		}
-		return (IDiff[]) result.toArray(new IDiff[result.size()]);
+		return result.toArray(new IDiff[result.size()]);
 	}
 
 	/**
@@ -278,23 +304,19 @@
 	 * @return
 	 */
 	protected boolean checkForModelOverlap(IDiff[] diffs, IProgressMonitor monitor) {
-		// TODO: This check should see if the diffs are also part of mappings 
-		// that are not included in the selection. 
+		// TODO: This check should see if the diffs are also part of mappings
+		// that are not included in the selection.
 		return true;
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.Page#getControl()
-	 */
+
+	@Override
 	public Control getControl() {
 		if (viewer != null)
 			return viewer.getControl();
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.Page#setFocus()
-	 */
+	@Override
 	public void setFocus() {
 		if (viewer != null)
 			viewer.getControl().setFocus();
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ProjectSetSerializer.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ProjectSetSerializer.java
index 54f469c..3d5e11b 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ProjectSetSerializer.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ProjectSetSerializer.java
@@ -18,41 +18,40 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.team.core.*;
-import org.eclipse.team.examples.filesystem.*;
+import org.eclipse.team.core.IProjectSetSerializer;
+import org.eclipse.team.core.RepositoryProvider;
+import org.eclipse.team.examples.filesystem.FileSystemPlugin;
+import org.eclipse.team.examples.filesystem.FileSystemProvider;
+import org.eclipse.team.examples.filesystem.Policy;
 
 /**
  * This is an old-style (pre-3.0) project set serializer used to test backwards compatibility
  */
 public class ProjectSetSerializer implements IProjectSetSerializer {
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.IProjectSetSerializer#asReference(org.eclipse.core.resources.IProject[], java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
-	 */
+	@Override
 	public String[] asReference(IProject[] providerProjects, Object context, IProgressMonitor monitor) {
 		Assert.isTrue(context instanceof Shell);
-		List refs = new ArrayList();
-		for (int i = 0; i < providerProjects.length; i++) {
-			IProject project = providerProjects[i];
+		List<String> refs = new ArrayList<>();
+		for (IProject project : providerProjects) {
 			FileSystemProvider provider = (FileSystemProvider)RepositoryProvider.getProvider(project, FileSystemPlugin.PROVIDER_ID);
 			if (provider != null) {
 				refs.add(asReference(provider));
 			}
 		}
-		return (String[]) refs.toArray(new String[refs.size()]);
+		return refs.toArray(new String[refs.size()]);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.IProjectSetSerializer#addToWorkspace(java.lang.String[], java.lang.String, java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
-	 */
+	@Override
 	public IProject[] addToWorkspace(String[] referenceStrings, String filename, Object context, IProgressMonitor monitor) {
 		Assert.isTrue(context instanceof Shell);
-		List projects = new ArrayList();
-		for (int i = 0; i < referenceStrings.length; i++) {
-			String string = referenceStrings[i];
+		List<IProject> projects = new ArrayList<>();
+		for (String string : referenceStrings) {
 			String projectName = getProjectName(string);
 			String path = getPath(string);
 			if (projectName != null && path != null) {
@@ -64,14 +63,14 @@
 					projects.add(project);
 				} catch (CoreException e) {
 					ErrorDialog.openError(
-						(Shell)context,
-						Policy.bind("ConfigurationWizard.errorMapping"), //$NON-NLS-1$
-						Policy.bind("ConfigurationWizard.error"), //$NON-NLS-1$
-						e.getStatus());
+							(Shell)context,
+							Policy.bind("ConfigurationWizard.errorMapping"), //$NON-NLS-1$
+							Policy.bind("ConfigurationWizard.error"), //$NON-NLS-1$
+							e.getStatus());
 				}
 			}
 		}
-		return (IProject[]) projects.toArray(new IProject[projects.size()]);
+		return projects.toArray(new IProject[projects.size()]);
 	}
 
 	/**
@@ -81,7 +80,7 @@
 	private String asReference(FileSystemProvider provider) {
 		return provider.getProject().getName() + "," + provider.getRoot().toString(); //$NON-NLS-1$
 	}
-	
+
 	/**
 	 * @param string
 	 * @return
@@ -91,7 +90,7 @@
 		if (i == -1) return null;
 		return string.substring(0, i);
 	}
-	
+
 	/**
 	 * @param string
 	 * @return
@@ -101,7 +100,7 @@
 		if (i == -1) return null;
 		return string.substring(i + 1);
 	}
-	
+
 	/**
 	 * @param projectName
 	 * @return
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/localhistory/LocalHistorySubscriber.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/localhistory/LocalHistorySubscriber.java
index 182ac57..a0d5c53 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/localhistory/LocalHistorySubscriber.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/localhistory/LocalHistorySubscriber.java
@@ -33,40 +33,45 @@
 public class LocalHistorySubscriber extends Subscriber {
 
 	private LocalHistoryVariantComparator comparator;
-	
+
 	public LocalHistorySubscriber() {
 		this.comparator = new LocalHistoryVariantComparator();
 	}
-	
+
+	@Override
 	public String getName() {
 		return "Local History Subscriber"; //$NON-NLS-1$
 	}
 
 	/**
-	 * @param resource the resource being tested 
+	 * @param resource the resource being tested
 	 */
+	@Override
 	public boolean isSupervised(IResource resource) {
 		// all resources in the workspace can potentially have resource history
 		return true;
 	}
 
+	@Override
 	public IResource[] members(IResource resource) throws TeamException {
 		try {
 			if(resource.getType() == IResource.FILE)
 				return new IResource[0];
 			IContainer container = (IContainer)resource;
-			List existingChildren = new ArrayList(Arrays.asList(container.members()));
+			List<IResource> existingChildren = new ArrayList<>(Arrays.asList(container.members()));
 			existingChildren.addAll(Arrays.asList(container.findDeletedMembersWithHistory(IResource.DEPTH_INFINITE, null)));
-			return (IResource[]) existingChildren.toArray(new IResource[existingChildren.size()]);
+			return existingChildren.toArray(new IResource[existingChildren.size()]);
 		} catch (CoreException e) {
 			throw TeamException.asTeamException(e);
 		}
 	}
 
+	@Override
 	public IResource[] roots() {
 		return ResourcesPlugin.getWorkspace().getRoot().getProjects();
 	}
 
+	@Override
 	public SyncInfo getSyncInfo(IResource resource) throws TeamException {
 		try {
 			IResourceVariant variant = null;
@@ -76,7 +81,7 @@
 				if(states.length > 0) {
 					// last state only
 					variant = new LocalHistoryVariant(states[0]);
-				} 
+				}
 			}
 			SyncInfo info = new LocalHistorySyncInfo(resource, variant, comparator);
 			info.init();
@@ -86,6 +91,7 @@
 		}
 	}
 
+	@Override
 	public IResourceVariantComparator getResourceComparator() {
 		return comparator;
 	}
@@ -99,6 +105,7 @@
 	 *            progress monitor, or <code>null</code> if progress reporting
 	 *            and cancellation are not desired
 	 */
+	@Override
 	public void refresh(IResource[] resources, int depth, IProgressMonitor monitor) {
 		// do nothing
 	}
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelContainer.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelContainer.java
index 3cb6e9b..8bbee3c 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelContainer.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelContainer.java
@@ -16,7 +16,11 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 
 public abstract class ModelContainer extends ModelResource {
@@ -24,16 +28,16 @@
 	protected ModelContainer(IContainer container) {
 		super(container);
 	}
-	
+
 	protected IContainer getContainer() {
 		return (IContainer)getResource();
 	}
-	
+
+	@Override
 	public ModelObject[] getChildren() throws CoreException {
 		IResource[] members = getContainer().members();
-		List result = new ArrayList();
-		for (int i = 0; i < members.length; i++) {
-			IResource resource = members[i];
+		List<ModelObject> result = new ArrayList<>();
+		for (IResource resource : members) {
 			if (resource instanceof IFolder) {
 				result.add(new ModelFolder((IFolder) resource));
 			} else if (ModelObjectDefinitionFile.isModFile(resource)) {
@@ -42,7 +46,7 @@
 				result.add(new ModelProject((IProject) resource));
 			}
 		}
-		return (ModelObject[]) result.toArray(new ModelObject[result.size()]);
+		return result.toArray(new ModelObject[result.size()]);
 	}
 
 }
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelObjectDefinitionFile.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelObjectDefinitionFile.java
index 2040121..34e1176 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelObjectDefinitionFile.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelObjectDefinitionFile.java
@@ -13,12 +13,23 @@
  *******************************************************************************/
 package org.eclipse.team.examples.model;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.team.examples.filesystem.FileSystemPlugin;
 
@@ -34,40 +45,36 @@
 		}
 		return false;
 	}
-	
+
 	public static IResource[] getReferencedResources(String projectName, IStorage storage) throws CoreException {
 		if (storage == null)
 			return new IResource[0];
-		List result = new ArrayList();
+		List<IResource> result = new ArrayList<>();
 		String[] filePaths = readLines(storage);
-		for (int i = 0; i < filePaths.length; i++) {
-			String path = filePaths[i];
+		for (String path : filePaths) {
 			IFile file = getFile(projectName, path);
-			if (file != null 
-					&& file.getFileExtension() != null 
+			if (file != null
+					&& file.getFileExtension() != null
 					&& file.getFileExtension().equals(ModelObjectElementFile.MODEL_OBJECT_ELEMENTFILE_EXTENSION)) {
 				result.add(file);
 			}
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
-	
+
 	public ModelObjectDefinitionFile(IFile file) {
 		super(file);
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.examples.model.ModelObject#getChildren()
-	 */
+
+	@Override
 	public ModelObject[] getChildren() throws CoreException {
 		return getModelObjectElementFiles();
 	}
 
 	public ModelObjectElementFile[] getModelObjectElementFiles() throws CoreException {
-		List result = new ArrayList();
+		List<ModelObjectElementFile> result = new ArrayList<>();
 		String[] filePaths = readLines((IFile)getResource());
-		for (int i = 0; i < filePaths.length; i++) {
-			String path = filePaths[i];
+		for (String path : filePaths) {
 			IFile file = getFile(getResource().getProject().getName(), path);
 			if (file != null) {
 				ModelObjectElementFile moeFile = getMoeFile(file);
@@ -75,19 +82,19 @@
 					result.add(moeFile);
 			}
 		}
-		return (ModelObjectElementFile[]) result.toArray(new ModelObjectElementFile[result.size()]);
+		return result.toArray(new ModelObjectElementFile[result.size()]);
 	}
 
 	private static String[] readLines(IStorage file) throws CoreException {
 		BufferedReader reader = new BufferedReader(new InputStreamReader(file.getContents()));
 		String line = null;
-		List result = new ArrayList();
+		List<String> result = new ArrayList<>();
 		try {
 			while ((line = reader.readLine()) != null) {
 				result.add(line.trim());
 			}
 		} catch (IOException e) {
-			throw new CoreException(new Status(IStatus.ERROR, FileSystemPlugin.ID, 0, 
+			throw new CoreException(new Status(IStatus.ERROR, FileSystemPlugin.ID, 0,
 					NLS.bind("Error reading from file {0}", file.getFullPath()), e));
 		} finally {
 			try {
@@ -96,19 +103,18 @@
 				// Ignore
 			}
 		}
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	private void writeLines(String[] strings) throws CoreException {
 		StringBuffer buffer = new StringBuffer();
-		for (int i = 0; i < strings.length; i++) {
-			String string = strings[i];
+		for (String string : strings) {
 			buffer.append(string);
 			buffer.append("\n");
 		}
 		((IFile)getResource()).setContents(new ByteArrayInputStream(buffer.toString().getBytes()), false, true, null);
 	}
-	
+
 	private ModelObjectElementFile getMoeFile(IFile file) {
 		if (ModelObjectElementFile.isMoeFile(file)) {
 			return new ModelObjectElementFile(this, file);
@@ -135,38 +141,35 @@
 
 	public void remove(ModelObjectElementFile file) throws CoreException {
 		ModelObjectElementFile[] files = getModelObjectElementFiles();
-		List paths = new ArrayList();
-		for (int i = 0; i < files.length; i++) {
-			ModelObjectElementFile child = files[i];
+		List<String> paths = new ArrayList<>();
+		for (ModelObjectElementFile child : files) {
 			if (!child.equals(file)) {
 				paths.add(child.getResource().getProjectRelativePath().toString());
 			}
 		}
-		writeLines((String[]) paths.toArray(new String[paths.size()]));
+		writeLines(paths.toArray(new String[paths.size()]));
 	}
 
+	@Override
 	public void delete() throws CoreException {
 		ModelObjectElementFile[] files = getModelObjectElementFiles();
 		super.delete();
-		for (int i = 0; i < files.length; i++) {
-			ModelObjectElementFile file = files[i];
+		for (ModelObjectElementFile file : files) {
 			file.getResource().delete(false, null);
 		}
 	}
 
 	public void setElements(IResource[] resources) throws CoreException {
-		List paths = new ArrayList();
-		for (int i = 0; i < resources.length; i++) {
-			IResource resource = resources[i];
+		List<String> paths = new ArrayList<>();
+		for (IResource resource : resources) {
 			paths.add(resource.getProjectRelativePath().toString());
 		}
-		writeLines((String[]) paths.toArray(new String[paths.size()]));
+		writeLines(paths.toArray(new String[paths.size()]));
 	}
 
 	public boolean hasMoe(IFile file) throws CoreException {
 		ModelObjectElementFile[] files = getModelObjectElementFiles();
-		for (int i = 0; i < files.length; i++) {
-			ModelObjectElementFile child = files[i];
+		for (ModelObjectElementFile child : files) {
 			if (child.getResource().equals(file))
 				return true;
 		}
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelProject.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelProject.java
index e40914a..00aa326 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelProject.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ModelProject.java
@@ -29,19 +29,19 @@
 		IProjectDescription description = project.getDescription();
 		return description.hasNature(ModelNature.NATURE_ID);
 	}
-	
+
 	public static void makeModProject(IProject project, IProgressMonitor monitor) throws CoreException {
 		IProjectDescription description = project.getDescription();
 		String[] natureIds = description.getNatureIds();
-		List result = new ArrayList();
-		for (int i = 0; i < natureIds.length; i++) {
-			result.add(natureIds[i]);
+		List<String> result = new ArrayList<>();
+		for (String natureId : natureIds) {
+			result.add(natureId);
 		}
 		result.add(ModelNature.NATURE_ID);
-		description.setNatureIds((String[]) result.toArray(new String[result.size()]));
+		description.setNatureIds(result.toArray(new String[result.size()]));
 		project.setDescription(description, monitor);
 	}
-	
+
 	public ModelProject(IProject project) {
 		super(project);
 	}
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/PluginManifestChangeTracker.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/PluginManifestChangeTracker.java
index 9361478..7b8e57f 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/PluginManifestChangeTracker.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/PluginManifestChangeTracker.java
@@ -13,60 +13,70 @@
  *******************************************************************************/
 package org.eclipse.team.examples.model;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.team.core.mapping.ChangeTracker;
 import org.eclipse.team.examples.filesystem.FileSystemPlugin;
 
 public class PluginManifestChangeTracker extends ChangeTracker {
-	
-	Set manifestFilePaths;
-	
+
+	Set<IPath> manifestFilePaths;
+
 	public PluginManifestChangeTracker() {
-		manifestFilePaths = new HashSet();
+		manifestFilePaths = new HashSet<>();
 		manifestFilePaths.add(new Path(null, "plugin.xml"));
 		manifestFilePaths.add(new Path(null, "plugin.properties"));
 		manifestFilePaths.add(new Path(null, "build.properties"));
 		manifestFilePaths.add(new Path(null, "META-INF/MANIFEST.MF"));
 	}
 
+	@Override
 	protected boolean isProjectOfInterest(IProject project) {
 		return super.isProjectOfInterest(project) && hasPDENature(project);
 	}
-	
+
 	private boolean hasPDENature(IProject project) {
 		try {
 			return project.getDescription().hasNature("org.eclipse.pde.PluginNature");
 		} catch (CoreException e) {
-			FileSystemPlugin.log(new Status(e.getStatus().getSeverity(), FileSystemPlugin.ID, 0, 
+			FileSystemPlugin.log(new Status(e.getStatus().getSeverity(), FileSystemPlugin.ID, 0,
 					NLS.bind("Could not obtain project description for {0}", project.getName()), e));
 		}
 		return false;
 	}
 
+	@Override
 	protected void handleChanges(IProject project, IResource[] resources) {
 		handleProjectChange(project);
 	}
 
+	@Override
 	protected void handleProjectChange(IProject project) {
-		List changes = new ArrayList();
-		for (Iterator iter = manifestFilePaths.iterator(); iter.hasNext();) {
-			IPath path = (IPath) iter.next();
+		List<IFile> changes = new ArrayList<>();
+		for (IPath path : manifestFilePaths) {
 			IFile file = project.getFile(path);
 			try {
 				if (isModified(file)) {
 					changes.add(file);
 				}
 			} catch (CoreException e) {
-				FileSystemPlugin.log(new Status(e.getStatus().getSeverity(), FileSystemPlugin.ID, 0, 
+				FileSystemPlugin.log(new Status(e.getStatus().getSeverity(), FileSystemPlugin.ID, 0,
 						NLS.bind("Could not obtain diff for {0}", file.getFullPath().toString()), e));
 			}
 		}
 		if (changes.size() > 1) {
-			groupInSet(project, (IFile[]) changes.toArray(new IFile[changes.size()]));
+			groupInSet(project, changes.toArray(new IFile[changes.size()]));
 		}
 	}
 
@@ -75,7 +85,7 @@
 		try {
 			ensureGrouped(project, name, files);
 		} catch (CoreException e) {
-			FileSystemPlugin.log(new Status(e.getStatus().getSeverity(), FileSystemPlugin.ID, 0, 
+			FileSystemPlugin.log(new Status(e.getStatus().getSeverity(), FileSystemPlugin.ID, 0,
 					NLS.bind("Could not create change set {0}", name), e));
 		}
 	}
@@ -84,6 +94,7 @@
 		return "Plugin manifest files for " + project.getName();
 	}
 
+	@Override
 	protected boolean isResourceOfInterest(IResource resource) {
 		return manifestFilePaths.contains(resource.getProjectRelativePath());
 	}
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ExampleModelProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ExampleModelProvider.java
index d9c5db6..1dd2c5d 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ExampleModelProvider.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ExampleModelProvider.java
@@ -16,70 +16,79 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.resources.mapping.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.mapping.ModelStatus;
+import org.eclipse.core.resources.mapping.ResourceMapping;
+import org.eclipse.core.resources.mapping.ResourceMappingContext;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.team.examples.filesystem.FileSystemPlugin;
-import org.eclipse.team.examples.model.*;
+import org.eclipse.team.examples.model.ModelObject;
+import org.eclipse.team.examples.model.ModelObjectDefinitionFile;
+import org.eclipse.team.examples.model.ModelObjectElementFile;
+import org.eclipse.team.examples.model.ModelProject;
 
 /**
  * The model provider for our example
  */
 public class ExampleModelProvider extends
-		org.eclipse.core.resources.mapping.ModelProvider {
+org.eclipse.core.resources.mapping.ModelProvider {
 
 	public static final String ID = "org.eclipse.team.examples.filesystem.modelProvider";
 
 	public ExampleModelProvider() {
 		super();
 	}
-	
+
+	@Override
 	public IStatus validateChange(IResourceDelta delta, IProgressMonitor monitor) {
 		// Visit the changes in the delta to look for changes we care about
-		final List problems = new ArrayList();
+		final List<IStatus> problems = new ArrayList<>();
 		try {
-			delta.accept(new IResourceDeltaVisitor() {
-				public boolean visit(IResourceDelta delta) throws CoreException {
-					IResource resource = delta.getResource();
-					if (ModelObjectElementFile.isMoeFile(resource)) {
-						// Removal may leave a stale reference in a MOD file
-						if (delta.getKind() == IResourceDelta.REMOVED) {
-							IStatus status = new ModelStatus(IStatus.ERROR, FileSystemPlugin.ID, getDescriptor().getId(), 
-									NLS.bind("Deleting file {0} may corrupt any model definition that references it.", resource.getFullPath()));
-							problems.add(status);
-						}
+			delta.accept(delta1 -> {
+				IResource resource = delta1.getResource();
+				if (ModelObjectElementFile.isMoeFile(resource)) {
+					// Removal may leave a stale reference in a MOD file
+					if (delta1.getKind() == IResourceDelta.REMOVED) {
+						IStatus status1 = new ModelStatus(IStatus.ERROR, FileSystemPlugin.ID, getDescriptor().getId(),
+								NLS.bind("Deleting file {0} may corrupt any model definition that references it.", resource.getFullPath()));
+						problems.add(status1);
 					}
-					if (ModelObjectDefinitionFile.isModFile(resource)) {
-						// Removal may leave unreferenced MOE files around
-						if (delta.getKind() == IResourceDelta.REMOVED) {
-							IStatus status = new ModelStatus(IStatus.WARNING, FileSystemPlugin.ID, getDescriptor().getId(), 
-									NLS.bind("Deleting file {0} may result in unreferenced element files.", resource.getFullPath()));
-							problems.add(status);
-						}
-						if (delta.getKind() == IResourceDelta.ADDED 
-								&& ((delta.getFlags() & IResourceDelta.COPIED_FROM) > 0)) {
-							// Copying will result in two MOD files that reference the same elements
-							IStatus status = new ModelStatus(IStatus.ERROR, FileSystemPlugin.ID, getDescriptor().getId(), 
-									NLS.bind("Copying file {0} may corrupt the model defintion.", delta.getMovedFromPath()));
-							problems.add(status);
-						}
-					}
-					return delta.getResource().getType() == IResource.ROOT 
-						|| ModelProject.isModProject(delta.getResource().getProject());
 				}
+				if (ModelObjectDefinitionFile.isModFile(resource)) {
+					// Removal may leave unreferenced MOE files around
+					if (delta1.getKind() == IResourceDelta.REMOVED) {
+						IStatus status2 = new ModelStatus(IStatus.WARNING, FileSystemPlugin.ID, getDescriptor().getId(),
+								NLS.bind("Deleting file {0} may result in unreferenced element files.", resource.getFullPath()));
+						problems.add(status2);
+					}
+					if (delta1.getKind() == IResourceDelta.ADDED
+							&& ((delta1.getFlags() & IResourceDelta.COPIED_FROM) > 0)) {
+						// Copying will result in two MOD files that reference the same elements
+						IStatus status3 = new ModelStatus(IStatus.ERROR, FileSystemPlugin.ID, getDescriptor().getId(),
+								NLS.bind("Copying file {0} may corrupt the model defintion.", delta1.getMovedFromPath()));
+						problems.add(status3);
+					}
+				}
+				return delta1.getResource().getType() == IResource.ROOT
+						|| ModelProject.isModProject(delta1.getResource().getProject());
 			});
 		} catch (CoreException e) {
 			FileSystemPlugin.log(e);
 		}
 		if (problems.size() == 1)
-			return (IStatus)problems.get(0);
+			return problems.get(0);
 		else if (problems.size() > 1) {
-			return new MultiStatus(FileSystemPlugin.ID, 0, (IStatus[]) problems.toArray(new IStatus[problems.size()]), "Multiple potential side effects have been found.",  null);
+			return new MultiStatus(FileSystemPlugin.ID, 0, problems.toArray(new IStatus[problems.size()]), "Multiple potential side effects have been found.",  null);
 		}
 		return super.validateChange(delta, monitor);
 	}
-	
+
+	@Override
 	public ResourceMapping[] getMappings(IResource resource, ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 		if (ModelProject.isModProject(resource.getProject())) {
 			ModelObject object = ModelObject.create(resource);
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ModResourceMapping.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ModResourceMapping.java
index 2b347a1..02d97dc 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ModResourceMapping.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ModResourceMapping.java
@@ -18,10 +18,18 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.mapping.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.resources.mapping.RemoteResourceMappingContext;
+import org.eclipse.core.resources.mapping.ResourceMapping;
+import org.eclipse.core.resources.mapping.ResourceMappingContext;
+import org.eclipse.core.resources.mapping.ResourceTraversal;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.team.examples.filesystem.FileSystemPlugin;
-import org.eclipse.team.examples.model.*;
+import org.eclipse.team.examples.model.ModelObject;
+import org.eclipse.team.examples.model.ModelObjectDefinitionFile;
+import org.eclipse.team.examples.model.ModelObjectElementFile;
+import org.eclipse.team.examples.model.ModelResource;
 
 public class ModResourceMapping extends ModelResourceMapping {
 
@@ -29,63 +37,56 @@
 		super(file);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.resources.mapping.ResourceMapping#getTraversals(org.eclipse.core.resources.mapping.ResourceMappingContext, org.eclipse.core.runtime.IProgressMonitor)
-	 */
+	@Override
 	public ResourceTraversal[] getTraversals(ResourceMappingContext context,
 			IProgressMonitor monitor) throws CoreException {
-		Set resources = getLocalResources();
+		Set<IResource> resources = getLocalResources();
 		if (context instanceof RemoteResourceMappingContext) {
 			monitor.beginTask(null, IProgressMonitor.UNKNOWN);
 			RemoteResourceMappingContext remoteContext = (RemoteResourceMappingContext) context;
 			if (remoteContext.hasRemoteChange(getResource(), SubMonitor.convert(monitor, IProgressMonitor.UNKNOWN))) {
 				IResource[] remoteResources = ModelObjectDefinitionFile.getReferencedResources(
-						getResource().getProject().getName(), 
-						remoteContext.fetchRemoteContents((IFile)getResource(), 
+						getResource().getProject().getName(),
+						remoteContext.fetchRemoteContents((IFile)getResource(),
 								SubMonitor.convert(monitor, IProgressMonitor.UNKNOWN)));
-				for (int i = 0; i < remoteResources.length; i++) {
-					IResource resource = remoteResources[i];
+				for (IResource resource : remoteResources) {
 					resources.add(resource);
 				}
 			}
-			if (remoteContext.isThreeWay() 
+			if (remoteContext.isThreeWay()
 					&& remoteContext.hasLocalChange(getResource(), SubMonitor.convert(monitor, IProgressMonitor.UNKNOWN))) {
 				IResource[] remoteResources = ModelObjectDefinitionFile.getReferencedResources(
 						getResource().getProject().getName(),
-						remoteContext.fetchBaseContents((IFile)getResource(), 
+						remoteContext.fetchBaseContents((IFile)getResource(),
 								SubMonitor.convert(monitor, IProgressMonitor.UNKNOWN)));
-				for (int i = 0; i < remoteResources.length; i++) {
-					IResource resource = remoteResources[i];
+				for (IResource resource : remoteResources) {
 					resources.add(resource);
 				}
 			}
 			monitor.done();
 		}
-		return new ResourceTraversal[] { 
-				new ResourceTraversal((IResource[]) resources.toArray(new IResource[resources.size()]), 
+		return new ResourceTraversal[] {
+				new ResourceTraversal(resources.toArray(new IResource[resources.size()]),
 						IResource.DEPTH_ZERO, IResource.NONE)
-			};
+		};
 	}
 
 	private IResource getResource() {
 		return ((ModelResource)getModelObject()).getResource();
 	}
-	
-	private Set getLocalResources() throws CoreException {
+
+	private Set<IResource> getLocalResources() throws CoreException {
 		ModelObjectDefinitionFile mdf = (ModelObjectDefinitionFile)getModelObject();
-		Set resources = new HashSet();
+		Set<IResource> resources = new HashSet<>();
 		resources.add(mdf.getResource());
 		ModelObjectElementFile[] files = mdf.getModelObjectElementFiles();
-		for (int i = 0; i < files.length; i++) {
-			ModelObjectElementFile file = files[i];
+		for (ModelObjectElementFile file : files) {
 			resources.add(file.getResource());
 		}
 		return resources;
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.resources.mapping.ResourceMapping#contains(org.eclipse.core.resources.mapping.ResourceMapping)
-	 */
+
+	@Override
 	public boolean contains(ResourceMapping mapping) {
 		if (mapping instanceof ModelResourceMapping) {
 			ModelObject object = (ModelObject)mapping.getModelObject();
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ModelMerger.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ModelMerger.java
index 3e31fad..7ddbe9a 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ModelMerger.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/mapping/ModelMerger.java
@@ -33,7 +33,6 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.team.core.diff.FastDiffFilter;
 import org.eclipse.team.core.diff.IDiff;
-import org.eclipse.team.core.diff.IDiffVisitor;
 import org.eclipse.team.core.diff.IThreeWayDiff;
 import org.eclipse.team.core.history.IFileRevision;
 import org.eclipse.team.core.mapping.IMergeContext;
@@ -48,7 +47,7 @@
 import org.eclipse.team.examples.model.ModelProject;
 
 /**
- * A resource mapping merger for our example model 
+ * A resource mapping merger for our example model
  */
 public class ModelMerger extends ResourceMappingMerger {
 
@@ -61,13 +60,15 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.team.core.mapping.ResourceMappingMerger#getModelProvider()
 	 */
+	@Override
 	protected org.eclipse.core.resources.mapping.ModelProvider getModelProvider() {
 		return provider;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.team.core.mapping.ResourceMappingMerger#merge(org.eclipse.team.core.mapping.IMergeContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public IStatus merge(IMergeContext mergeContext, IProgressMonitor monitor) throws CoreException {
 		try {
 			IStatus status;
@@ -103,10 +104,9 @@
 	private IStatus mergeModelElements(IMergeContext mergeContext, IProgressMonitor monitor) throws CoreException {
 		try {
 			IDiff[] modeDiffs = getModDiffs(mergeContext);
-			List failures = new ArrayList();
+			List<IDiff> failures = new ArrayList<>();
 			monitor.beginTask(null, 100 * modeDiffs.length);
-			for (int i = 0; i < modeDiffs.length; i++) {
-				IDiff diff = modeDiffs[i];
+			for (IDiff diff : modeDiffs) {
 				if (!mergeModelElement(mergeContext, diff, SubMonitor.convert(monitor, 100))) {
 					failures.add(diff);
 				}
@@ -121,32 +121,29 @@
 	}
 
 	private ResourceMapping[] getMappings(List failures) {
-		List mappings = new ArrayList();
+		List<ResourceMapping> mappings = new ArrayList<>();
 		for (Iterator iter = failures.iterator(); iter.hasNext();) {
 			IDiff diff = (IDiff) iter.next();
 			IResource resource = ResourceDiffTree.getResourceFor(diff);
 			ModelObjectDefinitionFile file = (ModelObjectDefinitionFile)ModelObject.create(resource);
 			mappings.add(file.getAdapter(ResourceMapping.class));
 		}
-		return (ResourceMapping[]) mappings.toArray(new ResourceMapping[mappings.size()]);
+		return mappings.toArray(new ResourceMapping[mappings.size()]);
 	}
 
 	/*
 	 * Return all the diffs for MOD files.
 	 */
 	private IDiff[] getModDiffs(IMergeContext mergeContext) {
-		final List result = new ArrayList();
-		mergeContext.getDiffTree().accept(getModelProjectTraversals(mergeContext), new IDiffVisitor() {
-			public boolean visit(IDiff diff) {
-				IResource resource = ResourceDiffTree.getResourceFor(diff);
-				if (ModelObjectDefinitionFile.isModFile(resource)) {
-					result.add(diff);
-				}
-				return true;
+		final List<IDiff> result = new ArrayList<>();
+		mergeContext.getDiffTree().accept(getModelProjectTraversals(mergeContext), diff -> {
+			IResource resource = ResourceDiffTree.getResourceFor(diff);
+			if (ModelObjectDefinitionFile.isModFile(resource)) {
+				result.add(diff);
 			}
-		
+			return true;
 		});
-		return (IDiff[]) result.toArray(new IDiff[result.size()]);
+		return result.toArray(new IDiff[result.size()]);
 	}
 
 	/*
@@ -154,9 +151,8 @@
 	 */
 	private ResourceTraversal[] getModelProjectTraversals(IMergeContext mergeContext) {
 		IProject[] scopeProjects = mergeContext.getScope().getProjects();
-		List modelProjects = new ArrayList();
-		for (int i = 0; i < scopeProjects.length; i++) {
-			IProject project = scopeProjects[i];
+		List<IResource> modelProjects = new ArrayList<>();
+		for (IProject project : scopeProjects) {
 			try {
 				if (ModelProject.isModProject(project)) {
 					modelProjects.add(project);
@@ -167,9 +163,9 @@
 		}
 		if (modelProjects.isEmpty())
 			return new ResourceTraversal[0];
-		return new ResourceTraversal[] { 
-			new ResourceTraversal((IResource[]) modelProjects.toArray(new IResource[modelProjects.size()]), 
-					IResource.DEPTH_INFINITE, IResource.NONE)	
+		return new ResourceTraversal[] {
+				new ResourceTraversal(modelProjects.toArray(new IResource[modelProjects.size()]),
+						IResource.DEPTH_INFINITE, IResource.NONE)
 		};
 	}
 
@@ -182,7 +178,7 @@
 			if (twd.getDirection() == IThreeWayDiff.INCOMING
 					|| twd.getDirection() == IThreeWayDiff.CONFLICTING) {
 				IResource resource = ResourceDiffTree.getResourceFor(diff);
-				
+
 				// First, check if a change conflicts with a deletion
 				if (twd.getDirection() == IThreeWayDiff.CONFLICTING) {
 					if (!resource.exists())
@@ -190,7 +186,7 @@
 					if (((IResourceDiff)twd.getRemoteChange()).getAfterState() == null)
 						return false;
 				}
-				
+
 				// First determine the element files and element file changes
 				IResourceDiff remoteChange = (IResourceDiff)twd.getRemoteChange();
 				IResource[] localElements = getReferencedResources(resource);
@@ -199,21 +195,21 @@
 				IResource[] addedElements = getAddedElements(baseElements, remoteElements);
 				// Trick: The removed elements can be obtained by reversing the base and remote and looking for added
 				IResource[] removedElements = getAddedElements(remoteElements, baseElements);
-				
+
 				// Check to see if any removed elements have changed locally
 				if (hasOutgoingChanges(mergeContext, removedElements)) {
 					return false;
 				}
-				
+
 				// Now try to merge all the element files involved
-				Set elementFiles = new HashSet();
+				Set<IResource> elementFiles = new HashSet<>();
 				elementFiles.addAll(Arrays.asList(baseElements));
 				elementFiles.addAll(Arrays.asList(localElements));
 				elementFiles.addAll(Arrays.asList(remoteElements));
-				if (!mergeElementFiles(mergeContext, (IResource[]) elementFiles.toArray(new IResource[elementFiles.size()]), monitor)) {
+				if (!mergeElementFiles(mergeContext, elementFiles.toArray(new IResource[elementFiles.size()]), monitor)) {
 					return false;
 				}
-				
+
 				// Finally, merge the model definition
 				if (!resource.exists()) {
 					// This is a new model definition so just merge it
@@ -223,11 +219,11 @@
 				} else {
 					// Update the contents of the model definition file
 					ModelObjectDefinitionFile file = (ModelObjectDefinitionFile)ModelObject.create(resource);
-					elementFiles = new HashSet();
+					elementFiles = new HashSet<>();
 					elementFiles.addAll(Arrays.asList(localElements));
 					elementFiles.addAll(Arrays.asList(addedElements));
 					elementFiles.removeAll(Arrays.asList(removedElements));
-					file.setElements((IResource[]) elementFiles.toArray(new IResource[elementFiles.size()]));
+					file.setElements(elementFiles.toArray(new IResource[elementFiles.size()]));
 					// Let the merge context know we handled the file
 					mergeContext.markAsMerged(diff, false, monitor);
 				}
@@ -243,17 +239,17 @@
 	}
 
 	private IDiff[] getDiffs(IMergeContext mergeContext, IResource[] resources) {
-		Set diffSet = new HashSet();
-		for (int i = 0; i < resources.length; i++) {
-			IResource resource = resources[i];
+		Set<IDiff> diffSet = new HashSet<>();
+		for (IResource resource : resources) {
 			IDiff[] diffs = mergeContext.getDiffTree().getDiffs(resource, IResource.DEPTH_ZERO);
 			diffSet.addAll(Arrays.asList(diffs));
 		}
-		return (IDiff[]) diffSet.toArray(new IDiff[diffSet.size()]);
+		return diffSet.toArray(new IDiff[diffSet.size()]);
 	}
 
 	private boolean hasOutgoingChanges(IMergeContext mergeContext, IResource[] removedElements) {
 		FastDiffFilter fastDiffFilter = new FastDiffFilter() {
+			@Override
 			public boolean select(IDiff diff) {
 				if (diff instanceof IThreeWayDiff) {
 					IThreeWayDiff twd = (IThreeWayDiff) diff;
@@ -262,27 +258,24 @@
 				return false;
 			}
 		};
-		for (int i = 0; i < removedElements.length; i++) {
-			IResource resource = removedElements[i];
+		for (IResource resource : removedElements) {
 			if  (mergeContext.getDiffTree().hasMatchingDiffs(resource.getFullPath(), fastDiffFilter))
-				return true;	
+				return true;
 		}
 		return false;
 	}
 
 	private IResource[] getAddedElements(IResource[] baseElements, IResource[] remoteElements) {
-		List result = new ArrayList();
-		Set base = new HashSet();
-		for (int i = 0; i < baseElements.length; i++) {
-			IResource resource = baseElements[i];
+		List<IResource> result = new ArrayList<>();
+		Set<IResource> base = new HashSet<>();
+		for (IResource resource : baseElements) {
 			base.add(resource);
 		}
-		for (int i = 0; i < remoteElements.length; i++) {
-			IResource resource = remoteElements[i];
+		for (IResource resource : remoteElements) {
 			if (!base.contains(resource))
 				result.add(resource);
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	private IResource[] getReferencedResources(IResource resource) throws CoreException {
@@ -291,11 +284,11 @@
 		}
 		return new IResource[0];
 	}
-	
+
 	private IResource[] getReferencedResources(String projectName, IFileRevision revision, IProgressMonitor monitor) throws CoreException {
 		if (revision != null) {
 			return ModelObjectDefinitionFile.getReferencedResources(projectName, revision.getStorage(monitor));
-		} 
+		}
 		return new IResource[0];
 	}
 
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorContentProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorContentProvider.java
index 94be061..b98783c 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorContentProvider.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorContentProvider.java
@@ -13,29 +13,50 @@
  *******************************************************************************/
 package org.eclipse.team.examples.model.ui;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.team.examples.filesystem.FileSystemPlugin;
-import org.eclipse.team.examples.model.*;
-import org.eclipse.team.ui.mapping.*;
+import org.eclipse.team.examples.model.ModelObject;
+import org.eclipse.team.examples.model.ModelProject;
+import org.eclipse.team.examples.model.ModelWorkspace;
+import org.eclipse.team.ui.mapping.ITeamStateChangeEvent;
+import org.eclipse.team.ui.mapping.ITeamStateChangeListener;
+import org.eclipse.team.ui.mapping.SynchronizationStateTester;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.model.BaseWorkbenchContentProvider;
-import org.eclipse.ui.navigator.*;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
+import org.eclipse.ui.navigator.PipelinedShapeModification;
+import org.eclipse.ui.navigator.PipelinedViewerUpdate;
+import org.eclipse.ui.navigator.SaveablesProvider;
 
 /**
  * Model content provider for use with the Common Navigator framework.
- * It makes use of an IWorkbenchAdapter to get the children and parent 
- * of model objects. It also makes use of the Common Navigator pipeline 
+ * It makes use of an IWorkbenchAdapter to get the children and parent
+ * of model objects. It also makes use of the Common Navigator pipeline
  * to override the resource content extension so that model projects will
  * replace the corresponding resource project in the Project Explorer.
  */
 public class ModelNavigatorContentProvider extends BaseWorkbenchContentProvider
-		implements ICommonContentProvider, IResourceChangeListener, IPipelinedTreeContentProvider, ITeamStateChangeListener, IAdaptable {
+implements ICommonContentProvider, IResourceChangeListener, IPipelinedTreeContentProvider, ITeamStateChangeListener, IAdaptable {
 
 	private ICommonContentExtensionSite extensionSite;
 	private boolean isWorkspaceRoot;
@@ -48,7 +69,7 @@
 		super();
 		updateViewer = true;
 	}
-	
+
 	/**
 	 * Create a contentProvider
 	 * @param updateViewer whether this content provider is reponsible for updating the viewer
@@ -57,9 +78,7 @@
 		this.updateViewer = updateViewer;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.ICommonContentProvider#init(org.eclipse.ui.navigator.ICommonContentExtensionSite)
-	 */
+	@Override
 	public void init(ICommonContentExtensionSite aConfig) {
 		extensionSite = aConfig;
 		if (updateViewer) {
@@ -70,26 +89,20 @@
 		}
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.model.BaseWorkbenchContentProvider#dispose()
-	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
 		if (syncStateTester != null)
 			syncStateTester.getTeamStateProvider().removeDecoratedStateChangeListener(this);
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IMementoAware#restoreState(org.eclipse.ui.IMemento)
-	 */
+
+	@Override
 	public void restoreState(IMemento aMemento) {
 		// Nothing to do
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IMementoAware#saveState(org.eclipse.ui.IMemento)
-	 */
+	@Override
 	public void saveState(IMemento aMemento) {
 		// Nothing to do
 	}
@@ -101,24 +114,20 @@
 	public ICommonContentExtensionSite getExtensionSite() {
 		return extensionSite;
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.model.BaseWorkbenchContentProvider#getElements(java.lang.Object)
-	 */
+
+	@Override
 	public Object[] getElements(Object element) {
-		// Since we are used in the project explorer, the root may be 
+		// Since we are used in the project explorer, the root may be
 		// an IWorkspaceRoot. We need to change it to the ModelWorkspace
 		if (element instanceof IWorkspaceRoot) {
 			isWorkspaceRoot = true;
 			return super.getElements(ModelObject.create((IWorkspaceRoot)element));
-			
+
 		}
 		return super.getElements(element);
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.model.BaseWorkbenchContentProvider#getParent(java.lang.Object)
-	 */
+
+	@Override
 	public Object getParent(Object element) {
 		Object parent = super.getParent(element);
 		if (isWorkspaceRoot && parent instanceof ModelWorkspace) {
@@ -127,77 +136,69 @@
 		return parent;
 	}
 
+	@Override
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		this.viewer = viewer;
 		super.inputChanged(viewer, oldInput, newInput);
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.ui.mapping.ITeamStateChangeListener#teamStateChanged(org.eclipse.team.ui.mapping.ITeamStateChangeEvent)
-	 */
+
+	@Override
 	public void teamStateChanged(ITeamStateChangeEvent event) {
 		// We need to listen to team state changes in order to determine when we need
 		// to perform label updates on model elements.
 		// We actually just refresh all projects that contain changes.
 		// This is inefficient but will do for an example
-		Set refreshProjects = new HashSet();
+		Set<ModelProject> refreshProjects = new HashSet<>();
 		IResource[] addedRoots = event.getAddedRoots();
-		for (int i = 0; i < addedRoots.length; i++) {
-			IResource resource = addedRoots[i];
+		for (IResource resource : addedRoots) {
 			if (isModelProject(resource.getProject())) {
-				refreshProjects.add(ModelObject.create(resource.getProject()));
+				refreshProjects.add((ModelProject) ModelObject.create(resource.getProject()));
 			}
 		}
 		IResource[] removedRoots = event.getRemovedRoots();
-		for (int i = 0; i < removedRoots.length; i++) {
-			IResource resource = removedRoots[i];
+		for (IResource resource : removedRoots) {
 			if (isModelProject(resource.getProject())) {
-				refreshProjects.add(ModelObject.create(resource.getProject()));
+				refreshProjects.add((ModelProject) ModelObject.create(resource.getProject()));
 			}
 		}
 		IResource[] changed = event.getChangedResources();
-		for (int i = 0; i < changed.length; i++) {
-			IResource resource = changed[i];
+		for (IResource resource : changed) {
 			if (isModelProject(resource.getProject())) {
-				refreshProjects.add(ModelObject.create(resource.getProject()));
+				refreshProjects.add((ModelProject) ModelObject.create(resource.getProject()));
 			}
 		}
-		
-		refreshProjects((ModelProject[]) refreshProjects.toArray(new ModelProject[refreshProjects.size()]));
+
+		refreshProjects(refreshProjects.toArray(new ModelProject[refreshProjects.size()]));
 	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
-	 */
+
+	@Override
 	public void resourceChanged(IResourceChangeEvent event) {
 		if (viewer == null) return;
 		IResourceDelta delta = event.getDelta();
 		IResourceDelta[] children = delta.getAffectedChildren();
 		boolean refreshAll = false;
-		List refreshProjects = new ArrayList();
-		for (int i = 0; i < children.length; i++) {
-			IResourceDelta childDelta = children[i];
+		List<ModelProject> refreshProjects = new ArrayList<>();
+		for (IResourceDelta childDelta : children) {
 			if (isModelProject(childDelta.getResource())) {
 				if (isProjectChange(childDelta)) {
 					refreshAll = true;
 					break;
 				}
-				refreshProjects.add(ModelObject.create(childDelta.getResource()));
+				refreshProjects.add((ModelProject) ModelObject.create(childDelta.getResource()));
 			}
 		}
 		if (refreshAll || !refreshProjects.isEmpty()) {
 			if (refreshAll)
 				refreshViewer();
-			else 
-				refreshProjects((ModelProject[]) refreshProjects.toArray(new ModelProject[refreshProjects.size()]));
+			else
+				refreshProjects(refreshProjects.toArray(new ModelProject[refreshProjects.size()]));
 		}
 	}
 
 	private void refreshProjects(final ModelProject[] projects) {
 		Display.getDefault().asyncExec(() -> {
 			if (!getViewer().getControl().isDisposed()) {
-				for (int i = 0; i < projects.length; i++) {
-					ModelProject project = projects[i];
+				for (ModelProject project : projects) {
 					((AbstractTreeViewer)getViewer()).refresh(project, true);
 				}
 			}
@@ -231,16 +232,12 @@
 		return viewer;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedChildren(java.lang.Object, java.util.Set)
-	 */
+	@Override
 	public void getPipelinedChildren(Object aParent, Set theCurrentChildren) {
 		// Nothing to do
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedElements(java.lang.Object, java.util.Set)
-	 */
+	@Override
 	public void getPipelinedElements(Object anInput, Set theCurrentElements) {
 		// Replace any model projects with a ModelProject
 		if (anInput instanceof IWorkspaceRoot) {
@@ -263,17 +260,13 @@
 		}
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedParent(java.lang.Object, java.lang.Object)
-	 */
+	@Override
 	public Object getPipelinedParent(Object anObject, Object aSuggestedParent) {
 		// We're not changing the parenting of any resources
 		return aSuggestedParent;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptAdd(org.eclipse.ui.navigator.PipelinedShapeModification)
-	 */
+	@Override
 	public PipelinedShapeModification interceptAdd(PipelinedShapeModification anAddModification) {
 		if (anAddModification.getParent() instanceof IWorkspaceRoot) {
 			for (Iterator iter = anAddModification.getChildren().iterator(); iter.hasNext();) {
@@ -293,30 +286,25 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptRefresh(org.eclipse.ui.navigator.PipelinedViewerUpdate)
-	 */
+	@Override
 	public boolean interceptRefresh(PipelinedViewerUpdate aRefreshSynchronization) {
 		// No need to intercept the refresh
 		return false;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptRemove(org.eclipse.ui.navigator.PipelinedShapeModification)
-	 */
+	@Override
 	public PipelinedShapeModification interceptRemove(PipelinedShapeModification aRemoveModification) {
 		// No need to intercept the remove
 		return aRemoveModification;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptUpdate(org.eclipse.ui.navigator.PipelinedViewerUpdate)
-	 */
+	@Override
 	public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) {
 		// No need to intercept the update
 		return false;
 	}
 
+	@Override
 	public <T> T getAdapter(Class<T> adapter) {
 		if (adapter == SaveablesProvider.class) {
 			return adapter.cast(saveablesProvider);
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveablesProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveablesProvider.java
index 8ec2bee..64489bf 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveablesProvider.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveablesProvider.java
@@ -13,20 +13,22 @@
  *******************************************************************************/
 package org.eclipse.team.examples.model.ui;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.eclipse.team.examples.model.ModelObjectDefinitionFile;
 import org.eclipse.ui.Saveable;
 import org.eclipse.ui.navigator.SaveablesProvider;
 
 /**
- * Provider used by the Common Navigator framework to link saveables to 
+ * Provider used by the Common Navigator framework to link saveables to
  * model elements.
  */
 public class ModelSaveablesProvider extends SaveablesProvider {
 
-	private List saveables = new ArrayList();
+	private List<Saveable> saveables = new ArrayList<>();
 
+	@Override
 	public Object[] getElements(Saveable saveable) {
 		if (saveable instanceof ModelSaveable) {
 			ModelSaveable ms = (ModelSaveable) saveable;
@@ -35,17 +37,19 @@
 		return new Object[0];
 	}
 
+	@Override
 	public Saveable getSaveable(Object element) {
-		for (Iterator iterator = saveables.iterator(); iterator.hasNext();) {
-			ModelSaveable saveable = (ModelSaveable) iterator.next();
+		for (Object element2 : saveables) {
+			ModelSaveable saveable = (ModelSaveable) element2;
 			if (saveable.getModelObject().equals(element))
 				return saveable;
 		}
 		return null;
 	}
 
+	@Override
 	public Saveable[] getSaveables() {
-		return (Saveable[]) saveables.toArray(new Saveable[saveables.size()]);
+		return saveables.toArray(new Saveable[saveables.size()]);
 	}
 
 	public void makeDirty(ModelObjectDefinitionFile mo) {
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/CompareAdapter.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/CompareAdapter.java
index cf266a4..7f6d5b2 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/CompareAdapter.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/CompareAdapter.java
@@ -17,12 +17,17 @@
 import java.util.List;
 
 import org.eclipse.compare.structuremergeviewer.ICompareInput;
-import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.resources.mapping.ModelProvider;
 import org.eclipse.core.resources.mapping.ResourceMapping;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.team.core.mapping.ISynchronizationContext;
-import org.eclipse.team.examples.model.*;
+import org.eclipse.team.examples.model.ModelObject;
+import org.eclipse.team.examples.model.ModelObjectDefinitionFile;
+import org.eclipse.team.examples.model.ModelObjectElementFile;
+import org.eclipse.team.examples.model.ModelResource;
 import org.eclipse.team.examples.model.mapping.ExampleModelProvider;
 import org.eclipse.team.ui.mapping.SynchronizationCompareAdapter;
 import org.eclipse.ui.IMemento;
@@ -33,13 +38,14 @@
 public class CompareAdapter extends SynchronizationCompareAdapter {
 
 	private static final String CTX_MODEL_MAPPINGS = "org.eclipse.team.examples.filesystem.modelMappings";
-	
+
 	private final ExampleModelProvider provider;
 
 	public CompareAdapter(ExampleModelProvider provider) {
 		this.provider = provider;
 	}
-	
+
+	@Override
 	public String getName(ResourceMapping mapping) {
 		Object o = mapping.getModelObject();
 		if (o instanceof ModelObject) {
@@ -47,7 +53,8 @@
 		}
 		return super.getName(mapping);
 	}
-	
+
+	@Override
 	public String getPathString(ResourceMapping mapping) {
 		Object o = mapping.getModelObject();
 		if (o instanceof ModelObject) {
@@ -56,6 +63,7 @@
 		return super.getPathString(mapping);
 	}
 
+	@Override
 	public ICompareInput asCompareInput(ISynchronizationContext context, Object o) {
 		if (o instanceof ModelObjectElementFile) {
 			ModelObjectElementFile moeFile = (ModelObjectElementFile) o;
@@ -64,29 +72,29 @@
 		}
 		return super.asCompareInput(context, o);
 	}
-	
+
+	@Override
 	public ResourceMapping[] restore(IMemento memento) {
-		List result = new ArrayList();
+		List<ResourceMapping> result = new ArrayList<>();
 		IMemento[] children = memento.getChildren(CTX_MODEL_MAPPINGS);
-		for (int i = 0; i < children.length; i++) {
-			IMemento child = children[i];
+		for (IMemento child : children) {
 			ResourceMapping mapping = restoreMapping(child);
 			if (mapping != null)
 				result.add(mapping);
 		}
-		return (ResourceMapping[]) result.toArray(new ResourceMapping[result.size()]);
+		return result.toArray(new ResourceMapping[result.size()]);
 	}
 
+	@Override
 	public void save(ResourceMapping[] mappings, IMemento memento) {
-		for (int i = 0; i < mappings.length; i++) {
-			ResourceMapping mapping = mappings[i];
+		for (ResourceMapping mapping : mappings) {
 			Object o = mapping.getModelObject();
 			if (o instanceof ModelObject) {
 				ModelObject mo = (ModelObject) o;
 				save(mo, memento.createChild(CTX_MODEL_MAPPINGS));
 			}
 		}
-		
+
 	}
 
 	private ResourceMapping restoreMapping(IMemento child) {
@@ -103,10 +111,10 @@
 		}
 		return null;
 	}
-	
+
 	private IResource getResource(String path) {
 		Path resourcePath = new Path(path);
-		if (path.endsWith(ModelObjectDefinitionFile.MODEL_OBJECT_DEFINITION_FILE_EXTENSION) 
+		if (path.endsWith(ModelObjectDefinitionFile.MODEL_OBJECT_DEFINITION_FILE_EXTENSION)
 				|| path.endsWith(ModelObjectElementFile.MODEL_OBJECT_ELEMENTFILE_EXTENSION))
 			return ResourcesPlugin.getWorkspace().getRoot().getFile(resourcePath);
 		if (resourcePath.segmentCount() == 1)
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ModelMergeActionHandler.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ModelMergeActionHandler.java
index 846a7e3..f800d62 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ModelMergeActionHandler.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ModelMergeActionHandler.java
@@ -18,9 +18,13 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.team.core.diff.*;
+import org.eclipse.team.core.diff.FastDiffFilter;
+import org.eclipse.team.core.diff.IDiff;
+import org.eclipse.team.core.diff.IThreeWayDiff;
 import org.eclipse.team.core.mapping.IMergeContext;
 import org.eclipse.team.examples.model.ModelObjectDefinitionFile;
 import org.eclipse.team.examples.model.ModelObjectElementFile;
@@ -40,9 +44,7 @@
 			super(configuration, selection);
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.team.ui.mapping.SynchronizationOperation#execute(org.eclipse.core.runtime.IProgressMonitor)
-		 */
+		@Override
 		protected void execute(IProgressMonitor monitor) throws InvocationTargetException {
 			// We need to perform special handling for any MOE file whose parent MOD is not included in the merge
 			try {
@@ -53,8 +55,7 @@
 				if (!status.isOK())
 					throw new CoreException(status);
 				// For now, just cycle through each lonely MOE and update the parent
-				for (int i = 0; i < moeMerges.length; i++) {
-					ModelObjectElementFile file = moeMerges[i];
+				for (ModelObjectElementFile file : moeMerges) {
 					ModelObjectDefinitionFile modFile = (ModelObjectDefinitionFile)file.getParent();
 					if (file.getResource().exists() && !modFile.hasMoe((IFile)file.getResource()))
 						modFile.addMoe((IFile)file.getResource());
@@ -67,23 +68,21 @@
 		}
 
 		private ModelObjectElementFile[] getMoeOnlyMerges() {
-			List result = new ArrayList();
+			List<ModelObjectElementFile> result = new ArrayList<>();
 			Object[] elements = getElements();
-			for (int i = 0; i < elements.length; i++) {
-				Object object = elements[i];
+			for (Object object : elements) {
 				if (object instanceof ModelObjectElementFile) {
 					ModelObjectElementFile moeFile = (ModelObjectElementFile) object;
 					result.add(moeFile);
 				}
 			}
-			return (ModelObjectElementFile[]) result.toArray(new ModelObjectElementFile[result.size()]);
+			return result.toArray(new ModelObjectElementFile[result.size()]);
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.team.internal.ui.mapping.ResourceModelProviderOperation#getDiffFilter()
-		 */
+		@Override
 		protected FastDiffFilter getDiffFilter() {
 			return new FastDiffFilter() {
+				@Override
 				public boolean select(IDiff node) {
 					if (node instanceof IThreeWayDiff) {
 						IThreeWayDiff twd = (IThreeWayDiff) node;
@@ -107,13 +106,15 @@
 		this.overwrite = overwrite;
 	}
 
+	@Override
 	protected SynchronizationOperation getOperation() {
 		if (operation == null) {
 			operation = new ModelSynchronizeOperation(getConfiguration(), getStructuredSelection());
 		}
 		return operation;
 	}
-	
+
+	@Override
 	protected void updateEnablement(IStructuredSelection selection) {
 		synchronized (this) {
 			operation = null;
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ModelSyncContentProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ModelSyncContentProvider.java
index e4fb3a6..3a9c796 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ModelSyncContentProvider.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ModelSyncContentProvider.java
@@ -13,65 +13,97 @@
  *******************************************************************************/
 package org.eclipse.team.examples.model.ui.mapping;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.resources.mapping.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.viewers.*;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.mapping.ResourceMapping;
+import org.eclipse.core.resources.mapping.ResourceMappingContext;
+import org.eclipse.core.resources.mapping.ResourceTraversal;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.team.core.diff.*;
+import org.eclipse.team.core.diff.FastDiffFilter;
+import org.eclipse.team.core.diff.IDiff;
+import org.eclipse.team.core.diff.IDiffChangeEvent;
+import org.eclipse.team.core.diff.IDiffTree;
 import org.eclipse.team.core.mapping.ISynchronizationContext;
 import org.eclipse.team.core.mapping.ISynchronizationScope;
 import org.eclipse.team.core.mapping.provider.ResourceDiffTree;
 import org.eclipse.team.examples.filesystem.FileSystemPlugin;
-import org.eclipse.team.examples.model.*;
+import org.eclipse.team.examples.model.ModelContainer;
+import org.eclipse.team.examples.model.ModelObject;
+import org.eclipse.team.examples.model.ModelObjectDefinitionFile;
+import org.eclipse.team.examples.model.ModelObjectElementFile;
+import org.eclipse.team.examples.model.ModelProject;
+import org.eclipse.team.examples.model.ModelWorkspace;
 import org.eclipse.team.examples.model.mapping.ExampleModelProvider;
 import org.eclipse.team.examples.model.ui.ModelNavigatorContentProvider;
 import org.eclipse.team.internal.ui.Utils;
 import org.eclipse.team.internal.ui.mapping.SynchronizationResourceMappingContext;
 import org.eclipse.team.ui.mapping.SynchronizationContentProvider;
-import org.eclipse.ui.navigator.*;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
+import org.eclipse.ui.navigator.PipelinedShapeModification;
+import org.eclipse.ui.navigator.PipelinedViewerUpdate;
 
 /**
  * The content provider that is used for synchronizations.
- * It also makes use of the Common Navigator pipeline 
+ * It also makes use of the Common Navigator pipeline
  * to override the resource content extension so that model projects will
  * replace the corresponding resource project in the Synchronize view.
  */
 public class ModelSyncContentProvider extends SynchronizationContentProvider implements IPipelinedTreeContentProvider {
 
 	private ModelNavigatorContentProvider delegate;
-	
+
 	public ModelSyncContentProvider() {
 		super();
 	}
 
+	@Override
 	public void init(ICommonContentExtensionSite site) {
 		super.init(site);
 		delegate = new ModelNavigatorContentProvider(getContext() != null);
 		delegate.init(site);
 	}
-	
+
+	@Override
 	public void dispose() {
 		super.dispose();
 		if (delegate != null)
 			delegate.dispose();
 	}
-	
+
+	@Override
 	protected ITreeContentProvider getDelegateContentProvider() {
 		return delegate;
 	}
 
+	@Override
 	protected String getModelProviderId() {
 		return ExampleModelProvider.ID;
 	}
 
+	@Override
 	protected Object getModelRoot() {
 		return ModelWorkspace.getRoot();
 	}
 
+	@Override
 	protected ResourceTraversal[] getTraversals(
 			ISynchronizationContext context, Object object) {
 		if (object instanceof ModelObject) {
@@ -88,17 +120,17 @@
 		}
 		return new ResourceTraversal[0];
 	}
-	
+
+	@Override
 	protected Object[] getChildrenInContext(ISynchronizationContext context, Object parent, Object[] children) {
-		Set allChildren = new HashSet();
+		Set<Object> allChildren = new HashSet<>();
 		allChildren.addAll(Arrays.asList(super.getChildrenInContext(context, parent, children)));
 		// We need to override this method in order to ensure that any elements
 		// that exist in the context but do not exist locally are included
 		if (parent instanceof ModelContainer) {
 			ModelContainer mc = (ModelContainer) parent;
 			IDiff[] diffs = context.getDiffTree().getDiffs(mc.getResource(), IResource.DEPTH_ONE);
-			for (int i = 0; i < diffs.length; i++) {
-				IDiff diff = diffs[i];
+			for (IDiff diff : diffs) {
 				IResource resource = ResourceDiffTree.getResourceFor(diff);
 				if (!resource.exists() && ModelObjectDefinitionFile.isModFile(resource)) {
 					ModelObject o = ModelObject.create(resource);
@@ -110,8 +142,7 @@
 		if (parent instanceof ModelObjectDefinitionFile) {
 			ResourceTraversal[] traversals = getTraversals(context, parent);
 			IDiff[] diffs = context.getDiffTree().getDiffs(traversals);
-			for (int i = 0; i < diffs.length; i++) {
-				IDiff diff = diffs[i];
+			for (IDiff diff : diffs) {
 				IResource resource = ResourceDiffTree.getResourceFor(diff);
 				if (!resource.exists() && ModelObjectElementFile.isMoeFile(resource)) {
 					ModelObject o = new ModelObjectElementFile((ModelObjectDefinitionFile)parent, (IFile)resource);
@@ -123,15 +154,17 @@
 		return allChildren.toArray(new Object[allChildren.size()]);
 	}
 
+	@Override
 	public void getPipelinedChildren(Object aParent, Set theCurrentChildren) {
 		// Nothing to do
 	}
 
+	@Override
 	public void getPipelinedElements(Object anInput, Set theCurrentElements) {
 		// Replace any model projects with a ModelProject if the input
 		// is a synchronization context
 		if (anInput instanceof ISynchronizationContext) {
-			List newProjects = new ArrayList();
+			List<ModelObject> newProjects = new ArrayList<>();
 			for (Iterator iter = theCurrentElements.iterator(); iter.hasNext();) {
 				Object element = iter.next();
 				if (element instanceof IProject) {
@@ -155,11 +188,13 @@
 		}
 	}
 
+	@Override
 	public Object getPipelinedParent(Object anObject, Object aSuggestedParent) {
 		// We're not changing the parenting of any resources
 		return aSuggestedParent;
 	}
 
+	@Override
 	public PipelinedShapeModification interceptAdd(PipelinedShapeModification anAddModification) {
 		if (anAddModification.getParent() instanceof ISynchronizationContext) {
 			for (Iterator iter = anAddModification.getChildren().iterator(); iter.hasNext();) {
@@ -179,21 +214,25 @@
 		return null;
 	}
 
+	@Override
 	public boolean interceptRefresh(PipelinedViewerUpdate aRefreshSynchronization) {
 		// No need to intercept the refresh
 		return false;
 	}
 
+	@Override
 	public PipelinedShapeModification interceptRemove(PipelinedShapeModification aRemoveModification) {
 		// No need to intercept the remove
 		return aRemoveModification;
 	}
 
+	@Override
 	public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) {
 		// No need to intercept the update
 		return false;
 	}
-	
+
+	@Override
 	public void diffsChanged(final IDiffChangeEvent event, IProgressMonitor monitor) {
 		// Override in order to perform custom viewer updates when the diff tree changes
 		Utils.syncExec((Runnable) () -> handleChange(event), (StructuredViewer)getViewer());
@@ -202,11 +241,10 @@
 	void handleChange(IDiffChangeEvent event) {
 		Set existingProjects = getVisibleModelProjects();
 		IProject[] changedProjects = getChangedModelProjects(event);
-		List refreshes = new ArrayList(changedProjects.length);
-		List additions = new ArrayList(changedProjects.length);
-		List removals = new ArrayList(changedProjects.length);
-		for (int i = 0; i < changedProjects.length; i++) {
-			IProject project = changedProjects[i];
+		List<ModelObject> refreshes = new ArrayList<>(changedProjects.length);
+		List<ModelObject> additions = new ArrayList<>(changedProjects.length);
+		List<ModelObject> removals = new ArrayList<>(changedProjects.length);
+		for (IProject project : changedProjects) {
 			if (hasVisibleChanges(event.getTree(), project)) {
 				if (existingProjects.contains(project)) {
 					refreshes.add(ModelObject.create(project));
@@ -215,7 +253,7 @@
 				}
 			} else if (existingProjects.contains(project)) {
 				removals.add(ModelObject.create(project));
-				
+
 			}
 		}
 		if (!removals.isEmpty() || !additions.isEmpty() || !refreshes.isEmpty()) {
@@ -228,8 +266,7 @@
 				if (!removals.isEmpty())
 					viewer.remove(viewer.getInput(), removals.toArray());
 				if (!refreshes.isEmpty()) {
-					for (Iterator iter = refreshes.iterator(); iter.hasNext();) {
-						Object element = iter.next();
+					for (Object element : refreshes) {
 						viewer.refresh(element);
 					}
 				}
@@ -241,6 +278,7 @@
 
 	private boolean hasVisibleChanges(IDiffTree tree, IProject project) {
 		return tree.hasMatchingDiffs(project.getFullPath(), new FastDiffFilter() {
+			@Override
 			public boolean select(IDiff diff) {
 				return isVisible(diff);
 			}
@@ -251,33 +289,30 @@
 	 * Return the list of all projects that are model projects
 	 */
 	private IProject[] getChangedModelProjects(IDiffChangeEvent event) {
-		Set result = new HashSet();
+		Set<IProject> result = new HashSet<>();
 		IDiff[] changes = event.getChanges();
-		for (int i = 0; i < changes.length; i++) {
-			IDiff diff = changes[i];
+		for (IDiff diff : changes) {
 			IResource resource = ResourceDiffTree.getResourceFor(diff);
 			if (resource != null && isModProject(resource.getProject())) {
 				result.add(resource.getProject());
 			}
 		}
 		IDiff[] additions = event.getAdditions();
-		for (int i = 0; i < additions.length; i++) {
-			IDiff diff = additions[i];
+		for (IDiff diff : additions) {
 			IResource resource = ResourceDiffTree.getResourceFor(diff);
 			if (resource != null && isModProject(resource.getProject())) {
 				result.add(resource.getProject());
 			}
 		}
 		IPath[] removals = event.getRemovals();
-		for (int i = 0; i < removals.length; i++) {
-			IPath path = removals[i];
+		for (IPath path : removals) {
 			if (path.segmentCount() > 0) {
 				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(path.segment(0));
 				if (isModProject(project))
 					result.add(project);
 			}
 		}
-		return (IProject[]) result.toArray(new IProject[result.size()]);
+		return result.toArray(new IProject[result.size()]);
 	}
 
 	private boolean isModProject(IProject project) {
@@ -297,8 +332,7 @@
 		Tree tree = viewer.getTree();
 		TreeItem[] children = tree.getItems();
 		Set result = new HashSet();
-		for (int i = 0; i < children.length; i++) {
-			TreeItem control = children[i];
+		for (TreeItem control : children) {
 			Object data = control.getData();
 			if (data instanceof ModelProject) {
 				result.add(((ModelProject) data).getProject());
@@ -306,16 +340,16 @@
 		}
 		return result;
 	}
-	
+
+	@Override
 	public void propertyChanged(IDiffTree tree, int property, IPath[] paths) {
 		// We're overriding this message so that label updates occur for any elements
 		// whose labels may have changed
 		if (getContext() == null)
 			return;
-		final Set updates = new HashSet();
+		final Set<ModelObject> updates = new HashSet<>();
 		boolean refresh = false;
-		for (int i = 0; i < paths.length; i++) {
-			IPath path = paths[i];
+		for (IPath path : paths) {
 			IDiff diff = tree.getDiff(path);
 			if (diff != null) {
 				IResource resource = ResourceDiffTree.getResourceFor(diff);
@@ -336,7 +370,7 @@
 				if (refreshAll)
 					viewer.refresh(true);
 				else
-					viewer.update(updates.toArray(new Object[updates.size()]), null);
+					viewer.update(updates.toArray(new ModelObject[updates.size()]), null);
 			}, viewer);
 		}
 	}
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ThirdPartyActionProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ThirdPartyActionProvider.java
index 105399c..6ce278e 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ThirdPartyActionProvider.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/mapping/ThirdPartyActionProvider.java
@@ -30,7 +30,9 @@
 import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
 import org.eclipse.ui.IContributorResourceAdapter;
 import org.eclipse.ui.ide.IContributorResourceAdapter2;
-import org.eclipse.ui.navigator.*;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.IExtensionStateModel;
 
 public class ThirdPartyActionProvider extends CommonActionProvider {
 
@@ -39,7 +41,7 @@
 	public ThirdPartyActionProvider() {
 		// Nothing to do
 	}
-	
+
 	/**
 	 * Return the configuration from the synchronize page that contains
 	 * the common viewer.
@@ -59,7 +61,7 @@
 	protected final IExtensionStateModel getExtensionStateModel() {
 		return getActionSite().getExtensionStateModel();
 	}
-	
+
 	/**
 	 * Return the synchronization context to which the actions of this provider
 	 * apply.
@@ -69,17 +71,18 @@
 	protected final ISynchronizationContext getSynchronizationContext() {
 		return (ISynchronizationContext)getExtensionStateModel().getProperty(ITeamContentProviderManager.P_SYNCHRONIZATION_CONTEXT);
 	}
-	
+
+	@Override
 	public void init(ICommonActionExtensionSite aSite) {
 		super.init(aSite);
 		exampleAction = new Action("3rd Party Action") {
+			@Override
 			public void run() {
 				StringBuffer buffer = new StringBuffer();
 				boolean addComma = false;
 				IStructuredSelection selection = (IStructuredSelection)getContext().getSelection();
 				ResourceMapping[] mappings = getResourceMappings(selection.toArray());
-				for (int i = 0; i < mappings.length; i++) {
-					ResourceMapping mapping = mappings[i];
+				for (ResourceMapping mapping : mappings) {
 					ISynchronizationCompareAdapter adapter = getCompareAdpater(mapping);
 					if (adapter != null) {
 						String name = adapter.getName(mapping);
@@ -94,7 +97,7 @@
 			}
 		};
 	}
-	
+
 	protected ISynchronizationCompareAdapter getCompareAdpater(ResourceMapping mapping) {
 		if (mapping != null) {
 			ModelProvider provider = mapping.getModelProvider();
@@ -108,22 +111,22 @@
 		return null;
 	}
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		menu.add(exampleAction);
 	}
 
 	private ResourceMapping[] getResourceMappings(Object[] objects) {
-		List result = new ArrayList();
-		for (int i = 0; i < objects.length; i++) {
-			Object object = objects[i];
+		List<ResourceMapping> result = new ArrayList<>();
+		for (Object object : objects) {
 			ResourceMapping mapping = getResourceMapping(object);
 			if (mapping != null)
 				result.add(mapping);
 		}
-		return (ResourceMapping[]) result.toArray(new ResourceMapping[result.size()]);
+		return result.toArray(new ResourceMapping[result.size()]);
 	}
-	
+
 	private ResourceMapping getResourceMapping(Object o) {
 		if (o instanceof ResourceMapping) {
 			return (ResourceMapping) o;
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticFilesystemProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticFilesystemProvider.java
index 33d3907..cb01bf4 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticFilesystemProvider.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticFilesystemProvider.java
@@ -12,24 +12,46 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.team.examples.pessimistic;
- 
-import java.io.*;
-import java.util.*;
 
-import org.eclipse.core.resources.*;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFileModificationValidator;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.resources.team.FileModificationValidator;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.team.core.RepositoryProvider;
 
 /**
  * The <code>PessimisticFilesystemProvider</code> is a repository provider.
- * 
+ *
  * The provider manages a file named ".pessimistic" in each container it
  * controls.  This is where it stores metadata on which files it controls
  * in that container.  This file is considered to be controlled by the
  * provider and may be deleted.
- * 
+ *
  * The provider provides very simple checkin/checkout facilities by marking
  * files read-only to check them in and read-write to check them out.  It
  * also supports ignoring derived files.
@@ -38,7 +60,7 @@
 	/**
 	 * The name of the file used to store metadata on which
 	 * files are controlled by this provider.
-	 */	
+	 */
 	private static final String CONTROL_FILE_NAME= ".pessimistic";
 	/**
 	 * The file modification validator for this provider.
@@ -48,16 +70,16 @@
 	 * The cache of resources that are currently controlled.
 	 * The cache is a map of parent resource -> set of controlled children.
 	 */
-	Map fControlledResources;
-	
+	Map<IContainer, Set<IResource>> fControlledResources;
+
 	/**
 	 * Creates a new provider, required for team repository extension.
 	 */
 	public PessimisticFilesystemProvider() {
 		validator = new PessimisticModificationValidator(this);
-		fControlledResources= new HashMap(1);
-	}		
-	
+		fControlledResources = new HashMap<>(1);
+	}
+
 	/**
 	 * Adds the resources to the control of this provider.
 	 */
@@ -65,8 +87,8 @@
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging()) {
 			System.out.println("Add to control:");
 			if (resources != null) {
-				for (int i= 0; i < resources.length; i++) {
-					System.out.println("\t" + resources[i]);
+				for (IResource resource : resources) {
+					System.out.println("\t" + resource);
 				}
 			} else {
 				System.out.println("null resources");
@@ -75,28 +97,27 @@
 		if (resources == null || resources.length == 0) {
 			return;
 		}
-		final Set toAdd= new HashSet(resources.length);
+		final Set<IResource> toAdd = new HashSet<>(resources.length);
 		IWorkspaceRunnable runnable= monitor1 -> {
-			for (int i1 = 0; i1 < resources.length; i1++) {
-				IResource resource= resources[i1];
+			for (IResource resource : resources) {
 				if (!isControlled(resource)) {
 					toAdd.add(resource);
 				}
 			}
-			Map byParent= sortByParent(toAdd);
+			Map<IContainer, Set<IResource>> byParent = sortByParent(toAdd);
 
 			monitor1.beginTask("Adding to control", 1000);
-			for (Iterator i2= byParent.keySet().iterator(); i2.hasNext();) {
-				IContainer parent= (IContainer) i2.next();
-				Set controlledResources= (Set)fControlledResources.get(parent);
+			for (Object element : byParent.keySet()) {
+				IContainer parent= (IContainer) element;
+				Set<IResource> controlledResources = fControlledResources.get(parent);
 				if (controlledResources == null) {
-					controlledResources= new HashSet(1);
+					controlledResources = new HashSet<>(1);
 					fControlledResources.put(parent, controlledResources);
 				}
-				controlledResources.addAll((Set)byParent.get(parent));
+				controlledResources.addAll(byParent.get(parent));
 				writeControlFile(parent, monitor1);
 			}
-			monitor1.done();				
+			monitor1.done();
 		};
 		run(runnable, monitor);
 		fireStateChanged(toAdd, false);
@@ -109,8 +130,8 @@
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging()) {
 			System.out.println("Remove from control:");
 			if (resources != null) {
-				for (int i= 0; i < resources.length; i++) {
-					System.out.println("\t" + resources[i]);
+				for (IResource resource : resources) {
+					System.out.println("\t" + resource);
 				}
 			} else {
 				System.out.println("null resources");
@@ -119,24 +140,23 @@
 		if (resources == null || resources.length == 0) {
 			return;
 		}
-		final Set toRemove= new HashSet(resources.length);
+		final Set<IResource> toRemove = new HashSet<>(resources.length);
 		IWorkspaceRunnable runnable= monitor1 -> {
-			for (int i1 = 0; i1 < resources.length; i1++) {
-				IResource resource1= resources[i1];
-				if (isControlled(resource1)) {	
+			for (IResource resource1 : resources) {
+				if (isControlled(resource1)) {
 					toRemove.add(resource1);
 				}
 			}
-			Map byParent= sortByParent(toRemove);
+			Map<IContainer, Set<IResource>> byParent = sortByParent(toRemove);
 
 			monitor1.beginTask("Removing from control", 1000);
-			for (Iterator i2= byParent.keySet().iterator(); i2.hasNext();) {
-				IContainer parent= (IContainer) i2.next();
-				Set controlledResources= (Set)fControlledResources.get(parent);
+			for (Object element : byParent.keySet()) {
+				IContainer parent= (IContainer) element;
+				Set<IResource> controlledResources = fControlledResources.get(parent);
 				if (controlledResources == null) {
 					deleteControlFile(parent, monitor1);
 				} else {
-					Set toRemove1= (Set)byParent.get(parent);
+					Set<IResource> toRemove1 = byParent.get(parent);
 					controlledResources.removeAll(toRemove1);
 					if (controlledResources.isEmpty()) {
 						fControlledResources.remove(parent);
@@ -161,20 +181,19 @@
 	/*
 	 * Returns a map of IContainer -> Set of IResource.
 	 */
-	private Map sortByParent(Set resources) {
-		Map byParent= new HashMap(1);
-		for (Iterator i = resources.iterator(); i.hasNext();) {
-			IResource resource= (IResource) i.next();
+	private Map<IContainer, Set<IResource>> sortByParent(Set<IResource> resources) {
+		Map<IContainer, Set<IResource>> byParent = new HashMap<>(1);
+		for (IResource resource : resources) {
 			IContainer parent= resource.getParent();
-			Set set= (Set)byParent.get(parent);
+			Set<IResource> set = byParent.get(parent);
 			if (set == null) {
-				set= new HashSet(1);
+				set = new HashSet<>(1);
 				byParent.put(parent, set);
 			}
 			set.add(resource);
 		}
 		return byParent;
-	}	
+	}
 
 	/*
 	 * Deletes the control file for the given container.
@@ -215,9 +234,9 @@
 	/*
 	 * Reads the contents of a control file, answering the set of
 	 * resources that was specified in the file.
-	 */	
-	Set readControlFile(IFile controlFile) {
-		Set controlledResources= new HashSet(1);
+	 */
+	Set<IResource> readControlFile(IFile controlFile) {
+		Set<IResource> controlledResources = new HashSet<>(1);
 		if (controlFile.exists()) {
 			InputStream in= null;
 			try {
@@ -260,7 +279,7 @@
 					}
 				}
 			}
-		}		
+		}
 		return controlledResources;
 	}
 
@@ -269,7 +288,7 @@
 	 */
 	private void writeControlFile(IContainer container, IProgressMonitor monitor) throws CoreException {
 		IFile controlFile= getControlFile(container, monitor);
-		Set controlledResources= (Set)fControlledResources.get(container);
+		Set controlledResources= fControlledResources.get(container);
 		InputStream contents= generateControlFileContents(controlledResources);
 		monitor.beginTask("Writing control file " + controlFile, 1000);
 		if (contents == null) {
@@ -281,7 +300,7 @@
 	}
 
 	/*
-	 * Generates an InputStream on a byte array which specifies 
+	 * Generates an InputStream on a byte array which specifies
 	 * the resources given in controlledResources.
 	 */
 	private InputStream generateControlFileContents(Set controlledResources) {
@@ -306,52 +325,46 @@
 	/*
 	 * @see IProjectNature#setProject(IProject)
 	 */
+	@Override
 	public void setProject(IProject project) {
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging()) {
 			System.out.println("Set project to " + project);
 		}
 		super.setProject(project);
-		configureProject();		
+		configureProject();
 	}
-	
-	/*
-	 * @see IRepositoryProvider#getID()
-	 */
+
+	@Override
 	public String getID() {
 		return PessimisticFilesystemProviderPlugin.NATURE_ID;
 	}
 
-	/*
-	 * @see IRepositoryProvider#getFileModificationValidator()
-	 */
+	@Override
 	public IFileModificationValidator getFileModificationValidator() {
 		return getFileModificationValidator();
 	}
-	
+
+	@Override
 	public FileModificationValidator getFileModificationValidator2() {
 		return validator;
 	}
-	
-	/*
-	 * @see IRepositoryProvider#deconfigure()
-	 */
+
+	@Override
 	public void deconfigure() {
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging()) {
 			System.out.println("Deconfigure " + getProject());
 		}
-		
+
 		fControlledResources.clear();
 		fireStateChanged(getSubtreeMembers(getProject()), true);
 	}
 
-	/*
-	 * @see IRepositoryProvider#configure()
-	 */
+	@Override
 	public void configureProject() {
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging()) {
 			System.out.println("Configure " + getProject());
 		}
-		
+
 		readControlFiles();
 		fireStateChanged(getSubtreeMembers(getProject()), true);
 	}
@@ -361,14 +374,14 @@
 	 */
 	private void readControlFiles() {
 		IProject project= getProject();
-		Set set= new HashSet(1);
+		Set<IResource> set = new HashSet<>(1);
 		set.add(project);
 		fControlledResources.put(project.getParent(), set);
 		try {
 			getProject().accept(resource -> {
 				if (resource.getType() == IResource.FILE) {
 					if (CONTROL_FILE_NAME.equals(resource.getName())) {
-						Set controlledResources= readControlFile((IFile)resource);
+						Set<IResource> controlledResources = readControlFile((IFile) resource);
 						fControlledResources.put(resource.getParent(), controlledResources);
 					}
 					return false;
@@ -382,13 +395,13 @@
 
 	/**
 	 * Checks the resources in by marking them read-only.
-	 */	
+	 */
 	public void checkin(final IResource[] resources, IProgressMonitor monitor) {
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging()) {
 			System.out.println("Check in:");
 			if (resources != null) {
-				for (int i= 0; i < resources.length; i++) {
-					System.out.println("\t" + resources[i]);
+				for (IResource resource : resources) {
+					System.out.println("\t" + resource);
 				}
 			} else {
 				System.out.println("null resources");
@@ -397,12 +410,11 @@
 		if (resources == null || resources.length == 0) {
 			return;
 		}
-		final Set modified= new HashSet(1);
+		final Set<IResource> modified = new HashSet<>(1);
 		IWorkspaceRunnable runnable= monitor1 -> {
 			monitor1.beginTask("Checking in resources", 1000);
-			for(int i= 0; i < resources.length; i++) {
-				IResource resource= resources[i];
-				if (isControlled(resource)) { 
+			for (IResource resource : resources) {
+				if (isControlled(resource)) {
 					if (resource.exists()) {
 						resource.setReadOnly(true);
 						modified.add(resource);
@@ -414,19 +426,19 @@
 		run(runnable, monitor);
 		fireStateChanged(modified, false);
 	}
-	
+
 	/**
-	 * Unchecks the resources out.  In this provider this operation is 
+	 * Unchecks the resources out.  In this provider this operation is
 	 * equivalent to checkin.
-	 * 
+	 *
 	 * @see PessimisticFilesystemProvider#checkin(IResource[], IProgressMonitor)
 	 */
 	public void uncheckout(final IResource[] resources, IProgressMonitor monitor) {
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging()) {
 			System.out.println("Uncheckout:");
 			if (resources != null) {
-				for (int i= 0; i < resources.length; i++) {
-					System.out.println("\t" + resources[i]);
+				for (IResource resource : resources) {
+					System.out.println("\t" + resource);
 				}
 			} else {
 				System.out.println("null resources");
@@ -435,11 +447,10 @@
 		if (resources == null || resources.length == 0) {
 			return;
 		}
-		final Set modified= new HashSet(1);
+		final Set<IResource> modified = new HashSet<>(1);
 		IWorkspaceRunnable runnable= monitor1 -> {
 			monitor1.beginTask("Unchecking in resources", 1000);
-			for(int i= 0; i < resources.length; i++) {
-				IResource resource= resources[i];
+			for (IResource resource : resources) {
 				if (isControlled(resource)) {
 					if (resource.exists()) {
 						resource.setReadOnly(true);
@@ -460,8 +471,8 @@
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging()) {
 			System.out.println("Check out:");
 			if (resources != null) {
-				for (int i= 0; i < resources.length; i++) {
-					System.out.println("\t" + resources[i]);
+				for (IResource resource : resources) {
+					System.out.println("\t" + resource);
 				}
 			} else {
 				System.out.println("null resources");
@@ -470,14 +481,13 @@
 		if (resources == null || resources.length == 0) {
 			return;
 		}
-		final Set modified= new HashSet(1);
+		final Set<IResource> modified = new HashSet<>(1);
 		IWorkspaceRunnable runnable= monitor1 -> {
 			monitor1.beginTask("Checking out resources", 1000);
-			for(int i= 0; i < resources.length; i++) {
-				IResource resource= resources[i];
+			for (IResource resource : resources) {
 				if (isControlled(resource)) {
 					if(resource.exists()) {
-						resource.setReadOnly(false);								
+						resource.setReadOnly(false);
 						modified.add(resource);
 					}
 				}
@@ -486,10 +496,10 @@
 		};
 		run(runnable, monitor);
 		fireStateChanged(modified, false);
-	}	
+	}
 
 	/**
-	 * Answers <code>true</code> if and only if the resource is 
+	 * Answers <code>true</code> if and only if the resource is
 	 * not <code>null</code>, controlled, not ignored, and checked out.
 	 * Otherwise this method answers <code>false</code>.
 	 */
@@ -507,7 +517,7 @@
 			return false;
 		}
 		return !resource.isReadOnly();
-	}	
+	}
 
 	/**
 	 * Answers <code>true</code> if the resource is not <code>null</code>,
@@ -524,13 +534,13 @@
 		if (!project.equals(resource.getProject())) {
 			return false;
 		}
-		Set controlled= (Set)fControlledResources.get(resource.getParent());
+		Set controlled= fControlledResources.get(resource.getParent());
 		if (controlled == null) {
 			return false;
 		}
 		return controlled.contains(resource);
 	}
-	
+
 	/**
 	 * Answers <code>true</code> if the resource is ignored.
 	 * Resources are ignored if they are derived.
@@ -549,7 +559,7 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Answers <code>true</code> if the preference to change the content
 	 * of the file has been set to <code>true</code>, <code>false</code>
@@ -592,7 +602,7 @@
 		}
 		file.setContents(new ByteArrayInputStream(buffer.toString().getBytes()), false, false, null);
 	}
-	
+
 	public static String getFileContents(IFile file) throws IOException, CoreException {
 		StringBuffer buf = new StringBuffer();
 		Reader reader = new InputStreamReader(new BufferedInputStream(file.getContents()));
@@ -602,45 +612,45 @@
 		} finally {
 			reader.close();
 		}
-		return buf.toString();		
+		return buf.toString();
 	}
-	
+
 	public static String getRandomSnippet() {
 		switch ((int) Math.round(Math.random() * 10)) {
-			case 0 :
-				return "este e' o meu conteudo (portuguese)";
-			case 1 :
-				return "Dann brauchen wir aber auch einen deutschen Satz!";
-			case 2 :
-				return "I'll be back";
-			case 3 :
-				return "don't worry, be happy";
-			case 4 :
-				return "there is no imagination for more sentences";
-			case 5 :
-				return "customize yours";
-			case 6 :
-				return "foo";
-			case 7 :
-				return "bar";
-			case 8 :
-				return "foobar";
-			case 9 :
-				return "case 9";
-			default :
-				return "these are my contents";
+		case 0 :
+			return "este e' o meu conteudo (portuguese)";
+		case 1 :
+			return "Dann brauchen wir aber auch einen deutschen Satz!";
+		case 2 :
+			return "I'll be back";
+		case 3 :
+			return "don't worry, be happy";
+		case 4 :
+			return "there is no imagination for more sentences";
+		case 5 :
+			return "customize yours";
+		case 6 :
+			return "foo";
+		case 7 :
+			return "bar";
+		case 8 :
+			return "foobar";
+		case 9 :
+			return "case 9";
+		default :
+			return "these are my contents";
 		}
 	}
 
 	/*
 	 * Notifies listeners that the state of the resources has changed.
-	 * 
+	 *
 	 * @param resources	A collection of resources whose state has changed.
-	 * @param queueAfterWorkspaceOperation	If <code>true</code>, indicates that the 
+	 * @param queueAfterWorkspaceOperation	If <code>true</code>, indicates that the
 	 * 						notification should occur after the current workspace runnable
 	 * 						has completed.
 	 */
-	private void fireStateChanged(final Collection resources, boolean queueAfterWorkspaceOperation) {
+	private void fireStateChanged(final Collection<IResource> resources, boolean queueAfterWorkspaceOperation) {
 		if (resources == null || resources.isEmpty()) {
 			return;
 		}
@@ -649,9 +659,9 @@
 			Thread t= new Thread(() -> {
 				try {
 					ResourcesPlugin.getWorkspace().run(
-						(IWorkspaceRunnable) monitor -> {
-						}, 
-						null);
+							(IWorkspaceRunnable) monitor -> {
+							},
+							null);
 				} catch (CoreException e) {
 					PessimisticFilesystemProviderPlugin.getInstance().logError(e, "Problem during empty runnable");
 				}
@@ -660,23 +670,23 @@
 			t.start();
 		} else {
 			PessimisticFilesystemProviderPlugin.getInstance().fireResourcesChanged(
-				(IResource[])resources.toArray(new IResource[resources.size()]));
-		}			
+					resources.toArray(new IResource[resources.size()]));
+		}
 	}
-	
+
 	/*
 	 * Answers a collection of all of the resources contained below
 	 * the given resource and the resource itself.
 	 */
 	private Collection getSubtreeMembers(IResource resource) {
-		final Set resources= new HashSet(1);
+		final Set<IResource> resources = new HashSet<>(1);
 		IResourceVisitor visitor= resource1 -> {
 			switch (resource1.getType()) {
-				case IResource.PROJECT:
-				case IResource.FOLDER:
-				case IResource.FILE:
-					resources.add(resource1);
-					return true;
+			case IResource.PROJECT:
+			case IResource.FOLDER:
+			case IResource.FILE:
+				resources.add(resource1);
+				return true;
 			}
 			return true;
 		};
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticFilesystemProviderPlugin.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticFilesystemProviderPlugin.java
index ff910d8..819a30a 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticFilesystemProviderPlugin.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticFilesystemProviderPlugin.java
@@ -12,9 +12,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.team.examples.pessimistic;
- 
+
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.resources.IResource;
@@ -32,14 +31,14 @@
 	 */
 	private static PessimisticFilesystemProviderPlugin instance;
 	/*
-	 * The resource change listener which notifies the provider of 
+	 * The resource change listener which notifies the provider of
 	 * added and deleted files.
 	 */
 	private ResourceChangeListener fListener;
 	/*
 	 * The provider listeners
 	 */
-	private List fListeners;
+	private List<IResourceStateListener> fListeners;
 
 	/**
 	 * The plugin identifier
@@ -56,13 +55,13 @@
 	public PessimisticFilesystemProviderPlugin() {
 		super();
 		instance = this;
-		fListeners= new ArrayList(1);
+		fListeners = new ArrayList<>(1);
 		//setDebugging(true);
 	}
 
 	/**
 	 * Answers the singleton instance of this plugin.
-	 */	
+	 */
 	public static PessimisticFilesystemProviderPlugin getInstance() {
 		return instance;
 	}
@@ -72,23 +71,23 @@
 	 */
 	protected void initializeDefaultPreferences() {
 		IPreferenceStore store = getPreferenceStore();
-	
+
 		store.setDefault(
-			IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_EDITED,
-			IPessimisticFilesystemConstants.OPTION_PROMPT);
+				IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_EDITED,
+				IPessimisticFilesystemConstants.OPTION_PROMPT);
 		store.setDefault(
-			IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_EDITED_NOPROMPT,
-			IPessimisticFilesystemConstants.OPTION_AUTOMATIC);
+				IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_EDITED_NOPROMPT,
+				IPessimisticFilesystemConstants.OPTION_AUTOMATIC);
 		store.setDefault(
-			IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_SAVED,
-			IPessimisticFilesystemConstants.OPTION_DO_NOTHING);
+				IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_SAVED,
+				IPessimisticFilesystemConstants.OPTION_DO_NOTHING);
 		store.setDefault(
-			IPessimisticFilesystemConstants.PREF_ADD_TO_CONTROL,
-			IPessimisticFilesystemConstants.OPTION_PROMPT);			
+				IPessimisticFilesystemConstants.PREF_ADD_TO_CONTROL,
+				IPessimisticFilesystemConstants.OPTION_PROMPT);
 		store.setDefault(IPessimisticFilesystemConstants.PREF_FAIL_VALIDATE_EDIT, false);
 		store.setDefault(IPessimisticFilesystemConstants.PREF_TOUCH_DURING_VALIDATE_EDIT, true);
 	}
-	
+
 	/**
 	 * Convenience method for logging errors.
 	 */
@@ -99,12 +98,13 @@
 		if (isDebugging()) {
 			System.out.println(message);
 			exception.printStackTrace();
-		}			
+		}
 	}
 
 	/**
 	 * Starts the resource listener.
 	 */
+	@Override
 	public void start(BundleContext context) throws Exception {
 		fListener= new ResourceChangeListener();
 		fListener.startup();
@@ -115,31 +115,32 @@
 	/**
 	 * Stops the resource listener.
 	 */
+	@Override
 	public void stop(BundleContext context) throws Exception {
 		fListener.shutdown();
 		fListener= null;
 		super.stop(context);
 	}
-	
+
 	/**
 	 * Notifies the registered <code>IResourceStateListener</code> objects
 	 * that the repository state for the resources has changed.
-	 * 
+	 *
 	 * @param resources	Collection of resources that have changed.
 	 */
 	public void fireResourcesChanged(IResource[] resources) {
 		if (resources == null || resources.length == 0 || fListeners.isEmpty())
 			return;
-		for (Iterator i= fListeners.iterator(); i.hasNext();) {
-			IResourceStateListener listener= (IResourceStateListener) i.next();
+		for (Object element : fListeners) {
+			IResourceStateListener listener= (IResourceStateListener) element;
 			listener.stateChanged(resources);
 		}
 	}
-	
+
 	/**
 	 * Adds the listener to the list of listeners that are notified when
 	 * the repository state of resources change.
-	 * 
+	 *
 	 * @param listener
 	 */
 	public void addProviderListener(IResourceStateListener listener) {
@@ -147,12 +148,12 @@
 			return;
 		fListeners.add(listener);
 	}
-	
-	
+
+
 	/**
 	 * Removes the listener from the list of listeners that are notified when
 	 * the repository state of resources change.
-	 * 
+	 *
 	 * @param listener
 	 */
 	public void removeProviderListener(IResourceStateListener listener) {
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticModificationValidator.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticModificationValidator.java
index 427d39f..ee77e88 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticModificationValidator.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/PessimisticModificationValidator.java
@@ -12,10 +12,9 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.team.examples.pessimistic;
- 
+
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
@@ -43,17 +42,17 @@
  * The <code>PessimisticModificationValidator</code> is an
  * implementation of the <code>IFileModificationValidator</code> for the
  * <code>PessimisticFilesystemProvider</code>.
- * 
+ *
  * @see PessimiticFilesystemProvider
  * @see IFileModificationValidator
  */
 public class PessimisticModificationValidator
-	extends FileModificationValidator {
+extends FileModificationValidator {
 	/*
 	 * The provider for this validator
 	 */
 	private PessimisticFilesystemProvider fProvider;
-	
+
 	public PessimisticModificationValidator(PessimisticFilesystemProvider provider) {
 		fProvider= provider;
 	}
@@ -61,98 +60,96 @@
 	/**
 	 * @see IFileModificationValidator#validateEdit(IFile[], Object)
 	 */
- 	public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
-    	if (files.length == 0) { 
-	        return new Status( IStatus.OK, getUid(), IStatus.OK, "OK", null);
-	    } 
-	
-	    Set checkOut = new HashSet();
+	@Override
+	public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
+		if (files.length == 0) {
+			return new Status( IStatus.OK, getUid(), IStatus.OK, "OK", null);
+		}
+
+		Set<IFile> checkOut = new HashSet<>();
 		int reloadCount = 0;
-	  	int checkoutFailCount = 0;
-	
-		Map validateEditStatusMap= new HashMap(files.length);
-		
-	    for ( int i = 0 ; i < files.length; i++ ) {
-	        IFile file= files[i];	
-	
-	        if (fProvider.isControlled(file) ) {
-	        	if (fProvider.isCheckedout(file)) {
-		            setValidateEditStatus(validateEditStatusMap, file,
-		               IPessimisticFilesystemConstants.STATUS_OK_TO_EDIT );
-	        	} else {
-	        		checkOut.add(file);
-	        	}
-	        } else {
-				setValidateEditStatus(validateEditStatusMap, file, 
-					IPessimisticFilesystemConstants.STATUS_OK_TO_EDIT);
-	        }
-	    }
-	
-	    if (!checkOut.isEmpty()) {
-	     	if (context != null) {
-	     		boolean shouldFail= shouldFailValidateEdit();
-	            int statusCode = checkout(checkOut, IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_EDITED, shouldFail, context);
-	            if (shouldFail) {
-					return new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "Fail Validate Edit Preference true", null);
-				}	 
-	            if(statusCode == IStatus.CANCEL) {
-	            	return new Status( IStatus.CANCEL, getUid(), IStatus.ERROR, "Checkout canceled by user", null);
-	            }
-            } else {
-            	if (isAutomaticCheckout()) {
-		            if (shouldFailValidateEdit()) {
-						return new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "Fail Validate Edit Preference true", null);
-					}	                      
-	
-					checkout(checkOut);
-            	}
-            }
-	
-	        for (Iterator i= checkOut.iterator(); i.hasNext(); ) {
-				IFile file = (IFile) i.next();
-	        
-				if ( fProvider.isCheckedout(file) ) {
-			    	if ( !fProvider.hasContentChanged(file) ) {
-						setValidateEditStatus(validateEditStatusMap, file,
-				    		IPessimisticFilesystemConstants.STATUS_OK_TO_EDIT );
-			    	} else {
-	                    reloadCount++;
-						setValidateEditStatus(validateEditStatusMap, file,
-	                        IPessimisticFilesystemConstants.STATUS_PROMPT_FOR_RELOAD );
-			    	}
-				} else { 
-	                checkoutFailCount++;
+		int checkoutFailCount = 0;
+
+		Map<IFile, Integer> validateEditStatusMap = new HashMap<>(files.length);
+
+		for (IFile file : files) {
+			if (fProvider.isControlled(file) ) {
+				if (fProvider.isCheckedout(file)) {
+					setValidateEditStatus(validateEditStatusMap, file,
+							IPessimisticFilesystemConstants.STATUS_OK_TO_EDIT );
+				} else {
+					checkOut.add(file);
 				}
-		    }	
-	    }
-	
-	    if (reloadCount + checkoutFailCount == 0) { 
-	        return new Status( IStatus.OK, getUid(), IStatus.OK, "OK", null);
-	    }
-	
-	    if (checkoutFailCount == files.length) {
-	        return new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "No files were checked out.", null);
-	    }
-	
-	    IStatus children[] = new Status[ files.length ];
-	
-	    int mask = IPessimisticFilesystemConstants.STATUS_OK_TO_EDIT |
-	               	IPessimisticFilesystemConstants.STATUS_PROMPT_FOR_RELOAD;
-	
-	    for (int i = 0; i < files.length; i++) { 
-	    	int result = getValidateEditStatus(validateEditStatusMap, files[i]);
-	 		if ((result & mask) != 0) {
-		    	children[i] = new Status( IStatus.OK, getUid(), IStatus.OK, "OK", null);
-	        } else {
-	            children[i] = new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "File " + files[i].getName() + " could not be checked out.", null);
-	        }
-	    }
-	    return new MultiStatus( getUid(), IStatus.OK, children, "Some files were not successfully checked out", null); 
+			} else {
+				setValidateEditStatus(validateEditStatusMap, file,
+						IPessimisticFilesystemConstants.STATUS_OK_TO_EDIT);
+			}
+		}
+
+		if (!checkOut.isEmpty()) {
+			if (context != null) {
+				boolean shouldFail= shouldFailValidateEdit();
+				int statusCode = checkout(checkOut, IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_EDITED, shouldFail, context);
+				if (shouldFail) {
+					return new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "Fail Validate Edit Preference true", null);
+				}
+				if(statusCode == IStatus.CANCEL) {
+					return new Status( IStatus.CANCEL, getUid(), IStatus.ERROR, "Checkout canceled by user", null);
+				}
+			} else {
+				if (isAutomaticCheckout()) {
+					if (shouldFailValidateEdit()) {
+						return new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "Fail Validate Edit Preference true", null);
+					}
+
+					checkout(checkOut);
+				}
+			}
+
+			for (IFile file : checkOut) {
+				if ( fProvider.isCheckedout(file) ) {
+					if ( !fProvider.hasContentChanged(file) ) {
+						setValidateEditStatus(validateEditStatusMap, file,
+								IPessimisticFilesystemConstants.STATUS_OK_TO_EDIT );
+					} else {
+						reloadCount++;
+						setValidateEditStatus(validateEditStatusMap, file,
+								IPessimisticFilesystemConstants.STATUS_PROMPT_FOR_RELOAD );
+					}
+				} else {
+					checkoutFailCount++;
+				}
+			}
+		}
+
+		if (reloadCount + checkoutFailCount == 0) {
+			return new Status( IStatus.OK, getUid(), IStatus.OK, "OK", null);
+		}
+
+		if (checkoutFailCount == files.length) {
+			return new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "No files were checked out.", null);
+		}
+
+		IStatus children[] = new Status[ files.length ];
+
+		int mask = IPessimisticFilesystemConstants.STATUS_OK_TO_EDIT |
+				IPessimisticFilesystemConstants.STATUS_PROMPT_FOR_RELOAD;
+
+		for (int i = 0; i < files.length; i++) {
+			int result = getValidateEditStatus(validateEditStatusMap, files[i]);
+			if ((result & mask) != 0) {
+				children[i] = new Status( IStatus.OK, getUid(), IStatus.OK, "OK", null);
+			} else {
+				children[i] = new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "File " + files[i].getName() + " could not be checked out.", null);
+			}
+		}
+		return new MultiStatus( getUid(), IStatus.OK, children, "Some files were not successfully checked out", null);
 	}
 
 	/**
 	 * @see IFileModificationValidator#validateSave(IFile)
 	 */
+	@Override
 	public IStatus validateSave(IFile file) {
 		int checkedInFilesSaved = getPreferences().getInt(IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_SAVED);
 		if (checkedInFilesSaved == IPessimisticFilesystemConstants.OPTION_DO_NOTHING) {
@@ -160,43 +157,43 @@
 		}
 
 
-		IStatus status = new Status( IStatus.OK, getUid(), IStatus.OK, 
-			                      	"File is writable", null);
-		
+		IStatus status = new Status( IStatus.OK, getUid(), IStatus.OK,
+				"File is writable", null);
+
 		if (!fProvider.isControlled(file)) {
 			return status;
 		}
-		
+
 		if (fProvider.isIgnored(file)) {
 			return status;
 		}
-		
+
 		if (fProvider.isCheckedout(file)) {
 			return status;
 		}
-		Set files= new HashSet(1);
+		Set<IFile> files = new HashSet<>(1);
 		files.add(file);
-		
+
 		checkout(files, IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_SAVED, false, null);
-	
+
 		if (fProvider.isCheckedout(file)) {
 			return status;
 		}
 		return new Status(
-			IStatus.ERROR, 
-			getUid(), 
-			IStatus.ERROR, 
-			file.getProjectRelativePath() + " could not be checked out", 
-			null);
+				IStatus.ERROR,
+				getUid(),
+				IStatus.ERROR,
+				file.getProjectRelativePath() + " could not be checked out",
+				null);
 	}
-	
+
 	/*
 	 * Convenience method to get the plugin id
 	 */
 	private String getUid() {
 		return PessimisticFilesystemProviderPlugin.PLUGIN_ID;
 	}
-	
+
 	/*
 	 * Convenience method to answer if the fail validate edit preference
 	 * has been set.
@@ -213,22 +210,21 @@
 	}
 
 	/*
-	 * Optionally prompts the user to select which resources should be 
+	 * Optionally prompts the user to select which resources should be
 	 * checked out, and then checks the selected resources.
 	 */
-	private int promptAndCheckout(Set resources, boolean beQuiet, boolean shouldFail, Object context) {
+	private int promptAndCheckout(Set<IFile> resources, boolean beQuiet, boolean shouldFail, Object context) {
 		if (resources.isEmpty()) {
 			return IStatus.OK;
 		}
 
-		Set temp= new HashSet(resources.size());
-		for(Iterator i= resources.iterator(); i.hasNext(); ) {
-			IFile resource= (IFile)i.next();
+		Set<IFile> temp = new HashSet<>(resources.size());
+		for (IFile resource : resources) {
 			if (fProvider.isControlled(resource) && !fProvider.isCheckedout(resource))
 				temp.add(resource);
 		}
 		resources= temp;
-		final int[] statusCode = new int[] {IStatus.OK};	
+		final int[] statusCode = new int[] {IStatus.OK};
 		if (!beQuiet && !resources.isEmpty()) {
 			final Shell shell= getShell(context);
 			if (shell != null && !shell.isDisposed()) {
@@ -252,14 +248,14 @@
 					if (status == Window.OK) {
 						Object[] results= dialog.getResult();
 						result[0] = new HashSet(results.length);
-						for (int i= 0; i < results.length; i++) {
-							result[0].add(results[i]);
+						for (Object result2 : results) {
+							result[0].add(result2);
 						}
 					} else if(status == Window.CANCEL) {
 						statusCode[0] = IStatus.CANCEL;
 					}
 				});
-				resources= result[0];			
+				resources= result[0];
 			} else {
 				resources= null;
 				PessimisticFilesystemProviderPlugin.getInstance().logError(new RuntimeException(), "Context is invalid: " + context);
@@ -275,7 +271,7 @@
 	/*
 	 * Checks out the files contained in the resources set
 	 */
-	private void checkout(Set resources) {
+	private void checkout(Set<IFile> resources) {
 		if (resources.isEmpty())
 			return;
 		IFile[] checkOut= new IFile[resources.size()];
@@ -291,32 +287,32 @@
 	}
 
 	/*
-	 * Checks out the files if necessary and if the preferences allow. 
+	 * Checks out the files if necessary and if the preferences allow.
 	 */
-	private int checkout(Set resources, String itemId, boolean shouldFail, Object context) {
+	private int checkout(Set<IFile> resources, String itemId, boolean shouldFail, Object context) {
 		if (resources.isEmpty()) {
 			return IStatus.OK;
 		}
 
 		int preference= getPreferences().getInt(itemId);
-		
+
 		if (preference == IPessimisticFilesystemConstants.OPTION_DO_NOTHING)
 			return IStatus.OK;
-			
-		boolean beQuiet= false;	
+
+		boolean beQuiet= false;
 		if (preference == IPessimisticFilesystemConstants.OPTION_AUTOMATIC) {
 			beQuiet= true;
-		}		
+		}
 		return promptAndCheckout(resources, beQuiet, shouldFail, context);
 	}
-	
+
 	/*
 	 * Convenience method to set the validate edit status for the given resource.
 	 */
-	private static void setValidateEditStatus(Map map, IFile resource, int status) {
+	private static void setValidateEditStatus(Map<IFile, Integer> map, IFile resource, int status) {
 		map.put(resource, Integer.valueOf(status));
 	}
-	
+
 	/*
 	 * Convenience method to get the validate edit status for the given resource.
 	 */
@@ -329,27 +325,27 @@
 
 	/*
 	 * Convenience method to get a shell from an object.
-	 */	
+	 */
 	private Shell getShell(Object context) {
 		if (context instanceof FileModificationValidationContext) {
 			FileModificationValidationContext fmvc = (FileModificationValidationContext) context;
 			return (Shell)fmvc.getShell();
 		}
-		
+
 		if (context instanceof Shell) {
 			return (Shell)context;
 		}
-		
+
 		if (context instanceof Control) {
 			Control control= (Control)context;
 			return control.getShell();
 		}
-		
+
 		if (context instanceof Widget) {
 			Widget widget= (Widget)context;
 			return widget.getDisplay().getActiveShell();
 		}
-		
+
 		return null;
 	}
 }
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ResourceChangeListener.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ResourceChangeListener.java
index 9c54c21..4c35307 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ResourceChangeListener.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ResourceChangeListener.java
@@ -12,11 +12,10 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.team.examples.pessimistic;
- 
+
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
@@ -44,23 +43,23 @@
 import org.eclipse.ui.views.navigator.ResourceComparator;
 
 /**
- * The <code>ResourceChangeListener</code> listens for resource changes 
- * and (optionally) prompts the user to add the new resources to the 
+ * The <code>ResourceChangeListener</code> listens for resource changes
+ * and (optionally) prompts the user to add the new resources to the
  * control of the repository provider.
  */
 public class ResourceChangeListener implements IResourceDeltaVisitor, IResourceChangeListener {
 	/*
 	 * Set of added resources
 	 */
-	private Set fAdded;
+	private Set<IResource> fAdded;
 	/*
 	 * Set of removed resources
 	 */
-	private Set fRemoved;
-	
+	private Set<IResource> fRemoved;
+
 	public ResourceChangeListener() {
-		fAdded= new HashSet(1);
-		fRemoved= new HashSet(1);
+		fAdded = new HashSet<>(1);
+		fRemoved = new HashSet<>(1);
 	}
 
 	/**
@@ -71,6 +70,7 @@
 	 * </ul>
 	 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(IResourceDelta)
 	 */
+	@Override
 	public boolean visit(IResourceDelta delta) {
 		IResource resource= delta.getResource();
 		if (resource != null) {
@@ -81,37 +81,37 @@
 					return false;
 				if (provider.isControlled(resource)) {
 					switch (delta.getKind()) {
-						case IResourceDelta.CHANGED:
-						case IResourceDelta.ADDED:
-							return true;
-						case IResourceDelta.REMOVED:
-							fRemoved.add(resource);
-							return false;						
+					case IResourceDelta.CHANGED:
+					case IResourceDelta.ADDED:
+						return true;
+					case IResourceDelta.REMOVED:
+						fRemoved.add(resource);
+						return false;
 					}
 				} else {
 					switch (delta.getKind()) {
-						case IResourceDelta.CHANGED:
-						case IResourceDelta.REMOVED:
-							return true;
-						case IResourceDelta.ADDED:
-							// don't prompt for ignored resources
-							if (!provider.isIgnored(resource)) {
-								fAdded.add(resource);
-							}
-							return true;						
-					}				
+					case IResourceDelta.CHANGED:
+					case IResourceDelta.REMOVED:
+						return true;
+					case IResourceDelta.ADDED:
+						// don't prompt for ignored resources
+						if (!provider.isIgnored(resource)) {
+							fAdded.add(resource);
+						}
+						return true;
+					}
 				}
 			} else {
 				return true;
 			}
-		}					
+		}
 		return false;
 	}
 
 	/*
 	 * Convenience method to return a resource array from a collection
 	 */
-	private IResource[] toResourceArray(Collection collection) {
+	private IResource[] toResourceArray(Collection<IResource> collection) {
 		if (collection.isEmpty()) {
 			return new IResource[0];
 		}
@@ -123,6 +123,7 @@
 	/**
 	 * @see IResourceChangeListener#resourceChanged(IResourceChangeEvent)
 	 */
+	@Override
 	public void resourceChanged (IResourceChangeEvent event) {
 		try {
 			event.getDelta().accept(this);
@@ -136,10 +137,10 @@
 				if (!fRemoved.isEmpty()) {
 					remove(monitor);
 				}
-				
+
 				if (!fAdded.isEmpty()) {
 					add(monitor);
-				}					
+				}
 			};
 			// must fork since we are in resource callback.
 			Runnable run= () -> {
@@ -164,7 +165,7 @@
 		Preferences preferences= PessimisticFilesystemProviderPlugin.getInstance().getPluginPreferences();
 		return preferences.getInt(IPessimisticFilesystemConstants.PREF_ADD_TO_CONTROL);
 	}
-	
+
 	/*
 	 * Adds the resources to the control of the provider.
 	 * If the add to control preference is:
@@ -175,46 +176,46 @@
 	 */
 	private void add(final IProgressMonitor monitor) {
 		switch (getAddToControlPreference()) {
-			case IPessimisticFilesystemConstants.OPTION_DO_NOTHING:
-				break;
-			case IPessimisticFilesystemConstants.OPTION_AUTOMATIC:
-				addToControl(fAdded, monitor);
-				break;
-			case IPessimisticFilesystemConstants.OPTION_PROMPT:
-				final Shell shell= getShell();
-				if (shell != null && !shell.isDisposed()) {
-					final Set resources= new HashSet(fAdded);
-					Runnable run= () -> {
-						CheckedTreeSelectionDialog dialog= new CheckedTreeSelectionDialog(shell, new WorkbenchLabelProvider(), new ResourceSetContentProvider(resources));
-						dialog.setMessage("Select the resources to be added to the control of the repository.");
-						dialog.setTitle("Add resources to control");
-						dialog.setContainerMode(true);
-						dialog.setBlockOnOpen(true);
-						dialog.setComparator(new ResourceComparator(ResourceComparator.NAME));
-						Object[] resourceArray= resources.toArray();
-						dialog.setExpandedElements(resourceArray);
-						dialog.setInitialSelections(resourceArray);
-						dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
-						int status= dialog.open();
-						
-						if (status == Window.OK) {
-							Object[] results= dialog.getResult();
-							if (results != null) {
-								Set resources1= new HashSet(results.length);
-								for (int i= 0; i < results.length; i++) {
-									resources1.add(results[i]);
-								}
-								addToControl(resources1, monitor);
+		case IPessimisticFilesystemConstants.OPTION_DO_NOTHING:
+			break;
+		case IPessimisticFilesystemConstants.OPTION_AUTOMATIC:
+			addToControl(fAdded, monitor);
+			break;
+		case IPessimisticFilesystemConstants.OPTION_PROMPT:
+			final Shell shell= getShell();
+			if (shell != null && !shell.isDisposed()) {
+				final Set<IResource> resources = new HashSet<>(fAdded);
+				Runnable run= () -> {
+					CheckedTreeSelectionDialog dialog= new CheckedTreeSelectionDialog(shell, new WorkbenchLabelProvider(), new ResourceSetContentProvider(resources));
+					dialog.setMessage("Select the resources to be added to the control of the repository.");
+					dialog.setTitle("Add resources to control");
+					dialog.setContainerMode(true);
+					dialog.setBlockOnOpen(true);
+					dialog.setComparator(new ResourceComparator(ResourceComparator.NAME));
+					Object[] resourceArray= resources.toArray();
+					dialog.setExpandedElements(resourceArray);
+					dialog.setInitialSelections(resourceArray);
+					dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
+					int status= dialog.open();
+
+					if (status == Window.OK) {
+						Object[] results= dialog.getResult();
+						if (results != null) {
+							Set<IResource> resources1 = new HashSet<>(results.length);
+							for (Object result : results) {
+								resources1.add((IResource) result);
 							}
+							addToControl(resources1, monitor);
 						}
-					};
-			
-					Display display= shell.getDisplay();
-					display.asyncExec(run);
-				} else {
-					PessimisticFilesystemProviderPlugin.getInstance().logError(null, "Could not aquire a shell");
-				}
-				break;
+					}
+				};
+
+				Display display= shell.getDisplay();
+				display.asyncExec(run);
+			} else {
+				PessimisticFilesystemProviderPlugin.getInstance().logError(null, "Could not aquire a shell");
+			}
+			break;
 		}
 		fAdded.clear();
 	}
@@ -222,28 +223,26 @@
 	/*
 	 * Adds the resources to the control of the provider.
 	 */
-	private void addToControl(Collection resources, final IProgressMonitor monitor) {
-		Map byProject= sortByProject(resources);
-		for (Iterator i= byProject.keySet().iterator(); i.hasNext();) {
-			IProject project= (IProject) i.next();
+	private void addToControl(Collection<IResource> resources, final IProgressMonitor monitor) {
+		Map<IProject, Set<IResource>> byProject = sortByProject(resources);
+		for (IProject project : byProject.keySet()) {
 			PessimisticFilesystemProvider provider= (PessimisticFilesystemProvider)RepositoryProvider.getProvider(project, PessimisticFilesystemProviderPlugin.NATURE_ID);
 			if (provider != null) {
-				provider.addToControl(toResourceArray((Collection)byProject.get(project)), monitor);
+				provider.addToControl(toResourceArray(byProject.get(project)), monitor);
 			}
-			
+
 		}
 	}
-	
+
 	/*
 	 * Removes the resources from the control of the provider.
 	 */
 	private void remove(IProgressMonitor monitor) {
-		Map byProject= sortByProject(fRemoved);
-		for (Iterator i= byProject.keySet().iterator(); i.hasNext();) {
-			IProject project= (IProject) i.next();
+		Map<IProject, Set<IResource>> byProject = sortByProject(fRemoved);
+		for (IProject project : byProject.keySet()) {
 			PessimisticFilesystemProvider provider= (PessimisticFilesystemProvider)RepositoryProvider.getProvider(project, PessimisticFilesystemProviderPlugin.NATURE_ID);
 			if (provider != null) {
-				provider.removeFromControl(toResourceArray((Collection)byProject.get(project)), monitor);
+				provider.removeFromControl(toResourceArray(byProject.get(project)), monitor);
 			}
 		}
 		fRemoved.clear();
@@ -252,14 +251,13 @@
 	/*
 	 * Convenience method to sort the resources by project
 	 */
-	private Map sortByProject(Collection resources) {
-		Map byProject= new HashMap();
-		for (Iterator i= resources.iterator(); i.hasNext();) {
-			IResource resource= (IResource) i.next();
+	private Map<IProject, Set<IResource>> sortByProject(Collection<IResource> resources) {
+		Map<IProject, Set<IResource>> byProject = new HashMap<>();
+		for (IResource resource : resources) {
 			IProject project= resource.getProject();
-			Set set= (Set)byProject.get(project);
+			Set<IResource> set = byProject.get(project);
 			if (set == null) {
-				set= new HashSet(1);
+				set = new HashSet<>(1);
 				byProject.put(project, set);
 			}
 			set.add(resource);
@@ -300,13 +298,13 @@
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging())
 			System.out.println ("Resource callback registered");
 	}
-	
+
 	/**
 	 * Stops listening for changes.
 	 */
 	public void shutdown() {
 		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging())
-			System.out.println ("Resource callback unregistered");	
+			System.out.println ("Resource callback unregistered");
 	}
 }
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ResourceSetContentProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ResourceSetContentProvider.java
index b879d90..91266c4 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ResourceSetContentProvider.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ResourceSetContentProvider.java
@@ -12,8 +12,11 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.team.examples.pessimistic;
- 
-import java.util.*;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -21,39 +24,41 @@
 
 public class ResourceSetContentProvider implements ITreeContentProvider {
 	private static final Object[] EMPTY_ARRAY= new Object[0];
-	private Map fResourceTree;
+	private Map<IResource, Set<IResource>> fResourceTree;
 	private IResource[] fRoots;
 
-	public ResourceSetContentProvider(Set resources) {
-		fResourceTree= new HashMap(1);
-		Set roots= new HashSet(resources);
-		for(Iterator i= resources.iterator(); i.hasNext(); ) {
-			IResource resource= (IResource)i.next();
+	public ResourceSetContentProvider(Set<IResource> resources) {
+		fResourceTree = new HashMap<>(1);
+		Set<IResource> roots= new HashSet<>(resources);
+		for (Object element : resources) {
+			IResource resource= (IResource)element;
 			if(resource.getType() == IResource.ROOT) {
 				continue; // root cannot be displayed
 			}
 			IResource parent= resource.getParent();
 			if (roots.contains(parent)) {
 				roots.remove(resource);
-				Set set= (Set)fResourceTree.get(parent);
+				Set<IResource> set= fResourceTree.get(parent);
 				if (set == null) {
-					set= new HashSet(1);
+					set= new HashSet<>(1);
 					fResourceTree.put(parent, set);
 				}
 				set.add(resource);
 			}
 		}
-		fRoots= (IResource[])roots.toArray(new IResource[roots.size()]);
+		fRoots= roots.toArray(new IResource[roots.size()]);
 	}
 
+	@Override
 	public Object[] getChildren(Object parentElement) {
-		Set set= (Set) fResourceTree.get(parentElement);
+		Set<IResource> set=  fResourceTree.get(parentElement);
 		if (set != null) {
 			return set.toArray();
 		}
 		return EMPTY_ARRAY;
 	}
 
+	@Override
 	public Object getParent(Object element) {
 		if (element instanceof IResource) {
 			return ((IResource)element).getParent();
@@ -61,18 +66,22 @@
 		return null;
 	}
 
+	@Override
 	public boolean hasChildren(Object element) {
 		return fResourceTree.get(element) != null;
 	}
 
+	@Override
 	public Object[] getElements(Object inputElement) {
 		return fRoots;
 	}
 
+	@Override
 	public void dispose() {
 		fResourceTree= null;
 	}
 
+	@Override
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 	}
 
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/AddToControlAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/AddToControlAction.java
index 654a17a..5932d94 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/AddToControlAction.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/AddToControlAction.java
@@ -12,9 +12,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.team.examples.pessimistic.ui;
- 
+
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
@@ -34,29 +33,30 @@
 	/**
 	 * Collects the selected resources, sorts them by project
 	 * and adds them to their respective repository providers.
-	 * 
+	 *
 	 * @see IActionDelegate#run(IAction)
 	 */
+	@Override
 	public void run(IAction action) {
 		IResource[] resources= getSelectedResources();
 		if (resources == null || resources.length == 0)
 			return;
-		Set resourceSet= new HashSet(resources.length);
-		for(int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		Set<IResource> resourceSet = new HashSet<>(resources.length);
+		for (IResource resource2 : resources) {
+			IResource resource= resource2;
 			while (resource.getType() != IResource.PROJECT && !isControlled(resource)) {
 				resourceSet.add(resource);
 				resource= resource.getParent();
 			}
 		}
 		if (!resourceSet.isEmpty()) {
-			final Map byProject= sortByProject(resourceSet);
+			final Map<IProject, Set<IResource>> byProject = sortByProject(resourceSet);
 			IRunnableWithProgress runnable= monitor -> {
-				for (Iterator i= byProject.keySet().iterator(); i.hasNext();) {
-					IProject project= (IProject) i.next();
+				for (Object element : byProject.keySet()) {
+					IProject project= (IProject) element;
 					PessimisticFilesystemProvider provider= getProvider(project);
 					if (provider != null) {
-						Set set= (Set)byProject.get(project);
+						Set<IResource> set = byProject.get(project);
 						IResource[] resources1= new IResource[set.size()];
 						set.toArray(resources1);
 						provider.addToControl(resources1, monitor);
@@ -70,16 +70,17 @@
 	/**
 	 * Answers <code>true</code> if the selected resource is not
 	 * a project (or the workspace root) and is not controlled.
-	 * 
+	 *
 	 * @see PessimisticProviderAction#shouldEnableFor(IResource)
 	 */
+	@Override
 	protected boolean shouldEnableFor(IResource resource) {
 		if (resource == null) {
 			return false;
 		}
 		if ((resource.getType() & (IResource.ROOT | IResource.PROJECT)) != 0) {
 			return false;
-		}		
+		}
 		PessimisticFilesystemProvider provider= getProvider(resource);
 		if (provider == null)
 			return false;
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/DisconnectAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/DisconnectAction.java
index 2a3f8ea..82772f6 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/DisconnectAction.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/DisconnectAction.java
@@ -12,9 +12,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.team.examples.pessimistic.ui;
- 
+
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import org.eclipse.core.resources.IProject;
@@ -34,19 +33,19 @@
 	/**
 	 * Collects the selected resources, extracts the projects selected
 	 * and disconnects the projects from their respective providers.
-	 * 
+	 *
 	 * @see IActionDelegate#run(IAction)
 	 */
+	@Override
 	public void run(IAction action) {
 		if (PessimisticFilesystemProviderPlugin.getInstance().isDebugging())
 			System.out.println("Disconnect");
-		
+
 		IResource[] resources= getSelectedResources();
 		if (resources == null || resources.length == 0)
 			return;
-		final Set projects= new HashSet(resources.length);
-		for(int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		final Set<IProject> projects = new HashSet<>(resources.length);
+		for (IResource resource : resources) {
 			if (resource.getType() == IResource.PROJECT) {
 				projects.add(resource.getProject());
 			}
@@ -54,35 +53,36 @@
 		if (!projects.isEmpty()) {
 			IRunnableWithProgress runnable= monitor -> {
 				IWorkspaceRunnable runnable1= monitor1 -> {
-				for (Iterator i= projects.iterator(); i.hasNext();) {
-					IProject project= (IProject) i.next();
-					PessimisticFilesystemProvider provider= getProvider(project);
-					if (provider != null) {
-						try {
-							RepositoryProvider.unmap(project);	
-						} catch (TeamException e1) {
-							PessimisticFilesystemProviderPlugin.getInstance().logError(e1, "Could not unmap " + project);
-						}						
+					for (Object element : projects) {
+						IProject project= (IProject) element;
+						PessimisticFilesystemProvider provider= getProvider(project);
+						if (provider != null) {
+							try {
+								RepositoryProvider.unmap(project);
+							} catch (TeamException e1) {
+								PessimisticFilesystemProviderPlugin.getInstance().logError(e1, "Could not unmap " + project);
+							}
+						}
 					}
-				}
-};
+				};
 				try {
 					ResourcesPlugin.getWorkspace().run(runnable1, monitor);
 				} catch (CoreException e2) {
-					PessimisticFilesystemProviderPlugin.getInstance().logError(e2, "Problem during unmap runnable");	
+					PessimisticFilesystemProviderPlugin.getInstance().logError(e2, "Problem during unmap runnable");
 				}
-				
+
 			};
 			runWithProgressDialog(runnable);
 		}
 	}
-	
+
 	/**
-	 * Answers <code>true</code> if and only if the resource is a 
+	 * Answers <code>true</code> if and only if the resource is a
 	 * project and is controlled by the pessimistic filesystem provider.
-	 * 
+	 *
 	 * @see PessimisticProviderAction#shouldEnableFor(IResource)
 	 */
+	@Override
 	protected boolean shouldEnableFor(IResource resource) {
 		if (resource.getType() == IResource.PROJECT) {
 			PessimisticFilesystemProvider provider= getProvider(resource);
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/PessimisticProviderAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/PessimisticProviderAction.java
index 0c1b79a..82258ab 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/PessimisticProviderAction.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/PessimisticProviderAction.java
@@ -14,9 +14,16 @@
 package org.eclipse.team.examples.pessimistic.ui;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
 
-import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.action.IAction;
@@ -37,7 +44,7 @@
  * Provides convenience methods an abstractions.
  */
 public abstract class PessimisticProviderAction
-	implements IObjectActionDelegate {
+implements IObjectActionDelegate {
 
 	/*
 	 * The current selection.
@@ -48,31 +55,27 @@
 	 */
 	protected Shell fShell;
 
-	/*
-	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
-	 */
+	@Override
 	public void selectionChanged(IAction action, ISelection selection) {
 		fSelection = selection;
-		
+
 		boolean enabled= action.isEnabled();
 		if (enabled != checkEnablement()) {
 			action.setEnabled(!enabled);
 		}
 	}
-	
-	/*
-	 * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
-	 */
+
+	@Override
 	public void setActivePart(IAction action, IWorkbenchPart part) {
 		fShell= part.getSite().getShell();
-	}	
+	}
 
 	/**
 	 * Answers <code>true</code> if this action should be enabled
 	 * for the given <code>resource</code>.
 	 */
 	protected abstract boolean shouldEnableFor(IResource resource);
-	
+
 	/*
 	 * Checks to see if this action should be enabled.
 	 */
@@ -89,26 +92,26 @@
 		}
 		return enabled;
 	}
-	
+
 	/**
 	 * Convenience method to get an array of resources from the selection.
 	 */
 	protected IResource[] getSelectedResources() {
-		ArrayList resources = null;
+		ArrayList<IResource> resources = null;
 		if (!fSelection.isEmpty()) {
-			resources = new ArrayList();
+			resources = new ArrayList<>();
 			Iterator elements = ((IStructuredSelection) fSelection).iterator();
 			while (elements.hasNext()) {
 				Object next = elements.next();
 				if (next instanceof IResource) {
-					resources.add(next);
+					resources.add((IResource) next);
 					continue;
 				}
 				if (next instanceof IAdaptable) {
 					IAdaptable a = (IAdaptable) next;
 					Object adapter = a.getAdapter(IResource.class);
 					if (adapter instanceof IResource) {
-						resources.add(adapter);
+						resources.add((IResource) adapter);
 						continue;
 					}
 				}
@@ -119,9 +122,9 @@
 			resources.toArray(result);
 			return result;
 		}
-		return new IResource[0];		
+		return new IResource[0];
 	}
-	
+
 	/**
 	 * Convenience method which answers <code>true</code> if the
 	 * resource is controlled by a <code>PessimisticFilesystemProvider</code>.
@@ -132,7 +135,7 @@
 			return false;
 		return provider.isControlled(resource);
 	}
-	
+
 	/**
 	 * Convenience method which answers <code>true</code> if and only if the
 	 * resource is controlled by a <code>PessimisticFilesystemProvider</code>
@@ -159,7 +162,7 @@
 
 	/**
 	 * Convenience method which answers the <code>PessimisticFilesystemProvider</code>
-	 * for the given <code>resource</code> or <code>null</code> if the 
+	 * for the given <code>resource</code> or <code>null</code> if the
 	 * <code>resource</code> is not associated with a <code>PessimisticFilesystemProvider</code>.
 	 */
 	protected PessimisticFilesystemProvider getProvider(IResource resource) {
@@ -177,7 +180,7 @@
 	 * Convenience method which walks a resource tree and collects the
 	 * resources that this action would enable for.
 	 */
-	protected void recursivelyAdd(IResource resource, Set resources) {
+	protected void recursivelyAdd(IResource resource, Set<IResource> resources) {
 		if (isControlled(resource) && !isIgnored(resource)) {
 			if (shouldEnableFor(resource)) {
 				resources.add(resource);
@@ -192,27 +195,26 @@
 					PessimisticFilesystemProviderPlugin.getInstance().logError(e, "Exception traversing members");
 				}
 				if (members != null) {
-					for (int i = 0; i < members.length; i++) {
-						recursivelyAdd(members[i], resources);
+					for (IResource member : members) {
+						recursivelyAdd(member, resources);
 					}
 				}
 			}
-		}		
+		}
 	}
 
 	/**
 	 * Convenience method which sorts the given <code>resources</code>
 	 * into a map of IProject -> Set of IResource objects.
 	 */
-	protected Map sortByProject(Set resources) {
-		Map byProject= new HashMap();
+	protected Map<IProject, Set<IResource>> sortByProject(Set<IResource> resources) {
+		Map<IProject, Set<IResource>> byProject = new HashMap<>();
 		if (resources != null) {
-			for (Iterator i= resources.iterator(); i.hasNext();) {
-				IResource resource= (IResource) i.next();
+			for (IResource resource : resources) {
 				IProject project= resource.getProject();
-				Set set= (Set)byProject.get(project);
+				Set<IResource> set = byProject.get(project);
 				if (set == null) {
-					set= new HashSet(1);
+					set = new HashSet<>(1);
 					byProject.put(project, set);
 				}
 				set.add(resource);
@@ -220,7 +222,7 @@
 		}
 		return byProject;
 	}
-	
+
 	/**
 	 * Convenience method for displaying runnable progress
 	 * with a <code>ProgressMonitorDialog</code>.
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/RemoveFromControlAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/RemoveFromControlAction.java
index ba24b12..da3c9c3 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/RemoveFromControlAction.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/RemoveFromControlAction.java
@@ -14,7 +14,6 @@
 package org.eclipse.team.examples.pessimistic.ui;
 
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
@@ -29,31 +28,30 @@
  * the control of the provider.
  */
 public class RemoveFromControlAction extends PessimisticProviderAction {
-	
+
 	/**
 	 * Collects the selected resources into sets by project,
 	 * then removes the resources from the provider associated
 	 * with their containing project.
-	 * 
+	 *
 	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
 	 */
+	@Override
 	public void run(IAction action) {
 		IResource[] resources= getSelectedResources();
 		if (resources == null || resources.length == 0)
 			return;
-		Set resourceSet= new HashSet(resources.length);
-		for(int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		Set<IResource> resourceSet = new HashSet<>(resources.length);
+		for (IResource resource : resources) {
 			recursivelyAdd(resource, resourceSet);
 		}
 		if (!resourceSet.isEmpty()) {
-			final Map byProject= sortByProject(resourceSet);			
+			final Map<IProject, Set<IResource>> byProject = sortByProject(resourceSet);
 			IRunnableWithProgress runnable= monitor -> {
-				for (Iterator i= byProject.keySet().iterator(); i.hasNext();) {
-					IProject project= (IProject) i.next();
+				for (IProject project : byProject.keySet()) {
 					PessimisticFilesystemProvider provider= getProvider(project);
 					if (provider != null) {
-						Set set= (Set)byProject.get(project);
+						Set<IResource> set = byProject.get(project);
 						IResource[] resources1= new IResource[set.size()];
 						set.toArray(resources1);
 						provider.removeFromControl(resources1, monitor);
@@ -67,9 +65,10 @@
 	/**
 	 * Answers <code>true</code> if and only if the resource is not <code>null</code>,
 	 * not a project or the workspace root, and is controlled by the provider.
-	 * 
+	 *
 	 * @see org.eclipse.team.examples.pessimistic.ui.PessimisticProviderAction#shouldEnableFor(IResource)
 	 */
+	@Override
 	protected boolean shouldEnableFor(IResource resource) {
 		if (resource == null) {
 			return false;
diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/SourceManagementAction.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/SourceManagementAction.java
index ffe6985..94aff96 100644
--- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/SourceManagementAction.java
+++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/pessimistic/ui/SourceManagementAction.java
@@ -14,7 +14,6 @@
 package org.eclipse.team.examples.pessimistic.ui;
 
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
@@ -33,29 +32,28 @@
 
 	/**
 	 * Collects the selected resources by project, then iterates
-	 * over the projects finding the associated provider.  If a 
+	 * over the projects finding the associated provider.  If a
 	 * provider is found it requests that this action manage the resources
 	 * using the found provider.
-	 * 
+	 *
 	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
 	 */
+	@Override
 	public void run(IAction action) {
 		IResource[] resources= getSelectedResources();
 		if (resources == null || resources.length == 0)
 			return;
-		Set resourceSet= new HashSet(resources.length);
-		for(int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		Set<IResource> resourceSet = new HashSet<>(resources.length);
+		for (IResource resource : resources) {
 			recursivelyAdd(resource, resourceSet);
 		}
 		if (!resourceSet.isEmpty()) {
-			final Map byProject= sortByProject(resourceSet);
+			final Map<IProject, Set<IResource>> byProject = sortByProject(resourceSet);
 			IRunnableWithProgress runnable= monitor -> {
-				for (Iterator i= byProject.keySet().iterator(); i.hasNext();) {
-					IProject project= (IProject) i.next();
+				for (IProject project : byProject.keySet()) {
 					PessimisticFilesystemProvider provider= getProvider(project);
 					if (provider != null) {
-						Set set= (Set)byProject.get(project);
+						Set<IResource> set = byProject.get(project);
 						IResource[] resources1= new IResource[set.size()];
 						set.toArray(resources1);
 						manageResources(provider, resources1, monitor);
@@ -63,12 +61,12 @@
 				}
 			};
 			runWithProgressDialog(runnable);
-		}		
+		}
 	}
 
 	/**
 	 * Manages the <code>resources</code> using the given <code>provider</code>.
-	 * 
+	 *
 	 * @param provider		The provider associated with the resources.
 	 * @param resources	The resources to be managed.
 	 * @param monitor		A progress monitor to give feedback.