xpenatan/gdx-teavm

Need full support java 8 closure

nicolaichuk opened this issue · 1 comments

https://github.com/dragome/dragome-sdk

Java 8 ready. Build your pages using lambda expressions, default methods, streams

but
I have this synthetic code:

====================================================

Supplier.java

public interface Supplier<T> {
	public T get();
}

ObjectPool.java

public class ObjectPool<T> {
	private final Supplier<T> supplier;

	private ObjectPool(final Supplier<T> supplier) {
		this.supplier = supplier;
	}

	public T get() {
		return supplier.get();
	}

	public static <T> ObjectPool<T> create(final Supplier<T> supplier) {
		return new ObjectPool<>(supplier);
	}

}

NodeOverlapCallback.java

public abstract class NodeOverlapCallback {
	public abstract void processNode();
}

MyNodeOverlapCallback.java

public class MyNodeOverlapCallback extends NodeOverlapCallback {
    @Override
    public void processNode() {
       // DO SOMETHING
    }
}

====================================================

Now if i do like this:

final ObjectPool<MyNodeOverlapCallback> myNodeCallbacks = ObjectPool.create(
    new Supplier<MyNodeOverlapCallback>() {
        @Override
        public MyNodeOverlapCallback get() {
            return new MyNodeOverlapCallback();
        }
    });
    
final MyNodeOverlapCallback myNodeCallback = myNodeCallbacks.get();
myNodeCallback.processNode();

All work well after dragome js codegen

But if i do like this:

final ObjectPool<MyNodeOverlapCallback> myNodeCallbacks = ObjectPool.create( 
    () -> new MyNodeOverlapCallback()
);

final MyNodeOverlapCallback myNodeCallback = myNodeCallbacks.get();
myNodeCallback.processNode();

Browser write javascript error that myNodeCallback is null;

But both implimentation work correct as java code.

P.S.: also repost to dragome/dragome-sdk#147

I'll close this because its more dragome side.