From b8df4e93312f41cd4238ec0f0299858cd637ebbf Mon Sep 17 00:00:00 2001 From: Stephanie Gawroriski Date: Sat, 11 Feb 2023 05:20:57 +0000 Subject: [PATCH] Attempt at getting the launcher working properly. --- .../cc/squirreljme/vm/springcoat/SpringCallbackAdapter.java | 7 +++++++ .../cc/squirreljme/vm/springcoat/SpringThreadWorker.java | 10 +++++++++- modules/cldc-compact/build.gradle | 9 +++++++++ modules/midp-lcdui/build.gradle | 13 +++++++++++++ .../java/javax/microedition/lcdui/CommandLayoutPolicy.java | 2 ++ .../src/main/java/javax/microedition/lcdui/Display.java | 1 + .../src/main/java/javax/microedition/lcdui/KeyListener.java | 4 ++++ .../java/javax/microedition/lcdui/NotificationListener.java | 4 ++++ .../javax/microedition/lcdui/TextEditorChangeListener.java | 2 ++ .../java/javax/microedition/lcdui/__CommandWidget__.java | 2 ++ .../java/javax/microedition/lcdui/__CommonWidget__.java | 5 +++++ .../main/java/javax/microedition/lcdui/__MLEUIThread__.java | 2 ++ 12 files changed, 60 insertions(+), 1 deletion(-) diff --git a/emulators/springcoat-vm/src/main/java/cc/squirreljme/vm/springcoat/SpringCallbackAdapter.java b/emulators/springcoat-vm/src/main/java/cc/squirreljme/vm/springcoat/SpringCallbackAdapter.java index 934d457e98..cd7f4bf15f 100644 --- a/emulators/springcoat-vm/src/main/java/cc/squirreljme/vm/springcoat/SpringCallbackAdapter.java +++ b/emulators/springcoat-vm/src/main/java/cc/squirreljme/vm/springcoat/SpringCallbackAdapter.java @@ -92,15 +92,22 @@ public abstract class SpringCallbackAdapter { MethodInvokeException mie = (MethodInvokeException)result; + Debugging.debugNote("--------------------------------"); + + // Print outside exception to try to get the original call Debugging.debugNote("Callback exception: %s", mie.exception); + mie.printStackTrace(System.err); // Print stack trace through the VM if possible + Debugging.debugNote("Within VM:"); cb.thread().invokeMethod(false, SpringCallbackAdapter._THROWABLE_CLASS, SpringCallbackAdapter._PRINT_STACK_TRACE_NAT, mie.exception); + Debugging.debugNote("--------------------------------"); + throw new SpringMLECallError("Callback threw exception!"); } diff --git a/emulators/springcoat-vm/src/main/java/cc/squirreljme/vm/springcoat/SpringThreadWorker.java b/emulators/springcoat-vm/src/main/java/cc/squirreljme/vm/springcoat/SpringThreadWorker.java index 01fa6ab52f..c87cb27708 100644 --- a/emulators/springcoat-vm/src/main/java/cc/squirreljme/vm/springcoat/SpringThreadWorker.java +++ b/emulators/springcoat-vm/src/main/java/cc/squirreljme/vm/springcoat/SpringThreadWorker.java @@ -3981,7 +3981,15 @@ public final class SpringThreadWorker // null.} SpringObject instance = (SpringObject)args[0]; if (instance == null || instance == SpringNullObject.NULL) - throw new SpringNullPointerException("BK39"); + { + SpringNullPointerException toss = + new SpringNullPointerException("BK39"); + + Debugging.debugNote("Class is incorrect?"); + toss.printStackTrace(System.err); + + throw toss; + } // Re-resolve method for this object's class refmethod = instance.type().lookupMethod(false, diff --git a/modules/cldc-compact/build.gradle b/modules/cldc-compact/build.gradle index ecc593af1b..d09b92c5ac 100644 --- a/modules/cldc-compact/build.gradle +++ b/modules/cldc-compact/build.gradle @@ -190,6 +190,15 @@ squirreljme "double", "_value", ";", "}"] + // Optimizing this method seems to break the launcher somehow... + proGuardOptions += ["-keepclassmembers,includecode", + "class", "cc.squirreljme.jvm.launch.SuiteScanner", "{", + "cc.squirreljme.jvm.launch.AvailableSuites", "scanSuites", "(", + ")", ";", + "cc.squirreljme.jvm.launch.AvailableSuites", "scanSuites", "(", + "cc.squirreljme.jvm.launch.SuiteScanListener", ")", ";", + "}"] + // This is considered a boot loader for SummerCoat isBootLoader = true bootLoaderMainClass = "cc.squirreljme.jvm.summercoat.Bootstrap" diff --git a/modules/midp-lcdui/build.gradle b/modules/midp-lcdui/build.gradle index 555cbb3e07..299dd4d8c3 100644 --- a/modules/midp-lcdui/build.gradle +++ b/modules/midp-lcdui/build.gradle @@ -26,6 +26,19 @@ squirreljme "cc.squirreljme.runtime.lcdui.mle.UIBackend", ")", ";", "}"] + + // Performing optimizations here breaks MLE callbacks + proGuardOptions += ["-keep,includecode", + "class", "javax.microedition.lcdui.__MLEUIThread__", "{", + "", ";", + "}"] + + // Keep any class members that are marked as serialized events and do not + // optimize them + proGuardOptions += ["-keepclassmembers,includecode", + "class", "*", "{", + "@cc.squirreljme.runtime.lcdui.SerializedEvent", "*", ";", + "}"] } dependencies diff --git a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/CommandLayoutPolicy.java b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/CommandLayoutPolicy.java index 50078a21f5..f7a90e5f67 100644 --- a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/CommandLayoutPolicy.java +++ b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/CommandLayoutPolicy.java @@ -10,6 +10,7 @@ package javax.microedition.lcdui; import cc.squirreljme.runtime.cldc.annotation.Api; +import cc.squirreljme.runtime.lcdui.SerializedEvent; /** * This interface is called when commands need to be laid out onto the display. @@ -32,6 +33,7 @@ public interface CommandLayoutPolicy * @since 2020/09/27 */ @Api + @SerializedEvent void onCommandLayout(Displayable __d); } diff --git a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/Display.java b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/Display.java index b203c614d9..f8272ce1e1 100644 --- a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/Display.java +++ b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/Display.java @@ -1332,6 +1332,7 @@ public class Display * @param __serialId The serial run ID. * @since 2023/01/14 */ + @SerializedEvent protected void __serialRun(int __serialId) { // Look to see if it is a valid call diff --git a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/KeyListener.java b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/KeyListener.java index a49905af91..f378989d81 100644 --- a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/KeyListener.java +++ b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/KeyListener.java @@ -10,6 +10,7 @@ package javax.microedition.lcdui; import cc.squirreljme.runtime.cldc.annotation.Api; +import cc.squirreljme.runtime.lcdui.SerializedEvent; /** * This is the key listener interface which is used for a slightly more @@ -62,6 +63,7 @@ public interface KeyListener * @since 2017/02/12 */ @Api + @SerializedEvent void keyPressed(int __kc, int __km); /** @@ -72,6 +74,7 @@ public interface KeyListener * @since 2017/02/12 */ @Api + @SerializedEvent void keyReleased(int __kc, int __km); /** @@ -82,6 +85,7 @@ public interface KeyListener * @since 2017/02/12 */ @Api + @SerializedEvent void keyRepeated(int __kc, int __km); } diff --git a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/NotificationListener.java b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/NotificationListener.java index 7999b213a1..a60d1fb372 100644 --- a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/NotificationListener.java +++ b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/NotificationListener.java @@ -10,17 +10,21 @@ package javax.microedition.lcdui; import cc.squirreljme.runtime.cldc.annotation.Api; +import cc.squirreljme.runtime.lcdui.SerializedEvent; @Api public interface NotificationListener { @Api + @SerializedEvent void notificationDismissed(Notification __n); @Api + @SerializedEvent void notificationSelected(Notification __n); @Api + @SerializedEvent void notificationTimeout(Notification __n); } diff --git a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/TextEditorChangeListener.java b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/TextEditorChangeListener.java index f39dbf0f07..a6260f7b15 100644 --- a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/TextEditorChangeListener.java +++ b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/TextEditorChangeListener.java @@ -10,6 +10,7 @@ package javax.microedition.lcdui; import cc.squirreljme.runtime.cldc.annotation.Api; +import cc.squirreljme.runtime.lcdui.SerializedEvent; @Api public interface TextEditorChangeListener @@ -43,6 +44,7 @@ public interface TextEditorChangeListener 8; @Api + @SerializedEvent void inputAction(TextEditor __e, int __act); } diff --git a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__CommandWidget__.java b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__CommandWidget__.java index b60aa9a584..069bc309dd 100644 --- a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__CommandWidget__.java +++ b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__CommandWidget__.java @@ -12,6 +12,7 @@ package javax.microedition.lcdui; import cc.squirreljme.jvm.mle.brackets.UIItemBracket; import cc.squirreljme.jvm.mle.constants.UIItemType; import cc.squirreljme.jvm.mle.constants.UIWidgetProperty; +import cc.squirreljme.runtime.lcdui.SerializedEvent; import cc.squirreljme.runtime.lcdui.mle.DisplayWidget; import cc.squirreljme.runtime.lcdui.mle.StaticDisplayState; import cc.squirreljme.runtime.lcdui.mle.UIBackend; @@ -76,6 +77,7 @@ final class __CommandWidget__ * @since 2020/09/27 */ @Deprecated + @SerializedEvent final void __activate() { // Do nothing if the owner is gone. diff --git a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__CommonWidget__.java b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__CommonWidget__.java index 3e1b8d910d..d515dd1258 100644 --- a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__CommonWidget__.java +++ b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__CommonWidget__.java @@ -11,6 +11,7 @@ package javax.microedition.lcdui; import cc.squirreljme.jvm.mle.brackets.UIFormBracket; import cc.squirreljme.jvm.mle.brackets.UIItemBracket; +import cc.squirreljme.runtime.lcdui.SerializedEvent; import cc.squirreljme.runtime.lcdui.mle.DisplayWidget; import cc.squirreljme.runtime.lcdui.mle.StaticDisplayState; import cc.squirreljme.runtime.lcdui.mle.UIBackend; @@ -66,6 +67,7 @@ abstract class __CommonWidget__ * @return If this can be painted on. * @since 2020/10/17 */ + @SerializedEvent boolean __isPainted() { return false; @@ -81,6 +83,7 @@ abstract class __CommonWidget__ * other value depending on what is being painted. * @since 2020/09/21 */ + @SerializedEvent void __paint(Graphics __gfx, int __sw, int __sh, int __special) { } @@ -97,6 +100,7 @@ abstract class __CommonWidget__ * @return If the event was handled and we should stop. * @since 2020/10/17 */ + @SerializedEvent boolean __propertyChange(UIFormBracket __form, UIItemBracket __item, int __intProp, int __sub, int __old, int __new) { @@ -122,6 +126,7 @@ abstract class __CommonWidget__ * @return If the event was handled and we should stop. * @since 2020/10/17 */ + @SerializedEvent boolean __propertyChange(UIFormBracket __form, UIItemBracket __item, int __strProp, int __sub, String __old, String __new) { diff --git a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__MLEUIThread__.java b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__MLEUIThread__.java index 3e19ab2ed3..f3abbc3e46 100644 --- a/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__MLEUIThread__.java +++ b/modules/midp-lcdui/src/main/java/javax/microedition/lcdui/__MLEUIThread__.java @@ -22,6 +22,7 @@ import cc.squirreljme.jvm.mle.constants.UIItemPosition; import cc.squirreljme.jvm.mle.constants.UIKeyEventType; import cc.squirreljme.jvm.mle.constants.UIKeyModifier; import cc.squirreljme.runtime.cldc.debug.Debugging; +import cc.squirreljme.runtime.lcdui.SerializedEvent; import cc.squirreljme.runtime.lcdui.event.EventTranslate; import cc.squirreljme.runtime.lcdui.event.KeyCodeTranslator; import cc.squirreljme.runtime.lcdui.mle.DisplayWidget; @@ -407,6 +408,7 @@ final class __MLEUIThread__ * null. * @since 2020/10/16 */ + @SerializedEvent private void __eventKey(Canvas __canvas, CustomItem __cItem, int __event, int __keyCode, int __modifiers) throws IllegalArgumentException, NullPointerException -- 2.11.4.GIT