Skip to content

Commit 59f8659

Browse files
committed
[[ LCB Java ]] Add distinct typeinfos for Java-specific errors
1 parent edc0625 commit 59f8659

1 file changed

Lines changed: 54 additions & 15 deletions

File tree

libscript/src/module-java.cpp

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,21 @@ static bool TryToInitializeJava()
2929

3030
extern "C" MC_DLLEXPORT_DEF MCTypeInfoRef MCJavaObjectTypeInfo() { return MCJavaGetObjectTypeInfo(); }
3131

32+
bool MCJavaErrorThrow(MCTypeInfoRef p_error_type)
33+
{
34+
MCAutoErrorRef t_error;
35+
if (!MCErrorCreate(p_error_type, nil, &t_error))
36+
return false;
37+
38+
return MCErrorThrow(*t_error);
39+
}
40+
41+
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertStringToJStringErrorTypeInfo;
42+
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertJStringToStringErrorTypeInfo;
43+
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertDataToJByteArrayErrorTypeInfo;
44+
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotConvertJByteArrayToDataErrorTypeInfo;
45+
MC_DLLEXPORT MCTypeInfoRef kMCJavaCouldNotGetObjectClassNameErrorTypeInfo;
46+
3247
////////////////////////////////////////////////////////////////////////////////////////////////////
3348

3449
extern "C" MC_DLLEXPORT_DEF void MCJavaStringFromJString(MCJavaObjectRef p_object, MCStringRef &r_string)
@@ -37,9 +52,7 @@ extern "C" MC_DLLEXPORT_DEF void MCJavaStringFromJString(MCJavaObjectRef p_objec
3752
return;
3853

3954
if (!MCJavaConvertJStringToStringRef(p_object, r_string))
40-
MCErrorCreateAndThrow(kMCGenericErrorTypeInfo, "reason",
41-
MCSTR("couldn't convert java object to string"),
42-
nullptr);
55+
MCJavaErrorThrow(kMCJavaCouldNotConvertJStringToStringErrorTypeInfo);
4356
}
4457

4558
extern "C" MC_DLLEXPORT_DEF void MCJavaStringToJString(MCStringRef p_string, MCJavaObjectRef &r_object)
@@ -48,9 +61,7 @@ extern "C" MC_DLLEXPORT_DEF void MCJavaStringToJString(MCStringRef p_string, MCJ
4861
return;
4962

5063
if (!MCJavaConvertStringRefToJString(p_string, r_object))
51-
MCErrorCreateAndThrow(kMCGenericErrorTypeInfo, "reason",
52-
MCSTR("couldn't convert string to java object"),
53-
nullptr);
64+
MCJavaErrorThrow(kMCJavaCouldNotConvertStringToJStringErrorTypeInfo);
5465
}
5566

5667
extern "C" MC_DLLEXPORT_DEF void MCJavaDataFromJByteArray(MCJavaObjectRef p_object, MCDataRef &r_data)
@@ -59,9 +70,7 @@ extern "C" MC_DLLEXPORT_DEF void MCJavaDataFromJByteArray(MCJavaObjectRef p_obje
5970
return;
6071

6172
if (!MCJavaConvertJByteArrayToDataRef(p_object, r_data))
62-
MCErrorCreateAndThrow(kMCGenericErrorTypeInfo, "reason",
63-
MCSTR("couldn't convert java object to data"),
64-
nullptr);
73+
MCJavaErrorThrow(kMCJavaCouldNotConvertJByteArrayToDataErrorTypeInfo);
6574
}
6675

6776
extern "C" MC_DLLEXPORT_DEF void MCJavaDataToJByteArray(MCDataRef p_data, MCJavaObjectRef &r_object)
@@ -70,9 +79,7 @@ extern "C" MC_DLLEXPORT_DEF void MCJavaDataToJByteArray(MCDataRef p_data, MCJava
7079
return;
7180

7281
if (!MCJavaConvertDataRefToJByteArray(p_data, r_object))
73-
MCErrorCreateAndThrow(kMCGenericErrorTypeInfo, "reason",
74-
MCSTR("couldn't convert data to java object"),
75-
nullptr);
82+
MCJavaErrorThrow(kMCJavaCouldNotConvertDataToJByteArrayErrorTypeInfo);
7683
}
7784

7885
extern "C" MC_DLLEXPORT_DEF void MCJavaGetClassName(MCJavaObjectRef p_obj, MCStringRef &r_string)
@@ -81,15 +88,45 @@ extern "C" MC_DLLEXPORT_DEF void MCJavaGetClassName(MCJavaObjectRef p_obj, MCStr
8188
return;
8289

8390
if (!MCJavaGetJObjectClassName(p_obj, r_string))
84-
MCErrorCreateAndThrow(kMCGenericErrorTypeInfo, "reason",
85-
MCSTR("couldn't get java object class name"),
86-
nullptr);
91+
MCJavaErrorThrow(kMCJavaCouldNotGetObjectClassNameErrorTypeInfo);
8792
}
8893

8994
////////////////////////////////////////////////////////////////////////////////////////////////////
9095

96+
bool MCJavaErrorsInitialize()
97+
{
98+
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.ConvertFromStringError"), MCNAME("java"), MCSTR("Could not convert String to Java string"), kMCJavaCouldNotConvertStringToJStringErrorTypeInfo))
99+
return false;
100+
101+
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.ConvertToStringError"), MCNAME("java"), MCSTR("Could not convert Java byte array to Data"), kMCJavaCouldNotConvertJStringToStringErrorTypeInfo))
102+
return false;
103+
104+
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.ConvertFromDataError"), MCNAME("java"), MCSTR("Could not convert Java byte array to Data"), kMCJavaCouldNotConvertDataToJByteArrayErrorTypeInfo))
105+
return false;
106+
107+
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.ConvertToDataError"), MCNAME("java"), MCSTR("Could not convert Java byte array to Data"), kMCJavaCouldNotConvertJByteArrayToDataErrorTypeInfo))
108+
return false;
109+
110+
if (!MCNamedErrorTypeInfoCreate(MCNAME("com.livecode.java.FetchJavaClassNameError"), MCNAME("java"), MCSTR("Could not get Java object class name"), kMCJavaCouldNotGetObjectClassNameErrorTypeInfo))
111+
return false;
112+
113+
return true;
114+
}
115+
116+
void MCJavaErrorsFinalize()
117+
{
118+
MCValueRelease(kMCJavaCouldNotConvertStringToJStringErrorTypeInfo);
119+
MCValueRelease(kMCJavaCouldNotConvertJStringToStringErrorTypeInfo);
120+
MCValueRelease(kMCJavaCouldNotConvertDataToJByteArrayErrorTypeInfo);
121+
MCValueRelease(kMCJavaCouldNotConvertJByteArrayToDataErrorTypeInfo);
122+
MCValueRelease(kMCJavaCouldNotGetObjectClassNameErrorTypeInfo);
123+
}
124+
91125
extern "C" bool com_livecode_java_Initialize(void)
92126
{
127+
if (!MCJavaErrorsInitialize())
128+
return false;
129+
93130
if (!MCJavaCreateJavaObjectTypeInfo())
94131
return false;
95132

@@ -99,6 +136,8 @@ extern "C" bool com_livecode_java_Initialize(void)
99136
extern "C" void com_livecode_java_Finalize(void)
100137
{
101138
MCJavaFinalize();
139+
140+
MCJavaErrorsFinalize();
102141
}
103142

104143
////////////////////////////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)