diff --git a/tests/com.google.code.atinject.tck/.classpath b/tests/com.google.code.atinject.tck/.classpath
deleted file mode 100644
index 612e77e..0000000
--- a/tests/com.google.code.atinject.tck/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="tck"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tests/com.google.code.atinject.tck/.project b/tests/com.google.code.atinject.tck/.project
deleted file mode 100644
index 55f8434..0000000
--- a/tests/com.google.code.atinject.tck/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>com.google.code.atinject.tck</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/tests/com.google.code.atinject.tck/.settings/org.eclipse.core.resources.prefs b/tests/com.google.code.atinject.tck/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/tests/com.google.code.atinject.tck/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/tests/com.google.code.atinject.tck/.settings/org.eclipse.core.runtime.prefs b/tests/com.google.code.atinject.tck/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/tests/com.google.code.atinject.tck/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/tests/com.google.code.atinject.tck/.settings/org.eclipse.jdt.core.prefs b/tests/com.google.code.atinject.tck/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 2a2b47a..0000000
--- a/tests/com.google.code.atinject.tck/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,408 +0,0 @@
-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.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.8
-org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-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_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_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/tests/com.google.code.atinject.tck/.settings/org.eclipse.jdt.ui.prefs b/tests/com.google.code.atinject.tck/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index a945339..0000000
--- a/tests/com.google.code.atinject.tck/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,121 +0,0 @@
-cleanup.add_default_serial_version_id=true
-cleanup.add_generated_serial_version_id=false
-cleanup.add_missing_annotations=false
-cleanup.add_missing_deprecated_annotations=true
-cleanup.add_missing_methods=false
-cleanup.add_missing_nls_tags=false
-cleanup.add_missing_override_annotations=true
-cleanup.add_missing_override_annotations_interface_methods=true
-cleanup.add_serial_version_id=false
-cleanup.always_use_blocks=true
-cleanup.always_use_parentheses_in_expressions=false
-cleanup.always_use_this_for_non_static_field_access=false
-cleanup.always_use_this_for_non_static_method_access=false
-cleanup.convert_functional_interfaces=false
-cleanup.convert_to_enhanced_for_loop=false
-cleanup.correct_indentation=false
-cleanup.format_source_code=false
-cleanup.format_source_code_changes_only=false
-cleanup.insert_inferred_type_arguments=false
-cleanup.make_local_variable_final=true
-cleanup.make_parameters_final=false
-cleanup.make_private_fields_final=true
-cleanup.make_type_abstract_if_missing_method=false
-cleanup.make_variable_declarations_final=false
-cleanup.never_use_blocks=false
-cleanup.never_use_parentheses_in_expressions=true
-cleanup.organize_imports=false
-cleanup.qualify_static_field_accesses_with_declaring_class=false
-cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-cleanup.qualify_static_member_accesses_with_declaring_class=true
-cleanup.qualify_static_method_accesses_with_declaring_class=false
-cleanup.remove_private_constructors=true
-cleanup.remove_redundant_type_arguments=true
-cleanup.remove_trailing_whitespaces=true
-cleanup.remove_trailing_whitespaces_all=true
-cleanup.remove_trailing_whitespaces_ignore_empty=false
-cleanup.remove_unnecessary_casts=true
-cleanup.remove_unnecessary_nls_tags=true
-cleanup.remove_unused_imports=false
-cleanup.remove_unused_local_variables=false
-cleanup.remove_unused_private_fields=true
-cleanup.remove_unused_private_members=false
-cleanup.remove_unused_private_methods=true
-cleanup.remove_unused_private_types=true
-cleanup.sort_members=false
-cleanup.sort_members_all=false
-cleanup.use_anonymous_class_creation=false
-cleanup.use_blocks=false
-cleanup.use_blocks_only_for_return_and_throw=false
-cleanup.use_lambda=true
-cleanup.use_parentheses_in_expressions=false
-cleanup.use_this_for_non_static_field_access=false
-cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-cleanup.use_this_for_non_static_method_access=false
-cleanup.use_this_for_non_static_method_access_only_if_necessary=true
-cleanup.use_type_arguments=false
-cleanup_profile=_Whitespace_remove
-cleanup_settings_version=2
-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
-sp_cleanup.add_default_serial_version_id=false
-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=false
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=true
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=true
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=false
-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=false
-sp_cleanup.on_save_use_additional_actions=false
-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=false
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
-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=false
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=false
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=true
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=false
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=false
-sp_cleanup.remove_unused_private_types=false
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=true
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=false
-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=false
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
-sp_cleanup.use_type_arguments=false
diff --git a/tests/com.google.code.atinject.tck/META-INF/MANIFEST.MF b/tests/com.google.code.atinject.tck/META-INF/MANIFEST.MF
deleted file mode 100644
index b6bdab0..0000000
--- a/tests/com.google.code.atinject.tck/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Tck
-Bundle-SymbolicName: com.google.code.atinject.tck
-Bundle-Version: 1.1.100.qualifier
-Bundle-Vendor: GOOGLE
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.junit;bundle-version="4.12.0"
-Export-Package: org.atinject.tck,
- org.atinject.tck.auto;x-internal:=true,
- org.atinject.tck.auto.accessories;x-internal:=true
-Import-Package: javax.inject;version="1.0.0"
-Automatic-Module-Name: com.google.code.atinject.tck
diff --git a/tests/com.google.code.atinject.tck/build.properties b/tests/com.google.code.atinject.tck/build.properties
deleted file mode 100644
index 4203cdb..0000000
--- a/tests/com.google.code.atinject.tck/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2015 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-#     Lars Vogel <Lars.Vogel@vogella.com> - Bug 474642
-###############################################################################
-source.. = tck/
-output.. = bin/
-bin.includes = META-INF/,\
-               .
diff --git a/tests/com.google.code.atinject.tck/forceQualifierUpdate.txt b/tests/com.google.code.atinject.tck/forceQualifierUpdate.txt
deleted file mode 100644
index 56f1032..0000000
--- a/tests/com.google.code.atinject.tck/forceQualifierUpdate.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# To force a version qualifier update add the bug here
-Bug 403352 - Update all parent versions to match our build stream
diff --git a/tests/com.google.code.atinject.tck/pom.xml b/tests/com.google.code.atinject.tck/pom.xml
deleted file mode 100644
index 4f0acdf..0000000
--- a/tests/com.google.code.atinject.tck/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2012, 2016 Eclipse Foundation and others.
-  All rights reserved. This program and the accompanying materials
-  are made available under the terms of the Eclipse Distribution License v1.0
-  which accompanies this distribution, and is available at
-  http://www.eclipse.org/org/documents/edl-v10.php
- 
-  Contributors:
-     Igor Fedorenko - initial implementation
-     Mickael Istria (Red Hat Inc.) - 486480 Allow tests to run with surefire
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>eclipse.platform.runtime.tests</artifactId>
-    <groupId>eclipse.platform.runtime</groupId>
-    <version>4.8.0-SNAPSHOT</version>
-  </parent>
-  <groupId>com.google.code</groupId>
-  <artifactId>com.google.code.atinject.tck</artifactId>
-  <version>1.1.100-SNAPSHOT</version>
-  <packaging>eclipse-plugin</packaging>
-
-	<properties>
-		<!-- Tests not yet ready for surefire -->
-		<skipTests>true</skipTests>
-	</properties>
-</project>
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/Tck.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/Tck.java
deleted file mode 100644
index c915dcf..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/Tck.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck;
-
-import org.atinject.tck.auto.Car;
-import org.atinject.tck.auto.Convertible;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Maufactures the compatibility test suite. Call {@link #testsFor testsFor}
- * from a JUnit static {@code suite} method:
- *
- * <pre>
- * import junit.framework.Test;
- * import org.atinject.tck.Tck;
- *
- * public class MyTck {
- *   public static Test suite() {
- *     Car car = new MyInjector().getInstance(Car.class);
- *     return Tck.testsFor(car, true, true);
- *   }
- * }
- * </pre>
- *
- * <p>Run the tests using JUnit. For example:
- *
- * <pre>
- * java junit.textui.TestRunner MyTck
- * </pre>
- */
-public class Tck {
-
-    private Tck() {}
-
-    /**
-     * Constructs a test suite for the given {@link Car} instance. Create the
-     * {@code Car} instance using an injector with the following configuration:
-     *
-     * <ul>
-     *   <li>{@link org.atinject.tck.auto.Car} is implemented by
-     *       {@link org.atinject.tck.auto.Convertible Convertible}.
-     *   <li>{@link org.atinject.tck.auto.Drivers @Drivers} {@link org.atinject.tck.auto.Seat Seat} is
-     *       implemented by {@link org.atinject.tck.auto.DriversSeat DriversSeat}.
-     *   <li>{@link org.atinject.tck.auto.Engine Engine} is implemented by
-     *       {@link org.atinject.tck.auto.V8Engine V8Engine}.
-     *   <li>{@link javax.inject.Named @Named("spare")} {@link org.atinject.tck.auto.Tire Tire} is implemented by
-     *       {@link org.atinject.tck.auto.accessories.SpareTire SpareTire}.
-     *   <li>The following concrete classes may also be injected: {@link org.atinject.tck.auto.accessories.Cupholder
-     *       Cupholder}, {@link org.atinject.tck.auto.Tire Tire} and {@link org.atinject.tck.auto.FuelTank
-     *       FuelTank}.
-     * </ul>
-     *
-     * <p>If static member injection is supported, the static members of the
-     * following types shall also be injected:
-     * {@link org.atinject.tck.auto.Convertible Convertible},
-     * {@link org.atinject.tck.auto.Tire Tire}, and {@link
-     * org.atinject.tck.auto.accessories.SpareTire SpareTire}.
-     *
-     * @param car to test
-     * @param supportsStatic if the injector supports static member injection
-     * @param supportsPrivate if the injector supports private member injection
-     *
-     * @throws NullPointerException if car is null
-     * @throws ClassCastException if car doesn't extend Convertible
-     */
-    public static Test testsFor(Car car, boolean supportsStatic,
-            boolean supportsPrivate) {
-        if (car == null) {
-            throw new NullPointerException("car");
-        }
-
-        if (!(car instanceof Convertible)) {
-            throw new ClassCastException("car doesn't implement Convertible");
-        }
-
-        Convertible.localConvertible.set((Convertible) car);
-        try {
-            TestSuite suite = new TestSuite(Convertible.Tests.class);
-            if (supportsStatic) {
-                suite.addTestSuite(Convertible.StaticTests.class);
-            }
-            if (supportsPrivate) {
-                suite.addTestSuite(Convertible.PrivateTests.class);
-            }
-            return suite;
-        } finally {
-            Convertible.localConvertible.remove();
-        }
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Car.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Car.java
deleted file mode 100644
index d312ee5..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Car.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-public interface Car {
-
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Convertible.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Convertible.java
deleted file mode 100644
index ebb784c..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Convertible.java
+++ /dev/null
@@ -1,549 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-import junit.framework.TestCase;
-import org.atinject.tck.auto.accessories.Cupholder;
-import org.atinject.tck.auto.accessories.SpareTire;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-
-public class Convertible implements Car {
-
-    @Inject DriversSeat driversSeatA;
-    @Inject DriversSeat driversSeatB;
-    @Inject SpareTire spareTire;
-    @Inject Cupholder cupholder;
-    @Inject Provider<Engine> engineProvider;
-
-    private boolean methodWithZeroParamsInjected;
-    private boolean methodWithMultipleParamsInjected;
-    private boolean methodWithNonVoidReturnInjected;
-
-    private Seat constructorPlainSeat;
-    private Seat constructorDriversSeat;
-    private Tire constructorPlainTire;
-    private Tire constructorSpareTire;
-    private Provider<Seat> constructorPlainSeatProvider = nullProvider();
-    private Provider<Seat> constructorDriversSeatProvider = nullProvider();
-    private Provider<Tire> constructorPlainTireProvider = nullProvider();
-    private Provider<Tire> constructorSpareTireProvider = nullProvider();
-
-    @Inject Seat fieldPlainSeat;
-    @Inject @Drivers Seat fieldDriversSeat;
-    @Inject Tire fieldPlainTire;
-    @Inject @Named("spare") Tire fieldSpareTire;
-    @Inject Provider<Seat> fieldPlainSeatProvider = nullProvider();
-    @Inject @Drivers Provider<Seat> fieldDriversSeatProvider = nullProvider();
-    @Inject Provider<Tire> fieldPlainTireProvider = nullProvider();
-    @Inject @Named("spare") Provider<Tire> fieldSpareTireProvider = nullProvider();
-
-    private Seat methodPlainSeat;
-    private Seat methodDriversSeat;
-    private Tire methodPlainTire;
-    private Tire methodSpareTire;
-    private Provider<Seat> methodPlainSeatProvider = nullProvider();
-    private Provider<Seat> methodDriversSeatProvider = nullProvider();
-    private Provider<Tire> methodPlainTireProvider = nullProvider();
-    private Provider<Tire> methodSpareTireProvider = nullProvider();
-
-    @Inject static Seat staticFieldPlainSeat;
-    @Inject @Drivers static Seat staticFieldDriversSeat;
-    @Inject static Tire staticFieldPlainTire;
-    @Inject @Named("spare") static Tire staticFieldSpareTire;
-    @Inject static Provider<Seat> staticFieldPlainSeatProvider = nullProvider();
-    @Inject @Drivers static Provider<Seat> staticFieldDriversSeatProvider = nullProvider();
-    @Inject static Provider<Tire> staticFieldPlainTireProvider = nullProvider();
-    @Inject @Named("spare") static Provider<Tire> staticFieldSpareTireProvider = nullProvider();
-
-    private static Seat staticMethodPlainSeat;
-    private static Seat staticMethodDriversSeat;
-    private static Tire staticMethodPlainTire;
-    private static Tire staticMethodSpareTire;
-    private static Provider<Seat> staticMethodPlainSeatProvider = nullProvider();
-    private static Provider<Seat> staticMethodDriversSeatProvider = nullProvider();
-    private static Provider<Tire> staticMethodPlainTireProvider = nullProvider();
-    private static Provider<Tire> staticMethodSpareTireProvider = nullProvider();
-
-    @Inject Convertible(
-            Seat plainSeat,
-            @Drivers Seat driversSeat,
-            Tire plainTire,
-            @Named("spare") Tire spareTire,
-            Provider<Seat> plainSeatProvider,
-            @Drivers Provider<Seat> driversSeatProvider,
-            Provider<Tire> plainTireProvider,
-            @Named("spare") Provider<Tire> spareTireProvider) {
-        constructorPlainSeat = plainSeat;
-        constructorDriversSeat = driversSeat;
-        constructorPlainTire = plainTire;
-        constructorSpareTire = spareTire;
-        constructorPlainSeatProvider = plainSeatProvider;
-        constructorDriversSeatProvider = driversSeatProvider;
-        constructorPlainTireProvider = plainTireProvider;
-        constructorSpareTireProvider = spareTireProvider;
-    }
-
-    Convertible() {
-        throw new AssertionError("Unexpected call to non-injectable constructor");
-    }
-
-    void setSeat(Seat unused) {
-        throw new AssertionError("Unexpected call to non-injectable method");
-    }
-
-    @Inject void injectMethodWithZeroArgs() {
-        methodWithZeroParamsInjected = true;
-    }
-
-    @Inject String injectMethodWithNonVoidReturn() {
-        methodWithNonVoidReturnInjected = true;
-        return "unused";
-    }
-
-    @Inject void injectInstanceMethodWithManyArgs(
-            Seat plainSeat,
-            @Drivers Seat driversSeat,
-            Tire plainTire,
-            @Named("spare") Tire spareTire,
-            Provider<Seat> plainSeatProvider,
-            @Drivers Provider<Seat> driversSeatProvider,
-            Provider<Tire> plainTireProvider,
-            @Named("spare") Provider<Tire> spareTireProvider) {
-        methodWithMultipleParamsInjected = true;
-
-        methodPlainSeat = plainSeat;
-        methodDriversSeat = driversSeat;
-        methodPlainTire = plainTire;
-        methodSpareTire = spareTire;
-        methodPlainSeatProvider = plainSeatProvider;
-        methodDriversSeatProvider = driversSeatProvider;
-        methodPlainTireProvider = plainTireProvider;
-        methodSpareTireProvider = spareTireProvider;
-    }
-
-    @Inject static void injectStaticMethodWithManyArgs(
-            Seat plainSeat,
-            @Drivers Seat driversSeat,
-            Tire plainTire,
-            @Named("spare") Tire spareTire,
-            Provider<Seat> plainSeatProvider,
-            @Drivers Provider<Seat> driversSeatProvider,
-            Provider<Tire> plainTireProvider,
-            @Named("spare") Provider<Tire> spareTireProvider) {
-        staticMethodPlainSeat = plainSeat;
-        staticMethodDriversSeat = driversSeat;
-        staticMethodPlainTire = plainTire;
-        staticMethodSpareTire = spareTire;
-        staticMethodPlainSeatProvider = plainSeatProvider;
-        staticMethodDriversSeatProvider = driversSeatProvider;
-        staticMethodPlainTireProvider = plainTireProvider;
-        staticMethodSpareTireProvider = spareTireProvider;
-    }
-
-    /**
-     * Returns a provider that always returns null. This is used as a default
-     * value to avoid null checks for omitted provider injections.
-     */
-    private static <T> Provider<T> nullProvider() {
-        return new Provider<T>() {
-            public T get() {
-                return null;
-            }
-        };
-    }
-
-    public static ThreadLocal<Convertible> localConvertible
-            = new ThreadLocal<Convertible>();
-
-    public static class Tests extends TestCase {
-
-        private final Convertible car = localConvertible.get();
-        private final Cupholder cupholder = car.cupholder;
-        private final SpareTire spareTire = car.spareTire;
-        private final Engine engine = car.engineProvider.get();
-
-        // smoke tests: if these fail all bets are off
-
-        public void testFieldsInjected() {
-            assertTrue(cupholder != null && spareTire != null);
-        }
-
-        public void testProviderReturnedValues() {
-            assertTrue(engine != null);
-        }
-
-        // injecting different kinds of members
-
-        public void testMethodWithZeroParametersInjected() {
-            assertTrue(car.methodWithZeroParamsInjected);
-        }
-
-        public void testMethodWithMultipleParametersInjected() {
-            assertTrue(car.methodWithMultipleParamsInjected);
-        }
-
-        public void testNonVoidMethodInjected() {
-            assertTrue(car.methodWithNonVoidReturnInjected);
-        }
-
-        public void testPublicNoArgsConstructorInjected() {
-            assertTrue(engine.publicNoArgsConstructorInjected);
-        }
-
-        public void testSubtypeFieldsInjected() {
-            assertTrue(spareTire.hasSpareTireBeenFieldInjected());
-        }
-
-        public void testSubtypeMethodsInjected() {
-            assertTrue(spareTire.hasSpareTireBeenMethodInjected());
-        }
-
-        public void testSupertypeFieldsInjected() {
-            assertTrue(spareTire.hasTireBeenFieldInjected());
-        }
-
-        public void testSupertypeMethodsInjected() {
-            assertTrue(spareTire.hasTireBeenMethodInjected());
-        }
-
-        public void testTwiceOverriddenMethodInjectedWhenMiddleLacksAnnotation() {
-            assertTrue(engine.overriddenTwiceWithOmissionInMiddleInjected);
-        }
-
-        // injected values
-
-        public void testQualifiersNotInheritedFromOverriddenMethod() {
-            assertFalse(engine.qualifiersInheritedFromOverriddenMethod);
-        }
-
-        public void testConstructorInjectionWithValues() {
-            assertFalse("Expected unqualified value",
-                    car.constructorPlainSeat instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    car.constructorPlainTire instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    car.constructorDriversSeat instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    car.constructorSpareTire instanceof SpareTire);
-        }
-
-        public void testFieldInjectionWithValues() {
-            assertFalse("Expected unqualified value",
-                    car.fieldPlainSeat instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    car.fieldPlainTire instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    car.fieldDriversSeat instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    car.fieldSpareTire instanceof SpareTire);
-        }
-
-        public void testMethodInjectionWithValues() {
-            assertFalse("Expected unqualified value",
-                    car.methodPlainSeat instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    car.methodPlainTire instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    car.methodDriversSeat instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    car.methodSpareTire instanceof SpareTire);
-        }
-
-        // injected providers
-
-        public void testConstructorInjectionWithProviders() {
-            assertFalse("Expected unqualified value",
-                    car.constructorPlainSeatProvider.get() instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    car.constructorPlainTireProvider.get() instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    car.constructorDriversSeatProvider.get() instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    car.constructorSpareTireProvider.get() instanceof SpareTire);
-        }
-
-        public void testFieldInjectionWithProviders() {
-            assertFalse("Expected unqualified value",
-                    car.fieldPlainSeatProvider.get() instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    car.fieldPlainTireProvider.get() instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    car.fieldDriversSeatProvider.get() instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    car.fieldSpareTireProvider.get() instanceof SpareTire);
-        }
-
-        public void testMethodInjectionWithProviders() {
-            assertFalse("Expected unqualified value",
-                    car.methodPlainSeatProvider.get() instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    car.methodPlainTireProvider.get() instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    car.methodDriversSeatProvider.get() instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    car.methodSpareTireProvider.get() instanceof SpareTire);
-        }
-
-
-        // singletons
-
-        public void testConstructorInjectedProviderYieldsSingleton() {
-            assertSame("Expected same value",
-                    car.constructorPlainSeatProvider.get(), car.constructorPlainSeatProvider.get());
-        }
-
-        public void testFieldInjectedProviderYieldsSingleton() {
-            assertSame("Expected same value",
-                    car.fieldPlainSeatProvider.get(), car.fieldPlainSeatProvider.get());
-        }
-
-        public void testMethodInjectedProviderYieldsSingleton() {
-            assertSame("Expected same value",
-                    car.methodPlainSeatProvider.get(), car.methodPlainSeatProvider.get());
-        }
-
-        public void testCircularlyDependentSingletons() {
-            // uses provider.get() to get around circular deps
-            assertSame(cupholder.seatProvider.get().getCupholder(), cupholder);
-        }
-
-
-        // non singletons
-
-        public void testSingletonAnnotationNotInheritedFromSupertype() {
-            assertNotSame(car.driversSeatA, car.driversSeatB);
-        }
-
-        public void testConstructorInjectedProviderYieldsDistinctValues() {
-            assertNotSame("Expected distinct values",
-                    car.constructorDriversSeatProvider.get(), car.constructorDriversSeatProvider.get());
-            assertNotSame("Expected distinct values",
-                    car.constructorPlainTireProvider.get(), car.constructorPlainTireProvider.get());
-            assertNotSame("Expected distinct values",
-                    car.constructorSpareTireProvider.get(), car.constructorSpareTireProvider.get());
-        }
-
-        public void testFieldInjectedProviderYieldsDistinctValues() {
-            assertNotSame("Expected distinct values",
-                    car.fieldDriversSeatProvider.get(), car.fieldDriversSeatProvider.get());
-            assertNotSame("Expected distinct values",
-                    car.fieldPlainTireProvider.get(), car.fieldPlainTireProvider.get());
-            assertNotSame("Expected distinct values",
-                    car.fieldSpareTireProvider.get(), car.fieldSpareTireProvider.get());
-        }
-
-        public void testMethodInjectedProviderYieldsDistinctValues() {
-            assertNotSame("Expected distinct values",
-                    car.methodDriversSeatProvider.get(), car.methodDriversSeatProvider.get());
-            assertNotSame("Expected distinct values",
-                    car.methodPlainTireProvider.get(), car.methodPlainTireProvider.get());
-            assertNotSame("Expected distinct values",
-                    car.methodSpareTireProvider.get(), car.methodSpareTireProvider.get());
-        }
-
-
-        // mix inheritance + visibility
-
-        public void testPackagePrivateMethodInjectedDifferentPackages() {
-            assertTrue(spareTire.subPackagePrivateMethodInjected);
-            assertTrue(spareTire.superPackagePrivateMethodInjected);
-        }
-
-        public void testOverriddenProtectedMethodInjection() {
-            assertTrue(spareTire.subProtectedMethodInjected);
-            assertFalse(spareTire.superProtectedMethodInjected);
-        }
-
-        public void testOverriddenPublicMethodNotInjected() {
-            assertTrue(spareTire.subPublicMethodInjected);
-            assertFalse(spareTire.superPublicMethodInjected);
-        }
-
-
-        // inject in order
-
-        public void testFieldsInjectedBeforeMethods() {
-            assertFalse(spareTire.methodInjectedBeforeFields);
-        }
-
-        public void testSupertypeFieldsInjectedBeforeSubtypeMethods() {
-            assertFalse(spareTire.subtypeFieldInjectedBeforeSupertypeMethods);
-        }
-
-        public void testSupertypeMethodsInjectedBeforeSubtypeMethods() {
-            assertFalse(spareTire.subtypeMethodInjectedBeforeSupertypeMethods);
-        }
-
-
-        // necessary injections occur
-
-        public void testPackagePrivateMethodInjectedEvenWhenSimilarMethodLacksAnnotation() {
-            assertTrue(spareTire.subPackagePrivateMethodForOverrideInjected);
-        }
-
-
-        // override or similar method without @Inject
-
-        public void testPrivateMethodNotInjectedWhenSupertypeHasAnnotatedSimilarMethod() {
-            assertFalse(spareTire.superPrivateMethodForOverrideInjected);
-        }
-
-        public void testPackagePrivateMethodNotInjectedWhenOverrideLacksAnnotation() {
-            assertFalse(engine.subPackagePrivateMethodForOverrideInjected);
-            assertFalse(engine.superPackagePrivateMethodForOverrideInjected);
-        }
-
-        public void testPackagePrivateMethodNotInjectedWhenSupertypeHasAnnotatedSimilarMethod() {
-            assertFalse(spareTire.superPackagePrivateMethodForOverrideInjected);
-        }
-
-        public void testProtectedMethodNotInjectedWhenOverrideNotAnnotated() {
-            assertFalse(spareTire.protectedMethodForOverrideInjected);
-        }
-
-        public void testPublicMethodNotInjectedWhenOverrideNotAnnotated() {
-            assertFalse(spareTire.publicMethodForOverrideInjected);
-        }
-
-        public void testTwiceOverriddenMethodNotInjectedWhenOverrideLacksAnnotation() {
-            assertFalse(engine.overriddenTwiceWithOmissionInSubclassInjected);
-        }
-
-
-        // inject only once
-
-        public void testOverriddenPackagePrivateMethodInjectedOnlyOnce() {
-            assertFalse(engine.overriddenPackagePrivateMethodInjectedTwice);
-        }
-
-        public void testSimilarPackagePrivateMethodInjectedOnlyOnce() {
-            assertFalse(spareTire.similarPackagePrivateMethodInjectedTwice);
-        }
-
-        public void testOverriddenProtectedMethodInjectedOnlyOnce() {
-            assertFalse(spareTire.overriddenProtectedMethodInjectedTwice);
-        }
-
-        public void testOverriddenPublicMethodInjectedOnlyOnce() {
-            assertFalse(spareTire.overriddenPublicMethodInjectedTwice);
-        }
-
-    }
-
-    public static class StaticTests extends TestCase {
-
-        public void testSubtypeStaticFieldsInjected() {
-            assertTrue(SpareTire.hasBeenStaticFieldInjected());
-        }
-
-        public void testSubtypeStaticMethodsInjected() {
-            assertTrue(SpareTire.hasBeenStaticMethodInjected());
-        }
-
-        public void testSupertypeStaticFieldsInjected() {
-            assertTrue(Tire.hasBeenStaticFieldInjected());
-        }
-
-        public void testSupertypeStaticMethodsInjected() {
-            assertTrue(Tire.hasBeenStaticMethodInjected());
-        }
-
-        public void testStaticFieldInjectionWithValues() {
-            assertFalse("Expected unqualified value",
-                    staticFieldPlainSeat instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    staticFieldPlainTire instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    staticFieldDriversSeat instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    staticFieldSpareTire instanceof SpareTire);
-        }
-
-        public void testStaticMethodInjectionWithValues() {
-            assertFalse("Expected unqualified value",
-                    staticMethodPlainSeat instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    staticMethodPlainTire instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    staticMethodDriversSeat instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    staticMethodSpareTire instanceof SpareTire);
-        }
-
-        public void testStaticFieldsInjectedBeforeMethods() {
-            assertFalse(SpareTire.staticMethodInjectedBeforeStaticFields);
-        }
-
-        public void testSupertypeStaticMethodsInjectedBeforeSubtypeStaticFields() {
-            assertFalse(SpareTire.subtypeStaticFieldInjectedBeforeSupertypeStaticMethods);
-        }
-
-        public void testSupertypeStaticMethodsInjectedBeforeSubtypeStaticMethods() {
-            assertFalse(SpareTire.subtypeStaticMethodInjectedBeforeSupertypeStaticMethods);
-        }
-
-        public void testStaticFieldInjectionWithProviders() {
-            assertFalse("Expected unqualified value",
-                    staticFieldPlainSeatProvider.get() instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    staticFieldPlainTireProvider.get() instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    staticFieldDriversSeatProvider.get() instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    staticFieldSpareTireProvider.get() instanceof SpareTire);
-        }
-
-        public void testStaticMethodInjectionWithProviders() {
-            assertFalse("Expected unqualified value",
-                    staticMethodPlainSeatProvider.get() instanceof DriversSeat);
-            assertFalse("Expected unqualified value",
-                    staticMethodPlainTireProvider.get() instanceof SpareTire);
-            assertTrue("Expected qualified value",
-                    staticMethodDriversSeatProvider.get() instanceof DriversSeat);
-            assertTrue("Expected qualified value",
-                    staticMethodSpareTireProvider.get() instanceof SpareTire);
-        }
-    }
-
-    public static class PrivateTests extends TestCase {
-
-        private final Convertible car = localConvertible.get();
-        private final Engine engine = car.engineProvider.get();
-        private final SpareTire spareTire = car.spareTire;
-
-        public void testSupertypePrivateMethodInjected() {
-            assertTrue(spareTire.superPrivateMethodInjected);
-            assertTrue(spareTire.subPrivateMethodInjected);
-        }
-
-        public void testPackagePrivateMethodInjectedSamePackage() {
-            assertTrue(engine.subPackagePrivateMethodInjected);
-            assertFalse(engine.superPackagePrivateMethodInjected);
-        }
-
-        public void testPrivateMethodInjectedEvenWhenSimilarMethodLacksAnnotation() {
-            assertTrue(spareTire.subPrivateMethodForOverrideInjected);
-        }
-
-        public void testSimilarPrivateMethodInjectedOnlyOnce() {
-            assertFalse(spareTire.similarPrivateMethodInjectedTwice);
-        }
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Drivers.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Drivers.java
deleted file mode 100644
index 53a2dc0..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Drivers.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-import javax.inject.Qualifier;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@Retention(RetentionPolicy.RUNTIME) @Qualifier
-public @interface Drivers {
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/DriversSeat.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/DriversSeat.java
deleted file mode 100644
index 3ba90d9..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/DriversSeat.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-import org.atinject.tck.auto.accessories.Cupholder;
-
-import javax.inject.Inject;
-
-public class DriversSeat extends Seat {
-
-    @Inject
-    public DriversSeat(Cupholder cupholder) {
-        super(cupholder);
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Engine.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Engine.java
deleted file mode 100644
index e4231e5..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Engine.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-import org.atinject.tck.auto.accessories.SpareTire;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-public abstract class Engine {
-
-    protected boolean publicNoArgsConstructorInjected;
-    protected boolean subPackagePrivateMethodInjected;
-    protected boolean superPackagePrivateMethodInjected;
-    protected boolean subPackagePrivateMethodForOverrideInjected;
-    protected boolean superPackagePrivateMethodForOverrideInjected;
-
-    protected boolean overriddenTwiceWithOmissionInMiddleInjected;
-    protected boolean overriddenTwiceWithOmissionInSubclassInjected;
-
-    protected Seat seatA;
-    protected Seat seatB;
-    protected Tire tireA;
-    protected Tire tireB;
-
-    public boolean overriddenPackagePrivateMethodInjectedTwice;
-    public boolean qualifiersInheritedFromOverriddenMethod;
-
-    @Inject void injectPackagePrivateMethod() {
-        superPackagePrivateMethodInjected = true;
-    }
-
-    @Inject void injectPackagePrivateMethodForOverride() {
-        superPackagePrivateMethodForOverrideInjected = true;
-    }
-
-    @Inject public void injectQualifiers(@Drivers Seat seatA, Seat seatB,
-            @Named("spare") Tire tireA, Tire tireB) {
-        if (!(seatA instanceof DriversSeat)
-                || (seatB instanceof DriversSeat)
-                || !(tireA instanceof SpareTire)
-                || (tireB instanceof SpareTire)) {
-            qualifiersInheritedFromOverriddenMethod = true;
-        }
-    }
-
-    @Inject public void injectTwiceOverriddenWithOmissionInMiddle() {
-        overriddenTwiceWithOmissionInMiddleInjected = true;
-    }
-
-    @Inject public void injectTwiceOverriddenWithOmissionInSubclass() {
-        overriddenTwiceWithOmissionInSubclassInjected = true;
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/FuelTank.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/FuelTank.java
deleted file mode 100644
index 37d5199..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/FuelTank.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-public class FuelTank {
-
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/GasEngine.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/GasEngine.java
deleted file mode 100644
index 6f7edf1..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/GasEngine.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-import javax.inject.Inject;
-
-public abstract class GasEngine extends Engine {
-
-    public void injectTwiceOverriddenWithOmissionInMiddle() {
-        overriddenTwiceWithOmissionInMiddleInjected = true;
-    }
-
-    @Inject public void injectTwiceOverriddenWithOmissionInSubclass() {
-        overriddenTwiceWithOmissionInSubclassInjected = true;
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Seat.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Seat.java
deleted file mode 100644
index 4d41a20..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Seat.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-import org.atinject.tck.auto.accessories.Cupholder;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-public class Seat {
-
-    private final Cupholder cupholder;
-
-    @Inject
-    Seat(Cupholder cupholder) {
-        this.cupholder = cupholder;
-    }
-
-    public Cupholder getCupholder() {
-        return cupholder;
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Seatbelt.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Seatbelt.java
deleted file mode 100644
index c6329dd..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Seatbelt.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-public class Seatbelt {
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Tire.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Tire.java
deleted file mode 100644
index 9d4f665..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/Tire.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-import org.atinject.tck.auto.accessories.SpareTire;
-
-import javax.inject.Inject;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-public class Tire {
-
-    protected static final FuelTank NEVER_INJECTED = new FuelTank();
-
-    protected static final Set<String> moreProblems = new LinkedHashSet<String>();
-
-    FuelTank constructorInjection = NEVER_INJECTED;
-    @Inject FuelTank fieldInjection = NEVER_INJECTED;
-    FuelTank methodInjection = NEVER_INJECTED;
-    @Inject static FuelTank staticFieldInjection = NEVER_INJECTED;
-    static FuelTank staticMethodInjection = NEVER_INJECTED;
-
-    boolean constructorInjected;
-
-    protected boolean superPrivateMethodInjected;
-    protected boolean superPackagePrivateMethodInjected;
-    protected boolean superProtectedMethodInjected;
-    protected boolean superPublicMethodInjected;
-    protected boolean subPrivateMethodInjected;
-    protected boolean subPackagePrivateMethodInjected;
-    protected boolean subProtectedMethodInjected;
-    protected boolean subPublicMethodInjected;
-
-    protected boolean superPrivateMethodForOverrideInjected;
-    protected boolean superPackagePrivateMethodForOverrideInjected;
-    protected boolean subPrivateMethodForOverrideInjected;
-    protected boolean subPackagePrivateMethodForOverrideInjected;
-    protected boolean protectedMethodForOverrideInjected;
-    protected boolean publicMethodForOverrideInjected;
-
-    public boolean methodInjectedBeforeFields;
-    public boolean subtypeFieldInjectedBeforeSupertypeMethods;
-    public boolean subtypeMethodInjectedBeforeSupertypeMethods;
-    public static boolean staticMethodInjectedBeforeStaticFields;
-    public static boolean subtypeStaticFieldInjectedBeforeSupertypeStaticMethods;
-    public static boolean subtypeStaticMethodInjectedBeforeSupertypeStaticMethods;
-    public boolean similarPrivateMethodInjectedTwice;
-    public boolean similarPackagePrivateMethodInjectedTwice;
-    public boolean overriddenProtectedMethodInjectedTwice;
-    public boolean overriddenPublicMethodInjectedTwice;
-
-    @Inject public Tire(FuelTank constructorInjection) {
-        this.constructorInjection = constructorInjection;
-    }
-
-    @Inject void supertypeMethodInjection(FuelTank methodInjection) {
-        if (!hasTireBeenFieldInjected()) {
-            methodInjectedBeforeFields = true;
-        }
-        if (hasSpareTireBeenFieldInjected()) {
-            subtypeFieldInjectedBeforeSupertypeMethods = true;
-        }
-        if (hasSpareTireBeenMethodInjected()) {
-            subtypeMethodInjectedBeforeSupertypeMethods = true;
-        }
-        this.methodInjection = methodInjection;
-    }
-
-    @Inject static void supertypeStaticMethodInjection(FuelTank methodInjection) {
-        if (!Tire.hasBeenStaticFieldInjected()) {
-            staticMethodInjectedBeforeStaticFields = true;
-        }
-        if (SpareTire.hasBeenStaticFieldInjected()) {
-            subtypeStaticFieldInjectedBeforeSupertypeStaticMethods = true;
-        }
-        if (SpareTire.hasBeenStaticMethodInjected()) {
-            subtypeStaticMethodInjectedBeforeSupertypeStaticMethods = true;
-        }
-        staticMethodInjection = methodInjection;
-    }
-
-    @Inject private void injectPrivateMethod() {
-        if (superPrivateMethodInjected) {
-            similarPrivateMethodInjectedTwice = true;
-        }
-        superPrivateMethodInjected = true;
-    }
-
-    @Inject void injectPackagePrivateMethod() {
-        if (superPackagePrivateMethodInjected) {
-            similarPackagePrivateMethodInjectedTwice = true;
-        }
-        superPackagePrivateMethodInjected = true;
-    }
-
-    @Inject protected void injectProtectedMethod() {
-        if (superProtectedMethodInjected) {
-            overriddenProtectedMethodInjectedTwice = true;
-        }
-        superProtectedMethodInjected = true;
-    }
-
-    @Inject public void injectPublicMethod() {
-        if (superPublicMethodInjected) {
-            overriddenPublicMethodInjectedTwice = true;
-        }
-        superPublicMethodInjected = true;
-    }
-
-    @Inject private void injectPrivateMethodForOverride() {
-        subPrivateMethodForOverrideInjected = true;
-    }
-
-    @Inject void injectPackagePrivateMethodForOverride() {
-        subPackagePrivateMethodForOverrideInjected = true;
-    }
-
-    @Inject protected void injectProtectedMethodForOverride() {
-        protectedMethodForOverrideInjected = true;
-    }
-
-    @Inject public void injectPublicMethodForOverride() {
-        publicMethodForOverrideInjected = true;
-    }
-
-    protected final boolean hasTireBeenFieldInjected() {
-        return fieldInjection != NEVER_INJECTED;
-    }
-
-    protected boolean hasSpareTireBeenFieldInjected() {
-        return false;
-    }
-
-    protected final boolean hasTireBeenMethodInjected() {
-        return methodInjection != NEVER_INJECTED;
-    }
-
-    protected static boolean hasBeenStaticFieldInjected() {
-        return staticFieldInjection != NEVER_INJECTED;
-    }
-
-    protected static boolean hasBeenStaticMethodInjected() {
-        return staticMethodInjection != NEVER_INJECTED;
-    }
-
-    protected boolean hasSpareTireBeenMethodInjected() {
-        return false;
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/V8Engine.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/V8Engine.java
deleted file mode 100644
index 2dc7473..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/V8Engine.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto;
-
-import org.atinject.tck.auto.accessories.SpareTire;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-public class V8Engine extends GasEngine {
-
-    public V8Engine() {
-        publicNoArgsConstructorInjected = true;
-    }
-
-    @Inject void injectPackagePrivateMethod() {
-        if (subPackagePrivateMethodInjected) {
-            overriddenPackagePrivateMethodInjectedTwice = true;
-        }
-        subPackagePrivateMethodInjected = true;
-    }
-
-    /**
-     * Qualifiers are swapped from how they appear in the superclass.
-     */
-    public void injectQualifiers(Seat seatA, @Drivers Seat seatB,
-            Tire tireA, @Named("spare") Tire tireB) {
-        if ((seatA instanceof DriversSeat)
-                || !(seatB instanceof DriversSeat)
-                || (tireA instanceof SpareTire)
-                || !(tireB instanceof SpareTire)) {
-            qualifiersInheritedFromOverriddenMethod = true;
-        }
-    }
-
-    void injectPackagePrivateMethodForOverride() {
-        subPackagePrivateMethodForOverrideInjected = true;
-    }
-
-    @Inject public void injectTwiceOverriddenWithOmissionInMiddle() {
-        overriddenTwiceWithOmissionInMiddleInjected = true;
-    }
-
-    public void injectTwiceOverriddenWithOmissionInSubclass() {
-        overriddenTwiceWithOmissionInSubclassInjected = true;
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/accessories/Cupholder.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/accessories/Cupholder.java
deleted file mode 100644
index fec70a4..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/accessories/Cupholder.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto.accessories;
-
-import org.atinject.tck.auto.Seat;
-
-import javax.inject.Inject;
-import javax.inject.Provider;
-import javax.inject.Singleton;
-
-@Singleton
-public class Cupholder {
-
-    public final Provider<Seat> seatProvider;
-
-    @Inject
-    public Cupholder(Provider<Seat> seatProvider) {
-        this.seatProvider = seatProvider;
-    }
-}
diff --git a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/accessories/SpareTire.java b/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/accessories/SpareTire.java
deleted file mode 100644
index 7429fdc..0000000
--- a/tests/com.google.code.atinject.tck/tck/org/atinject/tck/auto/accessories/SpareTire.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2009 The JSR-330 Expert Group
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.atinject.tck.auto.accessories;
-
-import org.atinject.tck.auto.FuelTank;
-import org.atinject.tck.auto.Tire;
-
-import javax.inject.Inject;
-
-@SuppressWarnings("all")
-public class SpareTire extends Tire {
-
-    FuelTank constructorInjection = NEVER_INJECTED;
-    @Inject FuelTank fieldInjection = NEVER_INJECTED;
-    FuelTank methodInjection = NEVER_INJECTED;
-    @Inject static FuelTank staticFieldInjection = NEVER_INJECTED;
-    static FuelTank staticMethodInjection = NEVER_INJECTED;
-
-    @Inject public SpareTire(FuelTank forSupertype, FuelTank forSubtype) {
-        super(forSupertype);
-        this.constructorInjection = forSubtype;
-    }
-
-    @Inject void subtypeMethodInjection(FuelTank methodInjection) {
-        if (!hasSpareTireBeenFieldInjected()) {
-            methodInjectedBeforeFields = true;
-        }
-        this.methodInjection = methodInjection;
-    }
-
-    @Inject static void subtypeStaticMethodInjection(FuelTank methodInjection) {
-        if (!hasBeenStaticFieldInjected()) {
-            staticMethodInjectedBeforeStaticFields = true;
-        }
-        staticMethodInjection = methodInjection;
-    }
-
-    @Inject private void injectPrivateMethod() {
-        if (subPrivateMethodInjected) {
-            similarPrivateMethodInjectedTwice = true;
-        }
-        subPrivateMethodInjected = true;
-    }
-
-    @Inject void injectPackagePrivateMethod() {
-        if (subPackagePrivateMethodInjected) {
-            similarPackagePrivateMethodInjectedTwice = true;
-        }
-        subPackagePrivateMethodInjected = true;
-    }
-
-    @Inject protected void injectProtectedMethod() {
-        if (subProtectedMethodInjected) {
-            overriddenProtectedMethodInjectedTwice = true;
-        }
-        subProtectedMethodInjected = true;
-    }
-
-    @Inject public void injectPublicMethod() {
-        if (subPublicMethodInjected) {
-            overriddenPublicMethodInjectedTwice = true;
-        }
-        subPublicMethodInjected = true;
-    }
-
-    private void injectPrivateMethodForOverride() {
-        superPrivateMethodForOverrideInjected = true;
-    }
-
-    void injectPackagePrivateMethodForOverride() {
-        superPackagePrivateMethodForOverrideInjected = true;
-    }
-
-    protected void injectProtectedMethodForOverride() {
-        protectedMethodForOverrideInjected = true;
-    }
-
-    public void injectPublicMethodForOverride() {
-        publicMethodForOverrideInjected = true;
-    }
-
-    public boolean hasSpareTireBeenFieldInjected() {
-        return fieldInjection != NEVER_INJECTED;
-    }
-
-    public boolean hasSpareTireBeenMethodInjected() {
-        return methodInjection != NEVER_INJECTED;
-    }
-
-    public static boolean hasBeenStaticFieldInjected() {
-        return staticFieldInjection != NEVER_INJECTED;
-    }
-
-    public static boolean hasBeenStaticMethodInjected() {
-        return staticMethodInjection != NEVER_INJECTED;
-    }
-}
diff --git a/tests/org.eclipse.e4.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.e4.core.tests/META-INF/MANIFEST.MF
index 97b258a..8c80172 100644
--- a/tests/org.eclipse.e4.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.e4.core.tests/META-INF/MANIFEST.MF
@@ -10,7 +10,6 @@
  org.eclipse.e4.core.di.extensions,
  org.eclipse.e4.core.di.extensions.supplier,
  org.eclipse.e4.core.contexts,
- com.google.code.atinject.tck;bundle-version="1.0.0",
  org.eclipse.equinox.registry;bundle-version="3.5.0",
  org.eclipse.core.tests.harness;bundle-version="3.6.0",
  org.eclipse.e4.core.services;bundle-version="1.1.0",
diff --git a/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/internal/tests/di/AtInjectTest.java b/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/internal/tests/di/AtInjectTest.java
deleted file mode 100644
index 7d7491e..0000000
--- a/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/internal/tests/di/AtInjectTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- ******************************************************************************/
-package org.eclipse.e4.core.internal.tests.di;
-
-import org.atinject.tck.Tck;
-import org.atinject.tck.auto.Car;
-import org.atinject.tck.auto.Convertible;
-import org.atinject.tck.auto.Drivers;
-import org.atinject.tck.auto.DriversSeat;
-import org.atinject.tck.auto.Engine;
-import org.atinject.tck.auto.FuelTank;
-import org.atinject.tck.auto.Seat;
-import org.atinject.tck.auto.Tire;
-import org.atinject.tck.auto.V8Engine;
-import org.atinject.tck.auto.accessories.Cupholder;
-import org.atinject.tck.auto.accessories.SpareTire;
-import org.eclipse.e4.core.di.IInjector;
-import org.eclipse.e4.core.di.InjectorFactory;
-import org.junit.runner.RunWith;
-import org.junit.runners.AllTests;
-
-import junit.framework.Test;
-
-@RunWith(AllTests.class)
-public class AtInjectTest {
-
-	public static Test suite() {
-		IInjector injector = InjectorFactory.getDefault();
-
-		injector.addBinding(SpareTire.class);
-		injector.addBinding(Seat.class);
-		injector.addBinding(DriversSeat.class);
-		injector.addBinding(Cupholder.class);
-		injector.addBinding(Tire.class);
-		injector.addBinding(FuelTank.class);
-
-		injector.addBinding(Car.class).implementedBy(Convertible.class);
-		injector.addBinding(Seat.class).named(Drivers.class.getName()).implementedBy(DriversSeat.class);
-		injector.addBinding(Engine.class).implementedBy(V8Engine.class);
-		injector.addBinding(Tire.class).named("spare").implementedBy(SpareTire.class);
-
-		Car car = injector.make(Car.class, null);
-		return Tck.testsFor(car, true, true);
-	}
-}
diff --git a/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/tests/CoreTestSuite.java b/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/tests/CoreTestSuite.java
index 6a4936a..b0be14d 100644
--- a/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/tests/CoreTestSuite.java
+++ b/tests/org.eclipse.e4.core.tests/src/org/eclipse/e4/core/tests/CoreTestSuite.java
@@ -12,6 +12,9 @@
 
 package org.eclipse.e4.core.tests;
 
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
 import org.eclipse.e4.core.internal.tests.contexts.ActivationTest;
 import org.eclipse.e4.core.internal.tests.contexts.ContextDynamicTest;
 import org.eclipse.e4.core.internal.tests.contexts.DependenciesLeakTest;
@@ -37,7 +40,6 @@
 import org.eclipse.e4.core.internal.tests.contexts.inject.ProviderInjectionTest;
 import org.eclipse.e4.core.internal.tests.contexts.inject.ServiceContextTest;
 import org.eclipse.e4.core.internal.tests.contexts.inject.TestConstructorInjection;
-import org.eclipse.e4.core.internal.tests.di.AtInjectTest;
 import org.eclipse.e4.core.internal.tests.di.AutoConstructWithCreatableTest;
 import org.eclipse.e4.core.internal.tests.di.DisposeClassLinkTest;
 import org.eclipse.e4.core.internal.tests.di.InjectArraysTest;
@@ -56,8 +58,6 @@
 import org.eclipse.e4.core.internal.tests.di.extensions.InjectionPreferencesTest;
 import org.eclipse.e4.core.internal.tests.di.extensions.ServiceSupplierTestCase;
 import org.eclipse.e4.core.internal.tests.nls.NLSTest;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
 
 import junit.framework.JUnit4TestAdapter;
 import junit.framework.Test;
@@ -78,7 +78,6 @@
 		InjectBaseTypeTest.class,
 		InvokeTestMissingAnnotation.class,
 		InjectionResultLeakTest.class,
-		AtInjectTest.class,
 		AutoConstructWithCreatableTest.class,
 
 		// Contexts
