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 shortprivate shortprivate booleanprivate longprivate final long(package private) booleantrue for FSarrays non-arrays having 1 or more refs to FSs(package private) intprotected booleanwhen 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 booleanFalse for non creatable (as Feature Structures) values (e.g.protected booleanprotected booleanprotected final booleanfinal booleanfalse for primitives, strings, string subtypesprotected Class<?> private final Stringprivate final String(package private) int(package private) intThe number of used slots needed = total number of features minus those represented by fields in JCas cover classes(package private) intprivate final Stringstatic final TypeImplA special instance used in CasCopier to identify a missing type(package private) final SlotKinds.SlotKindprivate 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 TypeImplprivate final TypeSystemImplprivate final short -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivateTypeImpl()(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) voidprivate voidappendIntroFeats(StringBuilder sb, int indent) private voidIt 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) voidcheckExistingFeatureCompatible(FeatureImpl existingFi, Type range) intcompareTo 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) intcomputeDepthFirstCode(int level) private longworks across type systems a long so the hash code can be reliably used for quick equal compare.private voidSets hasRefFeature and nbrOfLongOrDoubleFeaturesprivate void(package private) TypeImplconsolidateType(TypeImpl topType, TypeImpl fsArrayType) Consolidate arrays of fsRefs to fsArrayType and ordinary fsRefs to TOP for generic getters and settersbooleanEqual TypeImpl.(package private) intgetAdjOffset(String featureShortName) (package private) TypeImpl[]Deprecated.intgetCode()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) FeatureImplgetFeatureByAdjOffset(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 listintGet the v2 heap size for types with featuresintgetFsSpaceReq(int length) get the v2 heap size for typesintgetFsSpaceReq(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.intintGet 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.inthashCode()private longlongboolean(package private) booleanhasSupertype(TypeImpl supertype) (package private) voidinitAdjOffset2FeatureMaps(List<FeatureImpl> tempIntFis, List<FeatureImpl> tempRefFis, List<FeatureImpl> tempNsr) booleanbooleanCheck if this is an annotation type.booleanisAppropriateFeature(Feature feature) booleanisArray()Check if the type is an array type.(package private) booleanmodel how v2 stores this - needed for backward compatibility / (de)serializationbooleanbooleanCheck if type is feature final, i.e., if no more new features may be defined for it.(package private) booleanmodel how v2 stores this - needed for backward compatibility / (de)serializationbooleanCheck if type is inheritance final, i.e., if new types can be derived from it.booleanbooleanCheck if the type is one of the primitive types.(package private) booleanbooleanbooleanCheck if the type is a String subtype.booleanbooleaniterator()voidprettyPrint(StringBuilder sb, int indent) private <T> voidprettyPrintList(StringBuilder sb, String title, List<T> items, BiConsumer<StringBuilder, T> appender) voidprettyPrintWithSubTypes(StringBuilder sb, int indent) private voidremoveEqualFeatureNameMatch(List<FeatureImpl> fiList, String aName) (package private) void(package private) void(package private) void(package private) voidsetJavaClass(Class<?> javaClass) (package private) void(package private) void(package private) voidbooleanbooleanbooleantoString()toString(int indent) Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods 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:
getAppropriateFeaturesin interfaceType- Returns:
- The vector.
-
getNumberOfFeatures
public int getNumberOfFeatures()Get the number of features for which this type defines the range.- Specified by:
getNumberOfFeaturesin interfaceType- Returns:
- The number of features.
-
isAppropriateFeature
-
isAnnotationType
public boolean isAnnotationType()Check if this is an annotation type.- Returns:
true, ifthisis 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:TypeRetrieve a feature for this type. Inherited features can also be retrieved this way.- Specified by:
getFeatureByBaseNamein 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:TypeGet the unqualified, short name of this type.- Specified by:
getShortNamein interfaceType- Returns:
- The short name of this type.
- See Also:
-
isFeatureFinal
public boolean isFeatureFinal()Description copied from interface:TypeCheck if type is feature final, i.e., if no more new features may be defined for it.- Specified by:
isFeatureFinalin interfaceType- Returns:
- If type is feature final.
- See Also:
-
isInheritanceFinal
public boolean isInheritanceFinal()Description copied from interface:TypeCheck if type is inheritance final, i.e., if new types can be derived from it.- Specified by:
isInheritanceFinalin 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:
getFeaturesin 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:TypeCheck if the type is one of the primitive types.- Specified by:
isPrimitivein interfaceType- Returns:
trueiff type is a primitive type.- See Also:
-
isArray
public boolean isArray()Description copied from interface:TypeCheck 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:TypeCheck if the type is a String subtype. Note: returns false if a plain string- Specified by:
isStringSubtypein interfaceType- Returns:
trueiff the type is a String subtype type; false for plain string- See Also:
-
isStringOrStringSubtype
public boolean isStringOrStringSubtype()- Specified by:
isStringOrStringSubtypein interfaceType- Returns:
- true if is a String or a StringSubtype
-
getComponentType
Description copied from interface:TypeFor array types, returns the component type of the array type. For all other types, it will returnnull.- Specified by:
getComponentTypein 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:
compareToin 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()