genjavadoc icon indicating copy to clipboard operation
genjavadoc copied to clipboard

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

Open julianmendez opened this issue 5 years ago • 0 comments

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: https://github.com/lightbend/genjavadoc/issues/181 https://github.com/lightbend/genjavadoc/issues/154

julianmendez avatar Jan 21 '20 23:01 julianmendez