Inheritance Use

Definitions

ChildType The type that is inheriting
ParentType The type that is being inherited from
Edge An edge represents an inheritance relationship. The source end is the child type and the sink is the parent type.
MarkerType A marker type is an interface with no user-defined members.
SystemType A type created for the system under investigation
ExternalType A type used for the system under investigation but not a system type
SubtypeUse The subtype relationship created by use of inheritance was required in the code.
ExternalReuse A member of a type was used that was an inherited member, and the client accessing the member has no inheritance relationship to either type
InternalReuse A type accesses a member that the type has inherited
Constants A type that has 1 or more user-defined constant fields and no user-defined methods
Downcall An invocation a method that is declared in a descendant type of the type containing the method that made the call.

Edge Attributes

Explicit This relationship between the types is described directly in the code.
Redundant This is an explicit relationship connecting to types that are connected by a different path of explicit relationships.
ImplicitKnown This relationship is not explicit but is implied by a path of explicit relationships.
UserDefined Both types are system types.
CC This relationship is between classes (extends).
CI This relationship is from a class to an interface (implements).
II This relationship is between interfaces (extends).
Cast A cast was seen from the parent type to the child type.
Sideways The parent type was cast to or from an unrelated ancestor of the child type.
This A subtype use of this relationship was seen, where the 'assignment' was to 'this', which implies subtype use of child types.
Marker The parent type is a marker type.
Framework The parent type is a subtype of an external type.
Category There is a sibling of the child type with respect to the parent type for which a subtype use has been seen.
ConstantsInterface The parent type is an interface that is a constants interface.
ConstantsClass The parent type is a constants class.
GenericUse The child type has a subtype use with respect to java.lang.Object, implying a use of generics
Single There is a hierarchy with only two members (not counting java.lang.Object) and so only a single relationship.
Downcall There is the potential for a downcall.
UpcallConstructorDefault The constructor of the child type calls the default constructor of the parent type. Such calls will be implicit.
UpcallConstructorSuper The constructor of the child type calls the constructor of the parent type via super. Such calls must be explicit.
UpcallMethod A method (or constructor) in the child type calls a method it inherits. No distinction is made between direct and indirect.
UpcallField A method (or constructor) in the child type accesses a field it inherits. No distinction is made between direct and indirect.
DirectExReuseMethod External reuse was made of a method in the child type that was inherted from the parent type. This applies to interfaces as well as classes.
IndirectExReuseMethod This explicit relationship was relied on in order for external reuse of a method but no direct external reuse was seen.
DirectExReuseField External reuse was made of a field in the child type that was inherited from the parent type.
IndirectExReuseField This explicit relationship was relied on in order for a field to be externally reused but no direct external reuse was seen.
DirectSubtype There was subtype use between the child type and parent type was seen.
IndirectSubtype This explicit relationship was relied on in order for some other child type use to take place.

Metrics

nExplicitCC Number of explicit userdefined cc edges --- {(UserDefined) and (Explicit) and (CC)}
nCCUsed Explicit class edges for which some subtype use or reuse use was seen --- {(UserDefined) and (Explicit) and (CC) and (DirectExReuseField or IndirectExReuseField or DirectExReuseMethod or IndirectExReuseMethod or DirectSubtype or IndirectSubtype or UpcallField or UpcallMethod)}
pCCUsed {nCCUsed/nExplicitCC}
nCCDC Number of explicit CC edges that have Downcall use --- {(UserDefined) and (Explicit) and (CC) and (Downcall)}
pCCDC {nCCDC/nExplicitCC}
nCCSubtype Used system CC edges for which subtype use was seen --- {(UserDefined) and (Explicit) and (CC) and (DirectSubtype or IndirectSubtype)}
pCCSubtype {nCCSubtype/nCCUsed}
nCCExreuseNoSubtype Used system CC edges for which no subtype use was seen, but external reuse use was seen --- {(UserDefined) and (Explicit) and (CC) and (DirectExReuseField or IndirectExReuseField or DirectExReuseMethod or IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype)}
pCCExreuseNoSubtype {nCCExreuseNoSubtype/nCCUsed}
nCCUsedOnlyInRe Used system CC edges for which only internal reuse was seen --- {(UserDefined) and (Explicit) and (CC) and (not DirectExReuseField) and (not IndirectExReuseField) and (not DirectExReuseMethod) and (not IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype) and (UpcallField or UpcallMethod)}
pCCUsedOnlyInRe {nCCUsedOnlyInRe/nCCUsed}
nCCUnexplSuper Explict system edges that have no use or explanation but super constructor calls --- {(UserDefined) and (Explicit) and (CC) and (not DirectExReuseField) and (not IndirectExReuseField) and (not DirectExReuseMethod) and (not IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype) and (not UpcallField) and (not UpcallMethod) and (not Downcall) and (not ConstantsClass) and (not ConstantsInterface) and (not Marker) and (not Framework) and (not GenericUse) and (UpcallConstructorSuper)}
pCCUnexplSuper {nCCUnexplSuper/nExplicitCC}
nCCUnexplCategory Explict system edges that have no use or explanation (incl. super constructor calls) but has category use --- {(UserDefined) and (Explicit) and (CC) and (not DirectExReuseField) and (not IndirectExReuseField) and (not DirectExReuseMethod) and (not IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype) and (not UpcallField) and (not UpcallMethod) and (not Downcall) and (not ConstantsClass) and (not ConstantsInterface) and (not Marker) and (not Framework) and (not GenericUse) and (not UpcallConstructorSuper) and (Category)}
pCCUnexplCategory {nCCUnexplCategory/nExplicitCC}
nCCUnknown Explicit system class edges that no use or explanation is known (nCCUnused = nCCExplained+nCCUnknown) --- {(UserDefined) and (Explicit) and (CC) and (not DirectExReuseField) and (not IndirectExReuseField) and (not DirectExReuseMethod) and (not IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype) and (not UpcallField) and (not UpcallMethod) and (not Downcall) and (not ConstantsClass) and (not ConstantsInterface) and (not Marker) and (not Framework) and (not GenericUse) and (not UpcallConstructorSuper) and (not Category)}
pCCUnknown {nCCUnknown/nExplicitCC}
nExplicitCI Explicit edges between user-defined classes and user-defined interfaces --- {(UserDefined) and (Explicit) and (CI)}
nOnlyCISubtype Edges between classes and interfaces for which subtype use was seen (the only use possible for such edges) --- {(UserDefined) and (Explicit) and (CI) and (DirectSubtype or IndirectSubtype)}
pOnlyCISubtype {nOnlyCISubtype/nExplicitCI}
nExplainedCI Edges from class to interface with no subtype use seen, but with one of Framework, Generic, etc (not Category) --- {(UserDefined) and (Explicit) and (CI) and (not DirectSubtype) and (not IndirectSubtype) and (Framework or GenericUse or Marker or ConstantsInterface or ConstantsClass)}
pExplainedCI {nExplainedCI/nExplicitCI}
nCategoryExplCI Edges for which no subtype use or other explanation was seen, but which have Category --- {(UserDefined) and (Explicit) and (CI) and (not DirectSubtype) and (not IndirectSubtype) and (not Framework) and (not GenericUse) and (not Marker) and (not ConstantsInterface) and (not ConstantsClass) and (Category)}
pCategoryExplCI {nCategoryExplCI/nExplicitCI}
nUnexplainedCI Edges from class to interface with no subtype use seen or explained (including Category) --- {(UserDefined) and (Explicit) and (CI) and (not DirectSubtype) and (not IndirectSubtype) and (not Framework) and (not GenericUse) and (not Marker) and (not ConstantsInterface) and (not ConstantsClass) and (not Category)}
pUnexplainedCI {nUnexplainedCI/nExplicitCI}
nExplicitII Explicit edges between user-defined interfaces --- {(UserDefined) and (Explicit) and (II)}
nIISubtype Edges between interfaces with at least subtype use --- {(UserDefined) and (Explicit) and (II) and (DirectSubtype or IndirectSubtype)}
pIISubtype {nIISubtype/nExplicitII}
nOnlyIIReuse Edges between interfaces for which reuse was seen but not subtype --- {(UserDefined) and (Explicit) and (II) and (DirectExReuseField or IndirectExReuseField or DirectExReuseMethod or IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype)}
pOnlyIIReuse {nOnlyIIReuse/nExplicitII}
nExplainedII Unused edges between interface with some explanation (not category) --- {(UserDefined) and (Explicit) and (II) and (not DirectExReuseField) and (not IndirectExReuseField) and (not DirectExReuseMethod) and (not IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype) and (Framework or GenericUse or Marker or ConstantsInterface or ConstantsClass)}
pExplainedII {nExplainedII/nExplicitII}
nCategoryExplII Edges for which no use or other explanation has been seen, but which have Category --- {(UserDefined) and (Explicit) and (II) and (not DirectExReuseField) and (not IndirectExReuseField) and (not DirectExReuseMethod) and (not IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype) and (not Framework) and (not GenericUse) and (not Marker) and (not ConstantsInterface) and (not ConstantsClass) and (Category)}
pCategoryExplII {nCategoryExplII/nExplicitII}
nUnexplainedII Edges between interfaces with no explanation (including Category) --- {(UserDefined) and (Explicit) and (II) and (not DirectExReuseField) and (not IndirectExReuseField) and (not DirectExReuseMethod) and (not IndirectExReuseMethod) and (not DirectSubtype) and (not IndirectSubtype) and (not Framework) and (not GenericUse) and (not Marker) and (not ConstantsInterface) and (not ConstantsClass) and (not Category)}
pUnexplainedII {nUnexplainedII/nExplicitII}