++dimensions;
} while (compType.isArray());
String typeName;
String moduleName;
TypeCode typeCode;
if (compType.isPrimitive()) {
if (compType == Boolean.TYPE) {
typeName = "boolean";
typeCode = orb.get_primitive_tc(TCKind.tk_boolean);
} else if (compType == Character.TYPE) {
typeName = "wchar";
typeCode = orb.get_primitive_tc(TCKind.tk_wchar);
} else if (compType == Byte.TYPE) {
typeName = "octet";
typeCode = orb.get_primitive_tc(TCKind.tk_octet);
} else if (compType == Short.TYPE) {
typeName = "short";
typeCode = orb.get_primitive_tc(TCKind.tk_short);
} else if (compType == Integer.TYPE) {
typeName = "long";
typeCode = orb.get_primitive_tc(TCKind.tk_long);
} else if (compType == Long.TYPE) {
typeName = "long_long";
typeCode = orb.get_primitive_tc(TCKind.tk_longlong);
} else if (compType == Float.TYPE) {
typeName = "float";
typeCode = orb.get_primitive_tc(TCKind.tk_float);
} else if (compType == Double.TYPE) {
typeName = "double";
typeCode = orb.get_primitive_tc(TCKind.tk_double);
} else {
throw JacORBMessages.MESSAGES.unknownPrimitiveType(compType.getName());
}
moduleName = "org.omg.boxedRMI";
} else {
typeCode = getTypeCode(compType); // map the component type.
if (compType == java.lang.String.class)
typeName = getJavaLangString().name();
else if (compType == java.lang.Object.class)
typeName = getJavaLang_Object().name();
else if (compType == java.lang.Class.class)
typeName = getJavaxRmiCORBAClassDesc().name();
else if (compType == java.io.Serializable.class)
typeName = getJavaIoSerializable().name();
else if (compType == java.io.Externalizable.class)
typeName = getJavaIoExternalizable().name();
else if (compType.isInterface() &&
!RmiIdlUtil.isAbstractValueType(compType))
typeName = ((InterfaceDefImpl) interfaceMap.get(compType)).name();
else if (Exception.class.isAssignableFrom(compType)) // exception type
typeName = ((ExceptionDefImpl) exceptionMap.get(compType)).name();
else // must be value type
typeName = ((ValueDefImpl) valueMap.get(compType)).name();
moduleName = "org.omg.boxedRMI." + compType.getPackage().getName();
}
// Get module to add array to.
ModuleDefImpl m = ensurePackageExists(moduleName);
// Create an array of the types for the dimensions
Class[] types = new Class[dimensions];
types[dimensions - 1] = cls;
for (int i = dimensions - 2; i >= 0; --i)
types[i] = types[i + 1].getComponentType();
// Create boxed sequences for all dimensions.
for (int i = 0; i < dimensions; ++i) {
Class type = types[i];
typeCode = orb.create_sequence_tc(0, typeCode);
vbDef = (ValueBoxDefImpl) arrayMap.get(type);
if (vbDef == null) {
String id = Util.getIRIdentifierOfClass(type);
SequenceDefImpl sdi = new SequenceDefImpl(typeCode, impl);
String name = "seq" + (i + 1) + "_" + typeName;
// TypeCode boxTypeCode = new TypeCodeImpl(TCKind._tk_value_box,
// id, name, typeCode);
TypeCode boxTypeCode = orb.create_value_box_tc(id, name, typeCode);
vbDef = new ValueBoxDefImpl(id, name, "1.0", m, boxTypeCode, impl);
addTypeCode(type, vbDef.type());
m.add(name, vbDef);
impl.putSequenceImpl(id, typeCode, sdi, vbDef);