#
# 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
# 
#     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.
#

# 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,oid:org.apache.jdo.tck.pc.inheritance.AllPersist$Id
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:key

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,oid:org.apache.jdo.tck.pc.inheritance.FieldSameName$Id
org.apache.jdo.tck.pc.inheritance.FieldSameName#keyValue=jdo:persistent,annotation:key
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,oid:org.apache.jdo.tck.pc.inheritance.TopNonPersistB$Id
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:key

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,oid:org.apache.jdo.tck.pc.inheritance.TopPersist$Id
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:key

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

