[SCM] objenesis - Java library to instantiate a new object of a particular class branch, upstream, updated. upstream/1.2-2-g0cbb3fe

Torsten Werner twerner at alioth.debian.org
Sun Sep 18 20:04:36 UTC 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "objenesis - Java library to instantiate a new object of a particular class".

The branch, upstream has been updated
       via  0cbb3feb3245b5039ca2039f1e5a187a25286025 (commit)
      from  7b9406011c3d09dde3cab6dfe35f0982dfc3dcef (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 META-INF/LICENSE => LICENSE.txt                    |    0
 META-INF/MANIFEST.MF                               |    4 -
 META-INF/NOTICE                                    |    9 -
 build_eclipse.bat                                  |    1 +
 build_release.bat                                  |    2 +
 header.txt                                         |   13 +
 main/.settings/org.eclipse.core.resources.prefs    |    3 +
 main/.settings/org.eclipse.jdt.core.prefs          |  259 +++++++++++++++
 main/.settings/org.eclipse.jdt.ui.prefs            |   11 +
 main/assembly.xml                                  |   40 +++
 pom.xml => main/pom.xml                            |    0
 {org => main/src/org}/objenesis/Objenesis.java     |    0
 {org => main/src/org}/objenesis/ObjenesisBase.java |    0
 .../src/org}/objenesis/ObjenesisException.java     |    0
 .../src/org}/objenesis/ObjenesisHelper.java        |    0
 .../src/org}/objenesis/ObjenesisSerializer.java    |    0
 {org => main/src/org}/objenesis/ObjenesisStd.java  |    0
 .../objenesis/instantiator/NullInstantiator.java   |    0
 .../objenesis/instantiator/ObjectInstantiator.java |    0
 .../SerializationInstantiatorHelper.java           |    0
 .../instantiator/basic/AccessibleInstantiator.java |    0
 .../basic/ConstructorInstantiator.java             |    0
 .../basic/NewInstanceInstantiator.java             |    0
 .../basic/ObjectInputStreamInstantiator.java       |    0
 .../basic/ObjectStreamClassInstantiator.java       |    0
 .../instantiator/gcj/GCJInstantiator.java          |    0
 .../instantiator/gcj/GCJInstantiatorBase.java      |    0
 .../gcj/GCJSerializationInstantiator.java          |    0
 .../jrockit/JRockit131Instantiator.java            |    0
 .../jrockit/JRockitLegacyInstantiator.java         |    0
 .../instantiator/perc/PercInstantiator.java        |    0
 .../perc/PercSerializationInstantiator.java        |    0
 .../instantiator/sun/Sun13Instantiator.java        |    0
 .../instantiator/sun/Sun13InstantiatorBase.java    |    0
 .../sun/Sun13SerializationInstantiator.java        |    0
 .../sun/SunReflectionFactoryInstantiator.java      |    0
 ...ReflectionFactorySerializationInstantiator.java |    0
 .../strategy/BaseInstantiatorStrategy.java         |    0
 .../objenesis/strategy/InstantiatorStrategy.java   |    0
 .../strategy/SerializingInstantiatorStrategy.java  |    0
 .../strategy/StdInstantiatorStrategy.java          |    0
 .../test/org/objenesis/ObjenesisExceptionTest.java |   54 +++
 main/test/org/objenesis/ObjenesisTest.java         |   72 ++++
 .../org/objenesis/SerializingInstantiatorTest.java |   45 +++
 objenesis-formatting.xml                           |  251 ++++++++++++++
 pom.xml                                            |  321 ++++++++++++++++---
 settings-example.xml                               |   28 ++
 tck/.settings/org.eclipse.core.resources.prefs     |    3 +
 tck/.settings/org.eclipse.jdt.core.prefs           |  259 +++++++++++++++
 tck/.settings/org.eclipse.jdt.ui.prefs             |   10 +
 tck/pom.xml                                        |  277 ++++++++++++++++
 tck/src/org/objenesis/tck/CandidateLoader.java     |  129 ++++++++
 tck/src/org/objenesis/tck/Main.java                |  104 ++++++
 tck/src/org/objenesis/tck/Reporter.java            |   80 +++++
 tck/src/org/objenesis/tck/TCK.java                 |  143 ++++++++
 tck/src/org/objenesis/tck/TextReporter.java        |  239 ++++++++++++++
 .../candidates/ConstructorThrowingException.java   |   58 ++--
 .../tck/candidates/ConstructorWithArguments.java   |   65 ++--
 .../ConstructorWithMandatoryArguments.java         |   59 ++--
 .../tck/candidates/DefaultPackageConstructor.java  |   57 ++--
 .../tck/candidates/DefaultPrivateConstructor.java  |   57 ++--
 .../candidates/DefaultProtectedConstructor.java    |   57 ++--
 .../tck/candidates/DefaultPublicConstructor.java   |   57 ++--
 .../objenesis/tck/candidates/NoConstructor.java    |   53 ++--
 .../SerializableConstructorThrowingException.java  |   62 ++--
 .../SerializableConstructorWithArguments.java      |   69 +++--
 ...ializableConstructorWithMandatoryArguments.java |   63 ++--
 .../SerializableDefaultPackageConstructor.java     |   61 ++--
 .../SerializableDefaultPrivateConstructor.java     |   61 ++--
 .../SerializableDefaultProtectedConstructor.java   |   61 ++--
 .../SerializableDefaultPublicConstructor.java      |   61 ++--
 .../tck/candidates/SerializableNoConstructor.java  |   56 ++--
 .../tck/candidates/SerializableReplacer.java       |   21 +-
 .../tck/candidates/SerializableResolver.java       |   21 +-
 .../SerializableWithAncestorThrowingException.java |   62 ++--
 .../objenesis/tck/candidates/candidates.properties |   39 +++
 .../candidates/serializable-candidates.properties  |   30 ++
 .../tck/CandidateLoaderTest-sample.properties      |   19 +
 .../org/objenesis/tck/CandidateLoaderTest.java     |  110 +++++++
 tck/test/org/objenesis/tck/ObjenesisTest.java      |  140 ++++++++
 tck/test/org/objenesis/tck/OsgiTest.java           |   61 ++++
 tck/test/org/objenesis/tck/TCKTest.java            |  163 +++++++++
 tck/test/org/objenesis/tck/TextReporterTest.java   |   87 +++++
 update_license.bat                                 |    1 +
 website/.project                                   |   29 ++
 website/.settings/org.eclipse.core.resources.prefs |   14 +
 website/pom.xml                                    |  115 +++++++
 website/site/content/acknowledgements.html         |   47 +++
 website/site/content/details.html                  |  125 +++++++
 website/site/content/download.html                 |   22 ++
 website/site/content/embedding.html                |   66 ++++
 website/site/content/index.html                    |   74 +++++
 website/site/content/license.html                  |   37 ++
 website/site/content/notes.html                    |   27 ++
 website/site/content/sitemap.xml                   |   21 ++
 website/site/content/source.html                   |   13 +
 website/site/content/support.html                  |   17 +
 website/site/content/tutorial.html                 |   86 +++++
 website/site/resources/objenesis.png               |  Bin 0 -> 14758 bytes
 website/site/resources/style.css                   |  344 ++++++++++++++++++++
 website/site/templates/skin.html                   |   41 +++
 101 files changed, 4538 insertions(+), 608 deletions(-)

diff --git a/META-INF/LICENSE b/LICENSE.txt
similarity index 100%
rename from META-INF/LICENSE
rename to LICENSE.txt
diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF
deleted file mode 100644
index b11b2fb..0000000
--- a/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,4 +0,0 @@
-Manifest-Version: 1.0
-Archiver-Version: Plexus Archiver
-Created-By: 14.1-b02 (Sun Microsystems Inc.)
-
diff --git a/META-INF/NOTICE b/META-INF/NOTICE
deleted file mode 100644
index 0d2da6d..0000000
--- a/META-INF/NOTICE
+++ /dev/null
@@ -1,9 +0,0 @@
-// ------------------------------------------------------------------
-// NOTICE file corresponding to the section 4d of The Apache License,
-// Version 2.0, in this case for Objenesis
-// ------------------------------------------------------------------
-
-Objenesis
-Copyright 2006-2009 Joe Walnes, Henri Tremblay, Leonardo Mesquita
-
-
diff --git a/build_eclipse.bat b/build_eclipse.bat
new file mode 100644
index 0000000..5ba4a52
--- /dev/null
+++ b/build_eclipse.bat
@@ -0,0 +1 @@
+%M2_HOME%\bin\mvn.bat eclipse:eclipse -DdownloadSources=true
diff --git a/build_release.bat b/build_release.bat
new file mode 100644
index 0000000..f4164a7
--- /dev/null
+++ b/build_release.bat
@@ -0,0 +1,2 @@
+%M2_HOME%\bin\mvn.bat clean install -Pwebsite,release %*
+
diff --git a/header.txt b/header.txt
new file mode 100644
index 0000000..aba4d36
--- /dev/null
+++ b/header.txt
@@ -0,0 +1,13 @@
+Copyright ${inceptionYear}-${year} the original author or authors.
+
+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.
diff --git a/main/.settings/org.eclipse.core.resources.prefs b/main/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..67c7679
--- /dev/null
+++ b/main/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Sun Feb 11 23:44:27 CET 2007
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/main/.settings/org.eclipse.jdt.core.prefs b/main/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..cc9827e
--- /dev/null
+++ b/main/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,259 @@
+#Sun Feb 11 23:42:08 CET 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.3
+org.eclipse.jdt.core.compiler.compliance=1.3
+org.eclipse.jdt.core.compiler.source=1.3
+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_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=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+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_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+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.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_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_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.clear_blank_lines=true
+org.eclipse.jdt.core.formatter.comment.format_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_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+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=100
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=1
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=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=3
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=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=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=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=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not 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=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_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=do not 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_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_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=do not 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_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_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=do not 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=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=do not 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=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=do not 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_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.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=100
+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.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=3
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/main/.settings/org.eclipse.jdt.ui.prefs b/main/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..bf8b60a
--- /dev/null
+++ b/main/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,11 @@
+#Sun Feb 11 23:44:28 CET 2007
+eclipse.preferences.version=1
+formatter_profile=_Objenesis
+formatter_settings_version=10
+internal.default.compliance=user
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
diff --git a/main/assembly.xml b/main/assembly.xml
new file mode 100644
index 0000000..4fce32e
--- /dev/null
+++ b/main/assembly.xml
@@ -0,0 +1,40 @@
+<!--
+
+    Copyright 2006-2009 the original author or authors.
+
+    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.
+
+-->
+<assembly>
+  <id>bin</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <fileSets>
+    <fileSet>
+      <directory>${project.build.outputDirectory}/META-INF</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>NOTICE</include>
+        <include>LICENSE</include>
+      </includes>
+    </fileSet>
+    <fileSet>
+      <directory>${project.build.directory}</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>*.jar</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
\ No newline at end of file
diff --git a/pom.xml b/main/pom.xml
similarity index 100%
copy from pom.xml
copy to main/pom.xml
diff --git a/org/objenesis/Objenesis.java b/main/src/org/objenesis/Objenesis.java
similarity index 100%
rename from org/objenesis/Objenesis.java
rename to main/src/org/objenesis/Objenesis.java
diff --git a/org/objenesis/ObjenesisBase.java b/main/src/org/objenesis/ObjenesisBase.java
similarity index 100%
rename from org/objenesis/ObjenesisBase.java
rename to main/src/org/objenesis/ObjenesisBase.java
diff --git a/org/objenesis/ObjenesisException.java b/main/src/org/objenesis/ObjenesisException.java
similarity index 100%
rename from org/objenesis/ObjenesisException.java
rename to main/src/org/objenesis/ObjenesisException.java
diff --git a/org/objenesis/ObjenesisHelper.java b/main/src/org/objenesis/ObjenesisHelper.java
similarity index 100%
rename from org/objenesis/ObjenesisHelper.java
rename to main/src/org/objenesis/ObjenesisHelper.java
diff --git a/org/objenesis/ObjenesisSerializer.java b/main/src/org/objenesis/ObjenesisSerializer.java
similarity index 100%
rename from org/objenesis/ObjenesisSerializer.java
rename to main/src/org/objenesis/ObjenesisSerializer.java
diff --git a/org/objenesis/ObjenesisStd.java b/main/src/org/objenesis/ObjenesisStd.java
similarity index 100%
rename from org/objenesis/ObjenesisStd.java
rename to main/src/org/objenesis/ObjenesisStd.java
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/main/src/org/objenesis/instantiator/NullInstantiator.java
similarity index 100%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to main/src/org/objenesis/instantiator/NullInstantiator.java
diff --git a/org/objenesis/instantiator/ObjectInstantiator.java b/main/src/org/objenesis/instantiator/ObjectInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/ObjectInstantiator.java
rename to main/src/org/objenesis/instantiator/ObjectInstantiator.java
diff --git a/org/objenesis/instantiator/SerializationInstantiatorHelper.java b/main/src/org/objenesis/instantiator/SerializationInstantiatorHelper.java
similarity index 100%
rename from org/objenesis/instantiator/SerializationInstantiatorHelper.java
rename to main/src/org/objenesis/instantiator/SerializationInstantiatorHelper.java
diff --git a/org/objenesis/instantiator/basic/AccessibleInstantiator.java b/main/src/org/objenesis/instantiator/basic/AccessibleInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/basic/AccessibleInstantiator.java
rename to main/src/org/objenesis/instantiator/basic/AccessibleInstantiator.java
diff --git a/org/objenesis/instantiator/basic/ConstructorInstantiator.java b/main/src/org/objenesis/instantiator/basic/ConstructorInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/basic/ConstructorInstantiator.java
rename to main/src/org/objenesis/instantiator/basic/ConstructorInstantiator.java
diff --git a/org/objenesis/instantiator/basic/NewInstanceInstantiator.java b/main/src/org/objenesis/instantiator/basic/NewInstanceInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/basic/NewInstanceInstantiator.java
rename to main/src/org/objenesis/instantiator/basic/NewInstanceInstantiator.java
diff --git a/org/objenesis/instantiator/basic/ObjectInputStreamInstantiator.java b/main/src/org/objenesis/instantiator/basic/ObjectInputStreamInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/basic/ObjectInputStreamInstantiator.java
rename to main/src/org/objenesis/instantiator/basic/ObjectInputStreamInstantiator.java
diff --git a/org/objenesis/instantiator/basic/ObjectStreamClassInstantiator.java b/main/src/org/objenesis/instantiator/basic/ObjectStreamClassInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/basic/ObjectStreamClassInstantiator.java
rename to main/src/org/objenesis/instantiator/basic/ObjectStreamClassInstantiator.java
diff --git a/org/objenesis/instantiator/gcj/GCJInstantiator.java b/main/src/org/objenesis/instantiator/gcj/GCJInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/gcj/GCJInstantiator.java
rename to main/src/org/objenesis/instantiator/gcj/GCJInstantiator.java
diff --git a/org/objenesis/instantiator/gcj/GCJInstantiatorBase.java b/main/src/org/objenesis/instantiator/gcj/GCJInstantiatorBase.java
similarity index 100%
rename from org/objenesis/instantiator/gcj/GCJInstantiatorBase.java
rename to main/src/org/objenesis/instantiator/gcj/GCJInstantiatorBase.java
diff --git a/org/objenesis/instantiator/gcj/GCJSerializationInstantiator.java b/main/src/org/objenesis/instantiator/gcj/GCJSerializationInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/gcj/GCJSerializationInstantiator.java
rename to main/src/org/objenesis/instantiator/gcj/GCJSerializationInstantiator.java
diff --git a/org/objenesis/instantiator/jrockit/JRockit131Instantiator.java b/main/src/org/objenesis/instantiator/jrockit/JRockit131Instantiator.java
similarity index 100%
rename from org/objenesis/instantiator/jrockit/JRockit131Instantiator.java
rename to main/src/org/objenesis/instantiator/jrockit/JRockit131Instantiator.java
diff --git a/org/objenesis/instantiator/jrockit/JRockitLegacyInstantiator.java b/main/src/org/objenesis/instantiator/jrockit/JRockitLegacyInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/jrockit/JRockitLegacyInstantiator.java
rename to main/src/org/objenesis/instantiator/jrockit/JRockitLegacyInstantiator.java
diff --git a/org/objenesis/instantiator/perc/PercInstantiator.java b/main/src/org/objenesis/instantiator/perc/PercInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/perc/PercInstantiator.java
rename to main/src/org/objenesis/instantiator/perc/PercInstantiator.java
diff --git a/org/objenesis/instantiator/perc/PercSerializationInstantiator.java b/main/src/org/objenesis/instantiator/perc/PercSerializationInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/perc/PercSerializationInstantiator.java
rename to main/src/org/objenesis/instantiator/perc/PercSerializationInstantiator.java
diff --git a/org/objenesis/instantiator/sun/Sun13Instantiator.java b/main/src/org/objenesis/instantiator/sun/Sun13Instantiator.java
similarity index 100%
rename from org/objenesis/instantiator/sun/Sun13Instantiator.java
rename to main/src/org/objenesis/instantiator/sun/Sun13Instantiator.java
diff --git a/org/objenesis/instantiator/sun/Sun13InstantiatorBase.java b/main/src/org/objenesis/instantiator/sun/Sun13InstantiatorBase.java
similarity index 100%
rename from org/objenesis/instantiator/sun/Sun13InstantiatorBase.java
rename to main/src/org/objenesis/instantiator/sun/Sun13InstantiatorBase.java
diff --git a/org/objenesis/instantiator/sun/Sun13SerializationInstantiator.java b/main/src/org/objenesis/instantiator/sun/Sun13SerializationInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/sun/Sun13SerializationInstantiator.java
rename to main/src/org/objenesis/instantiator/sun/Sun13SerializationInstantiator.java
diff --git a/org/objenesis/instantiator/sun/SunReflectionFactoryInstantiator.java b/main/src/org/objenesis/instantiator/sun/SunReflectionFactoryInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/sun/SunReflectionFactoryInstantiator.java
rename to main/src/org/objenesis/instantiator/sun/SunReflectionFactoryInstantiator.java
diff --git a/org/objenesis/instantiator/sun/SunReflectionFactorySerializationInstantiator.java b/main/src/org/objenesis/instantiator/sun/SunReflectionFactorySerializationInstantiator.java
similarity index 100%
rename from org/objenesis/instantiator/sun/SunReflectionFactorySerializationInstantiator.java
rename to main/src/org/objenesis/instantiator/sun/SunReflectionFactorySerializationInstantiator.java
diff --git a/org/objenesis/strategy/BaseInstantiatorStrategy.java b/main/src/org/objenesis/strategy/BaseInstantiatorStrategy.java
similarity index 100%
rename from org/objenesis/strategy/BaseInstantiatorStrategy.java
rename to main/src/org/objenesis/strategy/BaseInstantiatorStrategy.java
diff --git a/org/objenesis/strategy/InstantiatorStrategy.java b/main/src/org/objenesis/strategy/InstantiatorStrategy.java
similarity index 100%
rename from org/objenesis/strategy/InstantiatorStrategy.java
rename to main/src/org/objenesis/strategy/InstantiatorStrategy.java
diff --git a/org/objenesis/strategy/SerializingInstantiatorStrategy.java b/main/src/org/objenesis/strategy/SerializingInstantiatorStrategy.java
similarity index 100%
rename from org/objenesis/strategy/SerializingInstantiatorStrategy.java
rename to main/src/org/objenesis/strategy/SerializingInstantiatorStrategy.java
diff --git a/org/objenesis/strategy/StdInstantiatorStrategy.java b/main/src/org/objenesis/strategy/StdInstantiatorStrategy.java
similarity index 100%
rename from org/objenesis/strategy/StdInstantiatorStrategy.java
rename to main/src/org/objenesis/strategy/StdInstantiatorStrategy.java
diff --git a/main/test/org/objenesis/ObjenesisExceptionTest.java b/main/test/org/objenesis/ObjenesisExceptionTest.java
new file mode 100644
index 0000000..9e38264
--- /dev/null
+++ b/main/test/org/objenesis/ObjenesisExceptionTest.java
@@ -0,0 +1,54 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Henri Tremblay
+ */
+public class ObjenesisExceptionTest extends TestCase {
+
+   public final void testObjenesisExceptionString() {
+      Exception e = new ObjenesisException("test");
+      assertEquals("test", e.getMessage());
+   }
+
+   public final void testObjenesisExceptionThrowable() {
+      Exception cause = new RuntimeException("test");
+      Exception e = new ObjenesisException(cause);
+      assertSame(cause, e.getCause());
+      assertEquals(cause.toString(), e.getMessage());
+
+      // Check null case
+      e = new ObjenesisException((Throwable) null);
+      assertNull(e.getCause());
+      assertEquals(null, e.getMessage());
+   }
+
+   public final void testObjenesisExceptionStringThrowable() {
+      Exception cause = new RuntimeException("test");
+      Exception e = new ObjenesisException("msg", cause);
+      assertSame(cause, e.getCause());
+      assertEquals("msg", e.getMessage());
+
+      // Check null case
+      e = new ObjenesisException("test", null);
+      assertNull(e.getCause());
+      assertEquals("test", e.getMessage());
+   }
+
+}
diff --git a/main/test/org/objenesis/ObjenesisTest.java b/main/test/org/objenesis/ObjenesisTest.java
new file mode 100644
index 0000000..8b07f7a
--- /dev/null
+++ b/main/test/org/objenesis/ObjenesisTest.java
@@ -0,0 +1,72 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis;
+
+import junit.framework.TestCase;
+
+import org.objenesis.instantiator.ObjectInstantiator;
+import org.objenesis.strategy.InstantiatorStrategy;
+
+/**
+ * @author Henri Tremblay
+ */
+public class ObjenesisTest extends TestCase {
+
+   public final void testObjenesis() {
+      Objenesis o = new ObjenesisStd();
+      assertEquals(
+         "org.objenesis.ObjenesisStd using org.objenesis.strategy.StdInstantiatorStrategy with caching",
+         o.toString());
+   }
+
+   public final void testObjenesis_WithoutCache() {
+      Objenesis o = new ObjenesisStd(false);
+      assertEquals(
+         "org.objenesis.ObjenesisStd using org.objenesis.strategy.StdInstantiatorStrategy without caching",
+         o.toString());
+
+      assertEquals(o.getInstantiatorOf(getClass()).newInstance().getClass(), getClass());
+   }
+
+   public final void testNewInstance() {
+      Objenesis o = new ObjenesisStd();
+      assertEquals(getClass(), o.newInstance(getClass()).getClass());
+   }
+
+   public final void testGetInstantiatorOf() {
+      Objenesis o = new ObjenesisStd();
+      ObjectInstantiator i1 = o.getInstantiatorOf(getClass());
+      // Test instance creation
+      assertEquals(getClass(), i1.newInstance().getClass());
+
+      // Test caching
+      ObjectInstantiator i2 = o.getInstantiatorOf(getClass());
+      assertSame(i1, i2);
+   }
+
+   public final void testToString() {
+      Objenesis o = new ObjenesisStd() {};
+      assertEquals(
+         "org.objenesis.ObjenesisTest$1 using org.objenesis.strategy.StdInstantiatorStrategy with caching",
+         o.toString());
+   }
+}
+
+class MyStrategy implements InstantiatorStrategy {
+   public ObjectInstantiator newInstantiatorOf(Class type) {
+      return null;
+   }
+}
diff --git a/main/test/org/objenesis/SerializingInstantiatorTest.java b/main/test/org/objenesis/SerializingInstantiatorTest.java
new file mode 100644
index 0000000..ade9df0
--- /dev/null
+++ b/main/test/org/objenesis/SerializingInstantiatorTest.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis;
+
+import java.io.NotSerializableException;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Henri Tremblay
+ * @author Leonardo Mesquita
+ */
+public class SerializingInstantiatorTest extends TestCase {
+
+   protected void setUp() throws Exception {
+      super.setUp();
+   }
+
+   protected void tearDown() throws Exception {
+      super.tearDown();
+   }
+
+   public void testNotSerializable() {
+      ObjenesisSerializer o = new ObjenesisSerializer();
+      try {
+    	  o.newInstance(Object.class);
+    	  fail("Should have thrown an exception");
+      } catch (ObjenesisException e) {
+    	  assertTrue(e.getCause() instanceof NotSerializableException);
+      }
+   }
+}
diff --git a/objenesis-formatting.xml b/objenesis-formatting.xml
new file mode 100644
index 0000000..7399822
--- /dev/null
+++ b/objenesis-formatting.xml
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<profiles version="10">
+<profile name="Objenesis" version="10">
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="3"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="3"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+</profile>
+</profiles>
diff --git a/pom.xml b/pom.xml
index 7f50810..e438dce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,72 +18,301 @@ limitations under the License.
 
 <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/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.objenesis</groupId>
-    <artifactId>objenesis-parent</artifactId>
-    <version>1.2</version>
-    <relativePath>..</relativePath>
-  </parent>
-  <artifactId>objenesis</artifactId>
-  <name>Objenesis</name>
-  <description>A library for instantiating Java objects</description>
-  <url>http://objenesis.googlecode.com/svn/docs/index.html</url>
+  <name>Objenesis parent project</name>
+  <groupId>org.objenesis</groupId>
+  <artifactId>objenesis-parent</artifactId>
+  <version>1.2</version>
+  <packaging>pom</packaging>
+  <inceptionYear>2006</inceptionYear>
 
-  <dependencies />
+  <modules>
+    <module>main</module>
+    <module>tck</module>
+  </modules>
+
+  <licenses>
+    <license>
+      <name>Apache 2</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <!-- Used for the copyright -->
+  <organization>
+    <name>Joe Walnes, Henri Tremblay, Leonardo Mesquita</name>
+  </organization>
+
+  <scm>
+    <connection>scm:svn:http://objenesis.googlecode.com/svn/trunk</connection>
+    <developerConnection>scm:svn:https://objenesis.googlecode.com/svn/trunk</developerConnection>
+    <url>http://objenesis.googlecode.com/svn/trunk</url>
+  </scm>
+
+  <developers>
+    <developer>
+      <id>joe</id>
+      <name>Joe Walnes</name>
+      <timezone>0</timezone>
+    </developer>
+    <developer>
+      <id>henri</id>
+      <name>Henri Tremblay</name>
+      <organization>Ossia Conseil</organization>
+      <organizationUrl>http://www.ossia-conseil.com</organizationUrl>
+      <timezone>+1</timezone>
+    </developer>
+    <developer>
+      <id>leonardo</id>
+      <name>Leonardo Mesquita</name>
+      <timezone>-5</timezone>
+    </developer>
+  </developers>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.2</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
 
   <build>
+    <sourceDirectory>${basedir}/src</sourceDirectory>
+    <resources>
+      <resource>
+        <!-- Test resources are in the test source directory -->
+        <directory>${basedir}/src</directory>
+        <excludes>
+          <!-- Everything except java files is considered to be a resource -->
+          <exclude>**/*.java</exclude>
+        </excludes>
+      </resource>
+    </resources>
+    <testSourceDirectory>${basedir}/test</testSourceDirectory>
+    <testResources>
+      <testResource>
+        <!-- Test resources are in the test source directory -->
+        <directory>${basedir}/test</directory>
+        <excludes>
+          <!-- Everything except java files is considered to be a resource -->
+          <exclude>**/*.java</exclude>
+        </excludes>
+      </testResource>
+    </testResources>
     <plugins>
       <plugin>
-        <groupId>com.keyboardsamurais.maven</groupId>
-        <artifactId>maven-timestamp-plugin</artifactId>
-      </plugin>      
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.3</source>
+          <target>1.3</target>
+        </configuration>
+      </plugin>
       <plugin>
-        <groupId>com.google.code.maven-license-plugin</groupId>
-        <artifactId>maven-license-plugin</artifactId>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-source-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-sources</id>
+            <goals>
+              <goal>jar</goal>
+            </goals>
+          </execution>
+        </executions>
       </plugin>
       <plugin>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <useDefaultManifestFile>true</useDefaultManifestFile>
+          <archive>
+            <index>true</index>
+            <addMavenDescriptor>false</addMavenDescriptor>
+            <manifest>
+              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>      
+      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-remote-resources-plugin</artifactId>
-      </plugin>   
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-javadocs</id>
+            <goals>
+              <goal>jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
+        <artifactId>maven-site-plugin</artifactId>
+        <inherited>false</inherited>
         <configuration>
-          <instructions>
-            <Export-Package>org.objenesis.*</Export-Package>
-            <Import-Package>org.objenesis.*</Import-Package>
-          </instructions>
+          <siteDirectory>${basedir}/website</siteDirectory>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-eclipse-plugin</artifactId>
+        <version>2.7</version>
+        <configuration>
+          <downloadSources>true</downloadSources>
         </configuration>
       </plugin>
     </plugins>
