mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8306112: Implementation of JEP 445: Unnamed Classes and Instance Main Methods (Preview)
8308613: javax.lang.model updates for JEP 445 (preview) 8308913: Update core reflection for JEP 445 (preview) Co-authored-by: Maurizio Cimadamore <mcimadamore@openjdk.org> Co-authored-by: Joe Darcy <darcy@openjdk.org> Co-authored-by: Jan Lahoda <jlahoda@openjdk.org> Co-authored-by: Jim Laskey <jlaskey@openjdk.org> Co-authored-by: Adam Sotona <asotona@openjdk.org> Reviewed-by: mcimadamore, vromero, darcy
This commit is contained in:
parent
e970ddbc60
commit
98b53c06cf
40 changed files with 1654 additions and 176 deletions
|
@ -401,8 +401,10 @@ JavaMain(void* _args)
|
|||
JNIEnv *env = 0;
|
||||
jclass mainClass = NULL;
|
||||
jclass appClass = NULL; // actual application class being launched
|
||||
jmethodID mainID;
|
||||
jobjectArray mainArgs;
|
||||
jmethodID mainID;
|
||||
jmethodID constructor;
|
||||
jobject mainObject;
|
||||
int ret = 0;
|
||||
jlong start = 0, end = 0;
|
||||
|
||||
|
@ -539,12 +541,55 @@ JavaMain(void* _args)
|
|||
* is not required. The main method is invoked here so that extraneous java
|
||||
* stacks are not in the application stack trace.
|
||||
*/
|
||||
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
|
||||
"([Ljava/lang/String;)V");
|
||||
CHECK_EXCEPTION_NULL_LEAVE(mainID);
|
||||
#define MAIN_WITHOUT_ARGS 1
|
||||
#define MAIN_NONSTATIC 2
|
||||
|
||||
/* Invoke main method. */
|
||||
(*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs);
|
||||
jclass helperClass = GetLauncherHelperClass(env);
|
||||
jmethodID getMainType = (*env)->GetStaticMethodID(env, helperClass,
|
||||
"getMainType",
|
||||
"()I");
|
||||
CHECK_EXCEPTION_NULL_LEAVE(getMainType);
|
||||
int mainType = (*env)->CallStaticIntMethod(env, helperClass, getMainType);
|
||||
CHECK_EXCEPTION_LEAVE(mainType);
|
||||
|
||||
switch (mainType) {
|
||||
case 0: {
|
||||
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
|
||||
"([Ljava/lang/String;)V");
|
||||
CHECK_EXCEPTION_NULL_LEAVE(mainID);
|
||||
(*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs);
|
||||
break;
|
||||
}
|
||||
case MAIN_WITHOUT_ARGS: {
|
||||
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
|
||||
"()V");
|
||||
CHECK_EXCEPTION_NULL_LEAVE(mainID);
|
||||
(*env)->CallStaticVoidMethod(env, mainClass, mainID);
|
||||
break;
|
||||
}
|
||||
case MAIN_NONSTATIC: {
|
||||
constructor = (*env)->GetMethodID(env, mainClass, "<init>", "()V");
|
||||
CHECK_EXCEPTION_NULL_LEAVE(constructor);
|
||||
mainObject = (*env)->NewObject(env, mainClass, constructor);
|
||||
CHECK_EXCEPTION_NULL_LEAVE(mainObject);
|
||||
mainID = (*env)->GetMethodID(env, mainClass, "main",
|
||||
"([Ljava/lang/String;)V");
|
||||
CHECK_EXCEPTION_NULL_LEAVE(mainID);
|
||||
(*env)->CallVoidMethod(env, mainObject, mainID, mainArgs);
|
||||
break;
|
||||
}
|
||||
case MAIN_NONSTATIC | MAIN_WITHOUT_ARGS: {
|
||||
constructor = (*env)->GetMethodID(env, mainClass, "<init>", "()V");
|
||||
CHECK_EXCEPTION_NULL_LEAVE(constructor);
|
||||
mainObject = (*env)->NewObject(env, mainClass, constructor);
|
||||
CHECK_EXCEPTION_NULL_LEAVE(mainObject);
|
||||
mainID = (*env)->GetMethodID(env, mainClass, "main",
|
||||
"()V");
|
||||
CHECK_EXCEPTION_NULL_LEAVE(mainID);
|
||||
(*env)->CallVoidMethod(env, mainObject, mainID);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The launcher's exit code (in the absence of calls to
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue