HaxeFoundation / HaxeFoundation/haxe

[jvm] cannot fulfill native interface requirements?

Open
#10,661 7 comments 0 reactions 1 assignee Claimed by @Simn View on GitHub
Dominant language
Haxe
Stars
6.9k
Forks
715
Avg merge
2d 2h
Merged PRs (30d)
11

Description

I am trying to implement a `java.util.List` with haxe code:

```haxe
class Main {
static function main() {
trace(new MyArray());
}
}

class MyArray implements java.util.List {
public function new() {}
overload public function add(o:E) {
return false;
}
overload public function add(index:Int, e:E) {

}
overload public function addAll(c:java.util.Collection) {
return false;
}
overload public function addAll(index:Int, c:java.util.Collection) {
return false;
}
public function clear() {
}
public function contains(o:Dynamic) {
return false;
}
public function containsAll(c:java.util.Collection) {
return false;
}
public function equals(o:Dynamic) {
return false;
}
public function get(index:Int):E {
return null;
}
public function hashCode() {
return 0;
}
public function indexOf(o:Dynamic) {
return 0;
}
public function isEmpty() {
return false;
}
public function iterator():java.util.Iterator {
return null;
}
overload public function lastIndexOf(o:Dynamic) {
return 0;
}
overload public function listIterator():java.util.ListIterator {
return null;
}
overload public function listIterator(index:Int):java.util.ListIterator {
return null;
}
overload public function remove(index:Int):E {
return null;
}
overload public function remove(o:Dynamic) {
return false;
}
overload public function removeAll(c:java.util.Collection) {
return false;
}
overload public function retainAll(c:java.util.Collection) {
return false;
}
overload public function set(index:Int, e:E):E {
return null;
}
public function size() {
return 0;
}
public function subList(fromIndex:Int, toIndex:Int):java.util.List {
return null;
}
overload public function toArray():java.NativeArray {
return null;
}
overload public function toArray(var1:java.NativeArray):java.NativeArray {
return null;
}
}
```

and got errors:

```
src/Main.hx:7: characters 7-14 : No suitable overload for toArray( param1 : java.NativeArray ), as needed by java.util.Collection was found
src/Main.hx:7: characters 7-14 : No suitable overload for toArray( param1 : java.NativeArray ), as needed by java.util.List was found

hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/lang/Iterable.class@spliterator:1: character 1 : Field spliterator has different type than in java.util.List
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/util/List.class@spliterator:1: character 1 : ... Interface field is defined here
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/lang/Iterable.class@spliterator:1: character 1 : ... error: java.lang.Iterable.T should be MyArray.E
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/lang/Iterable.class@spliterator:1: character 1 : ... have: (...) -> java.util.Spliterator
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/lang/Iterable.class@spliterator:1: character 1 : ... want: (...) -> java.util.Spliterator
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/lang/Iterable.class@spliterator:1: character 1 : Field spliterator has different type than in java.util.Collection
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/util/Collection.class@spliterator:1: character 1 : ... Interface field is defined here
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/lang/Iterable.class@spliterator:1: character 1 : ... error: java.lang.Iterable.T should be MyArray.E
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/lang/Iterable.class@spliterator:1: character 1 : ... have: (...) -> java.util.Spliterator
hxjava/4.2.0/haxelib/lib/hxjava-std.jar@java/lang/Iterable.class@spliterator:1: character 1 : ... want: (...) -> java.util.Spliterator
```

I tried to remove the `implement` clause and check the output bytecode and apparently it does match the required signatures, so I reckon this is an issue of the haxe compiler being unable to recognize them.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.