Scaladoc error: Throwing java.lang.AbstractMethodError

Hi,

I am new to scala and this forum. I have a project which has scala and java modules. I am trying to generate scala documentation for the entire project using IntelliJ Idea Community Edition.

I have defined the following dependency in my maven file. Is it the version incompatibility?

<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-library</artifactId>
  <version>2.10.5</version>
  <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.scala-lang/scala-reflect -->
<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-reflect</artifactId>
  <version>2.11.1</version>
</dependency>

When I run scaladoc, it throws the following error. Can someone please help?

"C:\Program Files\Java\jdk1.8.0_45\bin\java" "-javaagent:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar=59038:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\bin" -classpath "C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\util.jar" -Dfile.encoding=UTF-8 com.intellij.rt.execution.CommandLineWrapper C:\Users\ritwik\AppData\Local\Temp\idea_classpath scala.tools.nsc.ScalaDoc @C:\Users\RITWIK~1\AppData\Local\Temp\scaladocfileargs613953797411499296.tmp
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:65)
Caused by: java.lang.AbstractMethodError: scala.reflect.internal.settings.MutableSettings.strictInference()Lscala/reflect/internal/settings/MutableSettings$SettingValue;
    at scala.reflect.internal.tpe.GlbLubs$class.$init$(GlbLubs.scala:17)
    at scala.reflect.internal.SymbolTable.<init>(SymbolTable.scala:16)
    at scala.tools.nsc.symtab.SymbolTable.<init>(SymbolTable.scala:9)
    at scala.tools.nsc.Global.<init>(Global.scala:36)
    at scala.tools.nsc.doc.DocFactory$compiler$.<init>(DocFactory.scala:36)
    at scala.tools.nsc.doc.DocFactory.compiler$lzycompute(DocFactory.scala:36)
    at scala.tools.nsc.doc.DocFactory.compiler(DocFactory.scala:36)
    at scala.tools.nsc.doc.DocFactory.makeUniverse(DocFactory.scala:57)
    at scala.tools.nsc.doc.DocFactory.generate$1(DocFactory.scala:125)
    at scala.tools.nsc.doc.DocFactory.document(DocFactory.scala:137)
    at scala.tools.nsc.ScalaDoc.process(ScalaDoc.scala:49)
    at scala.tools.nsc.ScalaDoc$.main(ScalaDoc.scala:75)
    at scala.tools.nsc.ScalaDoc.main(ScalaDoc.scala)
    ... 5 more

When I change scala-reflect to version 2.12.1, the error changes to the following:

"C:\Program Files\Java\jdk1.8.0_45\bin\java" "-javaagent:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar=61629:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\bin" -classpath "C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\util.jar" -Dfile.encoding=UTF-8 com.intellij.rt.execution.CommandLineWrapper C:\Users\ritwik\AppData\Local\Temp\idea_classpath scala.tools.nsc.ScalaDoc @C:\Users\RITWIK~1\AppData\Local\Temp\scaladocfileargs2851192433360025564.tmp
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:65)
Caused by: java.lang.NoSuchMethodError: scala.collection.GenTraversableOnce.$init$(Lscala/collection/GenTraversableOnce;)V
    at scala.reflect.io.AbstractFile.<init>(AbstractFile.scala:90)
    at scala.reflect.io.PlainFile.<init>(PlainFile.scala:21)
    at scala.reflect.io.AbstractFile$.getDirectory(AbstractFile.scala:45)
    at scala.reflect.io.AbstractFile$.getDirectory(AbstractFile.scala:37)
    at scala.tools.nsc.settings.MutableSettings$OutputDirs.setSingleOutput(MutableSettings.scala:269)
    at scala.tools.nsc.settings.MutableSettings$OutputSetting.value_$eq(MutableSettings.scala:515)
    at scala.tools.nsc.settings.MutableSettings$OutputSetting.<init>(MutableSettings.scala:512)
    at scala.tools.nsc.settings.MutableSettings.OutputSetting(MutableSettings.scala:221)
    at scala.tools.nsc.settings.ScalaSettings$class.$init$(ScalaSettings.scala:64)
    at scala.tools.nsc.settings.MutableSettings.<init>(MutableSettings.scala:19)
    at scala.tools.nsc.Settings.<init>(Settings.scala:12)
    at scala.tools.nsc.doc.Settings.<init>(Settings.scala:16)
    at scala.tools.nsc.ScalaDoc.process(ScalaDoc.scala:23)
    at scala.tools.nsc.ScalaDoc$.main(ScalaDoc.scala:75)
    at scala.tools.nsc.ScalaDoc.main(ScalaDoc.scala)
    ... 5 more

Regards,
Ritwik

Hello,

