private void processDims(JNewArray x, Context ctx, JArrayType arrayType, int dims) {
// override the type of the called method with the array's type
SourceInfo sourceInfo = x.getSourceInfo();
JMethodCall call = new JMethodCall(sourceInfo, null, initDims, arrayType);
JsonArray classLitList = new JsonArray(sourceInfo, program.getJavaScriptObject());
JsonArray castableTypeMaps = new JsonArray(sourceInfo, program.getJavaScriptObject());
JsonArray elementTypeReferences = new JsonArray(sourceInfo, program.getJavaScriptObject());
JsonArray dimList = new JsonArray(sourceInfo, program.getJavaScriptObject());
JType currentElementType = arrayType;
for (int i = 0; i < dims; ++i) {
// Walk down each type from most dims to least.
JArrayType curArrayType = (JArrayType) currentElementType;
JLiteral classLit = x.getClassLiterals().get(i);
classLitList.getExprs().add(classLit);
JExpression castableTypeMap = getOrCreateCastMap(sourceInfo, curArrayType);
castableTypeMaps.getExprs().add(castableTypeMap);
JRuntimeTypeReference elementTypeIdLit = getElementRuntimeTypeReference(sourceInfo,
curArrayType);
elementTypeReferences.getExprs().add(elementTypeIdLit);
dimList.getExprs().add(x.dims.get(i));
currentElementType = curArrayType.getElementType();
}
JType leafElementType = currentElementType;
JIntLiteral leafElementTypeCategory = getTypeCategoryLiteral(leafElementType);
call.addArgs(classLitList, castableTypeMaps, elementTypeReferences, leafElementTypeCategory,