Skip to content

order of annotations in produced bytecode is not deterministic #14743

Closed
@raboof

Description

@raboof

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions