Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit b30ff62

Browse files
committed
[[ ExternalsApiV5 ]] Initial work on Java support code generation.
1 parent c027aef commit b30ff62

File tree

4 files changed

+65
-9
lines changed

4 files changed

+65
-9
lines changed

lcidlc/lcidlc.xcodeproj/project.pbxproj

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
4D99EA3D1363A92A0056938B /* libcore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D99EA3C1363A9220056938B /* libcore.a */; };
2121
4D99EA5B1363AA530056938B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D99EA5A1363AA530056938B /* CoreFoundation.framework */; };
2222
4DBA0E7E136799A3006EEA7D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DBA0E7D136799A3006EEA7D /* Foundation.framework */; };
23+
4DED6F09176233B0001DEF0C /* EncodedJavaSupport.c in Sources */ = {isa = PBXBuildFile; fileRef = 4DED6F08176233A2001DEF0C /* EncodedJavaSupport.c */; };
2324
/* End PBXBuildFile section */
2425

2526
/* Begin PBXContainerItemProxy section */
@@ -69,6 +70,7 @@
6970
4DE553EC13A4D9E200C99D11 /* lclink.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lclink.sh; sourceTree = "<group>"; };
7071
4DE553ED13A4D9E200C99D11 /* lclinktest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lclinktest.sh; sourceTree = "<group>"; };
7172
4DED6D131760ECD5001DEF0C /* Support.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = Support.java; path = src/Support.java; sourceTree = "<group>"; };
73+
4DED6F08176233A2001DEF0C /* EncodedJavaSupport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EncodedJavaSupport.c; path = src/EncodedJavaSupport.c; sourceTree = "<group>"; };
7274
/* End PBXFileReference section */
7375

7476
/* Begin PBXFrameworksBuildPhase section */
@@ -138,6 +140,7 @@
138140
4D9036AE1398FC1600CBC7F6 /* Derived Sources */ = {
139141
isa = PBXGroup;
140142
children = (
143+
4DED6F08176233A2001DEF0C /* EncodedJavaSupport.c */,
141144
4D9036901398FC0800CBC7F6 /* EncodedSupport.c */,
142145
);
143146
name = "Derived Sources";
@@ -238,14 +241,16 @@
238241
);
239242
inputPaths = (
240243
"$(SRCROOT)/Support.cpp",
244+
"$(SRCROOT)/Support.java",
241245
);
242246
name = "Encode Support";
243247
outputPaths = (
244-
"$(SRCROOT)/EncodedSupport.cpp",
248+
"$(SRCROOT)/EncodedSupport.c",
249+
"$(SRCROOT)/EncodedJavaSupport.c",
245250
);
246251
runOnlyForDeploymentPostprocessing = 0;
247252
shellPath = /bin/sh;
248-
shellScript = "\"$SOLUTION_DIR/prebuilt/bin/Revolution.osx\" \"$SRCROOT/encode_source.rev\" \"$SRCROOT/src/Support.mm\" \"$SRCROOT/src/EncodedSupport.c\" \"g_support_template\"";
253+
shellScript = "\"$SOLUTION_DIR/prebuilt/bin/Revolution.osx\" \"$SRCROOT/encode_source.rev\" \"$SRCROOT/src/Support.mm\" \"$SRCROOT/src/EncodedSupport.c\" \"g_support_template\"\n\"$SOLUTION_DIR/prebuilt/bin/Revolution.osx\" \"$SRCROOT/encode_source.rev\" \"$SRCROOT/src/Support.java\" \"$SRCROOT/src/EncodedJavaSupport.c\" \"g_java_support_template\"\n";
249254
showEnvVarsInLog = 0;
250255
};
251256
/* End PBXShellScriptBuildPhase section */
@@ -255,6 +260,7 @@
255260
isa = PBXSourcesBuildPhase;
256261
buildActionMask = 2147483647;
257262
files = (
263+
4DED6F09176233B0001DEF0C /* EncodedJavaSupport.c in Sources */,
258264
4D9036A21398FC0800CBC7F6 /* EncodedSupport.c in Sources */,
259265
4D9036A31398FC0800CBC7F6 /* Error.cpp in Sources */,
260266
4D9036A41398FC0800CBC7F6 /* Interface.cpp in Sources */,

lcidlc/src/InterfaceGenerate.cpp

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1361,11 +1361,13 @@ static bool InterfaceGenerateExports(InterfaceRef self, CoderRef p_coder)
13611361
CoderWriteLine(p_coder, "JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)");
13621362
CoderWriteLine(p_coder, "{");
13631363
CoderWriteLine(p_coder, "\ts_java_vm = vm;");
1364-
CoderWriteLine(p_coder, "\ts_java_vm -> GetEnv((void **)&s_java_env, JNI_VERSION_1_2);");
1365-
CoderWriteLine(p_coder, "\ts_java_class = (jclass)s_java_env -> NewGlobalRef(s_java_env -> FindClass(\"%s\"));", t_java_class_name);
1364+
CoderWriteLine(p_coder, "\tJavaEnv *t_java_env; s_java_vm -> GetEnv((void **)&t_java_env, JNI_VERSION_1_2);");
1365+
CoderWriteLine(p_coder, "\ts_java_class = (jclass)t_java_env -> NewGlobalRef(t_java_env -> FindClass(\"%s\"));", t_java_class_name);
13661366
CoderWriteLine(p_coder, "");
13671367
CoderWriteLine(p_coder, "\treturn JNI_VERSION_1_2;");
13681368
CoderWriteLine(p_coder, "}");
1369+
1370+
#ifdef NOT_USED
13691371
for(uint32_t i = 0; t_java_class_name[i] != '\0'; i++)
13701372
if (t_java_class_name[i] == '/')
13711373
t_java_class_name[i] = '_';
@@ -1381,6 +1383,25 @@ static bool InterfaceGenerateExports(InterfaceRef self, CoderRef p_coder)
13811383
CoderWriteLine(p_coder, "}");
13821384
CoderWriteLine(p_coder, "#endif");
13831385
free(t_java_class_name);
1386+
#endif
1387+
1388+
return true;
1389+
}
1390+
1391+
////////////////////////////////////////////////////////////////////////////////
1392+
1393+
extern const char *g_java_support_template;
1394+
1395+
/*static struct { const char *tag; void (*generator)(InterfaceRef self, CoderRef coder); } s_sections[] =
1396+
{
1397+
{ "package", InterfaceGenerateJavaPackageSection },
1398+
};*/
1399+
1400+
static bool InterfaceGenerateJava(InterfaceRef self, CoderRef p_coder)
1401+
{
1402+
CoderWriteLine(p_coder, "package %s;", NameGetCString(self -> qualified_name));
1403+
1404+
CoderWrite(p_coder, "%s", strchr(g_java_support_template, '\n') + 1);
13841405

13851406
return true;
13861407
}
@@ -1395,11 +1416,23 @@ bool InterfaceGenerate(InterfaceRef self, const char *p_output)
13951416
CoderRef t_coder;
13961417
t_coder = nil;
13971418