You can’t use 2.10 standard library together with 2.11 reflection
library. Use same version for both.

 Best, Oliver

Hello,

Also, I can’t think of a reason why you would use 2.11.1 when there is
2.11.11 (same for 2.10., though I haven’t checked what the latest 2.10.
version is).

Any particular reason why you don’t use 2.11.11 throughout?

 Best, Oliver

@curoli, the reason I have the scala-library as 2.10.5 is because it is an existing code in production that was written some time back. I am supposed to document/generate scaladocs on it. Hence, changing the version for the library might not be something I would be allowed till we know that is the only reason.
I did however, try to change all versions to 2.11.11 in my local environment, and got a different error:

“C:\Program Files\Java\jdk1.8.0_45\bin\java” “-javaagent:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar=55139:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\bin” -classpath “C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\util.jar” -Dfile.encoding=UTF-8 com.intellij.rt.execution.CommandLineWrapper C:\Users\ritwik\AppData\Local\Temp\idea_classpath scala.tools.nsc.ScalaDoc @C:\Users\RITWIK~1\AppData\Local\Temp\scaladocfileargs53980598388621493.tmp
Exception in thread “main” java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:65)
Caused by: java.lang.NoClassDefFoundError: scala/reflect/io/PlainFile$
at scala.tools.nsc.io.package$.(package.scala:24)
at scala.tools.nsc.io.package$.(package.scala)
at scala.tools.nsc.util.ClassPath$.join(ClassPath.scala:52)
at scala.tools.nsc.settings.MutableSettings$PathSetting.value(MutableSettings.scala:500)
at scala.tools.nsc.settings.MutableSettings$PathSetting.value(MutableSettings.scala:489)
at scala.tools.nsc.settings.AbsSettings$AbsSetting$class.hashCode(AbsSettings.scala:135)
at scala.tools.nsc.settings.MutableSettings$Setting.hashCode(MutableSettings.scala:347)
at scala.collection.mutable.FlatHashTable$class.addEntry(FlatHashTable.scala:151)
at scala.collection.mutable.HashSet.addEntry(HashSet.scala:40)
at scala.collection.mutable.FlatHashTable$class.addElem(FlatHashTable.scala:142)
at scala.collection.mutable.HashSet.addElem(HashSet.scala:40)
at scala.collection.mutable.HashSet.$plus$eq(HashSet.scala:59)
at scala.tools.nsc.settings.MutableSettings.add(MutableSettings.scala:212)
at scala.tools.nsc.settings.MutableSettings.PathSetting(MutableSettings.scala:228)
at scala.tools.nsc.settings.MutableSettings.PathSetting(MutableSettings.scala:19)
at scala.tools.nsc.settings.StandardScalaSettings$class.$init$(StandardScalaSettings.scala:21)
at scala.tools.nsc.settings.MutableSettings.(MutableSettings.scala:19)
at scala.tools.nsc.Settings.(Settings.scala:12)
at scala.tools.nsc.doc.Settings.(Settings.scala:16)
at scala.tools.nsc.ScalaDoc.process(ScalaDoc.scala:23)
at scala.tools.nsc.ScalaDoc$.main(ScalaDoc.scala:75)
at scala.tools.nsc.ScalaDoc.main(ScalaDoc.scala)
… 5 more
Caused by: java.lang.ClassNotFoundException: scala.reflect.io.PlainFile$
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 27 more

If you have to stay in 2.10.x why not set all versions to 2.10.6? Don’t mix 2.10 and 2.11.

@Jasper-M, I did try moving everything to 2.11.11 and ran into a different error. See my reply to @curoli above.

Safest is probably staying in 2.10 for now. But then you can’t depend on scala-reflect 2.11.

Hello,

It looks like your code is expecting a class scala.reflect.io.PlainFile
and it does not exist. Probably, it existed in 2.10 and was removed in
2.11. Try everything in 2.10 or rewrite your code.

 Best, Oliver
1 Like

@Jasper-M, @curoli - I do want to remain in 2.10.5. But when I run scaladoc on the code, it throws some error stating they require scala-reflect. My question, does scaladoc require scala-reflect.

Yes, Scaladoc generation is part of the compiler, and scala-compiler depends on scala-reflect.

I don’t know a lot about scaladoc generation but if you need scala-reflect there are 2.10.x versions of that.

This error is thrown when an application tries to call an abstract method without actual implementation. Abstract methods have no body and cannot be executed. This error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled. It usually happens after some library is upgraded while some is not. The dependencies are missing somehow. This means that you are using an old java version of an interface implementation which is missing a new interface method. For example java.sql.Connection interface got a new getSchema method in 1.7. If you have 1.6 JDBC driver and call Connection.getSchema you will get AbstractMethodError. So, make sure you have the latest jar file in your class path not a older copy.