Skip to content

Error compiling with JDK11 when a case class does not have its companion object #222

@julianmendez

Description

@julianmendez

problem

If a case class does not have a companion object, the following error message appears:

 error: illegal combination of modifiers: abstract and static
[ERROR]   static public abstract  R apply ()  ;
[ERROR]                             ^

In JDK 8 using abstract and static is considered a warning. In JDK 11 this is an error.

expectation

A case class can be used without needing a companion object.

reproduction

To reproduce this issue, it is enough to create a file containing:

case class MyCaseClass() {}

However, the following does not have any problems:

case class MyCaseClass() {}

object MyCaseClass {}

In the generated Java code, one can see the difference. In the first case we see:

public  class MyCaseClass implements scala.Product, java.io.Serializable {
  static public abstract  R apply ()  ;
  static public  java.lang.String toString ()  { throw new RuntimeException(); }
  public   MyCaseClass ()  { throw new RuntimeException(); }
}

In the second case we see:

public  class MyCaseClass implements scala.Product, java.io.Serializable {
  public   MyCaseClass ()  { throw new RuntimeException(); }
}

configuration

This was compiled with:

  • genjavadoc 0.15
  • org.scala-tools.maven-scala-plugin 2.15.2
  • net.alchim31.maven.scala-maven-plugin 4.3.0
  • org.apache.maven.plugins.maven-javadoc-plugin 3.1.1
  • org.apache.maven.plugins.maven-compiler-plugin 3.8.1
  • Apache Maven 3.6.0
  • Java 11.0.5
  • Scala 2.13.1

related issues

These issues could be related:
#181
#154

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions