Closed
Description
This issue is not complete yet, but I wanted to get it out there before I lose track myself :)
Testing with Scala 3.1.1, it seems the same source code may lead to different orderings of annotations and imports in the resulting bytecode. For example for the following sources:
package akka.actor.typed.internal.jfr
import jdk.jfr.Category
import jdk.jfr.Enabled
import jdk.jfr.Event
import jdk.jfr.Label
import jdk.jfr.StackTrace
import akka.annotation.InternalApi
(... snip ...)
/** INTERNAL API */
@InternalApi
@Enabled(true)
@StackTrace(false)
@Category(Array("Akka", "Delivery", "ConsumerController")) @Label("Delivery ConsumerController producer changed")
final class DeliveryConsumerChangedProducer(val producerId: String) extends Event
we saw the following (decompiled-again with procyon -ec
) bytecode on one compilation:
package akka.actor.typed.internal.jfr
import akka.annotation.InternalApi
import jdk.jfr.Enabled
import jdk.jfr.Label
import jdk.jfr.StackTrace
import jdk.jfr.Category
import jdk.jfr.Event
@Category({ "Akka", "Delivery", "ConsumerController" })
@StackTrace(false)
@Label("Delivery ConsumerController producer changed")
@Enabled(true)
@InternalApi
public final class DeliveryConsumerChangedProducer extends Event
but on another machine:
package akka.actor.typed.internal.jfr
import akka.annotation.InternalApi
import jdk.jfr.StackTrace
import jdk.jfr.Enabled
import jdk.jfr.Category
import jdk.jfr.Label
import jdk.jfr.Event
@Label("Delivery ConsumerController producer changed")
@Category({ "Akka", "Delivery", "ConsumerController" })
@Enabled(true)
@StackTrace(false)
@InternalApi
public final class DeliveryConsumerChangedProducer extends Event
I seem to remember seeing a similar issue in Scala 2, but can't find a reference right now.
I'll try and dig up further details, and test with a more recent version of scala3, later.