Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.ClassFormatError: Duplicate method name&signature in class file EXAMPLE$ #4753

Closed
scabug opened this issue Jul 1, 2011 · 4 comments
Assignees
Milestone

Comments

@scabug
Copy link

scabug commented Jul 1, 2011

Mac OSX
Scala 2.9.0-1 REPL

scala> trait A { val typeName: String }
defined trait A

scala> trait B extends A { val actualType: Class[_]; final lazy val typeName = actualType.getName }
defined trait B

scala> trait C extends B { final val actualType = classOf[Boolean] }
defined trait C

scala> object EXAMPLE extends C
java.lang.ClassFormatError: Duplicate method name&signature in class file EXAMPLE$
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
at scala.tools.nsc.interpreter.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:52)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at scala.tools.nsc.interpreter.AbstractFileClassLoader.scala$tools$nsc$util$ScalaClassLoader$$super$loadClass(AbstractFileClassLoader.scala:17)
at scala.tools.nsc.util.ScalaClassLoader$class.loadClass(ScalaClassLoader.scala:50)
at scala.tools.nsc.interpreter.AbstractFileClassLoader.loadClass(AbstractFileClassLoader.scala:17)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.privateGetPublicMethods(Class.java:2547)
at java.lang.Class.getMethods(Class.java:1410)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.evalMethod(IMain.scala:628)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:592)
at scala.tools.nsc.interpreter.IMain$Request$$anonfun$10.apply(IMain.scala:828)
at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
at scala.tools.nsc.io.package$$anon$2.run(package.scala:31)
at java.lang.Thread.run(Thread.java:680)

@scabug
Copy link
Author

scabug commented Jul 1, 2011

Imported From: https://issues.scala-lang.org/browse/SI-4753?orig=1
Reporter: Glenn Osborne (glennosborne)
Affected Versions: 2.9.0

@scabug
Copy link
Author

scabug commented Jul 1, 2011

Commit Message Bot (anonymous) said:
(extempore in r25217) Fixed a bug involving classOf[Foo] having the wrong erasure.
Luckily I had only days ago deciphered the unique handling of
classOf, so I knew what was up. Closes #4753, review by odersky.

@scabug
Copy link
Author

scabug commented Jul 8, 2012

Ricardo L (rmleon) said:
This is not fixed yet in Scala 2.9.2. I just ran into a similar situation.
See the current results below:

rleon$ scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL
rleon$ scala
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_33).
Type in expressions to have them evaluated.
Type :help for more information.

scala> trait A { val typeName: String }; trait B extends A { val actualType: Class[_]; final lazy val typeName = actualType.getName }; trait C extends B { final val actualType = classOf[Boolean] };
defined trait A
defined trait B
defined trait C

scala> object EXAMPLE extends C
java.lang.ClassFormatError: Duplicate method name&signature in class file EXAMPLE$
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at scala.tools.nsc.interpreter.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:52)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at scala.tools.nsc.interpreter.AbstractFileClassLoader.scala$tools$nsc$util$ScalaClassLoader$$super$loadClass(AbstractFileClassLoader.scala:17)
at scala.tools.nsc.util.ScalaClassLoader$class.loadClass(ScalaClassLoader.scala:50)
at scala.tools.nsc.interpreter.AbstractFileClassLoader.loadClass(AbstractFileClassLoader.scala:17)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.privateGetPublicMethods(Class.java:2547)
at java.lang.Class.getMethods(Class.java:1410)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.evalMethod(IMain.scala:748)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
at java.lang.Thread.run(Thread.java:680)

If I remove the "final" keyword, it works.

@scabug
Copy link
Author

scabug commented Jul 8, 2012

@paulp said:
I don't know why the ticket says "fixed in 2.9.0", but the patch is only in 2.10.

@scabug scabug closed this as completed Feb 21, 2013
@scabug scabug added this to the 2.10.0 milestone Apr 7, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants