27#include <rtl/strbuf.hxx>
28#include <uno/sequence2.h>
35 sal_Int32 nElements, sal_Int32 nSize )
37 std::unique_ptr< rtl_mem > seq(
39 uno_Sequence *
p =
reinterpret_cast<uno_Sequence *
>(seq.get());
48void createDefaultUnoValue(
49 JNI_context
const & jni,
void * uno_data,
50 typelib_TypeDescriptionReference * type,
51 JNI_type_info
const * info ,
bool assign)
53 switch (
type->eTypeClass) {
54 case typelib_TypeClass_BOOLEAN:
55 *
static_cast< sal_Bool *
>(uno_data) =
false;
58 case typelib_TypeClass_BYTE:
59 *
static_cast< sal_Int8 *
>(uno_data) = 0;
62 case typelib_TypeClass_SHORT:
63 *
static_cast< sal_Int16 *
>(uno_data) = 0;
66 case typelib_TypeClass_UNSIGNED_SHORT:
67 *
static_cast< sal_uInt16 *
>(uno_data) = 0;
70 case typelib_TypeClass_LONG:
71 *
static_cast< sal_Int32 *
>(uno_data) = 0;
74 case typelib_TypeClass_UNSIGNED_LONG:
75 *
static_cast< sal_uInt32 *
>(uno_data) = 0;
78 case typelib_TypeClass_HYPER:
79 *
static_cast< sal_Int64 *
>(uno_data) = 0;
82 case typelib_TypeClass_UNSIGNED_HYPER:
83 *
static_cast< sal_uInt64 *
>(uno_data) = 0;
86 case typelib_TypeClass_FLOAT:
87 *
static_cast< float *
>(uno_data) = 0;
90 case typelib_TypeClass_DOUBLE:
91 *
static_cast< double *
>(uno_data) = 0;
94 case typelib_TypeClass_CHAR:
98 case typelib_TypeClass_STRING:
100 *
static_cast< rtl_uString **
>(uno_data) =
nullptr;
102 rtl_uString_new(
static_cast< rtl_uString **
>(uno_data));
105 case typelib_TypeClass_TYPE:
108 *
static_cast< typelib_TypeDescriptionReference **
>(uno_data));
110 *
static_cast< typelib_TypeDescriptionReference **
>(uno_data)
113 *
static_cast< typelib_TypeDescriptionReference **
>(uno_data) !=
nullptr);
115 *
static_cast< typelib_TypeDescriptionReference **
>(uno_data));
118 case typelib_TypeClass_ANY:
123 static_cast< uno_Any *
>(uno_data),
nullptr,
124 jni.get_info()->m_XInterface_type_info->m_td.get(),
nullptr);
127 case typelib_TypeClass_SEQUENCE:
133 *
static_cast< uno_Sequence **
>(uno_data)
134 =
reinterpret_cast< uno_Sequence *
>(seq.release());
138 case typelib_TypeClass_ENUM:
141 TYPELIB_DANGER_GET(&td, type);
142 *
static_cast< sal_Int32 *
>(uno_data)
143 = (
reinterpret_cast< typelib_EnumTypeDescription *
>(td)->
145 TYPELIB_DANGER_RELEASE(td);
149 case typelib_TypeClass_STRUCT:
151 if (info ==
nullptr) {
152 info = jni.get_info()->get_type_info(jni, type);
154 JNI_compound_type_info
const * comp_info
155 =
static_cast< JNI_compound_type_info
const *
>(info);
156 typelib_CompoundTypeDescription * comp_td
157 =
reinterpret_cast< typelib_CompoundTypeDescription *
>(
158 comp_info->m_td.get());
160 sal_Int32 nMembers = comp_td->nMembers;
162 if (comp_td->pBaseTypeDescription !=
nullptr) {
163 createDefaultUnoValue(
165 comp_td->pBaseTypeDescription->aBase.pWeakRef,
166 comp_info->m_base, assign);
169 createDefaultUnoValue(
171 (
static_cast< char *
>(uno_data)
172 + comp_td->pMemberOffsets[nPos]),
173 comp_td->ppTypeRefs[nPos],
nullptr, assign);
177 for (sal_Int32 i = 0;
i <
nPos; ++
i) {
179 (
static_cast< char *
>(uno_data)
180 + comp_td->pMemberOffsets[i]),
181 comp_td->ppTypeRefs[i],
nullptr);
183 if (comp_td->pBaseTypeDescription !=
nullptr) {
185 uno_data, &comp_td->pBaseTypeDescription->aBase,
nullptr);
193 case typelib_TypeClass_INTERFACE:
195 uno_Interface *
p = *
static_cast< uno_Interface **
>(uno_data);
200 *
static_cast< uno_Interface **
>(uno_data) =
nullptr;
213 void * uno_data, jvalue java_data,
214 typelib_TypeDescriptionReference * type,
216 bool assign,
bool out_param,
217 bool special_wrapped_integral_types )
const
221 (jni->GetArrayLength(
static_cast<jarray
>(java_data.l) ) == 1) );
223 switch (
type->eTypeClass)
225 case typelib_TypeClass_CHAR:
228 jni->GetCharArrayRegion(
229 static_cast<jcharArray
>(java_data.l), 0, 1,
static_cast<jchar *
>(uno_data) );
232 else if (special_wrapped_integral_types)
234 *
static_cast<jchar *
>(uno_data) = jni->CallCharMethodA(
240 *
static_cast<jchar *
>(uno_data) = java_data.c;
243 case typelib_TypeClass_BOOLEAN:
246 jni->GetBooleanArrayRegion(
247 static_cast<jbooleanArray
>(java_data.l), 0, 1,
static_cast<jboolean *
>(uno_data) );
250 else if (special_wrapped_integral_types)
252 *
static_cast<jboolean *
>(uno_data) = jni->CallBooleanMethodA(
258 *
static_cast<jboolean *
>(uno_data) = java_data.z;
261 case typelib_TypeClass_BYTE:
264 jni->GetByteArrayRegion(
265 static_cast<jbyteArray
>(java_data.l), 0, 1,
static_cast<jbyte *
>(uno_data) );
268 else if (special_wrapped_integral_types)
270 *
static_cast<jbyte *
>(uno_data) = jni->CallByteMethodA(
276 *
static_cast<jbyte *
>(uno_data) = java_data.b;
279 case typelib_TypeClass_SHORT:
280 case typelib_TypeClass_UNSIGNED_SHORT:
283 jni->GetShortArrayRegion(
284 static_cast<jshortArray
>(java_data.l), 0, 1,
static_cast<jshort *
>(uno_data) );
287 else if (special_wrapped_integral_types)
289 *
static_cast<jshort *
>(uno_data) = jni->CallShortMethodA(
295 *
static_cast<jshort *
>(uno_data) = java_data.s;
298 case typelib_TypeClass_LONG:
299 case typelib_TypeClass_UNSIGNED_LONG:
302 jni->GetIntArrayRegion(
303 static_cast<jintArray
>(java_data.l), 0, 1,
static_cast<jint *
>(uno_data) );
306 else if (special_wrapped_integral_types)
308 *
static_cast<jint *
>(uno_data) = jni->CallIntMethodA(
314 *
static_cast<jint *
>(uno_data) = java_data.i;
317 case typelib_TypeClass_HYPER:
318 case typelib_TypeClass_UNSIGNED_HYPER:
321 jni->GetLongArrayRegion(
322 static_cast<jlongArray
>(java_data.l), 0, 1,
static_cast<jlong *
>(uno_data) );
325 else if (special_wrapped_integral_types)
327 *
static_cast<jlong *
>(uno_data) = jni->CallLongMethodA(
333 *
static_cast<jlong *
>(uno_data) = java_data.j;
336 case typelib_TypeClass_FLOAT:
339 jni->GetFloatArrayRegion(
340 static_cast<jfloatArray
>(java_data.l), 0, 1,
static_cast<jfloat *
>(uno_data) );
343 else if (special_wrapped_integral_types)
345 *
static_cast<jfloat *
>(uno_data) = jni->CallFloatMethodA(
351 *
static_cast<jfloat *
>(uno_data) = java_data.f;
354 case typelib_TypeClass_DOUBLE:
357 jni->GetDoubleArrayRegion(
358 static_cast<jdoubleArray
>(java_data.l), 0, 1,
static_cast<jdouble *
>(uno_data) );
361 else if (special_wrapped_integral_types)
363 *
static_cast<jdouble *
>(uno_data) = jni->CallDoubleMethodA(
369 *
static_cast<jdouble *
>(uno_data) = java_data.d;
372 case typelib_TypeClass_STRING:
378 jni->GetObjectArrayElement(
static_cast<jobjectArray
>(java_data.l), 0 ) );
380 java_data.l = jo_out_holder.
get();
382 if (java_data.l ==
nullptr)
385 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
389 *
static_cast<rtl_uString **
>(uno_data) =
nullptr;
391 jni,
static_cast<rtl_uString **
>(uno_data),
static_cast<jstring
>(java_data.l) );
394 case typelib_TypeClass_TYPE:
400 jni->GetObjectArrayElement(
static_cast<jobjectArray
>(java_data.l), 0 ) );
402 java_data.l = jo_out_holder.
get();
404 if (java_data.l ==
nullptr)
407 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
413 jni, jni->GetObjectField(
414 java_data.l,
getJniInfo()->m_field_Type_typeName ) );
415 if (! jo_type_name.
is())
418 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
419 +
"] incomplete type object: no type name!"
424 ::com::sun::star::uno::TypeDescription td( type_name );
428 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
429 +
"] UNO type not found: " + type_name
436 *
static_cast<typelib_TypeDescriptionReference **
>(uno_data) );
438 *
static_cast<typelib_TypeDescriptionReference **
>(uno_data) = td.get()->pWeakRef;
441 case typelib_TypeClass_ANY:
447 jni->GetObjectArrayElement(
static_cast<jobjectArray
>(java_data.l), 0 ) );
449 java_data.l = jo_out_holder.
get();
453 if (java_data.l ==
nullptr)
458 pAny,
nullptr,
getJniInfo()->m_XInterface_type_info->m_td.get(),
nullptr );
465 if (jni->IsInstanceOf( java_data.l,
getJniInfo()->m_class_Any ))
468 jo_type.
reset( jni->GetObjectField(
469 java_data.l,
getJniInfo()->m_field_Any_type ) );
473 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
474 +
"] no type set at com.sun.star.uno.Any!"
478 jo_wrapped_holder.
reset(
480 java_data.l,
getJniInfo()->m_field_Any_object ) );
481 java_data.l = jo_wrapped_holder.
get();
486 JLocalAutoRef jo_class( jni, jni->GetObjectClass( java_data.l ) );
492 jni, jni->GetObjectField(
498 ::com::sun::star::uno::TypeDescription value_td( type_name );
502 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
503 +
"] UNO type not found: " + type_name
506 typelib_TypeClass type_class = value_td.get()->eTypeClass;
516 case typelib_TypeClass_VOID:
517 pAny->pData = &pAny->pReserved;
519 case typelib_TypeClass_CHAR:
520 pAny->pData = &pAny->pReserved;
521 *
static_cast<jchar *
>(pAny->pData) = jni->CallCharMethodA(
525 case typelib_TypeClass_BOOLEAN:
526 pAny->pData = &pAny->pReserved;
527 *
static_cast<jboolean *
>(pAny->pData) = jni->CallBooleanMethodA(
531 case typelib_TypeClass_BYTE:
532 pAny->pData = &pAny->pReserved;
533 *
static_cast<jbyte *
>(pAny->pData) = jni->CallByteMethodA(
537 case typelib_TypeClass_SHORT:
538 case typelib_TypeClass_UNSIGNED_SHORT:
539 pAny->pData = &pAny->pReserved;
540 *
static_cast<jshort *
>(pAny->pData) = jni->CallShortMethodA(
544 case typelib_TypeClass_LONG:
545 case typelib_TypeClass_UNSIGNED_LONG:
546 pAny->pData = &pAny->pReserved;
547 *
static_cast<jint *
>(pAny->pData) = jni->CallIntMethodA(
551 case typelib_TypeClass_HYPER:
552 case typelib_TypeClass_UNSIGNED_HYPER:
553 if (
sizeof (sal_Int64) <=
sizeof (
void *))
555 pAny->pData = &pAny->pReserved;
556 *
static_cast<jlong *
>(pAny->pData) = jni->CallLongMethodA(
562 std::unique_ptr< rtl_mem > mem(
564 *
reinterpret_cast<jlong *
>(mem.get()) = jni->CallLongMethodA(
567 pAny->pData = mem.release();
570 case typelib_TypeClass_FLOAT:
571 if (
sizeof (
float) <=
sizeof (
void *))
573 pAny->pData = &pAny->pReserved;
574 *
static_cast<jfloat *
>(pAny->pData) = jni->CallFloatMethodA(
580 std::unique_ptr< rtl_mem > mem(
582 *
reinterpret_cast<jfloat *
>(mem.get()) = jni->CallFloatMethodA(
585 pAny->pData = mem.release();
588 case typelib_TypeClass_DOUBLE:
589 if (
sizeof (
double) <=
sizeof (
void *))
591 pAny->pData = &pAny->pReserved;
592 *
static_cast<jdouble *
>(pAny->pData) =
593 jni->CallDoubleMethodA(
600 std::unique_ptr< rtl_mem > mem(
602 *
reinterpret_cast<jdouble *
>(mem.get()) =
603 jni->CallDoubleMethodA(
607 pAny->pData = mem.release();
610 case typelib_TypeClass_STRING:
612 pAny->pReserved =
nullptr;
613 pAny->pData = &pAny->pReserved;
615 jni,
static_cast<rtl_uString **
>(pAny->pData),
616 static_cast<jstring
>(java_data.l) );
618 case typelib_TypeClass_TYPE:
619 case typelib_TypeClass_ENUM:
620 case typelib_TypeClass_SEQUENCE:
621 case typelib_TypeClass_INTERFACE:
622 pAny->pData = &pAny->pReserved;
624 jni, pAny->pData, java_data,
625 value_td.get()->pWeakRef,
nullptr,
628 case typelib_TypeClass_STRUCT:
629 case typelib_TypeClass_EXCEPTION:
631 std::unique_ptr< rtl_mem > mem(
634 jni, mem.get(), java_data, value_td.get()->pWeakRef,
nullptr,
636 pAny->pData = mem.release();
642 "[map_to_uno():" + type_name
643 +
"] unsupported value type of any!"
658 pAny->pType = value_td.get()->pWeakRef;
661 case typelib_TypeClass_ENUM:
667 jni->GetObjectArrayElement(
static_cast<jobjectArray
>(java_data.l), 0 ) );
669 java_data.l = jo_out_holder.
get();
671 if (java_data.l ==
nullptr)
674 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
678 *
static_cast<jint *
>(uno_data) = jni->GetIntField(
682 case typelib_TypeClass_STRUCT:
683 case typelib_TypeClass_EXCEPTION:
689 jni->GetObjectArrayElement(
static_cast<jobjectArray
>(java_data.l), 0 ) );
691 java_data.l = jo_out_holder.
get();
693 if (java_data.l ==
nullptr)
696 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
705 typelib_CompoundTypeDescription * comp_td =
706 reinterpret_cast<typelib_CompoundTypeDescription *
>(comp_info->
m_td.get());
708 = comp_td->aBase.eTypeClass == typelib_TypeClass_STRUCT
709 &&
reinterpret_cast< typelib_StructTypeDescription *
>(
710 comp_td)->pParameterizedTypes !=
nullptr;
713 sal_Int32 nMembers = comp_td->nMembers;
716 if (comp_td->pBaseTypeDescription !=
nullptr)
719 jni, uno_data, java_data,
720 comp_td->pBaseTypeDescription->aBase.pWeakRef,
727 void *
p =
static_cast<char *
>(uno_data) + comp_td->pMemberOffsets[
nPos ];
728 typelib_TypeDescriptionReference * member_type =
729 comp_td->ppTypeRefs[
nPos ];
731 bool parameterizedType = polymorphic
732 &&
reinterpret_cast< typelib_StructTypeDescription *
>(
733 comp_td)->pParameterizedTypes[
nPos];
734 switch (member_type->eTypeClass)
736 case typelib_TypeClass_CHAR:
737 if (parameterizedType) {
739 jni, jni->GetObjectField( java_data.l, field_id ) );
740 if ( jo.
get() ==
nullptr ) {
741 *
static_cast<jchar *
>(
p) = 0;
746 jni,
p, val, member_type,
nullptr,
assign,
false,
750 *
static_cast<jchar *
>(
p) = jni->GetCharField(
751 java_data.l, field_id );
754 case typelib_TypeClass_BOOLEAN:
755 if (parameterizedType) {
757 jni, jni->GetObjectField( java_data.l, field_id ) );
758 if ( jo.
get() ==
nullptr ) {
759 *
static_cast<jboolean *
>(
p) =
false;
764 jni,
p, val, member_type,
nullptr,
assign,
false,
768 *
static_cast<jboolean *
>(
p) = jni->GetBooleanField(
769 java_data.l, field_id );
772 case typelib_TypeClass_BYTE:
773 if (parameterizedType) {
775 jni, jni->GetObjectField( java_data.l, field_id ) );
776 if ( jo.
get() ==
nullptr ) {
777 *
static_cast<jbyte *
>(
p) = 0;
782 jni,
p, val, member_type,
nullptr,
assign,
false,
786 *
static_cast<jbyte *
>(
p) = jni->GetByteField(
787 java_data.l, field_id );
790 case typelib_TypeClass_SHORT:
791 case typelib_TypeClass_UNSIGNED_SHORT:
792 if (parameterizedType) {
794 jni, jni->GetObjectField( java_data.l, field_id ) );
795 if ( jo.
get() ==
nullptr ) {
796 *
static_cast<jshort *
>(
p) = 0;
801 jni,
p, val, member_type,
nullptr,
assign,
false,
805 *
static_cast<jshort *
>(
p) = jni->GetShortField(
806 java_data.l, field_id );
809 case typelib_TypeClass_LONG:
810 case typelib_TypeClass_UNSIGNED_LONG:
811 if (parameterizedType) {
813 jni, jni->GetObjectField( java_data.l, field_id ) );
814 if ( jo.
get() ==
nullptr ) {
815 *
static_cast<jint *
>(
p) = 0;
820 jni,
p, val, member_type,
nullptr,
assign,
false,
824 *
static_cast<jint *
>(
p) = jni->GetIntField( java_data.l, field_id );
827 case typelib_TypeClass_HYPER:
828 case typelib_TypeClass_UNSIGNED_HYPER:
829 if (parameterizedType) {
831 jni, jni->GetObjectField( java_data.l, field_id ) );
832 if ( jo.
get() ==
nullptr ) {
833 *
static_cast<jlong *
>(
p) = 0;
838 jni,
p, val, member_type,
nullptr,
assign,
false,
842 *
static_cast<jlong *
>(
p) = jni->GetLongField(
843 java_data.l, field_id );
846 case typelib_TypeClass_FLOAT:
847 if (parameterizedType) {
849 jni, jni->GetObjectField( java_data.l, field_id ) );
850 if ( jo.
get() ==
nullptr ) {
851 *
static_cast<jfloat *
>(
p) = 0;
856 jni,
p, val, member_type,
nullptr,
assign,
false,
860 *
static_cast<jfloat *
>(
p) = jni->GetFloatField(
861 java_data.l, field_id );
864 case typelib_TypeClass_DOUBLE:
865 if (parameterizedType) {
867 jni, jni->GetObjectField( java_data.l, field_id ) );
868 if ( jo.
get() ==
nullptr ) {
869 *
static_cast<jdouble *
>(
p) = 0;
874 jni,
p, val, member_type,
nullptr,
assign,
false,
878 *
static_cast<jdouble *
>(
p) = jni->GetDoubleField(
879 java_data.l, field_id );
886 if (field_id ==
nullptr)
892 getJniInfo()->m_Exception_type.getTypeLibType() )
896 getTypeLibType() ) );
900 jni->CallObjectMethodA(
902 getJniInfo()->m_method_Throwable_getMessage,
nullptr )
910 jni->GetObjectField( java_data.l, field_id ) );
911 checkNull = parameterizedType;
913 if (checkNull && !jo_field.
is()) {
914 createDefaultUnoValue(jni,
p, member_type,
nullptr,
assign);
917 val.l = jo_field.
get();
919 jni,
p, val, member_type,
nullptr,
932 for ( sal_Int32 nCleanup = 0; nCleanup <
nPos; ++nCleanup )
935 static_cast<char *
>(uno_data) + comp_td->pMemberOffsets[ nCleanup ];
937 p, comp_td->ppTypeRefs[ nCleanup ],
nullptr );
939 if (comp_td->pBaseTypeDescription !=
nullptr)
942 uno_data, &comp_td->pBaseTypeDescription->aBase,
nullptr );
949 case typelib_TypeClass_SEQUENCE:
955 jni->GetObjectArrayElement(
static_cast<jobjectArray
>(java_data.l), 0 ) );
957 java_data.l = jo_out_holder.
get();
959 if (java_data.l ==
nullptr)
962 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
967 typelib_TypeDescriptionReference * element_type =
968 reinterpret_cast<typelib_IndirectTypeDescription *
>(td.
get())->pType;
970 std::unique_ptr< rtl_mem > seq;
971 sal_Int32
nElements = jni->GetArrayLength(
static_cast<jarray
>(java_data.l) );
973 switch (element_type->eTypeClass)
975 case typelib_TypeClass_CHAR:
977 jni->GetCharArrayRegion(
978 static_cast<jcharArray
>(java_data.l), 0,
nElements,
979 reinterpret_cast<jchar *
>(
reinterpret_cast<uno_Sequence *
>(seq.get())->elements) );
982 case typelib_TypeClass_BOOLEAN:
984 jni->GetBooleanArrayRegion(
985 static_cast<jbooleanArray
>(java_data.l), 0,
nElements,
986 reinterpret_cast<jboolean *
>(
reinterpret_cast<uno_Sequence *
>(seq.get())->elements) );
989 case typelib_TypeClass_BYTE:
991 jni->GetByteArrayRegion(
992 static_cast<jbyteArray
>(java_data.l), 0,
nElements,
993 reinterpret_cast<jbyte *
>(
reinterpret_cast<uno_Sequence *
>(seq.get())->elements) );
996 case typelib_TypeClass_SHORT:
997 case typelib_TypeClass_UNSIGNED_SHORT:
999 jni->GetShortArrayRegion(
1000 static_cast<jshortArray
>(java_data.l), 0,
nElements,
1001 reinterpret_cast<jshort *
>(
reinterpret_cast<uno_Sequence *
>(seq.get())->elements) );
1004 case typelib_TypeClass_LONG:
1005 case typelib_TypeClass_UNSIGNED_LONG:
1007 jni->GetIntArrayRegion(
1008 static_cast<jintArray
>(java_data.l), 0,
nElements,
1009 reinterpret_cast<jint *
>(
reinterpret_cast<uno_Sequence *
>(seq.get())->elements) );
1012 case typelib_TypeClass_HYPER:
1013 case typelib_TypeClass_UNSIGNED_HYPER:
1015 jni->GetLongArrayRegion(
1016 static_cast<jlongArray
>(java_data.l), 0,
nElements,
1017 reinterpret_cast<jlong *
>(
reinterpret_cast<uno_Sequence *
>(seq.get())->elements) );
1020 case typelib_TypeClass_FLOAT:
1022 jni->GetFloatArrayRegion(
1023 static_cast<jfloatArray
>(java_data.l), 0,
nElements,
1024 reinterpret_cast<jfloat *
>(
reinterpret_cast<uno_Sequence *
>(seq.get())->elements) );
1027 case typelib_TypeClass_DOUBLE:
1029 jni->GetDoubleArrayRegion(
1030 static_cast<jdoubleArray
>(java_data.l), 0,
nElements,
1031 reinterpret_cast<jdouble *
>(
reinterpret_cast<uno_Sequence *
>(seq.get())->elements) );
1034 case typelib_TypeClass_STRING:
1035 case typelib_TypeClass_TYPE:
1036 case typelib_TypeClass_ANY:
1037 case typelib_TypeClass_ENUM:
1038 case typelib_TypeClass_STRUCT:
1039 case typelib_TypeClass_EXCEPTION:
1040 case typelib_TypeClass_SEQUENCE:
1041 case typelib_TypeClass_INTERFACE:
1047 if (element_type->eTypeClass == typelib_TypeClass_STRUCT ||
1048 element_type->eTypeClass == typelib_TypeClass_EXCEPTION ||
1049 element_type->eTypeClass == typelib_TypeClass_INTERFACE)
1056 element_info =
nullptr;
1064 jni, jni->GetObjectArrayElement(
1065 static_cast<jobjectArray
>(java_data.l),
nPos ) );
1070 reinterpret_cast<uno_Sequence *
>(seq.get())->elements +
1071 (
nPos * element_td.
get()->nSize);
1073 jni,
p, val, element_td.
get()->pWeakRef, element_info,
1079 for ( sal_Int32 nCleanPos = 0;
1080 nCleanPos <
nPos; ++nCleanPos )
1083 reinterpret_cast<uno_Sequence *
>(seq.get())->elements +
1084 (nCleanPos * element_td.
get()->nSize);
1095 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
1096 +
"] unsupported sequence element type: "
1097 + OUString::unacquired( &element_type->pTypeName )
1104 *
static_cast<uno_Sequence **
>(uno_data) =
reinterpret_cast<uno_Sequence *
>(seq.release());
1107 case typelib_TypeClass_INTERFACE:
1112 jo_out_holder.
reset(
1113 jni->GetObjectArrayElement(
static_cast<jobjectArray
>(java_data.l), 0 ) );
1115 java_data.l = jo_out_holder.
get();
1118 if (java_data.l ==
nullptr)
1122 uno_Interface *
p = *
static_cast<uno_Interface **
>(uno_data);
1126 *
static_cast<uno_Interface **
>(uno_data) =
nullptr;
1130 if (info ==
nullptr)
1134 uno_Interface * pUnoI =
map_to_uno( jni, java_data.l, iface_info );
1137 uno_Interface *
p = *
static_cast<uno_Interface **
>(uno_data);
1141 *
static_cast<uno_Interface **
>(uno_data) = pUnoI;
1148 "[map_to_uno():" + OUString::unacquired( &
type->pTypeName )
1157 jvalue * java_data,
void const * uno_data,
1158 typelib_TypeDescriptionReference * type,
1160 bool in_param,
bool out_param,
1161 bool special_wrapped_integral_types )
const
1168 void * data =
const_cast<void *
>(uno_data);
1170 switch (
type->eTypeClass)
1172 case typelib_TypeClass_CHAR:
1175 if (java_data->l ==
nullptr)
1181 jni->SetCharArrayRegion(
1182 static_cast<jcharArray
>(jo_ar.
get()), 0, 1,
static_cast<jchar *
>(data) );
1185 java_data->l = jo_ar.
release();
1191 jni->SetCharArrayRegion(
1192 static_cast<jcharArray
>(java_data->l), 0, 1,
static_cast<jchar *
>(data) );
1197 else if (special_wrapped_integral_types)
1200 arg.c = *
static_cast<jchar
const *
>(uno_data);
1201 java_data->l = jni->NewObjectA(
1208 java_data->c = *
static_cast<jchar
const *
>(uno_data);
1211 case typelib_TypeClass_BOOLEAN:
1214 if (java_data->l ==
nullptr)
1220 jni->SetBooleanArrayRegion(
1221 static_cast<jbooleanArray
>(jo_ar.
get()),
1222 0, 1,
static_cast<jboolean *
>(data) );
1225 java_data->l = jo_ar.
release();
1231 jni->SetBooleanArrayRegion(
1232 static_cast<jbooleanArray
>(java_data->l),
1233 0, 1,
static_cast<jboolean *
>(data) );
1238 else if (special_wrapped_integral_types)
1241 arg.z = *
static_cast<jboolean
const *
>(uno_data);
1242 java_data->l = jni->NewObjectA(
1249 java_data->z = *
static_cast<jboolean
const *
>(uno_data);
1252 case typelib_TypeClass_BYTE:
1255 if (java_data->l ==
nullptr)
1261 jni->SetByteArrayRegion(
1262 static_cast<jbyteArray
>(jo_ar.
get()), 0, 1,
static_cast<jbyte *
>(data) );
1265 java_data->l = jo_ar.
release();
1271 jni->SetByteArrayRegion(
1272 static_cast<jbyteArray
>(java_data->l), 0, 1,
static_cast<jbyte *
>(data) );
1277 else if (special_wrapped_integral_types)
1280 arg.b = *
static_cast<jbyte
const *
>(uno_data);
1281 java_data->l = jni->NewObjectA(
1288 java_data->b = *
static_cast<jbyte
const *
>(uno_data);
1291 case typelib_TypeClass_SHORT:
1292 case typelib_TypeClass_UNSIGNED_SHORT:
1295 if (java_data->l ==
nullptr)
1301 jni->SetShortArrayRegion(
1302 static_cast<jshortArray
>(jo_ar.
get()), 0, 1,
static_cast<jshort *
>(data) );
1305 java_data->l = jo_ar.
release();
1311 jni->SetShortArrayRegion(
1312 static_cast<jshortArray
>(java_data->l), 0, 1,
static_cast<jshort *
>(data) );
1317 else if (special_wrapped_integral_types)
1320 arg.s = *
static_cast<jshort
const *
>(uno_data);
1321 java_data->l = jni->NewObjectA(
1328 java_data->s = *
static_cast<jshort
const *
>(uno_data);
1331 case typelib_TypeClass_LONG:
1332 case typelib_TypeClass_UNSIGNED_LONG:
1335 if (java_data->l ==
nullptr)
1341 jni->SetIntArrayRegion(
1342 static_cast<jintArray
>(jo_ar.
get()), 0, 1,
static_cast<jint *
>(data) );
1345 java_data->l = jo_ar.
release();
1351 jni->SetIntArrayRegion(
1352 static_cast<jintArray
>(java_data->l), 0, 1,
static_cast<jint *
>(data) );
1357 else if (special_wrapped_integral_types)
1360 arg.i = *
static_cast<jint
const *
>(uno_data);
1361 java_data->l = jni->NewObjectA(
1368 java_data->i = *
static_cast<jint
const *
>(uno_data);
1371 case typelib_TypeClass_HYPER:
1372 case typelib_TypeClass_UNSIGNED_HYPER:
1375 if (java_data->l ==
nullptr)
1381 jni->SetLongArrayRegion(
1382 static_cast<jlongArray
>(jo_ar.
get()), 0, 1,
static_cast<jlong *
>(data) );
1385 java_data->l = jo_ar.
release();
1391 jni->SetLongArrayRegion(
1392 static_cast<jlongArray
>(java_data->l), 0, 1,
static_cast<jlong *
>(data) );
1397 else if (special_wrapped_integral_types)
1400 arg.j = *
static_cast<jlong
const *
>(uno_data);
1401 java_data->l = jni->NewObjectA(
1408 java_data->j = *
static_cast<jlong
const *
>(uno_data);
1411 case typelib_TypeClass_FLOAT:
1414 if (java_data->l ==
nullptr)
1420 jni->SetFloatArrayRegion(
1421 static_cast<jfloatArray
>(jo_ar.
get()), 0, 1,
static_cast<jfloat *
>(data) );
1424 java_data->l = jo_ar.
release();
1430 jni->SetFloatArrayRegion(
1431 static_cast<jfloatArray
>(java_data->l), 0, 1,
static_cast<jfloat *
>(data) );
1436 else if (special_wrapped_integral_types)
1439 arg.f = *
static_cast<jfloat
const *
>(uno_data);
1440 java_data->l = jni->NewObjectA(
1447 java_data->f = *
static_cast<jfloat
const *
>(uno_data);
1450 case typelib_TypeClass_DOUBLE:
1453 if (java_data->l ==
nullptr)
1459 jni->SetDoubleArrayRegion(
1460 static_cast<jdoubleArray
>(jo_ar.
get()),
1461 0, 1,
static_cast<jdouble *
>(data) );
1464 java_data->l = jo_ar.
release();
1470 jni->SetDoubleArrayRegion(
1471 static_cast<jdoubleArray
>(java_data->l),
1472 0, 1,
static_cast<jdouble *
>(data) );
1477 else if (special_wrapped_integral_types)
1480 arg.d = *
static_cast<double const *
>(uno_data);
1481 java_data->l = jni->NewObjectA(
1488 java_data->d = *
static_cast<jdouble
const *
>(uno_data);
1491 case typelib_TypeClass_STRING:
1500 jni, *
static_cast<rtl_uString *
const *
>(uno_data) ) );
1502 if (java_data->l ==
nullptr)
1504 java_data->l = jni->NewObjectArray(
1510 jni->SetObjectArrayElement(
1511 static_cast<jobjectArray
>(java_data->l), 0, jo_in.
get() );
1523 case typelib_TypeClass_TYPE:
1533 *
static_cast<typelib_TypeDescriptionReference *
const *
>(uno_data) )
1536 if (java_data->l ==
nullptr)
1538 java_data->l = jni->NewObjectArray(
1544 jni->SetObjectArrayElement(
1545 static_cast<jobjectArray
>(java_data->l), 0, jo_in.
get() );
1555 *
static_cast<typelib_TypeDescriptionReference *
const *
>(uno_data) );
1559 case typelib_TypeClass_ANY:
1565 switch (pAny->pType->eTypeClass)
1567 case typelib_TypeClass_VOID:
1569 jni->NewLocalRef(
getJniInfo()->m_object_Any_VOID ) );
1571 case typelib_TypeClass_UNSIGNED_SHORT:
1574 args[ 0 ].s = *
static_cast<jshort
const *
>(pAny->pData);
1576 jni, jni->NewObjectA(
1590 case typelib_TypeClass_UNSIGNED_LONG:
1593 args[ 0 ].i = *
static_cast<jint
const *
>(pAny->pData);
1595 jni, jni->NewObjectA(
1609 case typelib_TypeClass_UNSIGNED_HYPER:
1612 args[ 0 ].j = *
static_cast<jlong
const *
>(pAny->pData);
1614 jni, jni->NewObjectA(
1628 case typelib_TypeClass_STRING:
1630 jni,
static_cast<rtl_uString *
>(pAny->pReserved) ) );
1632 case typelib_TypeClass_SEQUENCE:
1638 jni, &java_data2, pAny->pData, seq_td.
get()->pWeakRef,
nullptr,
1641 jo_any.
reset( java_data2.l );
1644 ::com::sun::star::uno::Type element_type(
1645 reinterpret_cast<typelib_IndirectTypeDescription *
>(seq_td.
get())->pType );
1646 while (element_type.getTypeLibType()->eTypeClass ==
1647 typelib_TypeClass_SEQUENCE)
1649 TypeDescr element_td( element_type.getTypeLibType() );
1651 reinterpret_cast< typelib_TypeDescriptionReference **
>(
1653 reinterpret_cast<typelib_IndirectTypeDescription *
>(element_td.
get())
1657 switch (element_type.getTypeLibType()->eTypeClass)
1659 case typelib_TypeClass_UNSIGNED_SHORT:
1660 case typelib_TypeClass_UNSIGNED_LONG:
1661 case typelib_TypeClass_UNSIGNED_HYPER:
1680 case typelib_TypeClass_INTERFACE:
1682 uno_Interface * pUnoI =
static_cast<uno_Interface *
>(pAny->pReserved);
1685 if (pUnoI !=
nullptr)
1699 if (pUnoI !=
nullptr)
1715 case typelib_TypeClass_STRUCT:
1719 OUString
const &
name = OUString::unacquired(
1720 &pAny->pType->pTypeName);
1721 assert(!
name.isEmpty());
1722 if (
name[
name.getLength() - 1] ==
'>')
1728 jni, &java_data2, pAny->pData, pAny->pType,
nullptr,
true,
1730 jo_any.
reset(java_data2.l);
1747 jni, &java_data2, pAny->pData, pAny->pType,
nullptr,
1750 jo_any.
reset( java_data2.l );
1758 if (java_data->l ==
nullptr)
1760 java_data->l = jni->NewObjectArray(
1766 jni->SetObjectArrayElement(
1767 static_cast<jobjectArray
>(java_data->l), 0, jo_any.
get() );
1773 java_data->l = jo_any.
release();
1777 case typelib_TypeClass_ENUM:
1779 OUString
const & type_name = OUString::unacquired( &
type->pTypeName );
1783 jni,
find_class( jni, class_name.getStr() ) );
1789 OString sig =
"(I)L" + class_name.replace(
'.',
'/' ) +
";";
1790 jmethodID method_id = jni->GetStaticMethodID(
1791 static_cast<jclass
>(jo_enum_class.
get()),
"fromInt", sig.getStr() );
1793 assert( method_id !=
nullptr );
1796 arg.i = *
static_cast<jint
const *
>(uno_data);
1798 jni->CallStaticObjectMethodA(
1799 static_cast<jclass
>(jo_enum_class.
get()), method_id, &arg ) );
1804 if (java_data->l ==
nullptr)
1806 java_data->l = jni->NewObjectArray(
1807 1,
static_cast<jclass
>(jo_enum_class.
get()), jo_enum.
get() );
1812 jni->SetObjectArrayElement(
1813 static_cast<jobjectArray
>(java_data->l), 0, jo_enum.
get() );
1819 java_data->l = jo_enum.
release();
1823 case typelib_TypeClass_STRUCT:
1824 case typelib_TypeClass_EXCEPTION:
1826 if (info ==
nullptr)
1834 if (
type->eTypeClass == typelib_TypeClass_EXCEPTION)
1839 arg.l = jo_message.
get();
1847 jo_comp.
reset( jni->AllocObject( comp_info->
m_class ) );
1856 typelib_CompoundTypeDescription * comp_td =
1857 reinterpret_cast<typelib_CompoundTypeDescription *
>(linfo->m_td.get());
1858 typelib_TypeDescriptionReference ** ppMemberTypeRefs =
1859 comp_td->ppTypeRefs;
1860 sal_Int32 * pMemberOffsets = comp_td->pMemberOffsets;
1862 = comp_td->aBase.eTypeClass == typelib_TypeClass_STRUCT
1863 &&
reinterpret_cast< typelib_StructTypeDescription *
>(
1864 comp_td)->pParameterizedTypes !=
nullptr;
1865 for ( sal_Int32
nPos = comp_td->nMembers;
nPos--; )
1867 jfieldID field_id = linfo->m_fields[
nPos ];
1868 if (field_id !=
nullptr)
1871 static_cast<char const *
>(uno_data) + pMemberOffsets[
nPos ];
1872 typelib_TypeDescriptionReference * member_type =
1873 ppMemberTypeRefs[
nPos ];
1874 bool parameterizedType = polymorphic
1875 && (
reinterpret_cast<
1876 typelib_StructTypeDescription *
>(comp_td)->
1877 pParameterizedTypes[
nPos]);
1878 switch (member_type->eTypeClass)
1880 case typelib_TypeClass_CHAR:
1881 if (parameterizedType) {
1883 arg.c = *
static_cast<jchar
const *
>(
p);
1891 jni->SetObjectField(
1892 jo_comp.
get(), field_id, jo.
get() );
1896 field_id, *
static_cast<jchar
const *
>(
p) );
1899 case typelib_TypeClass_BOOLEAN:
1900 if (parameterizedType) {
1902 arg.z = *
static_cast<jboolean
const *
>(
p);
1910 jni->SetObjectField(
1911 jo_comp.
get(), field_id, jo.
get() );
1913 jni->SetBooleanField(
1915 field_id, *
static_cast<jboolean
const *
>(
p) );
1918 case typelib_TypeClass_BYTE:
1919 if (parameterizedType) {
1921 arg.b = *
static_cast<jbyte
const *
>(
p);
1929 jni->SetObjectField(
1930 jo_comp.
get(), field_id, jo.
get() );
1934 field_id, *
static_cast<jbyte
const *
>(
p) );
1937 case typelib_TypeClass_SHORT:
1938 case typelib_TypeClass_UNSIGNED_SHORT:
1939 if (parameterizedType) {
1941 arg.s = *
static_cast<jshort
const *
>(
p);
1949 jni->SetObjectField(
1950 jo_comp.
get(), field_id, jo.
get() );
1954 field_id, *
static_cast<jshort
const *
>(
p) );
1957 case typelib_TypeClass_LONG:
1958 case typelib_TypeClass_UNSIGNED_LONG:
1959 if (parameterizedType) {
1961 arg.i = *
static_cast<jint
const *
>(
p);
1969 jni->SetObjectField(
1970 jo_comp.
get(), field_id, jo.
get() );
1974 field_id, *
static_cast<jint
const *
>(
p) );
1977 case typelib_TypeClass_HYPER:
1978 case typelib_TypeClass_UNSIGNED_HYPER:
1979 if (parameterizedType) {
1981 arg.j = *
static_cast<jlong
const *
>(
p);
1989 jni->SetObjectField(
1990 jo_comp.
get(), field_id, jo.
get() );
1994 field_id, *
static_cast<jlong
const *
>(
p) );
1997 case typelib_TypeClass_FLOAT:
1998 if (parameterizedType) {
2000 arg.f = *
static_cast<jfloat
const *
>(
p);
2008 jni->SetObjectField(
2009 jo_comp.
get(), field_id, jo.
get() );
2013 field_id, *
static_cast<jfloat
const *
>(
p) );
2016 case typelib_TypeClass_DOUBLE:
2017 if (parameterizedType) {
2019 arg.d = *
static_cast<jdouble
const *
>(
p);
2027 jni->SetObjectField(
2028 jo_comp.
get(), field_id, jo.
get() );
2030 jni->SetDoubleField(
2032 field_id, *
static_cast<jdouble
const *
>(
p) );
2035 case typelib_TypeClass_STRING:
2039 jni, *
static_cast<rtl_uString *
const *
>(
p) ) );
2040 jni->SetObjectField(
2041 jo_comp.
get(), field_id, jo_string.
get() );
2048 jni, &java_data2,
p, member_type,
nullptr,
2051 jni->SetObjectField(
2052 jo_comp.
get(), field_id, jo_obj.
get() );
2062 if (java_data->l ==
nullptr)
2065 jni->NewObjectArray( 1, comp_info->
m_class, jo_comp.
get() );
2070 jni->SetObjectArrayElement(
2071 static_cast<jobjectArray
>(java_data->l), 0, jo_comp.
get() );
2077 java_data->l = jo_comp.
release();
2081 case typelib_TypeClass_SEQUENCE:
2087 uno_Sequence * seq =
nullptr;
2090 seq = *
static_cast<uno_Sequence *
const *
>(uno_data);
2099 typelib_TypeDescriptionReference * element_type =
2100 reinterpret_cast<typelib_IndirectTypeDescription *
>(td.
get())->pType;
2102 switch (element_type->eTypeClass)
2104 case typelib_TypeClass_CHAR:
2109 jni->SetCharArrayRegion(
2110 static_cast<jcharArray
>(jo_ar.
get()),
2111 0,
nElements,
reinterpret_cast<jchar *
>(seq->elements) );
2115 case typelib_TypeClass_BOOLEAN:
2120 jni->SetBooleanArrayRegion(
2121 static_cast<jbooleanArray
>(jo_ar.
get()),
2122 0,
nElements,
reinterpret_cast<jboolean *
>(seq->elements) );
2126 case typelib_TypeClass_BYTE:
2131 jni->SetByteArrayRegion(
2132 static_cast<jbyteArray
>(jo_ar.
get()),
2133 0,
nElements,
reinterpret_cast<jbyte *
>(seq->elements) );
2137 case typelib_TypeClass_SHORT:
2138 case typelib_TypeClass_UNSIGNED_SHORT:
2143 jni->SetShortArrayRegion(
2144 static_cast<jshortArray
>(jo_ar.
get()),
2145 0,
nElements,
reinterpret_cast<jshort *
>(seq->elements) );
2149 case typelib_TypeClass_LONG:
2150 case typelib_TypeClass_UNSIGNED_LONG:
2155 jni->SetIntArrayRegion(
2156 static_cast<jintArray
>(jo_ar.
get()),
2157 0,
nElements,
reinterpret_cast<jint *
>(seq->elements) );
2161 case typelib_TypeClass_HYPER:
2162 case typelib_TypeClass_UNSIGNED_HYPER:
2167 jni->SetLongArrayRegion(
2168 static_cast<jlongArray
>(jo_ar.
get()),
2169 0,
nElements,
reinterpret_cast<jlong *
>(seq->elements) );
2173 case typelib_TypeClass_FLOAT:
2178 jni->SetFloatArrayRegion(
2179 static_cast<jfloatArray
>(jo_ar.
get()),
2180 0,
nElements,
reinterpret_cast<jfloat *
>(seq->elements) );
2184 case typelib_TypeClass_DOUBLE:
2189 jni->SetDoubleArrayRegion(
2190 static_cast<jdoubleArray
>(jo_ar.
get()),
2191 0,
nElements,
reinterpret_cast<jdouble *
>(seq->elements) );
2195 case typelib_TypeClass_STRING:
2197 jni->NewObjectArray(
2202 rtl_uString *
const * pp =
2203 reinterpret_cast<rtl_uString *
const *
>(seq->elements);
2208 jni->SetObjectArrayElement(
2209 static_cast<jobjectArray
>(jo_ar.
get()),
nPos, jo_string.
get() );
2214 case typelib_TypeClass_TYPE:
2220 typelib_TypeDescriptionReference *
const * pp =
2221 reinterpret_cast<typelib_TypeDescriptionReference *
const *
>(seq->elements);
2226 jni, &val, &pp[
nPos ], element_type,
nullptr,
2229 jni->SetObjectArrayElement(
2230 static_cast<jobjectArray
>(jo_ar.
get()),
nPos, jo_element.
get() );
2235 case typelib_TypeClass_ANY:
2237 jni->NewObjectArray(
2247 jni, &val, &
p[
nPos ], element_type,
nullptr,
2250 jni->SetObjectArrayElement(
2251 static_cast<jobjectArray
>(jo_ar.
get()),
nPos, jo_element.
get() );
2256 case typelib_TypeClass_ENUM:
2258 OUString
const & element_type_name =
2259 OUString::unacquired( &element_type->pTypeName );
2262 element_type_name, RTL_TEXTENCODING_JAVA_UTF8 ) );
2264 jni,
find_class( jni, class_name.getStr() ) );
2267 jni->NewObjectArray(
2268 nElements,
static_cast<jclass
>(jo_enum_class.
get()),
nullptr ) );
2274 OString sig =
"(I)L" + class_name.replace(
'.',
'/' ) +
";";
2275 jmethodID method_id = jni->GetStaticMethodID(
2276 static_cast<jclass
>(jo_enum_class.
get()),
"fromInt", sig.getStr() );
2278 assert( method_id !=
nullptr );
2280 sal_Int32
const *
p =
reinterpret_cast<sal_Int32
const *
>(seq->elements);
2286 jni, jni->CallStaticObjectMethodA(
2287 static_cast<jclass
>(jo_enum_class.
get()), method_id, &arg ) );
2289 jni->SetObjectArrayElement(
2290 static_cast<jobjectArray
>(jo_ar.
get()),
nPos, jo_enum.
get() );
2296 case typelib_TypeClass_STRUCT:
2297 case typelib_TypeClass_EXCEPTION:
2308 char *
p =
const_cast<char *
>(seq->elements);
2309 sal_Int32 nSize = element_info->
m_td.get()->nSize;
2314 jni, &val,
p + (nSize *
nPos),
2315 element_type, element_info,
2318 jni->SetObjectArrayElement(
2319 static_cast<jobjectArray
>(jo_ar.
get()),
nPos, jo_element.
get() );
2325 case typelib_TypeClass_SEQUENCE:
2327 OStringBuffer buf( 64 );
2329 &buf, element_type,
false ,
2331 OString class_name( buf.makeStringAndClear() );
2333 jni,
find_class( jni, class_name.getStr() ) );
2336 jni->NewObjectArray(
2337 nElements,
static_cast<jclass
>(jo_seq_class.
get()),
nullptr ) );
2342 uno_Sequence *
const * elements =
reinterpret_cast<uno_Sequence *
const *
>(seq->elements);
2347 jni, &java_data2, elements +
nPos, element_type,
nullptr,
2350 jni->SetObjectArrayElement(
2351 static_cast<jobjectArray
>(jo_ar.
get()),
nPos, jo_seq.
get() );
2357 case typelib_TypeClass_INTERFACE:
2369 uno_Interface *
const * pp =
reinterpret_cast<uno_Interface *
const *
>(seq->elements);
2372 uno_Interface * pUnoI = pp[
nPos ];
2373 if (pUnoI !=
nullptr)
2377 jni->SetObjectArrayElement(
2378 static_cast<jobjectArray
>(jo_ar.
get()),
2389 "[map_to_java():" + OUString::unacquired( &
type->pTypeName )
2390 +
"] unsupported element type: "
2391 + OUString::unacquired( &element_type->pTypeName )
2398 if (java_data->l ==
nullptr)
2401 jni, jni->GetObjectClass( jo_ar.
get() ) );
2404 java_data->l = jni->NewObjectArray(
2405 1,
static_cast<jclass
>(jo_element_class.
get()), jo_ar.
get() );
2409 java_data->l = jni->NewObjectArray(
2410 1,
static_cast<jclass
>(jo_element_class.
get()),
nullptr );
2416 jni->SetObjectArrayElement(
2417 static_cast<jobjectArray
>(java_data->l), 0, jo_ar.
get() );
2423 java_data->l = jo_ar.
release();
2427 case typelib_TypeClass_INTERFACE:
2432 uno_Interface * pUnoI = *
static_cast<uno_Interface *
const *
>(uno_data);
2433 if (pUnoI !=
nullptr)
2435 if (info ==
nullptr)
2444 if (java_data->l ==
nullptr)
2446 if (info ==
nullptr)
2449 jni->NewObjectArray( 1, info->
m_class, jo_iface.
get() );
2454 jni->SetObjectArrayElement(
2455 static_cast<jobjectArray
>(java_data->l), 0, jo_iface.
get() );
2461 java_data->l = jo_iface.
release();
2468 "[map_to_java():" + OUString::unacquired( &
type->pTypeName )
void SAL_CALL uno_any_construct(uno_Any *pDest, void *pSource, typelib_TypeDescription *pTypeDescr, uno_AcquireFunc acquire) SAL_THROW_EXTERN_C()
void SAL_CALL uno_any_destruct(uno_Any *pValue, uno_ReleaseFunc release) SAL_THROW_EXTERN_C()
OUString get_stack_trace(jobject jo_exc=nullptr) const
void ensure_no_exception() const
jmethodID m_ctor_Short_with_short
jmethodID m_method_Integer_intValue
jmethodID m_method_Boolean_booleanValue
jmethodID m_ctor_Character_with_char
jmethodID m_method_Short_shortValue
jmethodID m_ctor_Double_with_double
jmethodID m_method_Long_longValue
jmethodID m_ctor_Float_with_float
jmethodID m_method_Double_doubleValue
jobject m_object_Type_UNSIGNED_LONG
jfieldID m_field_Enum_m_value
jobject m_object_Type_UNSIGNED_HYPER
jmethodID m_method_Float_floatValue
jmethodID m_ctor_Byte_with_byte
jmethodID m_ctor_Boolean_with_boolean
jmethodID m_ctor_Long_with_long
JNI_type_info const * get_type_info(JNI_context const &jni, typelib_TypeDescription *type) const
jmethodID m_method_Byte_byteValue
static void append_sig(OStringBuffer *buf, typelib_TypeDescriptionReference *type, bool use_Object_for_type_XInterface=true, bool use_slashes=true)
jmethodID m_ctor_Integer_with_int
jobject m_object_Type_UNSIGNED_SHORT
jmethodID m_method_Character_charValue
typelib_TypeDescription * get() const
void SAL_CALL uno_type_destructData(void *pValue, typelib_TypeDescriptionReference *pType, uno_ReleaseFunc release) SAL_THROW_EXTERN_C()
void SAL_CALL uno_destructData(void *pValue, typelib_TypeDescription *pTypeDescr, uno_ReleaseFunc release) SAL_THROW_EXTERN_C()
struct _typelib_TypeDescription typelib_TypeDescription
def assign(rData, bBool, cChar, nByte, nShort, nUShort, nLong, nULong, nHyper, nUHyper, fFloat, fDouble, eEnum, rStr, xTest, rAny)
OUString jstring_to_oustring(JNI_context const &jni, jstring jstr)
void jstring_to_ustring(JNI_context const &jni, rtl_uString **out_ustr, jstring jstr)
bool type_equals(typelib_TypeDescriptionReference *type1, typelib_TypeDescriptionReference *type2)
jstring ustring_to_jstring(JNI_context const &jni, rtl_uString const *ustr)
jclass find_class(JNI_context const &jni, char const *class_name, bool inException=false)
jobject create_type(JNI_context const &jni, jclass clazz)
bool is_XInterface(typelib_TypeDescriptionReference *type)
static std::unique_ptr< rtl_mem > seq_allocate(sal_Int32 nElements, sal_Int32 nSize)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
typelib_TypeDescriptionReference **SAL_CALL typelib_static_type_getByTypeClass(typelib_TypeClass eTypeClass) SAL_THROW_EXTERN_C()
void map_to_java(JNI_context const &jni, jvalue *java_data, void const *uno_data, typelib_TypeDescriptionReference *type, JNI_type_info const *info, bool in_param, bool out_param, bool special_wrapped_integral_types=false) const
void map_to_uno(JNI_context const &jni, void *uno_data, jvalue java_data, typelib_TypeDescriptionReference *type, JNI_type_info const *info, bool assign, bool out_param, bool special_wrapped_integral_types=false) const
JNI_info const * getJniInfo() const
std::unique_ptr< jfieldID[]> m_fields
JNI_type_info const * m_base
::com::sun::star::uno::TypeDescription m_td
static rtl_mem * allocate(std::size_t bytes)
void SAL_CALL typelib_typedescriptionreference_acquire(typelib_TypeDescriptionReference *pRef) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescriptionreference_assign(typelib_TypeDescriptionReference **ppDest, typelib_TypeDescriptionReference *pSource) SAL_THROW_EXTERN_C()
void SAL_CALL typelib_typedescriptionreference_release(typelib_TypeDescriptionReference *pRef) SAL_THROW_EXTERN_C()
#define SAL_SEQUENCE_HEADER_SIZE