Incorrect base method calling cause StackOverflow on Android

public class MainActivity: Activity
{
    public override void onCreate(Bundle savedInstanceState)
    {
	base.onCreate(savedInstanceState);
	ContentView = R.layout.main;

        new SubClass().doSth("1234");
    }        
}

public class SubClass : BaseClass1 {
    public override void doSth(string v) {
        Log.i("","doSth in Sub: "+v);
        base.doSth(v);
        /**
            LogCat: E/AndroidRuntime( 6976): java.lang.StackOverflowError
            LogCat: E/AndroidRuntime( 6976): 	at org.me.androidapplication2.SubClass.doSth()
            LogCat: E/AndroidRuntime( 6976): 	at org.me.androidapplication2.BaseClass1.doSth()
            LogCat: E/AndroidRuntime( 6976): 	at org.me.androidapplication2.SubClass.doSth()
            LogCat: E/AndroidRuntime( 6976): 	at org.me.androidapplication2.BaseClass1.doSth()
            LogCat: E/AndroidRuntime( 6976): 	at org.me.androidapplication2.SubClass.doSth()
            LogCat: E/AndroidRuntime( 6976): 	at org.me.androidapplication2.BaseClass1.doSth()
            LogCat: E/AndroidRuntime( 6976): 	at org.me.androidapplication2.SubClass.doSth()
        ...
        */
    }
}

public class BaseClass1 : BaseClass0<string> {
    protected override void doSth(string v) {
        Log.i("","doSth in Base1: "+v);
        base.doSth(v);
    }
}

public class BaseClass0<T> {
    protected virtual void doSth(T v) {
        Log.i("","doSth in Base0: "+v);
    }
}

Elements 8.3.92.1895

Thanks, logged as bugs://73802

bugs://73802 got closed with status fixed.

This bug can still be reproduced on 8.3.92.1915

Don’t forget about this one. It’s still unresolved on 8.3.92.1915, but the error message is different:

public class MainActivity: Activity
{
    public override void onCreate(Bundle savedInstanceState)
    {
        base.onCreate(savedInstanceState);
        ContentView = R.layout.main;

        new SubClass().doSth("1234");
    }        
}
public class SubClass : BaseClass1 {
    public override void doSth(string v) {
        Log.i("","doSth in Sub: "+v);
        base.doSth(v);
        /** Different error message:
        An exception of type: java.lang.NoSuchMethodError occurred
        Message: {java.lang.NoSuchMethodError: com.test.android.BaseClass1.doSth}
        at   BaseClass1.doSth()
          SubClass.doSth()
          MainActivity.onCreate()
          Activity.performCreate()
          Instrumentation.callActivityOnCreate()
          ActivityThread.performLaunchActivity()
          ActivityThread.handleLaunchActivity()
          ActivityThread.access$800()
          ActivityThread$H.handleMessage()
          Handler.dispatchMessage()
          Looper.loop()
          ActivityThread.main()
          Method.invokeNative()
          Method.invoke()
          ZygoteInit$MethodAndArgsCaller.run()
          ZygoteInit.main()
          NativeStart.main()
    ...
    */
    }
}

public class BaseClass1 : BaseClass0<string> {
    protected override void doSth(string v) {
        Log.i("","doSth in Base1: "+v);
        base.doSth(v);
    }
}

public class BaseClass0<T> {
    protected virtual void doSth(T v) {
        Log.i("","doSth in Base0: "+v);
    }
}

Yep. I’ve undone this change as it causes this new issue. I can only suggest creating a workaround for now until I find a proper fix for this.

bugs://73802 got reopened.

bugs://73802 got closed with status fixed.