xpenatan / gdx-teavm

Run Libgdx in a webbrowser with teavm
Apache License 2.0
108 stars 16 forks source link

Unable to compile complex games anymore #60

Closed fgnm closed 1 year ago

fgnm commented 1 year ago

Hi, I tried many things with configurations but I wasn't able to identify the real cause of this issue.. In complex games which have many dependencies compilation doesn't work producing this strange $$__annotations__$$ error

#################################################################
|
| DEPENDENCY_ANALYSIS
|
#################################################################
|||||||||||||||||||||||||||||||||||||java.lang.IllegalArgumentException: Illegal type signature: Lcom/badlogic/gdx/graphics/VertexAttributes$ReadonlyIterable;$$__annotations__$$
    at org.teavm.model.ValueType.parse(ValueType.java:313)
    at org.teavm.dependency.DependencyAnalyzer.getSuperClassFilter(DependencyAnalyzer.java:854)
    at org.teavm.dependency.DependencyNode.getFilter(DependencyNode.java:249)
    at org.teavm.dependency.DependencyNode.filter(DependencyNode.java:235)
    at org.teavm.dependency.DependencyNode.propagate(DependencyNode.java:64)
    at org.teavm.classlib.java.lang.reflect.AnnotationDependencyListener.createAnnotationClass(AnnotationDependencyListener.java:193)
    at org.teavm.classlib.java.lang.reflect.AnnotationDependencyListener.lambda$reachGetAnnotations$0(AnnotationDependencyListener.java:164)
    at org.teavm.dependency.DependencyAnalyzer.schedulePropagation(DependencyAnalyzer.java:373)
    at org.teavm.dependency.DependencyNode.scheduleMultipleTypes(DependencyNode.java:215)
    at org.teavm.dependency.Transition.mergeDomains(Transition.java:69)
    at org.teavm.dependency.Transition.propagate(Transition.java:61)
    at org.teavm.dependency.Transition.consume(Transition.java:151)
    at org.teavm.dependency.DependencyAnalyzer.schedulePropagation(DependencyAnalyzer.java:347)
    at org.teavm.dependency.DependencyNode.scheduleMultipleTypes(DependencyNode.java:189)
    at org.teavm.dependency.Transition.mergeDomains(Transition.java:69)
    at org.teavm.dependency.Transition.propagate(Transition.java:61)
    at org.teavm.dependency.Transition.consume(Transition.java:151)
    at org.teavm.dependency.DependencyAnalyzer.schedulePropagation(DependencyAnalyzer.java:347)
    at org.teavm.dependency.DependencyNode.scheduleMultipleTypes(DependencyNode.java:189)
    at org.teavm.dependency.Transition.mergeDomains(Transition.java:69)
    at org.teavm.dependency.Transition.propagate(Transition.java:61)
    at org.teavm.dependency.Transition.consume(Transition.java:151)
    at org.teavm.dependency.DependencyAnalyzer.processNodeToNodeTransitionQueue(DependencyAnalyzer.java:676)
    at org.teavm.dependency.DependencyAnalyzer.processQueue(DependencyAnalyzer.java:641)
    at org.teavm.dependency.DependencyAnalyzer.processDependencies(DependencyAnalyzer.java:683)
    at org.teavm.vm.TeaVM.build(TeaVM.java:378)
    at org.teavm.tooling.TeaVMTool.generate(TeaVMTool.java:462)
    at com.github.xpenatan.gdx.backends.teavm.TeaBuilder.build(TeaBuilder.java:112)
    at games.rednblack.hyperrunner.teavm.Build.main(Build.java:31)

I'm really lost because I'm sure that the same project in the past was working and compiling with TeaVM.. Test repo can be found here to reproduce the issue: https://github.com/rednblackgames/tutorial-space-platform

Thanks

xpenatan commented 1 year ago

Yeah, very hard to know what makes annotations error. The only way to try to understand I think is to make a very simple test and reproduce it.

Maybe it's the Field generator annotation.

xpenatan commented 1 year ago

Hey @konsoletyper, can help with this error?

I managed to get a very simple test and for some reason when I add artemis World object the build fails with $$annotations$$ error. Every build show a different class with this annotation error.

image

Adding a breakpoint in AnnotationDependencyListener#createAnnotationClass, it also create a new classholder for Object class. image

to build you can use this gradle cmd: "./gradlew buildExampleCoreArtemisTest". It will try to build the ArtemisTest class.

Artemis is a popular entity component system used by many java games.

@fgnm You were using artemis when build was working?

fgnm commented 1 year ago

Yes, the code was exactly the same when I tried TeaVM for the first time. If you remember I also PR some emu classes to make Artemis working #43

xpenatan commented 1 year ago

Hey @fgnm , can you to build again with snapshots?

I think I found the issue.

fgnm commented 1 year ago

Fixed thanks a lot! ;)