public Type createRangeType(ReferenceType bottom) {
		/*
		 * tArray(y), tArray(x) -> tArray( y.intersection(x) ) obj , tArray(x)
		 * -> <obj, tArray(x)> iff tArray extends and implements obj
		 */
		if (bottom.getTypeCode() == TC_ARRAY)
			return tArray(elementType
					.intersection(((ArrayType) bottom).elementType));

		if (bottom.getTypeCode() == TC_CLASS) {
			ClassInterfacesType bottomCIT = (ClassInterfacesType) bottom;
			if (bottomCIT.clazz == null
					&& implementsAllIfaces(null, arrayIfaces, bottomCIT.ifaces))
				return tRange(bottomCIT, this);
		}
		return tError;
	}