This property describes if a type (class, interface) is further extensible by yet unknown
types (that is, can be (transitively) inherited from).
This property generally depends on the kind of the project. If the project is an application,
all classes are considered to be closed unless we explicitly know that some specific classes/
interfaces are used in combination with class loading to load new (unknown) classes at runtime.
I.e., the class hierarchy is basically considered to be fixed; if the
analyzed project is a library then the result depends on the concrete assumption about the
openness of the library.
Extensibility w.r.t. the open-packages assumption
A class is extensible if:
the class is not (effectively) final
one of its subclasses is extensible
Extensibility w.r.t. the closed-packages assumption
A class is extensible if:
the class is public and not (effectively) final
one of its subclasses is extensible
Special cases
If a class is defined in a package starting with java.*, it always has to be treated like
classes that are analyzed w.r.t. to closed-packages assumption. This is necessary because the
default ClassLoader prevents the definition of further classes within these packages, hence,
they are closed by definition.
If the analyzed codebase has an incomplete type hierarchy which leads to unknown subtype
relationships, it is necessary to add these particular classes to the computed set of
extensible classes.
Linear Supertypes
PropertyMetaInformation, PropertyKind, AnyRef, Any
This property describes if a type (class, interface) is further extensible by yet unknown types (that is, can be (transitively) inherited from). This property generally depends on the kind of the project. If the project is an application, all classes are considered to be closed unless we explicitly know that some specific classes/ interfaces are used in combination with class loading to load new (unknown) classes at runtime. I.e., the class hierarchy is basically considered to be fixed; if the analyzed project is a library then the result depends on the concrete assumption about the openness of the library.
Extensibility w.r.t. the open-packages assumption
A class is extensible if:
Extensibility w.r.t. the closed-packages assumption
A class is extensible if:
Special cases
If a class is defined in a package starting with java.*, it always has to be treated like classes that are analyzed w.r.t. to closed-packages assumption. This is necessary because the default
ClassLoaderprevents the definition of further classes within these packages, hence, they are closed by definition.If the analyzed codebase has an incomplete type hierarchy which leads to unknown subtype relationships, it is necessary to add these particular classes to the computed set of extensible classes.