1419+
char *t_native_output_filename, *t_java_output_filename;
1420+
if (MCCStringEndsWith(p_output, "/"))
1421+
{
1422+
MCCStringFormat(t_native_output_filename, "%s%s.lcidlc.cpp", p_output, NameGetCString(self -> name));
1423+
MCCStringFormat(t_java_output_filename, "%sLC.java", p_output);
1424+
}
1425+
else
1426+
{
1427+
t_native_output_filename = (char *)p_output;
1428+
t_java_output_filename = nil;
1429+
}
1430+
13981431
if (t_success)
13991432
t_success = !self -> invalid;
14001433

14011434
if (t_success)
1402-
t_success = CoderStart(p_output, t_coder);
1435+
t_success = CoderStart(t_native_output_filename, t_coder);
14031436

14041437
if (t_success)
14051438
t_success = InterfaceGenerateSupport(self, t_coder);
@@ -1421,6 +1454,25 @@ bool InterfaceGenerate(InterfaceRef self, const char *p_output)
14211454
else
14221455
CoderCancel(t_coder);
14231456

1457+
if (t_success && t_java_output_filename != nil)
1458+
{
1459+
if (t_success)
1460+
t_success = CoderStart(t_java_output_filename, t_coder);
1461+
1462+
if (t_success)
1463+
t_success = InterfaceGenerateJava(self, t_coder);
1464+
1465+
if (t_success)
1466+
t_success = CoderFinish(t_coder);
1467+
else
1468+
CoderCancel(t_coder);
1469+
}
1470+
1471+
if (t_native_output_filename != p_output)
1472+
free(t_native_output_filename);
1473+
1474+
free(t_java_output_filename);
1475+
14241476
return t_success;
14251477
}
14261478

lcidlc/src/Main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ int main(int argc, char *argv[])
3737

3838
if (argc != 3)
3939
{
40-
fprintf(stderr, "Syntax: lcidlc <input file> <output file>\n");
40+
fprintf(stderr, "Syntax: lcidlc <input file> <output file/folder>\n");
4141
return 1;
4242
}
4343

lcidlc/src/Support.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package /*package{*/ com.runrev.external /*}*/
1+
package com.runrev.external;
22

33
import java.lang.*;
44

@@ -230,6 +230,4 @@ private void Check()
230230

231231
public static native Activity InterfaceQueryActivity();
232232
public static native ViewGroup InterfaceQueryContainer();
233-
234-
/*methods{}*/
235233
};

0 commit comments

Comments
 (0)