HaxeFoundation / HaxeFoundation/haxe
[jvm] cannot fulfill native interface requirements?
- 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
Assessment
This issue has not been assessed yet.