Java extension, method using instance

This is my simplified example extension code:

alongpath/org/haxe/extension/MyExt.java

//(...)
public class MyExt extends Extension {
    private int accumulator = 0;

    public int getAccumulator()
    {
        return accumulator;
    }

    public int addAccumulator(int value)
    {
        accumulator += value;

        return accumulator;
    }

    public int subtractAccumulator(int value)
    {
        accumulator -= value;

        return accumulator;
    }
}

org/haxe/extension/MyExt.hx

@:build(ShortCuts.mirrors())
class MyExt {
	#if android
	@JNI public static function getAccumulator(instance:Dynamic):Int;
	@JNI public static function addAccumulator(instance:Dynamic, value:Int):Int;
	@JNI public static function subtractAccumulator(instance:Dynamic, value:Int):Int;
	#end
}

Now, according to inthebox-macros repository in a PR by @player_03

Instance methods are more complicated. In Haxe, you would call instance.myInstanceMethod(), but to make a JNI instance method work, you have to call myInstanceMethod(instance):

What is the instance? I checked

var me = new MyExt();
me.getAccumulator(me);

This causes app crash.

I googled around, and for example in HyperTouch @shoebox uses private property to shuffle instance around.

What am I missing? Should I also create getJNIInstance method and get it from there?

It’s possible to get an instance of MyExt, but inthebox-macros won’t help you.

But first, have you considered making your functions static?

public class MyExt extends Extension {
    private static int accumulator = 0;
    
    public static int getAccumulator()
    {
        return accumulator;
    }
    
    public static int addAccumulator(int value)
    {
        accumulator += value;
        
        return accumulator;
    }
    
    public static int subtractAccumulator(int value)
    {
        accumulator -= value;
        
        return accumulator;
    }
}

Or if that doesn’t work, could you make a singleton?

public class MyExt extends Extension {
    private static MyExt instance;
    
    private int accumulator = 0;
    
    public MyExt()
    {
        super();
        instance = this;
    }
    
    public static int getAccumulator()
    {
        return instance.accumulator;
    }
    
    public static int addAccumulator(int value)
    {
        instance.accumulator += value;
        
        return instance.accumulator;
    }
    
    public static int subtractAccumulator(int value)
    {
        instance.accumulator -= value;
        
        return instance.accumulator;
    }
}