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