Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit f27ee8a

Browse filesBrowse files
committed
[[ Java ]] Implement jobjectArray <-> List of MCJavaObjectRef
1 parent 9c23059 commit f27ee8a
Copy full SHA for f27ee8a

File tree

5 files changed

+94
-1
lines changed
Filter options

5 files changed

+94
-1
lines changed

‎libfoundation/include/foundation.h

Copy file name to clipboardExpand all lines: libfoundation/include/foundation.h
+4-1Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2008,7 +2008,10 @@ MC_DLLEXPORT bool MCJavaConvertStringRefToJString(MCStringRef p_string, MCJavaOb
20082008
MC_DLLEXPORT bool MCJavaConvertJByteArrayToDataRef(MCJavaObjectRef p_object, MCDataRef &r_data);
20092009
// Convert a Data Ref to a Java object wrapping a jByteArray
20102010
MC_DLLEXPORT bool MCJavaConvertDataRefToJByteArray(MCDataRef p_data, MCJavaObjectRef &r_object);
2011-
2011+
2012+
MC_DLLEXPORT bool MCJavaConvertProperListRefToJObjectArray(MCProperListRef p_list, MCStringRef p_class_name, MCJavaObjectRef &r_obj_array);
2013+
MC_DLLEXPORT bool MCJavaConvertJObjectArrayToProperListRef(MCJavaObjectRef p_obj_array, MCProperListRef &r_list);
2014+
20122015
////////////////////////////////////////////////////////////////////////////////
20132016
//
20142017
// BOOLEAN DEFINITIONS

‎libfoundation/src/foundation-java-private.cpp

Copy file name to clipboardExpand all lines: libfoundation/src/foundation-java-private.cpp
+40Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,46 @@ static bool __MCJavaProperListFromJObjectArray(jobjectArray p_obj_array, MCPrope
509509
return MCProperListCopy(*t_list, r_list);
510510
}
511511

512+
bool MCJavaPrivateProperListFromJObjectArray(MCJavaObjectRef p_obj_array, MCProperListRef& r_list)
513+
{
514+
jobjectArray t_obj_array = static_cast<jobjectArray>(MCJavaObjectGetObject(static_cast<MCJavaObjectRef>(p_obj_array)));
515+
if (t_obj_array == nullptr)
516+
{
517+
return false;
518+
}
519+
520+
return __MCJavaProperListFromJObjectArray(t_obj_array, r_list);
521+
}
522+
523+
static jclass MCJavaPrivateFindClass(MCNameRef p_class_name);
524+
525+
bool MCJavaPrivateProperListToJObjectArray(MCProperListRef p_list, MCNameRef p_class_name, MCJavaObjectRef &r_obj_array)
526+
{
527+
MCJavaDoAttachCurrentThread();
528+
529+
jclass t_class = MCJavaPrivateFindClass(p_class_name);
530+
531+
uindex_t t_size = MCProperListGetLength(p_list);
532+
jobjectArray t_obj_array = s_env -> NewObjectArray(t_size, t_class, nullptr);
533+
534+
if (t_obj_array == nullptr)
535+
return false;
536+
537+
for (uint32_t i = 0; i < t_size; i++)
538+
{
539+
MCValueRef t_value;
540+
t_value = MCProperListFetchElementAtIndex(p_list, i);
541+
if (MCValueGetTypeInfo(t_value) == MCJavaGetObjectTypeInfo())
542+
{
543+
jobject t_object = static_cast<jobject>(MCJavaObjectGetObject(static_cast<MCJavaObjectRef>(t_value)));
544+
545+
s_env -> SetObjectArrayElement(t_obj_array, i, t_object);
546+
}
547+
}
548+
549+
return MCJavaObjectCreate(t_obj_array, r_obj_array);
550+
}
551+
512552
void* MCJavaPrivateGlobalRef(void *p_object)
513553
{
514554
MCJavaDoAttachCurrentThread();

‎libfoundation/src/foundation-java-private.h

Copy file name to clipboardExpand all lines: libfoundation/src/foundation-java-private.h
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ void MCJavaPrivateDestroyObject(MCJavaObjectRef p_object);
6969
bool MCJavaPrivateCheckSignature(MCTypeInfoRef p_signature, MCStringRef p_args, MCStringRef p_return, int p_call_type);
7070
bool MCJavaPrivateGetJObjectClassName(MCJavaObjectRef p_object, MCStringRef &r_name);
7171

72+
bool MCJavaPrivateProperListFromJObjectArray(MCJavaObjectRef p_obj_array, MCProperListRef& r_list);
73+
bool MCJavaPrivateProperListToJObjectArray(MCProperListRef p_list, MCNameRef p_class_name, MCJavaObjectRef &r_obj_array);
74+
7275
void* MCJavaPrivateGlobalRef(void *p_object);
7376

7477
bool MCJavaPrivateErrorThrow(MCTypeInfoRef p_error);

‎libfoundation/src/foundation-java.cpp

Copy file name to clipboardExpand all lines: libfoundation/src/foundation-java.cpp
+19Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,22 @@ MC_DLLEXPORT bool MCJavaGetJObjectClassName(MCJavaObjectRef p_object, MCStringRe
220220

221221
return MCJavaPrivateGetJObjectClassName(p_object, r_name);
222222
}
223+
224+
MC_DLLEXPORT bool MCJavaConvertProperListRefToJObjectArray(MCProperListRef p_list, MCStringRef p_class_name, MCJavaObjectRef &r_obj_array)
225+
{
226+
if (!s_java_initialised)
227+
return MCJavaPrivateErrorThrow(kMCJavaJRENotSupportedErrorTypeInfo);
228+
229+
MCNewAutoNameRef t_class_name;
230+
return MCNameCreate(p_class_name, &t_class_name) && \
231+
MCJavaPrivateProperListToJObjectArray(p_list, *t_class_name, r_obj_array);
232+
}
233+
234+
MC_DLLEXPORT bool MCJavaConvertJObjectArrayToProperListRef(MCJavaObjectRef p_obj_array, MCProperListRef &r_list)
235+
{
236+
if (!s_java_initialised)
237+
return MCJavaPrivateErrorThrow(kMCJavaJRENotSupportedErrorTypeInfo);
238+
239+
return MCJavaPrivateProperListFromJObjectArray(p_obj_array, r_list);
240+
}
241+

‎libscript/src/module-java.cpp

Copy file name to clipboardExpand all lines: libscript/src/module-java.cpp
+28Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertStringToJStringErrorTypeInfo;
4242
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertJStringToStringErrorTypeInfo;
4343
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertDataToJByteArrayErrorTypeInfo;
4444
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertJByteArrayToDataErrorTypeInfo;
45+
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertListToJObjectArrayErrorTypeInfo;
46+
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertJObjectArrayToListErrorTypeInfo;
4547
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotGetObjectClassNameErrorTypeInfo;
4648
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotCreateJObjectErrorTypeInfo;
4749

@@ -83,6 +85,24 @@ extern "C" MC_DLLEXPORT_DEF void MCJavaDataToJByteArray(MCDataRef p_data, MCJava
8385
MCJavaErrorThrow(kMCJavaCouldNotConvertDataToJByteArrayErrorTypeInfo);
8486
}
8587

88+
extern "C" MC_DLLEXPORT_DEF void MCJavaListFromJObjectArray(MCJavaObjectRef p_object, MCProperListRef &r_list)
89+
{
90+
if (!TryToInitializeJava())
91+
return;
92+
93+
if (!MCJavaConvertJObjectArrayToProperListRef(p_object, r_list))
94+
MCJavaErrorThrow(kMCJavaCouldNotConvertJObjectArrayToListErrorTypeInfo);
95+
}
96+
97+
extern "C" MC_DLLEXPORT_DEF void MCJavaListToJObjectArray(MCProperListRef p_list, MCStringRef p_class_name, MCJavaObjectRef &r_object)
98+
{
99+
if (!TryToInitializeJava())
100+
return;
101+
102+
if (!MCJavaConvertProperListRefToJObjectArray(p_list, p_class_name, r_object))
103+
MCJavaErrorThrow(kMCJavaCouldNotConvertListToJObjectArrayErrorTypeInfo);
104+
}
105+
86106
extern "C" MC_DLLEXPORT_DEF void MCJavaGetClassName(MCJavaObjectRef p_obj, MCStringRef &r_string)
87107
{
88108
if (!TryToInitializeJava())
@@ -119,6 +139,12 @@ bool MCJavaErrorsInitialize()
119139
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.ConvertToDataError"), MCNAME("java"), MCSTR("Could not convert Java byte array to Data"), kMCJavaCouldNotConvertJByteArrayToDataErrorTypeInfo))
120140
return false;
121141

142+
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.ConvertFromListError"), MCNAME("java"), MCSTR("Could not convert Java object array to List"), kMCJavaCouldNotConvertListToJObjectArrayErrorTypeInfo))
143+
return false;
144+
145+
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.ConvertToListError"), MCNAME("java"), MCSTR("Could not convert Java object array to List"), kMCJavaCouldNotConvertJObjectArrayToListErrorTypeInfo))
146+
return false;
147+
122148
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.FetchJavaClassNameError"), MCNAME("java"), MCSTR("Could not get Java object class name"), kMCJavaCouldNotGetObjectClassNameErrorTypeInfo))
123149
return false;
124150

@@ -134,6 +160,8 @@ void MCJavaErrorsFinalize()
134160
MCValueRelease(kMCJavaCouldNotConvertJStringToStringErrorTypeInfo);
135161
MCValueRelease(kMCJavaCouldNotConvertDataToJByteArrayErrorTypeInfo);
136162
MCValueRelease(kMCJavaCouldNotConvertJByteArrayToDataErrorTypeInfo);
163+
MCValueRelease(kMCJavaCouldNotConvertListToJObjectArrayErrorTypeInfo);
164+
MCValueRelease(kMCJavaCouldNotConvertJObjectArrayToListErrorTypeInfo);
137165
MCValueRelease(kMCJavaCouldNotGetObjectClassNameErrorTypeInfo);
138166
MCValueRelease(kMCJavaCouldNotCreateJObjectErrorTypeInfo);
139167
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.