in uimaj-core/src/main/java/org/apache/uima/cas/impl/TypeSystemImpl.java [480:768]
public TypeSystemImpl() {
// set up meta info (TypeImpl) for built-in types
// @formatter:off
/****************************************************************
* D O N O T C H A N G E T H I S O R D E R I N G ! ! *
* --- ----- ----------- ------- -------------------
****************************************************************/
// @formatter:on
// Create top type.
topType = new TypeImpl(CAS.TYPE_NAME_TOP, this, null, TOP.class);
// Add basic data types.
intType = new TypeImpl_primitive(CAS.TYPE_NAME_INTEGER, this, topType, int.class);
floatType = new TypeImpl_primitive(CAS.TYPE_NAME_FLOAT, this, topType, float.class);
stringType = new TypeImpl_string(CAS.TYPE_NAME_STRING, this, topType, String.class);
// Add arrays.
arrayBaseType = new TypeImpl(CAS.TYPE_NAME_ARRAY_BASE, this, topType);
topArrayType = fsArrayType = addArrayType(topType, Slot_HeapRef, HEAP_STORED_ARRAY,
FSArray.class);
floatArrayType = addArrayType(floatType, Slot_Float, HEAP_STORED_ARRAY, FloatArray.class);
intArrayType = addArrayType(intType, Slot_Int, HEAP_STORED_ARRAY, IntegerArray.class);
stringArrayType = addArrayType(stringType, Slot_StrRef, HEAP_STORED_ARRAY, StringArray.class);
// @formatter:off
/**********************************************************************************************
* Add Lists *
* The Tail feature is not factored out into listBaseType because it returns a typed value. *
**********************************************************************************************/
// @formatter:on
listBaseType = new TypeImpl(CAS.TYPE_NAME_LIST_BASE, this, topType);
// FS list
fsListType = new TypeImpl_list(CAS.TYPE_NAME_FS_LIST, topType, this, listBaseType,
FSList.class);
fsEListType = new TypeImpl_list(CAS.TYPE_NAME_EMPTY_FS_LIST, topType, this, fsListType,
EmptyFSList.class);
fsNeListType = new TypeImpl_list(CAS.TYPE_NAME_NON_EMPTY_FS_LIST, topType, this, fsListType,
NonEmptyFSList.class);
addFeature(CAS.FEATURE_BASE_NAME_TAIL, fsNeListType, fsListType, true);
addFeature(CAS.FEATURE_BASE_NAME_HEAD, fsNeListType, topType, true);
// Float list
floatListType = new TypeImpl_list(CAS.TYPE_NAME_FLOAT_LIST, floatType, this, listBaseType,
FloatList.class);
floatEListType = new TypeImpl_list(CAS.TYPE_NAME_EMPTY_FLOAT_LIST, floatType, this,
floatListType, EmptyFloatList.class);
floatNeListType = new TypeImpl_list(CAS.TYPE_NAME_NON_EMPTY_FLOAT_LIST, floatType, this,
floatListType, NonEmptyFloatList.class);
addFeature(CAS.FEATURE_BASE_NAME_TAIL, floatNeListType, floatListType, true);
addFeature(CAS.FEATURE_BASE_NAME_HEAD, floatNeListType, floatType, false);
// Integer list
intListType = new TypeImpl_list(CAS.TYPE_NAME_INTEGER_LIST, intType, this, listBaseType,
IntegerList.class);
intEListType = new TypeImpl_list(CAS.TYPE_NAME_EMPTY_INTEGER_LIST, intType, this, intListType,
EmptyIntegerList.class);
intNeListType = new TypeImpl_list(CAS.TYPE_NAME_NON_EMPTY_INTEGER_LIST, intType, this,
intListType, NonEmptyIntegerList.class);
addFeature(CAS.FEATURE_BASE_NAME_TAIL, intNeListType, intListType, true);
addFeature(CAS.FEATURE_BASE_NAME_HEAD, intNeListType, intType, false);
// String list
stringListType = new TypeImpl_list(CAS.TYPE_NAME_STRING_LIST, stringType, this, listBaseType,
StringList.class);
stringEListType = new TypeImpl_list(CAS.TYPE_NAME_EMPTY_STRING_LIST, stringType, this,
stringListType, EmptyStringList.class);
stringNeListType = new TypeImpl_list(CAS.TYPE_NAME_NON_EMPTY_STRING_LIST, stringType, this,
stringListType, NonEmptyStringList.class);
addFeature(CAS.FEATURE_BASE_NAME_TAIL, stringNeListType, stringListType, true);
addFeature(CAS.FEATURE_BASE_NAME_HEAD, stringNeListType, stringType, false);
booleanType = new TypeImpl_primitive(CAS.TYPE_NAME_BOOLEAN, this, topType, boolean.class);
byteType = new TypeImpl_primitive(CAS.TYPE_NAME_BYTE, this, topType, byte.class);
shortType = new TypeImpl_primitive(CAS.TYPE_NAME_SHORT, this, topType, short.class);
longType = new TypeImpl_primitive(CAS.TYPE_NAME_LONG, this, topType, long.class);
doubleType = new TypeImpl_primitive(CAS.TYPE_NAME_DOUBLE, this, topType, double.class);
// array type initialization must follow the component type it's based on
booleanArrayType = addArrayType(booleanType, Slot_BooleanRef, !HEAP_STORED_ARRAY,
BooleanArray.class); // yes, byteref
byteArrayType = addArrayType(byteType, Slot_ByteRef, !HEAP_STORED_ARRAY, ByteArray.class);
shortArrayType = addArrayType(shortType, Slot_ShortRef, !HEAP_STORED_ARRAY, ShortArray.class);
longArrayType = addArrayType(longType, Slot_LongRef, !HEAP_STORED_ARRAY, LongArray.class);
doubleArrayType = addArrayType(doubleType, Slot_DoubleRef, !HEAP_STORED_ARRAY,
DoubleArray.class);
// Sofa Stuff
sofaType = new TypeImpl(CAS.TYPE_NAME_SOFA, this, topType, Sofa.class);
sofaNum = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_SOFANUM, sofaType, intType, false);
sofaId = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_SOFAID, sofaType, stringType, false);
sofaMime = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_SOFAMIME, sofaType, stringType,
false);
// Type localSofa = addType(CAS.TYPE_NAME_LOCALSOFA, sofa);
sofaArray = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_SOFAARRAY, sofaType, topType, true);
sofaString = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_SOFASTRING, sofaType, stringType,
false);
// Type remoteSofa = addType(CAS.TYPE_NAME_REMOTESOFA, sofa);
sofaUri = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_SOFAURI, sofaType, stringType, false);
// Annotations
annotBaseType = new TypeImpl_annotBase(CAS.TYPE_NAME_ANNOTATION_BASE, this, topType,
AnnotationBase.class);
annotBaseSofaFeat = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_SOFA, annotBaseType,
sofaType, false);
annotType = new TypeImpl_annot(CAS.TYPE_NAME_ANNOTATION, this, annotBaseType, Annotation.class);
startFeat = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_BEGIN, annotType, intType, false);
endFeat = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_END, annotType, intType, false);
docType = new TypeImpl_annot(CAS.TYPE_NAME_DOCUMENT_ANNOTATION, this, annotType,
Annotation.class);
langFeat = (FeatureImpl) addFeature(CAS.FEATURE_BASE_NAME_LANGUAGE, docType, stringType, false);
// fsArrayListType = new TypeImpl(CAS.TYPE_NAME_FS_ARRAY_LIST, this, topType);
// addFeature(CAS.FEATURE_BASE_NAME_FS_ARRAY, fsArrayListType, fsArrayType);
//
// intArrayListType = new TypeImpl(CAS.TYPE_NAME_INT_ARRAY_LIST, this, topType);
// addFeature(CAS.FEATURE_BASE_NAME_INT_ARRAY, intArrayListType, intArrayType);
//
// fsHashSetType = new TypeImpl(CAS.TYPE_NAME_FS_HASH_SET, this, topType);
// addFeature(CAS.FEATURE_BASE_NAME_FS_ARRAY, fsHashSetType, fsArrayType);
// javaObjectType = new TypeImpl_javaObject(CAS.TYPE_NAME_JAVA_OBJECT, this, topType,
// Object.class);
// javaObjectArrayType = addArrayType(javaObjectType, null, HEAP_STORED_ARRAY,
// JavaObjectArray.class);
arrayName2ComponentType.put(CAS.TYPE_NAME_FS_ARRAY, topType);
arrayName2ComponentType.put(CAS.TYPE_NAME_BOOLEAN_ARRAY, booleanType);
arrayName2ComponentType.put(CAS.TYPE_NAME_BYTE_ARRAY, byteType);
arrayName2ComponentType.put(CAS.TYPE_NAME_SHORT_ARRAY, shortType);
arrayName2ComponentType.put(CAS.TYPE_NAME_INTEGER_ARRAY, intType);
arrayName2ComponentType.put(CAS.TYPE_NAME_FLOAT_ARRAY, floatType);
arrayName2ComponentType.put(CAS.TYPE_NAME_LONG_ARRAY, longType);
arrayName2ComponentType.put(CAS.TYPE_NAME_DOUBLE_ARRAY, doubleType);
arrayName2ComponentType.put(CAS.TYPE_NAME_STRING_ARRAY, stringType);
// arrayName2ComponentType.put(CAS.TYPE_NAME_JAVA_OBJECT_ARRAY, javaObjectType);
// // initialize the decompiler settings to read the class definition
// // from the classloader of this class. Needs to be fixed to work with PEARs
// // or custom UIMA class loaders.
//
// if (IS_DECOMPILE_JCAS) {
// ITypeLoader tl = new ITypeLoader() {
//
// @Override
// public boolean tryLoadType(String internalName, Buffer buffer) {
//
// // get the classloader to use to read the class as a resource
// ClassLoader cl = this.getClass().getClassLoader();
//
// // read the class as a resource, and put into temporary byte array output stream
// // because we need to know the length
//
// internalName = internalName.replace('.', '/') + ".class";
// InputStream stream = cl.getResourceAsStream(internalName);
// if (stream == null) {
// return false;
// }
// ByteArrayOutputStream baos = new ByteArrayOutputStream(1024 * 16);
// byte[] b = new byte[1024 * 16];
// int numberRead;
// try {
// while (0 <= (numberRead = stream.read(b))){
// baos.write(b, 0, numberRead);
// }
// } catch (IOException e) {
// throw new RuntimeException(e);
// }
//
// // Copy result (based on length) into output buffer spot
// int length = baos.size();
// b = baos.toByteArray();
// buffer.reset(length);
// System.arraycopy(b, 0, buffer.array(), 0, length);
//
// return true;
// }
// };
// decompilerSettings.setTypeLoader(tl);
// }
// Lock individual types.
setTypeFinal(intType);
setTypeFinal(floatType);
setTypeFinal(stringType);
topType.setFeatureFinal();
setTypeFinal(arrayBaseType);
setTypeFinal(fsArrayType);
setTypeFinal(intArrayType);
setTypeFinal(floatArrayType);
setTypeFinal(stringArrayType);
setTypeFinal(sofaType);
setTypeFinal(byteType);
setTypeFinal(booleanType);
setTypeFinal(shortType);
setTypeFinal(longType);
setTypeFinal(doubleType);
setTypeFinal(booleanArrayType);
setTypeFinal(byteArrayType);
setTypeFinal(shortArrayType);
setTypeFinal(longArrayType);
setTypeFinal(doubleArrayType);
// setTypeFinal(javaObjectArrayType);
setTypeFinal(fsListType);
setTypeFinal(floatListType);
setTypeFinal(stringListType);
setTypeFinal(intListType);
setTypeFinal(fsEListType);
setTypeFinal(floatEListType);
setTypeFinal(stringEListType);
setTypeFinal(intEListType);
setTypeFinal(fsNeListType);
setTypeFinal(floatNeListType);
setTypeFinal(stringNeListType);
setTypeFinal(intNeListType);
topType.setBuiltIn();
listBaseType.setBuiltIn();
fsListType.setBuiltIn();
fsEListType.setBuiltIn();
fsNeListType.setBuiltIn();
floatListType.setBuiltIn();
floatEListType.setBuiltIn();
floatNeListType.setBuiltIn();
intListType.setBuiltIn();
intEListType.setBuiltIn();
intNeListType.setBuiltIn();
stringListType.setBuiltIn();
stringEListType.setBuiltIn();
stringNeListType.setBuiltIn();
annotType.setBuiltIn();
annotBaseType.setBuiltIn();
// setTypeFinal(fsArrayListType);
// setTypeFinal(intArrayListType);
// setTypeFinal(fsHashSetType);
listBaseType.setFeatureFinal();
fsListType.setFeatureFinal();
fsEListType.setFeatureFinal();
fsNeListType.setFeatureFinal();
floatListType.setFeatureFinal();
floatEListType.setFeatureFinal();
floatNeListType.setFeatureFinal();
intListType.setFeatureFinal();
intEListType.setFeatureFinal();
intNeListType.setFeatureFinal();
stringListType.setFeatureFinal();
stringEListType.setFeatureFinal();
stringNeListType.setFeatureFinal();
annotType.setFeatureFinal();
annotBaseType.setFeatureFinal();
// fsArrayListType.setFeatureFinal();
// intListType.setFeatureFinal();
// fsHashSetType.setFeatureFinal();
// allTypesForByteCodeGen = new TypeImpl[] {
// booleanType,
// byteType,
// shortType,
// intType,
// floatType,
// longType,
// doubleType,
//
// stringType,
// topType,
// javaObjectType,
//
// booleanArrayType,
// byteArrayType,
// shortArrayType,
// intArrayType,
// floatArrayType,
// longArrayType,
// doubleArrayType,
// stringArrayType,
// topArrayType,
// javaObjectArrayType};
}