Package org.apache.uima.cas.impl
Class TypeImpl
java.lang.Object
org.apache.uima.cas.impl.TypeImpl
- All Implemented Interfaces:
Comparable<TypeImpl>
,Iterable<Feature>
,Type
- Direct Known Subclasses:
TypeImpl_annotBase
,TypeImpl_array
,TypeImpl_list
,TypeImpl_primitive
The implementation of types in the type system.
UIMA Version 3
Instances of this class are not shared by different type systems because they contain a ref to the TypeSystemImpl (needed by FeaturePath and maybe other things)
- even for built-ins.
- However, the JCas cover class definitions are shared by all type systems for built-in types
Feature offsets are set from the (changing) value of nbrOfIntDataFields and nbrOfRefDataFields
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final TypeImpl[]
All supertypes, in order, starting with immediate (nearest) supertypeprivate short
private short
private boolean
private long
private final long
(package private) boolean
true for FSarrays non-arrays having 1 or more refs to FSs(package private) int
protected boolean
when set, processing skipped for - augment features from jcas - conformance checking between jcas and type system - validating the superclass chain upon load of jcas classprotected final boolean
False for non creatable (as Feature Structures) values (e.g.protected boolean
protected boolean
protected final boolean
final boolean
false for primitives, strings, string subtypesprotected Class
<?> private final String
private final String
(package private) int
(package private) int
The number of used slots needed = total number of features minus those represented by fields in JCas cover classes(package private) int
private final String
static final TypeImpl
A special instance used in CasCopier to identify a missing type(package private) final SlotKinds.SlotKind
private final Map
<String, FeatureImpl> private final List
<FeatureImpl> private FeatureImpl[]
private FeatureImpl[]
Map from adjusted offset in int features to feature.private FeatureImpl[]
Just the FS refs which are not sofa refsprivate FeatureImpl[]
Map from adjusted offset in ref features to feature Set at commit timeprivate final TypeImpl
private final TypeSystemImpl
private final short
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprivate
TypeImpl()
(package private)
TypeImpl
(String name, TypeSystemImpl tsi, TypeImpl supertype) Create a new type.(package private)
TypeImpl
(String name, TypeSystemImpl tsi, TypeImpl supertype, Class<?> javaClass) -
Method Summary
Modifier and TypeMethodDescription(package private) void
private void
appendIntroFeats
(StringBuilder sb, int indent) private void
It is possible that users may create type/subtype structure, and then add features (in any order) to that, including adding a subtype feature "foo", and subsequently adding a type feature "foo".(package private) void
checkExistingFeatureCompatible
(FeatureImpl existingFi, Type range) int
compareTo must return 0 for "equal" types equal means same name, same flags, same supertype chain, same subtypes, and same features Makes use of hashcodelong to probablistically shortcut computation for equal case for not equal types, do by parts(package private) int
computeDepthFirstCode
(int level) private long
works across type systems a long so the hash code can be reliably used for quick equal compare.private void
Sets hasRefFeature and nbrOfLongOrDoubleFeaturesprivate void
(package private) TypeImpl
consolidateType
(TypeImpl topType, TypeImpl fsArrayType) Consolidate arrays of fsRefs to fsArrayType and ordinary fsRefs to TOP for generic getters and settersboolean
Equal TypeImpl.(package private) int
getAdjOffset
(String featureShortName) (package private) TypeImpl[]
Deprecated.int
getCode()
Return the internal integer code for this type.For array types, returns the component type of the array type.getFeature
(String featureName) Deprecated.use getFeatureByBaseName instead(package private) FeatureImpl
getFeatureByAdjOffset
(int adjOffset, boolean isInInt) getFeatureByBaseName
(String featureShortName) Retrieve a feature for this type.This impl depends on features never being removed from types, only added Minimal Java object generation, maximal reuseguaranteed to be non-null, but might be empty listint
Get the v2 heap size for types with featuresint
getFsSpaceReq
(int length) get the v2 heap size for typesint
getFsSpaceReq
(TOP fs) (package private) Class
<?> Of limited use because the java class value, over time, is multi- valued; e.g.getName()
Get the name of the type.int
int
Get the number of features for which this type defines the range.Get the unqualified, short name of this type.(package private) FeatureImpl[]
Get the super type.Get the type hierarchy that this type belongs to.int
hashCode()
private long
long
boolean
(package private) boolean
hasSupertype
(TypeImpl supertype) (package private) void
initAdjOffset2FeatureMaps
(List<FeatureImpl> tempIntFis, List<FeatureImpl> tempRefFis, List<FeatureImpl> tempNsr) boolean
boolean
Check if this is an annotation type.boolean
isAppropriateFeature
(Feature feature) boolean
isArray()
Check if the type is an array type.(package private) boolean
model how v2 stores this - needed for backward compatibility / (de)serializationboolean
boolean
Check if type is feature final, i.e., if no more new features may be defined for it.(package private) boolean
model how v2 stores this - needed for backward compatibility / (de)serializationboolean
Check if type is inheritance final, i.e., if new types can be derived from it.boolean
boolean
Check if the type is one of the primitive types.(package private) boolean
boolean
boolean
Check if the type is a String subtype.boolean
boolean
iterator()
void
prettyPrint
(StringBuilder sb, int indent) private <T> void
prettyPrintList
(StringBuilder sb, String title, List<T> items, BiConsumer<StringBuilder, T> appender) void
prettyPrintWithSubTypes
(StringBuilder sb, int indent) private void
removeEqualFeatureNameMatch
(List<FeatureImpl> fiList, String aName) (package private) void
(package private) void
(package private) void
(package private) void
setJavaClass
(Class<?> javaClass) (package private) void
(package private) void
(package private) void
boolean
boolean
boolean
toString()
toString
(int indent) Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Field Details
-
name
-
shortName
-
jcasClassName
-
typeCode
private final short typeCode -
depthFirstCode
private short depthFirstCode -
depthFirstNextSibling
private short depthFirstNextSibling -
tsi
-
slotKind
-
javaClass
-
isFeatureFinal
protected boolean isFeatureFinal -
isInheritanceFinal
protected boolean isInheritanceFinal -
isLongOrDouble
protected final boolean isLongOrDouble -
isBuiltIn
protected boolean isBuiltInwhen set, processing skipped for - augment features from jcas - conformance checking between jcas and type system - validating the superclass chain upon load of jcas class -
nbrOfLongOrDoubleFeatures
int nbrOfLongOrDoubleFeatures -
isCreatableAndNotBuiltinArray
protected final boolean isCreatableAndNotBuiltinArrayFalse for non creatable (as Feature Structures) values (e.g. byte, integer, string) and also false for array built-ins (which can be Feature Structures, can be added-to-indexes, etc.) -
isRefType
public final boolean isRefTypefalse for primitives, strings, string subtypes -
hasRefFeature
boolean hasRefFeaturetrue for FSarrays non-arrays having 1 or more refs to FSs -
superType
-
allSuperTypes
All supertypes, in order, starting with immediate (nearest) supertype -
directSubtypes
-
staticMergedFeatures
-
staticMergedFeaturesList
-
staticMergedFeaturesIntroducedByThisType
-
staticMergedIntFeaturesList
Map from adjusted offset in int features to feature. Corrects for Long/Double values taking 2 int slots. Set at commit time -
staticMergedRefFeaturesList
Map from adjusted offset in ref features to feature Set at commit time -
staticMergedNonSofaFsRefs
Just the FS refs which are not sofa refs -
nbrOfUsedIntDataSlots
int nbrOfUsedIntDataSlotsThe number of used slots needed = total number of features minus those represented by fields in JCas cover classes -
nbrOfUsedRefDataSlots
int nbrOfUsedRefDataSlots -
highestOffset
int highestOffset -
singleton
A special instance used in CasCopier to identify a missing type -
hashCodeLong
private long hashCodeLong -
hashCodeNameLong
private final long hashCodeNameLong -
hasHashCodeLong
private boolean hasHashCodeLong
-
-
Constructor Details
-
TypeImpl
private TypeImpl() -
TypeImpl
TypeImpl(String name, TypeSystemImpl tsi, TypeImpl supertype) Create a new type. This should only be done by aTypeSystemImpl
. -
TypeImpl
TypeImpl(String name, TypeSystemImpl tsi, TypeImpl supertype, Class<?> javaClass)
-
-
Method Details
-
getName
Get the name of the type. -
getJCasClassName
-
getSuperType
Get the super type.- Returns:
- The super type or null for Top.
-
getCode
public int getCode()Return the internal integer code for this type. This is only useful if you want to work with the low-level API.- Returns:
- The internal code for this type,
>=0
.
-
toString
-
toString
-
prettyPrintList
private <T> void prettyPrintList(StringBuilder sb, String title, List<T> items, BiConsumer<StringBuilder, T> appender) -
prettyPrint
-
prettyPrintWithSubTypes
-
appendIntroFeats
-
getAppropriateFeatures
Deprecated.usegetFeatures()
Get a vector of the features for which this type is the domain. Features will be returned in no particular order.- Specified by:
getAppropriateFeatures
in interfaceType
- Returns:
- The vector.
-
getNumberOfFeatures
public int getNumberOfFeatures()Get the number of features for which this type defines the range.- Specified by:
getNumberOfFeatures
in interfaceType
- Returns:
- The number of features.
-
isAppropriateFeature
-
isAnnotationType
public boolean isAnnotationType()Check if this is an annotation type.- Returns:
true
, ifthis
is an annotation type or subtype;false
, else.
-
isAnnotationBaseType
public boolean isAnnotationBaseType()- Returns:
- true for AnnotationBaseType or any subtype
-
isCreatableAndNotBuiltinArray
public boolean isCreatableAndNotBuiltinArray() -
getTypeSystem
Get the type hierarchy that this type belongs to.- Returns:
- The type hierarchy.
-
getFeatureByBaseName
Description copied from interface:Type
Retrieve a feature for this type. Inherited features can also be retrieved this way.- Specified by:
getFeatureByBaseName
in interfaceType
- Parameters:
featureShortName
- The short, unqualified name of the feature.- Returns:
- The feature, if it exists;
null
, else. - See Also:
-
getShortName
Description copied from interface:Type
Get the unqualified, short name of this type.- Specified by:
getShortName
in interfaceType
- Returns:
- The short name of this type.
- See Also:
-
isFeatureFinal
public boolean isFeatureFinal()Description copied from interface:Type
Check if type is feature final, i.e., if no more new features may be defined for it.- Specified by:
isFeatureFinal
in interfaceType
- Returns:
- If type is feature final.
- See Also:
-
isInheritanceFinal
public boolean isInheritanceFinal()Description copied from interface:Type
Check if type is inheritance final, i.e., if new types can be derived from it.- Specified by:
isInheritanceFinal
in interfaceType
- Returns:
- If type is inheritance final.
- See Also:
-
setFeatureFinal
void setFeatureFinal() -
setInheritanceFinal
void setInheritanceFinal() -
setBuiltIn
void setBuiltIn() -
isLongOrDouble
public boolean isLongOrDouble() -
getFeature
Deprecated.use getFeatureByBaseName instead- Parameters:
featureName
- -- Returns:
- -
-
getFeatures
guaranteed to be non-null, but might be empty list- Specified by:
getFeatures
in interfaceType
- Returns:
- -
-
getFeatureImpls
This impl depends on features never being removed from types, only added Minimal Java object generation, maximal reuse- Returns:
- the list of feature impls
-
computeStaticMergedFeaturesList
private void computeStaticMergedFeaturesList() -
computeHasXxx
private void computeHasXxx()Sets hasRefFeature and nbrOfLongOrDoubleFeatures -
getFeaturesAsStream
-
getMergedStaticFeaturesIntroducedByThisType
-
addFeature
- Parameters:
fi
- feature to be added
-
checkAndAdjustFeatureInSubtypes
It is possible that users may create type/subtype structure, and then add features (in any order) to that, including adding a subtype feature "foo", and subsequently adding a type feature "foo". To handle this: a feature added to type T should be - removed if present in all subtype's introfeatures - added to all subtypes merged features - a check done in case any of the subtypes had already added this, but with a different definition- Parameters:
ti
- the type whose subtypes need checkingfi
- the feature
-
removeEqualFeatureNameMatch
-
checkExistingFeatureCompatible
-
consolidateType
Consolidate arrays of fsRefs to fsArrayType and ordinary fsRefs to TOP for generic getters and setters- Parameters:
topType
- -fsArrayType
- -- Returns:
- this type or one of the two passed in types
-
isPrimitive
public boolean isPrimitive()Description copied from interface:Type
Check if the type is one of the primitive types.- Specified by:
isPrimitive
in interfaceType
- Returns:
true
iff type is a primitive type.- See Also:
-
isArray
public boolean isArray()Description copied from interface:Type
Check if the type is an array type. -
isHeapStoredArray
boolean isHeapStoredArray()model how v2 stores this - needed for backward compatibility / (de)serialization- Returns:
- true if it is an array and is stored in the main heap (int, float, or string)
-
isAuxStoredArray
boolean isAuxStoredArray()model how v2 stores this - needed for backward compatibility / (de)serialization- Returns:
- true if it is an array and is one of the 3 aux arrays (byte (also used for boolean) short, long
-
isStringSubtype
public boolean isStringSubtype()Description copied from interface:Type
Check if the type is a String subtype. Note: returns false if a plain string- Specified by:
isStringSubtype
in interfaceType
- Returns:
true
iff the type is a String subtype type; false for plain string- See Also:
-
isStringOrStringSubtype
public boolean isStringOrStringSubtype()- Specified by:
isStringOrStringSubtype
in interfaceType
- Returns:
- true if is a String or a StringSubtype
-
getComponentType
Description copied from interface:Type
For array types, returns the component type of the array type. For all other types, it will returnnull
.- Specified by:
getComponentType
in interfaceType
- Returns:
- The component type of an array type.
-
getComponentSlotKind
-
getAllSubtypes
- Returns:
- stream of all subtypes (excludes this type) in strict subsumption order
-
getDirectSubtypes
-
hasSupertype
-
getAllSuperTypes
TypeImpl[] getAllSuperTypes() -
subsumes
- Parameters:
ti
- the subtype to check- Returns:
- true if this type subsumes the subtype (is equal to or a supertype of the subtype)
-
subsumesStrictly
- Parameters:
ti
- the subtype to check- Returns:
- true if this type subsumes the subtype (is equal to or a supertype of the subtype)
-
subsumesValue
- Parameters:
v
- the value to test- Returns:
- true if value v can be assigned to an object of this type
-
computeDepthFirstCode
int computeDepthFirstCode(int level) -
getJavaClass
Class<?> getJavaClass()Of limited use because the java class value, over time, is multi- valued; e.g. when PEARs are in use, or different extension classpaths are in use for multiple pipelines.- Returns:
- the javaClass
-
setJavaClass
- Parameters:
javaClass
- the javaClass to set
-
getFsSpaceReq
public int getFsSpaceReq()Get the v2 heap size for types with features- Returns:
- the main heap size for this FeatureStructure, assuming it's not a heap stored array (see below)
-
getFsSpaceReq
public int getFsSpaceReq(int length) get the v2 heap size for types- Parameters:
length
- for heap-stored arrays, the array length- Returns:
- the main heap size for this FeatureStructure
-
getFsSpaceReq
-
initAdjOffset2FeatureMaps
void initAdjOffset2FeatureMaps(List<FeatureImpl> tempIntFis, List<FeatureImpl> tempRefFis, List<FeatureImpl> tempNsr) -
getFeatureByAdjOffset
-
getAdjOffset
-
hashCode
public int hashCode() -
hashCodeLong
private long hashCodeLong() -
hashCodeNameLong
public long hashCodeNameLong() -
computeHashCodeLong
private long computeHashCodeLong()works across type systems a long so the hash code can be reliably used for quick equal compare. Hash code is not a function of subtypes; otherwise two Type Systems with different types would have unequal TOP types, for example- Returns:
- -
-
equals
Equal TypeImpl. Works across type systems. -
compareTo
compareTo must return 0 for "equal" types equal means same name, same flags, same supertype chain, same subtypes, and same features Makes use of hashcodelong to probablistically shortcut computation for equal case for not equal types, do by parts- Specified by:
compareTo
in interfaceComparable<TypeImpl>
-
isPrimitiveArrayType
boolean isPrimitiveArrayType() -
hasRefFeature
public boolean hasRefFeature() -
getNbrOfLongOrDoubleFeatures
public int getNbrOfLongOrDoubleFeatures() -
isTypedFsArray
public boolean isTypedFsArray()- Returns:
- true if this type is an array of specific (not TOP) Feature structures, not FSArray
-
setStaticMergedIntFeaturesList
-
setStaticMergedRefFeaturesList
-
setStaticMergedNonSofaFsRefs
-
getStaticMergedNonSofaFsRefs
FeatureImpl[] getStaticMergedNonSofaFsRefs() -
isTopType
public boolean isTopType() -
iterator
-
getFeatures()