#
# Copyright 2006-2013 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.
#
# 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.
#
# 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.
#
# 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)