+    <extensions>
+      <extension>
+        <groupId>org.apache.maven.wagon</groupId>
+        <artifactId>wagon-ssh-external</artifactId>
+        <version>1.0-beta-5</version>
+      </extension>
+    </extensions>     
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.felix</groupId>
+          <artifactId>maven-bundle-plugin</artifactId>
+          <version>2.0.0</version>        
+          <executions>
+            <execution>
+              <id>bundle-manifest</id>
+              <phase>prepare-package</phase>
+              <goals>
+                <goal>manifest</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>      
+        <plugin>
+          <groupId>com.keyboardsamurais.maven</groupId>
+          <artifactId>maven-timestamp-plugin</artifactId>
+          <version>1.0</version>
+          <executions>
+            <execution>
+              <id>year</id>
+              <goals>
+                <goal>create</goal>
+              </goals>
+              <configuration>
+                <propertyName>year</propertyName>
+                <timestampPattern>yyyy</timestampPattern>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>com.google.code.maven-license-plugin</groupId>
+          <artifactId>maven-license-plugin</artifactId>
+          <version>1.4.0</version>
+          <configuration>
+            <header>${basedir}/../header.txt</header>
+            <excludes>
+              <!-- Nothing is copyrighted in target -->
+              <exclude>target/**</exclude>
+              <!-- copyrights to BEA -->
+              <exclude>src/org/objenesis/instantiator/jrockit/*.java</exclude>
+              <!-- generated pom by maven-shade-plugin -->
+              <exclude>dependency-reduced-pom.xml</exclude>
+              <!-- generated by Equinox during OSGi test -->
+              <exclude>eclipse_config/**</exclude>
+            </excludes>
+            <properties>
+              <inceptionYear>${project.inceptionYear}</inceptionYear>
+              <year>${year}</year>
+            </properties>
+          </configuration>
+          <executions>
+            <execution>
+              <id>check</id>
+              <goals>
+                <goal>check</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-remote-resources-plugin</artifactId>
+          <version>1.0</version>
+          <executions>
+            <execution>
+              <goals>
+                <goal>process</goal>
+              </goals>
+              <configuration>
+                <resourceBundles>
+                  <resourceBundle>org.apache:apache-jar-resource-bundle:1.3</resourceBundle>
+                </resourceBundles>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>        
+      </plugins>     
+    </pluginManagement>
   </build>
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>findbugs-maven-plugin</artifactId>
+        <version>2.1</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <version>2.4</version>
+        <configuration>
+          <targetJdk>1.3</targetJdk>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
 
+  <distributionManagement>
+    <repository>
+      <id>easymock-release</id>
+      <name>EasyMock Repository</name>
+      <url>scpexe://shell.sf.net/home/groups/e/ea/easymock/htdocs/maven/repository</url>
+    </repository>
+    <snapshotRepository>
+      <id>easymock-snapshot</id>
+      <name>EasyMock Snapshot Repository</name>
+      <url>scpexe://shell.sf.net/home/groups/e/ea/easymock/htdocs/maven/repository-snapshot</url>
+    </snapshotRepository>
+  </distributionManagement>
+  
   <profiles>
     <profile>
-      <!-- Activate to create the release bundle -->
-      <id>release</id>
+      <!-- Activate to update the license -->
+      <id>license</id>
       <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>      
-            <artifactId>maven-assembly-plugin</artifactId>
-            <configuration>
-              <descriptors>
-                <descriptor>assembly.xml</descriptor>
-              </descriptors>          
-            </configuration>
-            <executions>
-              <execution>
-                <id>make-assembly</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-              </execution>
-            </executions>        
-          </plugin>
-        </plugins>        
+        <pluginManagement>
+          <plugins>
+            <plugin>
+              <groupId>com.google.code.maven-license-plugin</groupId>
+              <artifactId>maven-license-plugin</artifactId>
+              <executions>
+                <execution>
+                  <id>format</id>
+                  <phase>generate-sources</phase>
+                  <goals>
+                    <goal>format</goal>
+                  </goals>
+                </execution>
+              </executions>
+            </plugin>
+          </plugins>
+        </pluginManagement>
       </build>
     </profile>
+    <profile>
+      <!-- Activate to generate the website -->
+      <id>website</id>
+      <modules>
+        <module>website</module>
+      </modules>
+    </profile>    
   </profiles>
 </project>
diff --git a/settings-example.xml b/settings-example.xml
new file mode 100644
index 0000000..f36c804
--- /dev/null
+++ b/settings-example.xml
@@ -0,0 +1,28 @@
+<!--
+
+	To run JVM tests, modify the path values below for each JVM installed
+in your system and copy the contents to ~/.m2/settings.xml 
+( in Windows, "%USERPROFILE%\.m2\settings.xml" )
+
+-->
+
+<settings>
+	<profiles>
+	<profile>
+		<id>test</id>
+		<activation>
+			<activeByDefault>true</activeByDefault>
+		</activation>
+		<properties>
+			<sun_jdk1_3.jvm>c:\jdk1.3.1_19\bin\java.exe</sun_jdk1_3.jvm>
+			<sun_jdk1_4.jvm>c:\j2sdk1.4.2_12\bin\java.exe</sun_jdk1_4.jvm>
+			<sun_jdk1_5.jvm>c:\Arquivos de Programas\Java\jre1.5.0_10\bin\java.exe</sun_jdk1_5.jvm>
+			<sun_jdk1_6.jvm>c:\Arquivos de Programas\Java\jre1.6.0_13\bin\java.exe</sun_jdk1_6.jvm>
+			<jrockit1_3.jvm>c:\Arquivos de programas\JRockit\7.0SP6\1.3.1\bin\java.exe</jrockit1_3.jvm>
+			<jrockit1_4.jvm>c:\jrockit-j2sdk1.4.2_08\bin\java.exe</jrockit1_4.jvm>
+			<jrockit1_5.jvm>c:\jrrt-3.1.0-1.5.0\bin\java.exe</jrockit1_5.jvm>
+			<jrockit1_6.jvm>c:\jrrt-3.1.0-1.6.0\bin\java.exe</jrockit1_6.jvm>
+		</properties>
+	</profile>
+	</profiles>
+</settings>
diff --git a/tck/.settings/org.eclipse.core.resources.prefs b/tck/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..6e8f190
--- /dev/null
+++ b/tck/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Feb 12 00:06:57 CET 2007
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/tck/.settings/org.eclipse.jdt.core.prefs b/tck/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c2903ff
--- /dev/null
+++ b/tck/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,259 @@
+#Sun Feb 11 23:43:02 CET 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.3
+org.eclipse.jdt.core.compiler.compliance=1.3
+org.eclipse.jdt.core.compiler.source=1.3
+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_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=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+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_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+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.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_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_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.clear_blank_lines=true
+org.eclipse.jdt.core.formatter.comment.format_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_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+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=100
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=1
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=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=3
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=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=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=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=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not 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=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_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=do not 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_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_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=do not 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_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_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=do not 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=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=do not 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=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=do not 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_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.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=100
+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.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=3
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/tck/.settings/org.eclipse.jdt.ui.prefs b/tck/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..cabe1ee
--- /dev/null
+++ b/tck/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,10 @@
+#Sun Feb 11 23:43:16 CET 2007
+eclipse.preferences.version=1
+formatter_profile=_Objenesis
+formatter_settings_version=10
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
diff --git a/tck/pom.xml b/tck/pom.xml
new file mode 100644
index 0000000..dfe295d
--- /dev/null
+++ b/tck/pom.xml
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+Copyright 2006-2009 Henri Tremblay
+
+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.
+-->
+
+<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/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.objenesis</groupId>
+    <artifactId>objenesis-parent</artifactId>
+    <version>1.2</version>
+    <relativePath>..</relativePath>
+  </parent>
+  <artifactId>objenesis-tck</artifactId>
+  <name>Objenesis TCK</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.objenesis</groupId>
+      <artifactId>objenesis</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+    <!-- Dependencies below are for the OSGi test -->
+  
+    <dependency>
+      <groupId>org.springframework.osgi</groupId>
+      <artifactId>spring-osgi-test</artifactId>
+      <version>1.2.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.osgi</groupId>
+      <artifactId>spring-osgi-annotation</artifactId>
+      <version>1.2.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.osgi</groupId>
+      <artifactId>spring-osgi-extender</artifactId>
+      <version>1.2.0</version>
+      <scope>test</scope>
+    </dependency>
+    
+    <!-- These are just to have a nice logging -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
+      <version>1.5.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>com.springsource.slf4j.api</artifactId>
+      <version>1.5.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>com.springsource.slf4j.log4j</artifactId>
+      <version>1.5.0</version>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <artifactId>log4j</artifactId>
+          <groupId>log4j</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>com.springsource.org.apache.log4j</artifactId>
+          <groupId>org.apache.log4j</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.osgi</groupId>
+      <artifactId>log4j.osgi</artifactId>
+      <version>1.2.15-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+    
+    <!-- And this is our Equinox implementation -->
+    <dependency>
+      <groupId>org.eclipse.osgi</groupId>
+      <artifactId>org.eclipse.osgi</artifactId>
+      <version>3.2.2</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>com.keyboardsamurais.maven</groupId>
+        <artifactId>maven-timestamp-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>com.google.code.maven-license-plugin</groupId>
+        <artifactId>maven-license-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-remote-resources-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifest>
+              <mainClass>org.objenesis.tck.Main</mainClass>
+            </manifest>
+          </archive>        
+        </configuration>
+      </plugin>       
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>        
+        <version>1.2.1</version>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin> 
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <configuration>
+          <links>
+            <link>http://objenesis.googlecode.com/svn/docs/apidocs/</link>
+          </links>
+        </configuration>
+      </plugin>      
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>jvm-test</id>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>Sun 1.3</id>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <phase>test</phase>
+                <configuration>
+                  <jvm>${sun_jdk1_3.jvm}</jvm>
+                </configuration>
+              </execution>
+              <execution>
+                <id>Sun 1.4</id>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <phase>test</phase>
+                <configuration>
+                  <jvm>${sun_jdk1_4.jvm}</jvm>
+                </configuration>
+              </execution>
+              <execution>
+                <id>Sun 1.5</id>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <phase>test</phase>
+                <configuration>
+                  <jvm>${sun_jdk1_5.jvm}</jvm>
+                </configuration>
+              </execution>
+              <execution>
+                <id>Sun 1.6</id>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <phase>test</phase>
+                <configuration>
+                  <jvm>${sun_jdk1_6.jvm}</jvm>
+                </configuration>
+              </execution>
+              <execution>
+                <id>JRockit for Java 1.3</id>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <phase>test</phase>
+                <configuration>
+                  <jvm>${jrockit1_3.jvm}</jvm>
+                </configuration>
+              </execution>
+              <execution>
+                <id>JRockit for Java 1.4</id>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <phase>test</phase>
+                <configuration>
+                  <jvm>${jrockit1_4.jvm}</jvm>
+                </configuration>
+              </execution>
+              <execution>
+                <id>JRockit for Java 1.5</id>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <phase>test</phase>
+                <configuration>
+                  <jvm>${jrockit1_5.jvm}</jvm>
+                </configuration>
+              </execution>
+              <execution>
+                <id>JRockit for Java 1.6</id>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <phase>test</phase>
+                <configuration>
+                  <jvm>${jrockit1_6.jvm}</jvm>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <!-- Activate to create a complete release -->
+      <id>release</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>exec-maven-plugin</artifactId>
+            <inherited>false</inherited>
+            <configuration>
+              <executable>java</executable>
+              <arguments>
+                <argument>-jar</argument>
+                <argument>${project.build.directory}\${project.build.finalName}.jar</argument>
+              </arguments>
+            </configuration>
+            <executions>
+              <execution>
+                <id>test-release</id>
+                <phase>integration-test</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>    
+  </profiles>
+
+</project>
diff --git a/tck/src/org/objenesis/tck/CandidateLoader.java b/tck/src/org/objenesis/tck/CandidateLoader.java
new file mode 100644
index 0000000..fd02e82
--- /dev/null
+++ b/tck/src/org/objenesis/tck/CandidateLoader.java
@@ -0,0 +1,129 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.Properties;
+
+/**
+ * Loads a set of candidate classes from a properties file into the TCK. <p/> The properties file
+ * takes the form of candidateClassName=shortDescription.
+ * 
+ * @author Joe Walnes
+ * @see TCK
+ */
+public class CandidateLoader {
+
+   private final TCK tck;
+   private final ClassLoader classloader;
+   private final ErrorHandler errorHandler;
+
+   /**
+    * Handler for reporting errors from the CandidateLoader.
+    */
+   public static interface ErrorHandler {
+      /**
+       * Called whenever, trying to retrieve a candidate class from its name, a
+       * ClassNotFoundException is thrown
+       * 
+       * @param name Candidate class name
+       */
+      void classNotFound(String name);
+   }
+
+   /**
+    * Error handler that logs errors to a text stream.
+    */
+   public static class LoggingErrorHandler implements CandidateLoader.ErrorHandler {
+
+      private final PrintStream out;
+
+      /**
+       * @param out Stream in which to log
+       */
+      public LoggingErrorHandler(PrintStream out) {
+         this.out = out;
+      }
+
+      public void classNotFound(String name) {
+         out.println("Class not found : " + name);
+      }
+
+   }
+
+   /**
+    * @param tck TCK that will use the candidates
+    * @param classloader ClassLoader from which candidates classes are loaded
+    * @param errorHandler Handler called in case of error
+    */
+   public CandidateLoader(TCK tck, ClassLoader classloader, ErrorHandler errorHandler) {
+      this.tck = tck;
+      this.classloader = classloader;
+      this.errorHandler = errorHandler;
+   }
+
+   /**
+    * @param inputStream Stream containing the properties
+    * @throws IOException If something goes wrong while reading the stream
+    */
+   public void loadFrom(InputStream inputStream) throws IOException {
+      // Properties contains a convenient key=value parser, however it stores
+      // the entries in a Hashtable which loses the original order.
+      // So, we create a special Properties instance that writes its
+      // entries directly to the TCK (which retains order).
+      Properties properties = new Properties() {
+         private static final long serialVersionUID = 1L;
+         public Object put(Object key, Object value) {
+            handlePropertyEntry((String) key, (String) value);
+            return null;
+         }
+      };
+      properties.load(inputStream);
+   }
+
+   /**
+    * Load a candidate property file
+    * 
+    * @param cls Class on which <code>getResourceAsStream</code> is called
+    * @param resource File name
+    * @throws IOException If there's problem reading the file
+    */
+   public void loadFromResource(Class cls, String resource) throws IOException {
+      InputStream candidatesConfig = cls.getResourceAsStream(resource);
+      if(candidatesConfig == null) {
+         throw new IOException("Resource '" + resource + "' not found relative to " + cls.getName());
+      }
+      try {
+         loadFrom(candidatesConfig);
+      }
+      finally {
+         candidatesConfig.close();
+      }
+   }
+
+   private void handlePropertyEntry(String key, String value) {
+      try {
+         Class candidate = Class.forName(key, true, classloader);
+         tck.registerCandidate(candidate, value);
+      }
+      catch(ClassNotFoundException e) {
+         errorHandler.classNotFound(key);
+      }
+   }
+
+}
diff --git a/tck/src/org/objenesis/tck/Main.java b/tck/src/org/objenesis/tck/Main.java
new file mode 100644
index 0000000..486f3e7
--- /dev/null
+++ b/tck/src/org/objenesis/tck/Main.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import org.objenesis.Objenesis;
+import org.objenesis.ObjenesisSerializer;
+import org.objenesis.ObjenesisStd;
+
+/**
+ * Command line launcher for Technology Compatibility Kit (TCK).
+ * 
+ * @author Joe Walnes
+ * @see TCK
+ */
+public class Main {
+
+   private static class MockSuperClass {
+      private final boolean superConstructorCalled;
+
+      public MockSuperClass() {
+         superConstructorCalled = true;
+      }
+
+      public boolean isSuperConstructorCalled() {
+         return superConstructorCalled;
+      }
+   }
+
+   private static class MockClass extends MockSuperClass implements Serializable {
+      private static final long serialVersionUID = 1L;
+      
+      private final boolean constructorCalled;
+
+      public MockClass() {
+         constructorCalled = true;
+      }
+
+      public boolean isConstructorCalled() {
+         return constructorCalled;
+      }
+   }
+
+   /**
+    * Main class of the TCK. Can also be called as a normal method from an application server.
+    * 
+    * @param args No parameters are required
+    * @throws IOException When the TCK fails to read properties' files.
+    */
+   public static void main(String[] args) throws IOException {
+
+      TextReporter reporter = new TextReporter(System.out, System.err);
+
+      runTest(new ObjenesisStd(), reporter, "Objenesis std", "candidates/candidates.properties");
+      runTest(new ObjenesisSerializer(), reporter, "Objenesis serializer",
+         "candidates/serializable-candidates.properties");
+
+      boolean result = runParentConstructorTest();
+
+      reporter.printResult(result);
+   }
+
+   private static boolean runParentConstructorTest() {
+      try {
+         Object result = new ObjenesisSerializer().newInstance(MockClass.class);
+         MockClass mockObject = (MockClass) result;
+         return mockObject.isSuperConstructorCalled() && !mockObject.isConstructorCalled();
+      }
+      catch(Exception e) {
+         System.err.println("--- Not serializable parent constructor called ---");
+         e.printStackTrace(System.err);
+         return false;
+      }
+   }
+
+   private static void runTest(Objenesis objenesis, Reporter reporter, String description,
+      String candidates) throws IOException {
+      TCK tck = new TCK();
+      tck.registerObjenesisInstance(objenesis, description);
+
+      CandidateLoader candidateLoader = new CandidateLoader(tck, Main.class.getClassLoader(),
+         new CandidateLoader.LoggingErrorHandler(System.err));
+
+      candidateLoader.loadFromResource(Main.class, candidates);
+
+      tck.runTests(reporter);
+   }
+
+}
diff --git a/tck/src/org/objenesis/tck/Reporter.java b/tck/src/org/objenesis/tck/Reporter.java
new file mode 100644
index 0000000..ffb8d74
--- /dev/null
+++ b/tck/src/org/objenesis/tck/Reporter.java
@@ -0,0 +1,80 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.util.Collection;
+
+/**
+ * Reports results from the TCK back to the user.
+ * <p>
+ * The sequence these methods are called is described below:
+ * </p>
+ * 
+ * <pre>
+ * startTests(startObjenesis(result | exception) * endObjenesis) * endTests
+ * </pre>
+ * 
+ * @author Joe Walnes
+ * @see TCK
+ * @see TextReporter
+ */
+public interface Reporter {
+
+   /**
+    * Report that the tests are starting. Provides information that is useful to be reported.
+    * 
+    * @param platformDescription Description the platform being run on (i.e. JVM version, vendor,
+    *        etc).
+    * @param allCandidates Descriptions (String) of all candidates being used in tests.
+    * @param allObjenesisInstances Descriptions of all Objenesis instances being used in tests.
+    */
+   void startTests(String platformDescription, Collection allCandidates,
+      Collection allObjenesisInstances);
+
+   /**
+    * Report that a test between a candidate and an objenesis instance if about to start.
+    * 
+    * @param candidateDescription Description of the candidate class.
+    * @param objenesisDescription Description of the objenesis instance.
+    */
+   void startTest(String candidateDescription, String objenesisDescription);
+
+   /**
+    * Report details about what happened when an Objenesis instance tried to instantiate the current
+    * candidate.
+    * 
+    * @param instantiatedObject Whether the ObjectInstantiator successfully instantiated the
+    *        candidate class.
+    */
+   void result(boolean instantiatedObject);
+
+   /**
+    * Report that something bad happened during the test.
+    * 
+    * @param exception Exception thrown by instantiator.
+    */
+   void exception(Exception exception);
+
+   /**
+    * Report that tests have been completed for a particular Objenesis instance and candidate.
+    */
+   void endTest();
+
+   /**
+    * Report that all tests have finished. Nothing will be called after this method.
+    */
+   void endTests();
+}
diff --git a/tck/src/org/objenesis/tck/TCK.java b/tck/src/org/objenesis/tck/TCK.java
new file mode 100644
index 0000000..02841ba
--- /dev/null
+++ b/tck/src/org/objenesis/tck/TCK.java
@@ -0,0 +1,143 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.objenesis.Objenesis;
+
+/**
+ * <b>Technology Compatibility Kit</b> (TCK) for {@link Objenesis}s.
+ * <p/>
+ * This TCK accepts a set of candidate classes (class it attempts to instantiate) and a set of
+ * Objenesis implementations. It then tries instantiating every candidate with every Objenesis
+ * implementations, reporting the results to a {@link Reporter}.
+ * <h3>Example usage</h3>
+ * 
+ * <pre>
+ * TCK tck = new TCK();
+ * // register candidate classes.
+ * tck.registerCandidate(SomeClass.class, "A basic class");
+ * tck.registerCandidate(SomeEvil.class, "Something evil");
+ * tck.registerCandidate(NotEvil.class, "Something nice");
+ * // register Objenesis instances.
+ * tck.registerObjenesisInstance(new ObjenesisStd(), "Objenesis");
+ * tck.registerObjenesisInstance(new ObjenesisSerializaer(), "Objenesis for serialization");
+ * // go!
+ * Reporter reporter = new TextReporter(System.out, System.err);
+ * tck.runTests(reporter);
+ * </pre>
+ * 
+ * @author Joe Walnes
+ * @see org.objenesis.instantiator.ObjectInstantiator
+ * @see Reporter
+ * @see Main
+ */
+public class TCK {
+
+   private final List objenesisInstances = new ArrayList();
+   private final List candidates = new ArrayList();
+   private final Map descriptions = new HashMap();
+
+   /**
+    * Register a candidate class to attempt to instantiate.
+    * 
+    * @param candidateClass Class to attempt to instantiate
+    * @param description Description of the class
+    */
+   public void registerCandidate(Class candidateClass, String description) {
+      candidates.add(candidateClass);
+      descriptions.put(candidateClass, description);
+   }
+
+   /**
+    * Register an Objenesis instance to use when attempting to instantiate a class.
+    * 
+    * @param objenesis Tested Objenesis instance
+    * @param description Description of the Objenesis instance
+    */
+   public void registerObjenesisInstance(Objenesis objenesis, String description) {
+      objenesisInstances.add(objenesis);
+      descriptions.put(objenesis, description);
+   }
+
+   /**
+    * Run all TCK tests.
+    * 
+    * @param reporter Where to report the results of the test to.
+    */
+   public void runTests(Reporter reporter) {
+      reporter.startTests(describePlatform(), findAllDescriptions(candidates, descriptions),
+         findAllDescriptions(objenesisInstances, descriptions));
+
+      for(Iterator i = candidates.iterator(); i.hasNext();) {
+         Class candidateClass = (Class) i.next();
+         String candidateDescription = (String) descriptions.get(candidateClass);
+
+         for(Iterator j = objenesisInstances.iterator(); j.hasNext();) {
+            Objenesis objenesis = (Objenesis) j.next();
+
+            String objenesisDescription = (String) descriptions.get(objenesis);
+
+            reporter.startTest(candidateDescription, objenesisDescription);
+
+            runTest(reporter, candidateClass, objenesis, candidateDescription);
+
+            reporter.endTest();
+         }
+      }
+      reporter.endTests();
+   }
+
+   private void runTest(Reporter reporter, Class candidate, Objenesis objenesis,
+      String candidateDescription) {
+      try {
+         Object instance = objenesis.newInstance(candidate);
+         boolean success = instance != null && instance.getClass() == candidate;
+         reporter.result(success);
+      }
+      catch(Exception e) {
+         reporter.exception(e);
+      }
+   }
+
+   private Collection findAllDescriptions(List keys, Map descriptions) {
+      List results = new ArrayList(keys.size());
+      for(int i = 0; i < keys.size(); i++) {
+         results.add(descriptions.get(keys.get(i)));
+      }
+      return results;
+   }
+
+   /**
+    * Describes the platform. Outputs Java version and vendor. To change this behavior, override
+    * this method.
+    * 
+    * @return Description of the current platform
+    */
+   protected String describePlatform() {
+      return "Java " + System.getProperty("java.specification.version") + " ("
+         + System.getProperty("java.vm.vendor") + " " + System.getProperty("java.vm.name") + " "
+         + System.getProperty("java.vm.version") + " " + System.getProperty("java.runtime.version")
+         + ")";
+   }
+
+}
diff --git a/tck/src/org/objenesis/tck/TextReporter.java b/tck/src/org/objenesis/tck/TextReporter.java
new file mode 100644
index 0000000..c45f72c
--- /dev/null
+++ b/tck/src/org/objenesis/tck/TextReporter.java
@@ -0,0 +1,239 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * Reports results from TCK as tabulated text, suitable for dumping to the console or a file and
+ * being read by a human. If can be reused to provide a summary reports of different candidates as
+ * long as the same objenesisDescription is not used twice.
+ * 
+ * @author Joe Walnes
+ * @author Henri Tremblay
+ * @see TCK
+ * @see Reporter
+ */
+public class TextReporter implements Reporter {
+
+   private static class Result {
+
+      String objenesisDescription;
+
+      String candidateDescription;
+
+      boolean result;
+
+      Exception exception;
+
+      /**
+       * @param objenesisDescription Description of the tested Objenesis instance
+       * @param candidateDescription Description of the tested candidate
+       * @param result If the test is successful or not
+       * @param exception Exception that might have occured during the test
+       */
+      public Result(String objenesisDescription, String candidateDescription, boolean result,
+         Exception exception) {
+         this.objenesisDescription = objenesisDescription;
+         this.candidateDescription = candidateDescription;
+         this.result = result;
+         this.exception = exception;
+      }
+   }
+
+   private final PrintStream summary;
+
+   private final PrintStream log;
+
+   private long startTime;
+
+   private long totalTime = 0;
+
+   private int errorCount = 0;
+
+   private SortedSet allCandidates = new TreeSet();
+
+   private SortedSet allInstantiators = new TreeSet();
+
+   private String currentObjenesis;
+
+   private String currentCandidate;
+
+   private Map objenesisResults = new HashMap();
+
+   private String platformDescription;
+
+   /**
+    * @param summary Output of main report.
+    * @param log Any additional information, useful for diagnostics.
+    */
+   public TextReporter(PrintStream summary, PrintStream log) {
+      this.summary = summary;
+      this.log = log;
+   }
+
+   public void startTests(String platformDescription, Collection allCandidates,
+      Collection allInstantiators) {
+
+      // HT: in case the same reporter is reused, I'm guessing that it will
+      // always be the
+      // same platform
+      this.platformDescription = platformDescription;
+      this.allCandidates.addAll(allCandidates);
+      this.allInstantiators.addAll(allInstantiators);
+
+      for(Iterator it = allInstantiators.iterator(); it.hasNext();) {
+         objenesisResults.put(it.next(), new HashMap());
+      }
+
+      startTime = System.currentTimeMillis();
+   }
+
+   public void startTest(String candidateDescription, String objenesisDescription) {
+      currentCandidate = candidateDescription;
+      currentObjenesis = objenesisDescription;
+   }
+
+   public void result(boolean instantiatedObject) {
+      if(!instantiatedObject) {
+         errorCount++;
+      }
+      ((Map) objenesisResults.get(currentObjenesis)).put(currentCandidate, new Result(
+         currentObjenesis, currentCandidate, instantiatedObject, null));
+   }
+
+   public void exception(Exception exception) {
+
+      errorCount++;
+
+      ((Map) objenesisResults.get(currentObjenesis)).put(currentCandidate, new Result(
+         currentObjenesis, currentCandidate, false, exception));
+   }
+
+   public void endTest() {
+   }
+
+   public void endTests() {
+      totalTime += System.currentTimeMillis() - startTime;
+   }
+
+   /**
+    * Print the final summary report
+    */
+   public void printResult(boolean parentConstructorTest) {
+      // Platform
+      summary.println("Running TCK on platform: " + platformDescription);
+      summary.println();
+
+      summary.println("Not serializable parent constructor called: "
+         + (parentConstructorTest ? 'Y' : 'N'));
+      summary.println();
+      
+      if(!parentConstructorTest) {
+         errorCount++;
+      }
+      
+      int maxObjenesisWidth = lengthOfLongestStringIn(allInstantiators);
+      int maxCandidateWidth = lengthOfLongestStringIn(allCandidates);
+
+      // Header
+      summary.print(pad("", maxCandidateWidth) + ' ');
+      for(Iterator it = allInstantiators.iterator(); it.hasNext();) {
+         String desc = (String) it.next();
+         summary.print(pad(desc, maxObjenesisWidth) + ' ');
+      }
+      summary.println();
+
+      List exceptions = new ArrayList();
+
+      // Candidates (and keep the exceptions meanwhile)
+      for(Iterator it = allCandidates.iterator(); it.hasNext();) {
+         String candidateDesc = (String) it.next();
+         summary.print(pad(candidateDesc, maxCandidateWidth) + ' ');
+
+         for(Iterator itInst = allInstantiators.iterator(); itInst.hasNext();) {
+            String instDesc = (String) itInst.next();
+            Result result = (Result) ((Map) objenesisResults.get(instDesc)).get(candidateDesc);
+            if(result == null) {
+               summary.print(pad("N/A", maxObjenesisWidth) + " ");
+            }
+            else {
+               summary.print(pad(result.result ? "Y" : "n", maxObjenesisWidth) + " ");
+
+               if(result.exception != null) {
+                  exceptions.add(result);
+               }
+            }
+         }
+         summary.println();
+      }
+
+      summary.println();
+
+      // Final
+      if(errorCount != 0) {
+
+         for(Iterator it = exceptions.iterator(); it.hasNext();) {
+            Result element = (Result) it.next();
+            log.println("--- Candidate '" + element.candidateDescription + "', Instantiator '"
+               + element.objenesisDescription + "' ---");
+            element.exception.printStackTrace(log);
+            log.println();
+         }
+
+         log.println();
+
+         summary.println("--- FAILED: " + errorCount + " error(s) occured ---");
+      }
+      else {
+         summary.println("--- SUCCESSFUL: TCK tests passed without errors in " + totalTime + " ms");
+      }
+
+      summary.println();
+   }
+
+   private String pad(String text, int width) {
+      if(text.length() == width) {
+         return text;
+      }
+      else if(text.length() > width) {
+         return text.substring(0, width);
+      }
+      else {
+         StringBuffer padded = new StringBuffer(text);
+         while(padded.length() < width) {
+            padded.append(' ');
+         }
+         return padded.toString();
+      }
+   }
+
+   private int lengthOfLongestStringIn(Collection descriptions) {
+      int result = 0;
+      for(Iterator it = descriptions.iterator(); it.hasNext();) {
+         result = Math.max(result, ((String) it.next()).length());
+      }
+      return result;
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/ConstructorThrowingException.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/ConstructorThrowingException.java
index 6f3c498..88ccb24 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/ConstructorThrowingException.java
@@ -1,31 +1,27 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+/**
+ * @author Joe Walnes
+ */
+public class ConstructorThrowingException {
+
+   public ConstructorThrowingException() {
+      throw new IllegalArgumentException("Constructor throwing an exception");
+   }
+
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/ConstructorWithArguments.java
similarity index 63%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/ConstructorWithArguments.java
index 6f3c498..31fcd18 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/ConstructorWithArguments.java
@@ -1,31 +1,34 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+/**
+ * @author Joe Walnes
+ */
+public class ConstructorWithArguments {
+
+   private final String something;
+   private final int another;
+
+   public ConstructorWithArguments(String something, int another) {
+      this.something = something;
+      this.another = another;
+   }
+
+   public String toString() {
+      return something + another;
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/ConstructorWithMandatoryArguments.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/ConstructorWithMandatoryArguments.java
index 6f3c498..5d89f5a 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/ConstructorWithMandatoryArguments.java
@@ -1,31 +1,28 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+/**
+ * @author Joe Walnes
+ */
+public class ConstructorWithMandatoryArguments {
+
+   public ConstructorWithMandatoryArguments(String something) {
+      if(something == null) {
+         throw new IllegalArgumentException("Need arguments");
+      }
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/DefaultPackageConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/DefaultPackageConstructor.java
index 6f3c498..2950d8e 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/DefaultPackageConstructor.java
@@ -1,31 +1,26 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+/**
+ * @author Joe Walnes
+ */
+public class DefaultPackageConstructor {
+
+   DefaultPackageConstructor() {
+
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/DefaultPrivateConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/DefaultPrivateConstructor.java
index 6f3c498..19dd74e 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/DefaultPrivateConstructor.java
@@ -1,31 +1,26 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+/**
+ * @author Joe Walnes
+ */
+public class DefaultPrivateConstructor {
+
+   private DefaultPrivateConstructor() {
+
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/DefaultProtectedConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/DefaultProtectedConstructor.java
index 6f3c498..82ccb30 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/DefaultProtectedConstructor.java
@@ -1,31 +1,26 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+/**
+ * @author Joe Walnes
+ */
+public class DefaultProtectedConstructor {
+
+   protected DefaultProtectedConstructor() {
+
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/DefaultPublicConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/DefaultPublicConstructor.java
index 6f3c498..e2198fe 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/DefaultPublicConstructor.java
@@ -1,31 +1,26 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+/**
+ * @author Joe Walnes
+ */
+public class DefaultPublicConstructor {
+
+   public DefaultPublicConstructor() {
+
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/NoConstructor.java
similarity index 66%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/NoConstructor.java
index 6f3c498..66b7949 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/NoConstructor.java
@@ -1,31 +1,22 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+/**
+ * @author Joe Walnes
+ */
+public class NoConstructor {
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableConstructorThrowingException.java
similarity index 63%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableConstructorThrowingException.java
index 6f3c498..d624e4c 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableConstructorThrowingException.java
@@ -1,31 +1,31 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableConstructorThrowingException implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+   
+   public SerializableConstructorThrowingException() {
+      throw new IllegalArgumentException("Constructor throwing an exception");
+   }
+
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableConstructorWithArguments.java
similarity index 55%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableConstructorWithArguments.java
index 6f3c498..4abab1c 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableConstructorWithArguments.java
@@ -1,31 +1,38 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableConstructorWithArguments implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+   
+   private final String something;
+   private final int another;
+
+   public SerializableConstructorWithArguments(String something, int another) {
+      this.something = something;
+      this.another = another;
+   }
+
+   public String toString() {
+      return something + another;
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableConstructorWithMandatoryArguments.java
similarity index 60%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableConstructorWithMandatoryArguments.java
index 6f3c498..736e660 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableConstructorWithMandatoryArguments.java
@@ -1,31 +1,32 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableConstructorWithMandatoryArguments implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+   
+   public SerializableConstructorWithMandatoryArguments(String something) {
+      if(something == null) {
+         throw new IllegalArgumentException("Need arguments");
+      }
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableDefaultPackageConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableDefaultPackageConstructor.java
index 6f3c498..87ee71b 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableDefaultPackageConstructor.java
@@ -1,31 +1,30 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableDefaultPackageConstructor implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+   
+   SerializableDefaultPackageConstructor() {
+
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableDefaultPrivateConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableDefaultPrivateConstructor.java
index 6f3c498..19a8340 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableDefaultPrivateConstructor.java
@@ -1,31 +1,30 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableDefaultPrivateConstructor implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+   
+   private SerializableDefaultPrivateConstructor() {
+
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableDefaultProtectedConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableDefaultProtectedConstructor.java
index 6f3c498..2594f52 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableDefaultProtectedConstructor.java
@@ -1,31 +1,30 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableDefaultProtectedConstructor implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+   
+   protected SerializableDefaultProtectedConstructor() {
+
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableDefaultPublicConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableDefaultPublicConstructor.java
index 6f3c498..24f3d70 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableDefaultPublicConstructor.java
@@ -1,31 +1,30 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableDefaultPublicConstructor implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+   
+   public SerializableDefaultPublicConstructor() {
+
+   }
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableNoConstructor.java
similarity index 67%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableNoConstructor.java
index 6f3c498..bf58386 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableNoConstructor.java
@@ -1,31 +1,25 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableNoConstructor implements Serializable {
+   private static final long serialVersionUID = 1L;
+}
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableReplacer.java
similarity index 66%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableReplacer.java
index 6f3c498..ae05221 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableReplacer.java
@@ -13,19 +13,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.objenesis.instantiator;
+package org.objenesis.tck.candidates;
+
+import java.io.Serializable;
 
 /**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
+ * @author Joe Walnes
  */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
+public class SerializableReplacer implements Serializable {
+   
+   private static final long serialVersionUID = 1L;
+   
+   protected Object writeReplace() {
+      return new SerializableResolver();
    }
 }
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableResolver.java
similarity index 66%
copy from org/objenesis/instantiator/NullInstantiator.java
copy to tck/src/org/objenesis/tck/candidates/SerializableResolver.java
index 6f3c498..06831d8 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableResolver.java
@@ -13,19 +13,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.objenesis.instantiator;
+package org.objenesis.tck.candidates;
+
+import java.io.Serializable;
 
 /**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
+ * @author Joe Walnes
  */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
+public class SerializableResolver implements Serializable {
+   
+   private static final long serialVersionUID = 1L;
+   
+   protected Object readResolve() {
+      return new SerializableReplacer();
    }
 }
diff --git a/org/objenesis/instantiator/NullInstantiator.java b/tck/src/org/objenesis/tck/candidates/SerializableWithAncestorThrowingException.java
similarity index 66%
rename from org/objenesis/instantiator/NullInstantiator.java
rename to tck/src/org/objenesis/tck/candidates/SerializableWithAncestorThrowingException.java
index 6f3c498..3d3f729 100644
--- a/org/objenesis/instantiator/NullInstantiator.java
+++ b/tck/src/org/objenesis/tck/candidates/SerializableWithAncestorThrowingException.java
@@ -1,31 +1,31 @@
-/**
- * Copyright 2006-2009 the original author or authors.
- *
- * 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.objenesis.instantiator;
-
-/**
- * The instantiator that always return a null instance
- * 
- * @author Henri Tremblay
- */
-public class NullInstantiator implements ObjectInstantiator {
-
-   /**
-    * @return Always null
-    */
-   public Object newInstance() {
-      return null;
-   }
-}
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck.candidates;
+
+import java.io.Serializable;
+
+/**
+ * @author Joe Walnes
+ */
+public class SerializableWithAncestorThrowingException extends ConstructorThrowingException
+   implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+   
+   public SerializableWithAncestorThrowingException() {
+
+   }
+}
diff --git a/tck/src/org/objenesis/tck/candidates/candidates.properties b/tck/src/org/objenesis/tck/candidates/candidates.properties
new file mode 100644
index 0000000..28ead6a
--- /dev/null
+++ b/tck/src/org/objenesis/tck/candidates/candidates.properties
@@ -0,0 +1,39 @@
+#
+# Copyright 2006-2009 the original author or authors.
+#
+# 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.
+#
+# List of candidate classes to attempt to instantiate in the Objenesis TCK.
+
+# Different visibilities of constructor.
+org.objenesis.tck.candidates.NoConstructor                                      = No constructor
+org.objenesis.tck.candidates.SerializableNoConstructor                          = No constructor (serializable)
+org.objenesis.tck.candidates.DefaultPublicConstructor                           = Default public constructor
+org.objenesis.tck.candidates.SerializableDefaultPublicConstructor               = Default public constructor (serializable)
+org.objenesis.tck.candidates.DefaultProtectedConstructor                        = Default protected constructor
+org.objenesis.tck.candidates.SerializableDefaultProtectedConstructor            = Default protected constructor (serializable)
+org.objenesis.tck.candidates.DefaultPackageConstructor                          = Default package constructor
+org.objenesis.tck.candidates.SerializableDefaultPackageConstructor              = Default package constructor (serializable)
+org.objenesis.tck.candidates.DefaultPrivateConstructor                          = Default private constructor
+org.objenesis.tck.candidates.SerializableDefaultPrivateConstructor              = Default private constructor (serializable)
+org.objenesis.tck.candidates.SerializableWithAncestorThrowingException			= Serializable with ancestor throwing exception
+org.objenesis.tck.candidates.SerializableReplacer								= Serializable replacing with another class
+org.objenesis.tck.candidates.SerializableResolver								= Serializable resolving to another class
+
+# Constructors that work with arguments passed in. 
+org.objenesis.tck.candidates.ConstructorThrowingException                       = Constructor throwing exception
+org.objenesis.tck.candidates.SerializableConstructorThrowingException           = Constructor throwing exception (serializable)
+org.objenesis.tck.candidates.ConstructorWithArguments                           = Constructor with arguments
+org.objenesis.tck.candidates.SerializableConstructorWithArguments               = Constructor with arguments (serializable)
+org.objenesis.tck.candidates.ConstructorWithMandatoryArguments                  = Constructor with mandatory arguments
+org.objenesis.tck.candidates.SerializableConstructorWithMandatoryArguments      = Constructor with mandatory arguments (serializable)
diff --git a/tck/src/org/objenesis/tck/candidates/serializable-candidates.properties b/tck/src/org/objenesis/tck/candidates/serializable-candidates.properties
new file mode 100644
index 0000000..a3da907
--- /dev/null
+++ b/tck/src/org/objenesis/tck/candidates/serializable-candidates.properties
@@ -0,0 +1,30 @@
+#
+# Copyright 2006-2009 the original author or authors.
+#
+# 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.
+#
+# List of candidate classes to attempt to instantiate in the Objenesis TCK.
+
+# Different visibilities of constructor.
+org.objenesis.tck.candidates.SerializableNoConstructor                          = No constructor (serializable)
+org.objenesis.tck.candidates.SerializableDefaultPublicConstructor               = Default public constructor (serializable)
+org.objenesis.tck.candidates.SerializableDefaultProtectedConstructor            = Default protected constructor (serializable)
+org.objenesis.tck.candidates.SerializableDefaultPackageConstructor              = Default package constructor (serializable)
+org.objenesis.tck.candidates.SerializableDefaultPrivateConstructor              = Default private constructor (serializable)
+org.objenesis.tck.candidates.SerializableReplacer								= Serializable replacing with another class
+org.objenesis.tck.candidates.SerializableResolver								= Serializable resolving to another class
+
+# Constructors that work with arguments passed in. 
+org.objenesis.tck.candidates.SerializableConstructorThrowingException           = Constructor throwing exception (serializable)
+org.objenesis.tck.candidates.SerializableConstructorWithArguments               = Constructor with arguments (serializable)
+org.objenesis.tck.candidates.SerializableConstructorWithMandatoryArguments      = Constructor with mandatory arguments (serializable)
diff --git a/tck/test/org/objenesis/tck/CandidateLoaderTest-sample.properties b/tck/test/org/objenesis/tck/CandidateLoaderTest-sample.properties
new file mode 100644
index 0000000..669dea5
--- /dev/null
+++ b/tck/test/org/objenesis/tck/CandidateLoaderTest-sample.properties
@@ -0,0 +1,19 @@
+#
+# Copyright 2006-2009 the original author or authors.
+#
+# 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.
+#
+# See CandidateLoaderTest.java
+
+org.objenesis.tck.CandidateLoaderTest$A = A candidate
+org.objenesis.tck.CandidateLoaderTest$B = B candidate
\ No newline at end of file
diff --git a/tck/test/org/objenesis/tck/CandidateLoaderTest.java b/tck/test/org/objenesis/tck/CandidateLoaderTest.java
new file mode 100644
index 0000000..f965aee
--- /dev/null
+++ b/tck/test/org/objenesis/tck/CandidateLoaderTest.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Joe Walnes
+ */
+public class CandidateLoaderTest extends TestCase {
+
+   private StringBuffer recordedEvents;
+   private CandidateLoader candidateLoader;
+
+   protected void setUp() throws Exception {
+      super.setUp();
+
+      recordedEvents = new StringBuffer();
+      TCK tck = new TCK() {
+         public void registerCandidate(Class candidateClass, String description) {
+            recordedEvents.append("registerCandidate('").append(candidateClass).append("', '")
+               .append(description).append("')\n");
+         }
+      };
+      CandidateLoader.ErrorHandler errorHandler = new CandidateLoader.ErrorHandler() {
+         public void classNotFound(String name) {
+            recordedEvents.append("classNotFound('").append(name).append("')\n");
+         }
+      };
+
+      candidateLoader = new CandidateLoader(tck, getClass().getClassLoader(), errorHandler);
+   }
+
+   public void testReadsClassesAndDescriptionsFromPropertiesFile() throws IOException {
+      String input = "" + "org.objenesis.tck.CandidateLoaderTest$A = A candidate\n" + "\n"
+         + "# a comment and some whitespace\n" + "\n"
+         + "org.objenesis.tck.CandidateLoaderTest$B = B candidate\n"
+         + "org.objenesis.tck.CandidateLoaderTest$C = C candidate\n";
+
+      candidateLoader.loadFrom(new ByteArrayInputStream(input.getBytes()));
+
+      assertEquals(""
+         + "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$A', 'A candidate')\n"
+         + "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$B', 'B candidate')\n"
+         + "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$C', 'C candidate')\n",
+         recordedEvents.toString());
+   }
+
+   public void testReportsMissingClassesToErrorHandler() throws IOException {
+      String input = "" + "org.objenesis.tck.CandidateLoaderTest$A = A candidate\n"
+         + "org.objenesis.tck.CandidateLoaderTest$NonExistant = Dodgy candidate\n"
+         + "org.objenesis.tck.CandidateLoaderTest$C = C candidate\n";
+
+      candidateLoader.loadFrom(new ByteArrayInputStream(input.getBytes()));
+
+      assertEquals(""
+         + "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$A', 'A candidate')\n"
+         + "classNotFound('org.objenesis.tck.CandidateLoaderTest$NonExistant')\n"
+         + "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$C', 'C candidate')\n",
+         recordedEvents.toString());
+   }
+
+   public void testLoadsFromResourceInClassPath() throws IOException {
+      // See CandidateLoaderTest-sample.properties.
+
+      candidateLoader.loadFromResource(getClass(), "CandidateLoaderTest-sample.properties");
+
+      assertEquals(""
+         + "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$A', 'A candidate')\n"
+         + "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$B', 'B candidate')\n",
+         recordedEvents.toString());
+   }
+
+   public void testThrowsIOExceptionIfResourceNotInClassPath() throws IOException {
+      try {
+         candidateLoader.loadFromResource(getClass(), "Blatently-Bogus.properties");
+         fail("Expected exception");
+      }
+      catch(IOException expectedException) {
+         // Good!
+      }
+   }
+
+   // Sample classes.
+
+   public static class A {
+   }
+
+   public static class B {
+   }
+
+   public static class C {
+   }
+}
diff --git a/tck/test/org/objenesis/tck/ObjenesisTest.java b/tck/test/org/objenesis/tck/ObjenesisTest.java
new file mode 100644
index 0000000..8d59305
--- /dev/null
+++ b/tck/test/org/objenesis/tck/ObjenesisTest.java
@@ -0,0 +1,140 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.io.Serializable;
+import java.util.Collection;
+
+import junit.framework.TestCase;
+
+import org.objenesis.ObjenesisSerializer;
+import org.objenesis.ObjenesisStd;
+
+/**
+ * Integration test for Objenesis. Should pass successfully on every supported JVM for all Objenesis
+ * interface implementation.
+ * 
+ * @author Henri Tremblay
+ */
+public class ObjenesisTest extends TestCase {
+
+   public static class ErrorHandler implements CandidateLoader.ErrorHandler {
+      public void classNotFound(String name) {
+         fail("Class not found : " + name);
+      }
+   }
+
+   public static class JUnitReporter implements Reporter {
+
+      private String currentObjenesis;
+
+      private String currentCandidate;
+
+      public void startTests(String platformDescription, Collection allCandidates,
+         Collection allInstantiators) {
+      }
+
+      public void startTest(String candidateDescription, String objenesisDescription) {
+         currentCandidate = candidateDescription;
+         currentObjenesis = objenesisDescription;
+      }
+
+      public void endObjenesis(String description) {
+      }
+
+      public void endTests() {
+      }
+
+      public void exception(Exception exception) {
+         ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+         PrintStream out = new PrintStream(buffer);
+         out.println("Exception when instantiating " + currentCandidate + " with "
+            + currentObjenesis + ": ");
+         exception.printStackTrace(out);
+         fail(buffer.toString());
+      }
+
+      public void result(boolean instantiatedObject) {
+         assertTrue("Instantiating " + currentCandidate + " with " + currentObjenesis + " failed",
+            instantiatedObject);
+      }
+
+      public void endTest() {
+      }
+   }
+   
+   static class MockSuperClass {
+	   private final boolean superConstructorCalled;
+	   public MockSuperClass() {
+		   superConstructorCalled = true;
+	   }
+	   public boolean isSuperConstructorCalled() {
+		   return superConstructorCalled;
+	   }
+   }
+   
+   static class MockClass extends MockSuperClass implements Serializable {
+      private static final long serialVersionUID = 1L;
+      private final boolean constructorCalled;
+	   public MockClass() {
+		   super();
+		   constructorCalled = true;
+	   }
+	   public boolean isConstructorCalled() {
+		   return constructorCalled;
+	   }
+   }
+
+   private TCK tck = null;
+
+   private CandidateLoader candidateLoader = null;
+
+   protected void setUp() throws Exception {
+      super.setUp();
+
+      tck = new TCK();
+
+      candidateLoader = new CandidateLoader(tck, getClass().getClassLoader(), new ErrorHandler());
+   }
+
+   protected void tearDown() throws Exception {
+      candidateLoader = null;
+      tck = null;
+      super.tearDown();
+   }
+
+   public void testObjenesisStd() throws Exception {
+      candidateLoader.loadFromResource(getClass(), "candidates/candidates.properties");
+      tck.registerObjenesisInstance(new ObjenesisStd(), "Objenesis standard");
+      tck.runTests(new JUnitReporter());
+   }
+
+   public void testObjenesisSerializer() throws Exception {
+      candidateLoader.loadFromResource(getClass(), "candidates/serializable-candidates.properties");
+      tck.registerObjenesisInstance(new ObjenesisSerializer(), "Objenesis serializer");
+      tck.runTests(new JUnitReporter());
+   }
+
+   public void testObjenesisSerializerParentConstructorCalled() throws Exception {
+   	  Object result = new ObjenesisSerializer().newInstance(MockClass.class);
+   	  assertEquals(MockClass.class, result.getClass());
+   	  MockClass mockObject = (MockClass) result;
+   	  assertTrue(mockObject.isSuperConstructorCalled());
+   	  assertFalse(mockObject.isConstructorCalled());   	  
+   }
+}
diff --git a/tck/test/org/objenesis/tck/OsgiTest.java b/tck/test/org/objenesis/tck/OsgiTest.java
new file mode 100644
index 0000000..362296c
--- /dev/null
+++ b/tck/test/org/objenesis/tck/OsgiTest.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import org.objenesis.Objenesis;
+import org.objenesis.ObjenesisHelper;
+import org.springframework.osgi.test.AbstractConfigurableBundleCreatorTests;
+
+/**
+ * @author Henri Tremblay
+ */
+public class OsgiTest extends AbstractConfigurableBundleCreatorTests implements Serializable {
+
+   private static final long serialVersionUID = 1L;
+
+   protected String[] getTestBundlesNames() {
+      final String version = Objenesis.class.getPackage()
+              .getImplementationVersion();
+
+      return new String[] {"org.objenesis, objenesis, " + version};
+  }
+
+   // protected Manifest getManifest() {
+   // Manifest mf = super.getManifest();
+   //
+   // String imports = mf.getMainAttributes().getValue(
+   // Constants.IMPORT_PACKAGE);
+   // imports = imports.replace("org.easymock.internal,",
+   // "org.easymock.internal;poweruser=true,");
+   // imports = imports.replace("org.easymock.internal.matchers,",
+   // "org.easymock.internal.matchers;poweruser=true,");
+   //
+   // mf.getMainAttributes().putValue(Constants.IMPORT_PACKAGE, imports);
+   //
+   // return mf;
+   // }
+  
+   public void testCanInstantiate() throws IOException {
+      assertSame(OsgiTest.class, ObjenesisHelper.newInstance(getClass()).getClass());
+  }
+
+   public void testCanInstantiateSerialize() throws IOException {
+      assertSame(OsgiTest.class, ObjenesisHelper.newSerializableInstance(getClass()).getClass());
+   }
+}
diff --git a/tck/test/org/objenesis/tck/TCKTest.java b/tck/test/org/objenesis/tck/TCKTest.java
new file mode 100644
index 0000000..b50f50b
--- /dev/null
+++ b/tck/test/org/objenesis/tck/TCKTest.java
@@ -0,0 +1,163 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.util.Collection;
+
+import junit.framework.TestCase;
+
+import org.objenesis.Objenesis;
+import org.objenesis.instantiator.ObjectInstantiator;
+
+/**
+ * @author Joe Walnes
+ * @author Henri Tremblay
+ */
+public class TCKTest extends TestCase {
+
+   public static class StubbedInstantiator1 implements Objenesis {
+      public Object newInstance(Class clazz) {
+         return null;
+      }
+
+      public ObjectInstantiator getInstantiatorOf(Class clazz) {
+         return null;
+      }
+   }
+
+   public static class StubbedInstantiator2 implements Objenesis {
+      public Object newInstance(Class clazz) {
+         return null;
+      }
+
+      public ObjectInstantiator getInstantiatorOf(Class clazz) {
+         return null;
+      }
+   }
+
+   public void testReportsAllCandidatesAndInstantiatorCombinationsToReporter() {
+      // Given... a TCK with some candidate classes: A, B and C.
+      TCK tck = new TCK();
+
+      tck.registerCandidate(CandidateA.class, "Candidate A");
+      tck.registerCandidate(CandidateB.class, "Candidate B");
+      tck.registerCandidate(CandidateC.class, "Candidate C");
+
+      // And... two ObjectInstantiators registered
+      tck.registerObjenesisInstance(new StubbedInstantiator1(), "Instantiator1");
+      tck.registerObjenesisInstance(new StubbedInstantiator2(), "Instantiator2");
+
+      // When... the TCK tests are run
+      Reporter reporter = new RecordingReporter();
+      tck.runTests(reporter);
+
+      // Expect... the reporter to have received a sequence of calls
+      // notifying it of what the TCK is doing.
+      assertEquals("" + "startTests()\n" + "startTest('Candidate A', 'Instantiator1')\n"
+         + "result(false)\n" + "endTest()\n" + "startTest('Candidate A', 'Instantiator2')\n"
+         + "result(false)\n" + "endTest()\n" + "startTest('Candidate B', 'Instantiator1')\n"
+         + "result(false)\n" + "endTest()\n" + "startTest('Candidate B', 'Instantiator2')\n"
+         + "result(false)\n" + "endTest()\n" + "startTest('Candidate C', 'Instantiator1')\n"
+         + "result(false)\n" + "endTest()\n" + "startTest('Candidate C', 'Instantiator2')\n"
+         + "result(false)\n" + "endTest()\n" + "endTests()\n", reporter.toString());
+   }
+
+   public void testReportsSuccessIfCandidateCanBeInstantiated() {
+      // Given... a TCK with some candidate classes: A, B and C.
+      TCK tck = new TCK();
+
+      tck.registerCandidate(CandidateA.class, "Candidate A");
+      tck.registerCandidate(CandidateB.class, "Candidate B");
+
+      // And... a single ObjectInsantiator registered that can instantiate
+      // A but not B.
+      tck.registerObjenesisInstance(new SelectiveInstantiator(), "instantiator");
+
+      // When... the TCK tests are run
+      Reporter reporter = new RecordingReporter();
+      tck.runTests(reporter);
+
+      // Expect... the reporter to be notified that A succeeded
+      // but B failed.
+      assertEquals("" + "startTests()\n" + "startTest('Candidate A', 'instantiator')\n" + // A
+         "result(true)\n" + // true
+         "endTest()\n" + "startTest('Candidate B', 'instantiator')\n" + // B
+         "result(false)\n" + // false
+         "endTest()\n" + "endTests()\n", reporter.toString());
+   }
+
+   // Some sample classes used for testing.
+
+   public static class SelectiveInstantiator implements Objenesis {
+      public Object newInstance(Class clazz) {
+         return clazz == CandidateA.class ? new CandidateA() : null;
+      }
+
+      public ObjectInstantiator getInstantiatorOf(Class clazz) {
+         return null;
+      }
+   }
+
+   public static class CandidateA {
+   }
+
+   public static class CandidateB {
+   }
+
+   public static class CandidateC {
+   }
+
+   /**
+    * A poor man's mock. Using a recording test double to verify interactions between the TCK and
+    * the Recorder. <p/> Note: This test case could be simplified by using a mock object library.
+    * However, I wanted to simplify dependencies - particularly as in the future, the mock libraries
+    * may depend on objenesis - getting into an awkward cyclical dependency situation. -Joe.
+    */
+   private static class RecordingReporter implements Reporter {
+
+      private final StringBuffer log = new StringBuffer();
+
+      public void startTests(String platformDescription, Collection allCandidates,
+         Collection allInstantiators) {
+         log.append("startTests()\n");
+      }
+
+      public void startTest(String candidateDescription, String objenesisDescription) {
+         log.append("startTest('").append(candidateDescription).append("', '").append(
+            objenesisDescription).append("')\n");
+      }
+
+      public void result(boolean instantiatedObject) {
+         log.append("result(").append(instantiatedObject).append(")\n");
+      }
+
+      public void exception(Exception exception) {
+         log.append("exception()\n");
+      }
+
+      public void endTest() {
+         log.append("endTest()\n");
+      }
+
+      public void endTests() {
+         log.append("endTests()\n");
+      }
+
+      public String toString() {
+         return log.toString();
+      }
+   }
+}
diff --git a/tck/test/org/objenesis/tck/TextReporterTest.java b/tck/test/org/objenesis/tck/TextReporterTest.java
new file mode 100644
index 0000000..9504160
--- /dev/null
+++ b/tck/test/org/objenesis/tck/TextReporterTest.java
@@ -0,0 +1,87 @@
+/**
+ * Copyright 2006-2009 the original author or authors.
+ *
+ * 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.objenesis.tck;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.util.Arrays;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Joe Walnes
+ * @author Henri Tremblay
+ */
+public class TextReporterTest extends TestCase {
+
+   private TextReporter textReporter;
+   private ByteArrayOutputStream summaryBuffer;
+
+   protected void setUp() throws Exception {
+      super.setUp();
+      summaryBuffer = new ByteArrayOutputStream();
+      ByteArrayOutputStream logBuffer = new ByteArrayOutputStream();
+      textReporter = new TextReporter(new PrintStream(summaryBuffer), new PrintStream(logBuffer));
+   }
+
+   public void testReportsSuccessesInTabularFormat() {
+      textReporter.startTests("Some platform", Arrays.asList(new String[] {"candidate A",
+         "candidate B", "candidate C"}), Arrays.asList(new String[] {"instantiator1",
+         "instantiator2", "instantiator3"}));
+
+      textReporter.startTest("candidate A", "instantiator1");
+      textReporter.result(false);
+      textReporter.startTest("candidate A", "instantiator2");
+      textReporter.result(false);
+      textReporter.startTest("candidate A", "instantiator3");
+      textReporter.result(true);
+
+      textReporter.startTest("candidate B", "instantiator1");
+      textReporter.result(true);
+      textReporter.startTest("candidate B", "instantiator2");
+      textReporter.result(false);
+      textReporter.startTest("candidate B", "instantiator3");
+      textReporter.result(true);
+
+      textReporter.startTest("candidate C", "instantiator1");
+      textReporter.exception(new RuntimeException("Problem"));
+      textReporter.startTest("candidate C", "instantiator2");
+      textReporter.result(false);
+      textReporter.startTest("candidate C", "instantiator3");
+      textReporter.result(true);
+
+      textReporter.endTests();
+
+      textReporter.printResult(true);
+
+      ByteArrayOutputStream expectedSummaryBuffer = new ByteArrayOutputStream();
+      PrintStream out = new PrintStream(expectedSummaryBuffer);
+      out.println("Running TCK on platform: Some platform");
+      out.println();
+      out.println("Not serializable parent constructor called: Y");
+      out.println();
+      out.println("            instantiator1 instantiator2 instantiator3 ");
+      out.println("candidate A n             n             Y             ");
+      out.println("candidate B Y             n             Y             ");
+      out.println("candidate C n             n             Y             ");
+      out.println();
+      out.println("--- FAILED: 5 error(s) occured ---");
+      out.println();
+
+      assertEquals(expectedSummaryBuffer.toString(), summaryBuffer.toString());
+   }
+
+}
diff --git a/update_license.bat b/update_license.bat
new file mode 100644
index 0000000..05f325d
--- /dev/null
+++ b/update_license.bat
@@ -0,0 +1 @@
+%M2_HOME%\bin\mvn.bat install -Plicense
diff --git a/website/.project b/website/.project
new file mode 100644
index 0000000..8db5019
--- /dev/null
+++ b/website/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>objenesis-website</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+	</natures>
+</projectDescription>
diff --git a/website/.settings/org.eclipse.core.resources.prefs b/website/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..a7eb352
--- /dev/null
+++ b/website/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,14 @@
+#Mon Jun 22 00:42:45 CEST 2009
+eclipse.preferences.version=1
+encoding//site/content/acknowledgements.html=ISO-8859-1
+encoding//site/content/details.html=ISO-8859-1
+encoding//site/content/download.html=ISO-8859-1
+encoding//site/content/embedding.html=ISO-8859-1
+encoding//site/content/index.html=ISO-8859-1
+encoding//site/content/license.html=ISO-8859-1
+encoding//site/content/notes.html=ISO-8859-1
+encoding//site/content/sitemap.xml=ISO-8859-1
+encoding//site/content/source.html=ISO-8859-1
+encoding//site/content/support.html=ISO-8859-1
+encoding//site/content/tutorial.html=ISO-8859-1
+encoding/site=ISO-8859-1
diff --git a/website/pom.xml b/website/pom.xml
new file mode 100644
index 0000000..96d5e24
--- /dev/null
+++ b/website/pom.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+Copyright 2006-2009 Henri Tremblay
+
+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.
+-->
+
+<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/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.objenesis</groupId>
+    <artifactId>objenesis-parent</artifactId>
+    <version>1.2</version>
+    <relativePath>..</relativePath>
+  </parent>
+  <artifactId>objenesis-website</artifactId>
+  <name>Objenesis website</name>
+  <packaging>pom</packaging>
+
+  <properties>
+    <javadoc>apidocs</javadoc>
+  </properties>
+
+  <dependencies>
+    <!-- Just to make sure the Website is always after (for the javadoc) -->
+    <dependency>
+      <groupId>org.objenesis</groupId>
+      <artifactId>objenesis</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-resources</id>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/site</outputDirectory>
+              <escapeString>\</escapeString>
+              <encoding>ISO-8859-1</encoding>
+              <resources>
+                <resource>
+                  <directory>${basedir}/site</directory>
+                  <filtering>true</filtering>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-javadoc</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/xsite/apidocs</outputDirectory>
+              <encoding>UTF-8</encoding>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../main/target/apidocs</directory>
+                  <filtering>false</filtering>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>          
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.xsite</groupId>
+        <artifactId>xsite-maven-plugin</artifactId>
+        <version>1.0</version>
+        <configuration>
+          <sourceDirectoryPath>${project.build.directory}/site</sourceDirectoryPath>
+          <sitemapPath>content/sitemap.xml</sitemapPath>
+          <skinPath>templates/skin.html</skinPath>
+          <resourcePaths>resources</resourcePaths>
+          <outputDirectoryPath>${project.build.directory}/xsite</outputDirectoryPath>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>      
+    </plugins>
+  </build>
+
+</project>
diff --git a/website/site/content/acknowledgements.html b/website/site/content/acknowledgements.html
new file mode 100644
index 0000000..c1fa11f
--- /dev/null
+++ b/website/site/content/acknowledgements.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+    <title>Acknowledgements</title>
+</head>
+<body>
+
+<p>Objenesis was not written from scratch. It was the result of spotting duplication amongst
+    other open source projects that were doing similar things and creating a best-of-breed solution.</p>
+
+<p>Code from Objenesis was adapted from code from these projects:</p>
+
+<ul>
+    <li><strong><a href="http://xstream.codehaus.org/">XStream</a></strong></li>
+    <li><strong><a href="http://jserial.sourceforge.net/">JSerial</a></strong></li>
+    <li><strong><a href="http://www.easymock.org/">EasyMock</a></strong></li>
+</ul>
+
+<h1>Development Team</h1>
+
+<ul>
+    <li><strong>Joe Walnes</strong></li>
+    <li><strong>Henri Tremblay</strong></li>
+    <li><strong>Leonardo Mesquita</strong></li>
+</ul>
+
+<p>To contact the developers, please use the <a href="support.html">discussion group</a>.</p>
+
+<h1>Contributors</h1>
+
+<ul>
+    <li>Chris Nokleberg (determined how to <a href="http://sixlegs.com/blog/java/skipping-constructors.html">construct a byte sequence to deserialize an object</a>)</li>
+    <li>Nat Pryce (researched <a href="http://jmock.org/">web site design</a> that this site is based upon)</li>
+    <li>Henrik Ståhl (from <a href="http://www.bea.com">BEA</a>) for helping with JRockit support</li>
+</ul>
+
+<h1>Supporting Services</h1>
+
+<ul>
+    <li>Code hosted by <a href="http://code.google.com/hosting/">Google Code</a>.</li>
+    <li>Mailing list hosted by <a href="http://groups.google.com/">Google Groups</a>.</li>
+    <li>Embedable library thanks to <a href="http://tonicsystems.com/products/jarjar/">Jar Jar Links</a>.</li>
+    <li>Site generation using <a href="http://xsite.codehaus.org/">XSite</a>.</li>
+    <li>Logo by <a href="http://cooltext.com/">Cool Text</a>.</li>
+</ul>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/site/content/details.html b/website/site/content/details.html
new file mode 100644
index 0000000..29118ae
--- /dev/null
+++ b/website/site/content/details.html
@@ -0,0 +1,125 @@
+<html>
+<head>
+    <title>The Details</title>
+</head>
+<body>
+
+<p>The <a href="tutorial.html">Tutorial</a> allows you to perfectly use Objenesis.
+However, if you want implementation details, tools and more power, you're at 
+the right place.</p>
+
+<h1>Test your environment</h1>
+
+<p>Depending on you JVM and security manager, Objenesis might not be able to
+instantiate some of your classes. If that's the case, first, we are highly
+interested in <a href="support.html">knowing this limitation</a>.</p>
+
+<p>Then, to prevent this, we provide a TCK to run in your environment. You can
+find it in our <a href="download.html">download page</a>. It will print a report 
+to the standard output. Exceptions, if they occur, will be printed out to
+the standard error. Tests are run <a href="${javadoc}/org/objenesis/ObjenesisStd.html">ObjenesisStd</a> 
+and <a href="${javadoc}/org/objenesis/ObjenesisSerializer.html">ObjenesisSerializer</a>
+and are made of every kind of class types you might want to instantiate. So you can check if all
+of them or at least the kind you want are correctly instantiated.</p>
+
+<p>To launch from the command line, just type</p>
+   
+<pre>java -jar objenesis-${project.version}-tck.jar</pre>
+
+<p>Note that objenesis jar is bundled in the TCK so no special classpath is needed.</p>
+
+<p>To launch from within an application server, the easiest is to bundle it in your application
+and to call <code>org.objenesis.tck.Main.main()</code> from your code.</p>
+
+<h1>Exception Handling</h1>
+
+<p>If something wrong occurs using Objenesis, you will normally get an 
+<a href="${javadoc}/org/objenesis/ObjenesisException.html">ObjenesisException</a>
+wrapping (for JVM 1.4 and more) the real exception. It is a RuntimeException so you don't have to
+catch it. Some reasons why it fails:</p>
+
+<ul>
+    <li>Using ObjenesisSerializer with a class that isn't <code>Serializable</code>.</li>
+    <li>Using ObjenesisSerializer, the constructor of the first parent class that isn't
+        <code>Serializable</code> throws an exception.</li>
+    <li>Your SecurityManager prevents Objenesis from working normally.</li>
+    <li>Objenesis isn't able to work for some reason. Please <a href="support.html">tell us</a></li>
+</ul>
+
+<h1>ObjectInstantiator caching</h1>
+
+<p><a href="${javadoc}/org/objenesis/ObjenesisBase.html">ObjenesisBase</a> provides a built-in cache 
+that is activated by default. This cache keeps <a href="${javadoc}/org/objenesis/instantiator/ObjectInstantiator.html">
+ObjectInstantiator</a> instances per Class. This improves performance quite a lot when the same Class 
+is frequently instantiated. For this reason, it is recommended to reuse Objenesis instances whenever 
+posssibly or to keep is as a singleton in your favorite dependency injection framework.</p>
+
+<p>However, you can always disable the cache if needed.</p>
+<pre>
+    Objenesis o = new ObjenesisStd(false); // cache disabled
+</pre>
+
+<p>The cache should behave correctly in an application server and not cause any memory leaks.</p>
+
+<h1>Use you own strategy</h1>
+
+<p>As you've seen in the <a href="tutorial.html">Tutorial</a>, Objenesis implementations
+are determining the best instantiator using a strategy. It might occurs that you need
+to implement your own strategy. Two possible reasons I can think of are that</p>
+
+<ul>
+   <li><strong>You want to specialize in a given JVM.</strong> Default strategies are
+       supporting all JVMs. This has a little performance cost so you might want to
+       provide a strategy that is optimized for your JVM.
+<pre>
+public class Sun14Strategy implements InstantiatorStrategy {
+    public ObjectInstantiator newInstantiatorOf(Class type) {
+        // return sun dedicated instantiator
+        return new SunReflectionFactoryInstantiator(type);
+    }
+}
+</pre></li>
+    <li><strong>Objenesis doesn't support your environment by default.</strong> In that
+        case, we would be really happy to add this support in our next version and
+        meanwhile, you can use your own strategy and instantiator to fix this.</li>
+</ul>
+
+<p>From there, you can use this new strategy.</p>
+<pre>
+// Directly
+Objenesis o = new ObjenesisBase(new Sun14Strategy());
+
+// Or inside your Objenesis own implementation
+public class ObjenesisSun14 extends ObjenesisBase {
+    public ObjenesisSun14() {
+       super(new Sun14Strategy());
+    }
+}
+</pre>
+
+<h1>The Evil ObjenesisHelper</h1>
+
+<p>Static methods are considered a really bad practice. They can't be mocked or
+replace easily. Worst, if the class keep a static state, you will fell in
+class loading issues, memory leaks, module dependencies and so on. <strong>We 
+strongly recommend you not to use them.</strong></p>
+
+<p>However, if for some reason that we prefer ignore, you still want to use Objenesis
+in a static way, you can do so. It's called <a href="${javadoc}/org/objenesis/ObjenesisHelper.html">ObjenesisHelper</a>.</p>
+
+<p>We prefer to provide it knowing that some of you will code it anyway. It a wrapper
+over an <a href="${javadoc}/org/objenesis/ObjenesisStd.html">ObjenesisStd</a> 
+and <a href="${javadoc}/org/objenesis/ObjenesisSerializer.html">ObjenesisSerializer</a> 
+instance which are kept statically.</p>
+
+<p>It can't be more straightforward to use:</p>
+
+<pre>
+   Object o1 = ObjenesisHelper.newInstance(MyClass.class);
+   Object o2 = ObjenesisHelper.newSerializableInstance(MyClass.class);
+   ObjectInstantiator o3 = ObjenesisHelper.getInstantiatorOf(MyClass.class);
+   ObjectInstantiator o4 = ObjenesisHelper.getSerializableObjectInstantiatorOf(MyClass.class);
+</pre>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/site/content/download.html b/website/site/content/download.html
new file mode 100644
index 0000000..1949855
--- /dev/null
+++ b/website/site/content/download.html
@@ -0,0 +1,22 @@
+<html>
+<head>
+    <title>Download</title>
+</head>
+<body>
+
+<p>Current version is <strong>${project.version}</strong></p>
+
+<ul>
+    <li><a href="http://objenesis.googlecode.com/files/objenesis-${project.version}-bin.zip">
+        <strong>objenesis-${project.version}-bin.zip</strong></a>
+        - Objenesis distribution (binaries, sources and javadoc).
+    </li>
+    <li><a href="http://objenesis.googlecode.com/files/objenesis-tck-${project.version}.jar">objenesis-tck-${project.version}.jar</a>
+        - TCK to test your environment. See <a href="details.html">details</a>.
+    </li>        
+</ul>
+
+<p>Older versions can be found <a href="http://code.google.com/p/objenesis/downloads/list">here</a></p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/site/content/embedding.html b/website/site/content/embedding.html
new file mode 100644
index 0000000..c6a07b0
--- /dev/null
+++ b/website/site/content/embedding.html
@@ -0,0 +1,66 @@
+<html>
+<head>
+    <title>Embedding</title>
+</head>
+<body>
+
+Objenesis is <a href="http://tonicsystems.com/products/jarjar/">jarjar</a> and 
+<a href="http://maven.apache.org/plugins/maven-shade-plugin/">maven-shade-plugin</a> compliant.
+
+<h1>Ant</h1>
+
+<p>A jarjar ant task is available. You just need to replace your usual jar task with 
+jarjar. Depending on the complexity of your project, you will then have different
+parameters. Here's an example:</p>
+
+<pre>
+	<jarjar jarfile="${temp directory}/easymockclassextension.jar">
+	  <fileset dir="tmp" includes="org/easymock/classextension/*.class
+	    org/easymock/classextension/internal/*.class"/>
+	  <zipfileset src="lib/objenesis-${project.version}.jar"/>
+	  <rule pattern="org.objenesis.**"
+	    result="org.easymock.classextension.internal.objenesis. at 1"/>
+	</jarjar>
+</pre>
+
+<h1>Maven</h1>
+   
+<p>For jarjar, multiple unofficial plugins exist (<a href="http://mojo.codehaus.org/">here</a>, 
+<a href="http://boss.bekk.no/maven-jarjar-plugin/">here</a> and 
+<a href="http://docs.atlassian.com/jarjar-maven-plugin/">here</a>). However, you can use 
+the <a href="http://maven.apache.org/plugins/maven-antrun-plugin/">antrun plugin</a> to call 
+the jarjar ant task.</p>
+
+<p>Or you can use the <a href="http://maven.apache.org/plugins/maven-shade-plugin/">maven-shade-plugin</a>. 
+Here's an example:</p>
+
+<pre>
+      <plugin>
+        <artifactId>maven-shade-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope>
+          <artifactSet>
+            <includes>
+              <include>org.objenesis:objenesis</include>
+            </includes>
+          </artifactSet>
+          <relocations>
+            <relocation>
+              <pattern>org.objenesis</pattern>
+              <shadedPattern>org.easymock.classextension.internal.objenesis</shadedPattern>
+            </relocation>
+          </relocations>
+        </configuration>
+      </plugin>
+</pre>
+
+</body>
+</html>
diff --git a/website/site/content/index.html b/website/site/content/index.html
new file mode 100644
index 0000000..0bdc0f4
--- /dev/null
+++ b/website/site/content/index.html
@@ -0,0 +1,74 @@
+<html>
+<head>
+    <title>About</title>
+</head>
+
+<body>
+
+<p>Objenesis is a small Java library that serves one purpose:</p>
+
+<ul>
+    <li><strong>To instantiate a new object of a particular class.</strong></li>
+</ul>
+
+<h1>When would you want this?</h1>
+
+<p>Java already supports this dynamic instantiation of classes using <code>Class.newInstance()</code>.
+    However, this only works if the class has an appropriate constructor. There are many times when a class
+    cannot be instantiated this way, such as when the class contains:</p>
+
+<ul>
+    <li>Constructors that require arguments.</li>
+    <li>Constructors that have side effects.</li>
+    <li>Constructors that throw exceptions.</li>
+</ul>
+
+<p>As a result, it is common to see restrictions in libraries stating that classes must require a
+    default constructor. Objenesis aims to overcomes these restrictions by bypassing the constructor on object
+    instantiation.</p>
+
+<h1>Typical uses</h1>
+
+<p>Needing to instantiate an object without calling the constructor is a fairly specialized task, however
+    there are certain cases when this is useful:</p>
+<ul>
+    <li><strong>Serialization, Remoting and Persistence</strong>
+        - Objects need to be instantiated and restored to a specific state, without invoking code.
+    </li>
+    <li><strong>Proxies, AOP Libraries and Mock Objects</strong>
+        - Classes can be subclassed without needing to worry about the super() constructor.
+    </li>
+    <li><strong>Container Frameworks</strong>
+        - Objects can be dynamically instantatiated in non-standard ways.
+    </li>
+</ul>
+
+<h1>Getting Started</h1>
+
+<ol>
+    <li><a href="download.html">Download</a> objenesis-${project.version}.jar.</li>
+    <li>Read the <a href="tutorial.html">twenty second tutorial</a>.</li>
+</ol>
+
+<h1>How it Works</h1>
+
+<p>Objenesis uses a variety of approaches to attempt to instantiate the object, depending on the type of object,
+JVM version, JVM vendor and SecurityManager present. These are described in full in the
+    <a href="details.html">detailed documentation</a>.</p>
+
+<h1>Avoiding the Dependency</h1>
+
+<p>For something as straight forward as instantiating an object, it can be a pain introducing yet another
+    library dependency into your project. Objenesis is easy to <a href="embedding.html">embed in your
+    existing library</a> so your end users don't even know it's there.</p>
+
+
+<h1>Supported JVMs</h1>
+
+<p>The list of tested JVMs is available <a href="http://code.google.com/p/objenesis/wiki/ListOfCurrentlySupportedVMs">here</a>. 
+Other JVMs might be supported be haven't been tested yet. You can test your environment using the 
+<a href="details.html#Test your environment">TCK</a> and we would be glad to have <a href="support.html">feedback</a>
+on any supported / unsupported JVM.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/site/content/license.html b/website/site/content/license.html
new file mode 100644
index 0000000..4382a2e
--- /dev/null
+++ b/website/site/content/license.html
@@ -0,0 +1,37 @@
+<html>
+<head>
+    <title>License</title>
+</head>
+<body>
+
+<p>Objenesis is open source, under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2.0 license</a>.</p>
+
+<p>If, for any reason, this license is not appropriate for you, please
+    <a href="support.html">contact the development team</a> so we can discuss
+    alternatives.</p>
+    
+<h2>Previous license</h2>
+
+<p>Versions of Objenesis before version 1.2 are under the MIT license defined below.</p>
+
+<pre>Copyright (c) 2003-2009, Objenesis Team and all contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</pre>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/site/content/notes.html b/website/site/content/notes.html
new file mode 100644
index 0000000..ecdddec
--- /dev/null
+++ b/website/site/content/notes.html
@@ -0,0 +1,27 @@
+<html>
+<head>
+    <title>Release notes</title>
+</head>
+<body>
+
+<h1>Version 1.2</h1>
+	
+<ul>
+	<li>Now under Apache 2.0 license</li>
+	<li>objenesis.jar is an OSGi bundle</li>
+</ul>
+
+<h1>Version 1.1</h1>
+	
+<ul>
+	<li>Standard support of Aonix PERC (no Serialization support)</li>
+</ul>
+
+<h1>Version 1.0</h1>
+
+<ul>
+	<li>Initial version, support for Sun Hotspot, GCJ and BEA JRockit JVMs</li>
+</ul>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/site/content/sitemap.xml b/website/site/content/sitemap.xml
new file mode 100644
index 0000000..39caed7
--- /dev/null
+++ b/website/site/content/sitemap.xml
@@ -0,0 +1,21 @@
+<sitemap>
+    <section>
+        <name>Objenesis</name>
+        <page>index.html</page>
+        <page>license.html</page>
+        <page>download.html</page>
+    </section>
+    <section>
+        <name>Documentation</name>
+        <page>tutorial.html</page>
+        <page>details.html</page>
+        <page>embedding.html</page>
+    </section>
+    <section>
+        <name>Project Details</name>
+        <page>support.html</page>
+        <page>acknowledgements.html</page>
+        <page>source.html</page>
+        <page>notes.html</page>
+    </section>
+</sitemap>
\ No newline at end of file
diff --git a/website/site/content/source.html b/website/site/content/source.html
new file mode 100644
index 0000000..4f33ea0
--- /dev/null
+++ b/website/site/content/source.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+    <title>Source Repository</title>
+</head>
+<body>
+
+<p>The source repository for Objenesis is hosted by Google Code Project Hosting.</p>
+<ul>
+    <li><a href="http://code.google.com/p/objenesis/">http://code.google.com/p/objenesis/source</a></li>
+</ul>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/site/content/support.html b/website/site/content/support.html
new file mode 100644
index 0000000..e2d66cf
--- /dev/null
+++ b/website/site/content/support.html
@@ -0,0 +1,17 @@
+<html>
+<head>
+    <title>Getting Support</title>
+</head>
+<body>
+
+<ul>
+    <li><a href="http://groups.google.com/group/objenesis-dev">Objenesis developers group</a>
+        - Discuss Objenesis with the development team and other users.
+    </li>
+    <li><a href="http://code.google.com/p/objenesis/issues/list">Issue tracker</a>
+        - Report an issue.
+    </li>
+</ul>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/website/site/content/tutorial.html b/website/site/content/tutorial.html
new file mode 100644
index 0000000..38e4148
--- /dev/null
+++ b/website/site/content/tutorial.html
@@ -0,0 +1,86 @@
+<html>
+<head>
+    <title>Twenty Second Tutorial</title>
+</head>
+<body>
+
+<p>There are two main interfaces in Objenesis:</p>
+
+<ul>
+    <li><strong><a href="${javadoc}/org/objenesis/instantiator/ObjectInstantiator.html">ObjectInstantiator</a></strong>
+        - Instantiates multiple instances of a single class.
+        <pre>interface ObjectInstantiator {
+  Object newInstance();
+}</pre>
+    </li>
+    <li><strong><a href="${javadoc}/org/objenesis/strategy/InstantiatorStrategy.html">InstantiatorStrategy</a></strong>
+        - A particular strategy for how to instantiate a class (as this differs for different types of classes).
+        <pre>interface InstantiatorStrategy {
+  ObjectInstantiator newInstantiatorOf(Class type);
+}</pre>
+    </li>
+</ul>
+
+<p><strong>Note:</strong> All Objenesis classes are in the
+    <strong><code>org.objenesis</code></strong> package.</p>
+
+<h1>Step By Step</h1>
+
+<p>There are many different strategies that Objenesis uses for instantiating objects based on the JVM vendor,
+JVM version, SecurityManager and type of class being instantiated.</p>
+
+<p>We have defined that two different kinds of instantiation are required:</p>
+   
+<ul>
+    <li><strong>Stardard</strong> - No constructor will be called</li>
+    <li><strong>Serializable compliant</strong> - Acts like an object instantiated by java standard 
+        serialization. It means that the constructor of the first non-serializable parent class will
+        be called. However, readResolve is not called and we never check if the object is serializable.</li>
+</ul>
+
+<p>The simplest way to use Objenesis is by using <a href="${javadoc}/org/objenesis/ObjenesisStd.html">ObjenesisStd</a> (Standard) and 
+<a href="${javadoc}/org/objenesis/ObjenesisSerializer.html">ObjenesisSerializer</a> (Serializable compliant). By default, 
+automatically determines the best strategy - so you don't have to.</p>
+
+<pre>Objenesis objenesis = new ObjenesisStd(); // or ObjenesisSerializer</pre>
+
+<p>Once you have the Objenesis implementation, you can then create an <code>ObjectInstantiator</code>, for a specific type.</p>
+
+<pre>ObjectInstantiator thingyInstantiator = objenesis.getInstantiatorOf(MyThingy.class);</pre>
+
+<p>Finally, you can use this to instantiate new instances of this type.</p>
+
+<pre>MyThingy thingy1 = (MyThingy)thingyInstantiator.newInstance();
+MyThingy thingy2 = (MyThingy)thingyInstantiator.newInstance();
+MyThingy thingy3 = (MyThingy)thingyInstantiator.newInstance();</pre>
+
+<h1>Performance and Threading</h1>
+
+<p>To improve performance, it is best to reuse the <code>ObjectInstantiator</code>
+    objects as much as possible. For example, if you are instantiating multiple instances of a specific class,
+    do it from the same <code>ObjectInstantiator</code>.
+</p>
+
+<p>Both <code>InstantiatorStrategy</code> and <code>ObjectInstantiator</code> can be shared between multiple
+    threads and used concurrently. They are thread safe.</p>
+
+<h1>That Code Again</h1>
+
+<p>(For the impatient)</p>
+
+<pre>
+Objenesis objenesis = new ObjenesisStd(); // or ObjenesisSerializer
+MyThingy thingy1 = (MyThingy) objenesis.newInstance(MyThingy.class);
+
+// or (a little bit more efficient if you need to create many objects)
+
+Objenesis objenesis = new ObjenesisStd(); // or ObjenesisSerializer
+ObjectInstantiator thingyInstantiator = objenesis.getInstantiatorOf(MyThingy.class);
+
+MyThingy thingy2 = (MyThingy)thingyInstantiator.newInstance();
+MyThingy thingy3 = (MyThingy)thingyInstantiator.newInstance();
+MyThingy thingy4 = (MyThingy)thingyInstantiator.newInstance();
+</pre>
+
+</body>
+</html>
diff --git a/website/site/resources/objenesis.png b/website/site/resources/objenesis.png
new file mode 100644
index 0000000..4b57428
Binary files /dev/null and b/website/site/resources/objenesis.png differ
diff --git a/website/site/resources/style.css b/website/site/resources/style.css
new file mode 100644
index 0000000..38e663a
--- /dev/null
+++ b/website/site/resources/style.css
@@ -0,0 +1,344 @@
+/*---------------------------------------------------------------------------
+ *  Two- and three-column layout
+ */
+
+#banner {
+    top: 0px;
+    left: 0px;
+    right: 0px;
+    height: 90px;
+}
+
+#left {
+    position: absolute;
+    z-index: 2;
+    left: 8px;
+    width: 184px;
+    top: 100px;
+    bottom: 8px;
+    margin: 0px;
+    padding: 0px;
+}
+
+#right {
+    position: absolute;
+    z-index: 1;
+    right: 8px;
+    width: 184px;
+    top: 100px;
+    bottom: 8px;
+    margin: 0px;
+    padding: 0px;
+}
+
+.Content3Column {
+    position: absolute;
+    top: 100px;
+    bottom: 8px;
+    left: 208px;
+    right: 216px;
+}
+
+.Content2Column {
+    position: absolute;
+    top: 100px;
+    bottom: 8px;
+    left: 208px;
+    right: 16px;
+}
+
+#center {
+    z-index: 3;
+    margin: 0px;
+    border: none;
+    padding-bottom: 8px;
+}
+
+
+/*---------------------------------------------------------------------------
+ *  Default element styles
+ */
+
+body {
+    padding: 0px;
+    margin: 0px;
+    border: 0px;
+
+    font-family: helvetica, arial, sans-serif;
+    font-size: 12px;
+
+    background-color: white;
+    color: black;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    margin: 0px;
+    border: 0px;
+    padding: 0px;
+    font-weight: normal;
+}
+
+a:link { color: #6e61ad; }
+a:active { color: red; }
+a:hover { color: red; }
+a:visited { color: black; }
+
+iframe {
+    width:100%;
+    height: 800px;
+    border: 0px;
+}
+
+img {
+    border: 0px;
+    padding: 0px;
+    margin: 0px;
+}
+
+p {
+    border: 0px;
+    padding: 0px;
+    margin: 0px;
+    margin-bottom: 10px;
+}
+
+blockquote {
+    margin-bottom: 10px;
+}
+
+td {
+    font-size: 12px;
+    padding: 2px;
+}
+
+th {
+    font-size: 12px;
+    font-weight: bold;
+    white-space: nowrap;
+    padding: 2px;
+}
+
+th.Row {
+    text-align: left;
+    vertical-align: top;
+}
+
+ul, ol {
+    border: 0px;
+    padding: 0px;
+    margin-top: 0px;
+    margin-bottom: 12px;
+    margin-left: 20px;
+}
+
+
+/*---------------------------------------------------------------------------
+ *  Page banner
+ */
+
+#banner {
+    margin: 0px;
+    border: 0px;
+    border-bottom: 1px solid #c8f;
+    padding: 0px;
+    background-color: #e0d0f0;
+    color: #606;
+    vertical-align: bottom;
+}
+
+#banner a { text-decoration: none; }
+#banner a:visited { color: #6e61ad; }
+#banner a:hover { color: red; }
+#banner a:active { color: red; }
+
+#logo {
+    position: absolute;
+    top: 5px;
+    left: 8px;
+}
+
+#versions {
+    position: absolute;
+    width: auto;
+    right: 0px;
+    top: 0px;
+    margin: 8px;
+    font-weight: normal;
+}
+
+/*---------------------------------------------------------------------------
+ *  Page content
+ */
+
+#content {
+    margin: 0px;
+    background-color: white;
+    color: black;
+    height: 100%;
+}
+
+#content h1 {
+    width: 100%;
+    font-size: 18px;
+    background-color: #6e61ad;
+    color: white;
+    padding: 2px;
+    padding-left: 6px;
+    margin-top: 24px;
+    margin-bottom: 12px;
+}
+
+#content .FirstChild {  /* IE doesn't understand first-child pseudoelement */
+    margin-top: 0px;
+}
+
+#content a { text-decoration: underline; }
+#content a:link { color: #6e61ad; }
+#content a:visited { color: #6e61ad; }
+#content a:active { color: red; }
+#content a:hover { color: red; }
+
+#content h2 {
+    margin-top: 24px;
+    border-top: 1px solid #060;
+    margin-bottom: 16px;
+    font-size: 15px;
+    font-weight: bold;
+    background-color: #6e61ad;
+    padding: 2px;
+}
+
+#content li {
+    margin-bottom: 6px;
+}
+
+#content th {
+    background-color: #afa;
+}
+
+#content td {
+    background-color: #dfd;
+}
+
+pre {
+    padding: 4px;
+    font-family: courier new, monospace;
+    font-size: 11px;
+    border: 1px solid #6e61ad;
+    background-color: #e0d0f0;
+    color: black;
+}
+
+.highlight {
+    background-color: #6e61ad;
+    border: 1px dotted #060;
+    padding: 5px;
+}
+
+
+
+/*---------------------------------------------------------------------------
+ *  Side panels
+ */
+
+.SidePanel {
+    background-color: white;
+    padding: 0px;
+    font-size: 11px;
+}
+
+.SidePanel h1 {
+    margin: 0px;
+    border: 0px;
+    padding: 4px;
+
+    color: #6e61ad;
+
+    font-size: 12px;
+    font-weight: bold;
+}
+
+
+.SidePanel a { text-decoration: none; }
+.SidePanel a:link { color: #6e61ad; }
+.SidePanel a:visited { color: #6e61ad; }
+.SidePanel a:active { color: red; }
+.SidePanel a:hover { color: red; }
+
+/*---------------------------------------------------------------------------
+ *  Menus
+ */
+
+.MenuGroup {
+    border-left: 1px solid #6e61ad;
+    border-top: 1px solid #6e61ad;
+    border-bottom: 1px solid white; /* IE work-around */
+
+    margin-bottom: 8px;
+    background-color: white;
+    color: #060;
+}
+
+.MenuGroup ul {
+    margin: 0px;
+    padding-left: 4px;
+    list-style-type: none;
+}
+
+.MenuGroup li {
+    padding: 2px;
+}
+
+.MenuGroup .currentLink {
+/*    background-color: #060;*/
+    background-color: #e0d0f0;
+    color: #000;
+}
+
+
+/*---------------------------------------------------------------------------
+ *  News panel
+ */
+
+.NewsGroup {
+    border-left: 1px solid #afa;
+    border-top: 1px solid #afa;
+    border-bottom: 1px solid white; /* IE workaround */
+    margin-bottom: 8px;
+
+    color: #060;
+}
+
+.NewsItem {
+    margin: 4px;
+}
+
+.NewsDate {
+    font-weight: bold;
+    margin: 0px;
+    padding: 0px;
+}
+
+.NewsText {
+    padding: 0px;
+    margin: 0px;
+    margin-bottom: 8px;
+}
+
+.NewsText a { text-decoration: underline; }
+.NewsText a:link { color: #060; }
+.NewsText a:visited { color: #060; }
+.NewsText a:active { color: red; }
+.NewsText a:hover { color: red; }
+
+.NewsMore {
+    font-size: smaller;
+    margin: 4px;
+    margin-top: 8px;
+    text-align: left;
+}
+
+.NewsGroup td {
+    font-size: 12px;
+}
+
diff --git a/website/site/templates/skin.html b/website/site/templates/skin.html
new file mode 100644
index 0000000..b195b6b
--- /dev/null
+++ b/website/site/templates/skin.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title>Objenesis : \${title}</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+        <link rel="stylesheet" type="text/css" href="style.css"/>
+        \${head}
+    </head>
+    <body>
+
+        <div id="banner">
+            <a href="index.html"><img id="logo" src="objenesis.png" alt="Objenesis" width="300" height="75"/></a>
+        </div>
+
+        <div id="center" class="Content2Column">
+            <div id="content">
+                <h1 class="FirstChild">\${title}</h1>
+                \${body}
+                <br/><br/>
+            </div>
+        </div>
+
+        <div class="SidePanel" id="left">
+            <#list sitemap.sections as section>
+                <div class="MenuGroup">
+                    <h1>\${section.name}</h1>
+                    <ul>
+                        <#list section.pages as otherPage>
+                            <#if otherPage = page>
+                                <li class="currentLink">\${otherPage.title}</li>
+                            <#else>
+                                <li><a href="${otherPage.href}">\${otherPage.title}</a></li>
+                            </#if>
+                        </#list>
+                    </ul>
+                </div>
+            </#list>
+        </div>
+
+  </body>
+</html>


hooks/post-receive
-- 
objenesis - Java library to instantiate a new object of a particular class



More information about the pkg-java-commits mailing list