#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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
# 
#     https://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.
#

# Classnames can have the following attributes: 
#          jdo:{persistent|transactional} 
#          super: <classname> 
#          oid: <classname> 
#          access: {public|protected|package|private} 
# Fieldnames can have the following attributes: 
#          type:<type> 
#          access: {public|protected|package|private} 
#          jdo:{persistent|transactional|transient} 
#          annotation:{key|dfg|mediated} 

org.apache.jdo.tck.pc.inheritance.AllPersist=jdo:persistent
org.apache.jdo.tck.pc.inheritance.AllPersist#intA=jdo:transient
org.apache.jdo.tck.pc.inheritance.AllPersist#doubleB=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.AllPersist#intB=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.AllPersist#keyValue=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.AllPersist2=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.AllPersist
org.apache.jdo.tck.pc.inheritance.AllPersist2#floatE=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.AllPersist2#charC=jdo:transient
org.apache.jdo.tck.pc.inheritance.AllPersist2#booleanD=jdo:transient

org.apache.jdo.tck.pc.inheritance.AllPersist3=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.AllPersist2
org.apache.jdo.tck.pc.inheritance.AllPersist3#secondObj=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.AllPersist3#shortF=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.AllPersist3#thirdObj=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.AllPersist4=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.AllPersist3
org.apache.jdo.tck.pc.inheritance.AllPersist4#shortG=jdo:transient
org.apache.jdo.tck.pc.inheritance.AllPersist4#intH=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.FieldSameName=jdo:persistent
org.apache.jdo.tck.pc.inheritance.FieldSameName#keyValue=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.FieldSameName#n1=jdo:transient
org.apache.jdo.tck.pc.inheritance.FieldSameName#n2=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.FieldSameName#n3=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.FieldSameName2=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.FieldSameName
org.apache.jdo.tck.pc.inheritance.FieldSameName2#n1=jdo:transient
org.apache.jdo.tck.pc.inheritance.FieldSameName2#n2=jdo:transient
org.apache.jdo.tck.pc.inheritance.FieldSameName2#n3=jdo:transactional,annotation:mediated

org.apache.jdo.tck.pc.inheritance.FieldSameName3=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.FieldSameName2
org.apache.jdo.tck.pc.inheritance.FieldSameName3#n1=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.FieldSameName3#n2=jdo:transactional,annotation:mediated
org.apache.jdo.tck.pc.inheritance.FieldSameName3#n3=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.FieldSameName4=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.FieldSameName3
org.apache.jdo.tck.pc.inheritance.FieldSameName4#n1=jdo:transient
org.apache.jdo.tck.pc.inheritance.FieldSameName4#n2=jdo:transient
org.apache.jdo.tck.pc.inheritance.FieldSameName4#n3=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.TopNonPersistB=jdo:persistent
org.apache.jdo.tck.pc.inheritance.TopNonPersistB#doubleB=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.TopNonPersistB#intB=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.TopNonPersistB#keyValue=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.TopNonPersistE=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.TopNonPersistB
org.apache.jdo.tck.pc.inheritance.TopNonPersistE#floatE=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.TopNonPersistF=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.TopNonPersistE
org.apache.jdo.tck.pc.inheritance.TopNonPersistF#secondObj=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.TopNonPersistF#shortF=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.TopNonPersistF#thirdObj=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.TopNonPersistH=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.TopNonPersistF
org.apache.jdo.tck.pc.inheritance.TopNonPersistH#intH=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.TopPersist=jdo:persistent
org.apache.jdo.tck.pc.inheritance.TopPersist#intA=jdo:transient
org.apache.jdo.tck.pc.inheritance.TopPersist#doubleB=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.TopPersist#intB=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.TopPersist#keyValue=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.TopPersistE=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.TopPersist
org.apache.jdo.tck.pc.inheritance.TopPersistE#floatE=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.TopPersistF=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.TopPersistE
org.apache.jdo.tck.pc.inheritance.TopPersistF#secondObj=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.TopPersistF#shortF=jdo:persistent,annotation:mediated
org.apache.jdo.tck.pc.inheritance.TopPersistF#thirdObj=jdo:persistent,annotation:mediated

org.apache.jdo.tck.pc.inheritance.TopPersistH=jdo:persistent,super:org.apache.jdo.tck.pc.inheritance.TopPersistF
org.apache.jdo.tck.pc.inheritance.TopPersistH#intH=jdo:persistent,annotation:mediated

