Skip to content

IncompatibleClassChangeError when implementing Java annotation #14199

Closed
@cchantep

Description

@cchantep

See that the previous issue is back: scala/bug#8778

Compiler version

3.1.2-RC1-bin-20211222-c94b333-NIGHTLY

Minimized code

import javax.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface NamedDatabase {
    String value();
}
import java.io.Serializable

final class NamedDatabaseImpl(val value: String)
    extends NamedDatabase(value)
    with Serializable {

  assert(value != null)

  override def hashCode: Int = (127 * "value".hashCode()) ^ value.hashCode()

  override def equals(that: Any): Boolean = that match {
    case other: NamedDatabase =>
      other.value == this.value

    case _ =>
      false
  }

  override def toString: String =
    s"@${classOf[NamedDatabase].getName}(value=${value})"

  def annotationType = classOf[NamedDatabase]
}

Output

When try to use it with Guice, fails with a IncompatibleClassChangeError

[error]  java.lang.IncompatibleClassChangeError: play/modules/reactivemongo/NamedDatabaseImpl (ReactiveMongoModule.scala:48
[error] play.modules.reactivemongo.ReactiveMongoModule$.key(ReactiveMongoModule.scala:48)
[error] play.modules.reactivemongo.ReactiveMongoModule.apiBindings$$anonfun$1(ReactiveMongoModule.scala:36)
[error] play.modules.reactivemongo.ReactiveMongoModule$$Lambda$12039/1390106650.apply(Unknown Source)
[error] play.modules.reactivemongo.ReactiveMongoModule.apiBindings(ReactiveMongoModule.scala:41)
[error] play.modules.reactivemongo.ReactiveMongoModule.bindings(ReactiveMongoModule.scala:24)
[error] play.modules.reactivemongo.ReactiveMongoModule.bindings(ReactiveMongoModule.scala:17)
[error] play.api.inject.guice.GuiceableModuleConversions.guice(GuiceInjectorBuilder.scala:365)
[error] play.api.inject.guice.GuiceableModuleConversions.guice$(GuiceInjectorBuilder.scala:364)
[error] play.api.inject.guice.GuiceableModule$.guice(GuiceInjectorBuilder.scala:297)

Expectation

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions