Scala Programming Language
  1. Scala Programming Language
  2. SI-6050

NoSuchMethodError when calling implementation trait method from Java

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Duplicate
    • Affects Version/s: Scala 2.9.2, Scala 2.10.0-M4
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None

      Description

      I ran into a NoSuchMethodError when trying to implement my own "implementation trait" code, patterned after TraversableLike.

      The following Java and Scala code compiles without errors:

      ScalaTest.scala:

      trait MyTrait[T, This <: MyTrait[T, This]] {
        def x: This
      
        def myVal(): This = x
      
        def hello() = {System.out.println("HELLO")}
      }
      
      class MyClass[T]() extends MyTrait[T, MyClass[T]] {
        def x : MyClass[T] = new MyClass
      }
      
      object ScalaTest {
          def main(args: Array[String]) {
             val x : MyClass[Int] = new MyClass[Int]
             x.hello()
             x.myVal()
          }
      }
      

      JavaTest.java:

      public class JavaTest {
          public static void main(String[] args) {
             MyClass<Integer> x = new MyClass<Integer>();
             x.hello();
             x.myVal();
          }
      }
      

      The ScalaTest program works correctly:

      $ scala ScalaTest
      HELLO
      

      The JavaTest program throws a NoSuchMethodError when run:

      $ scala JavaTest
      HELLO
      java.lang.NoSuchMethodError: MyClass.myVal()LMyClass;
      	at JavaTest.main(JavaTest.java:5)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:78)
      	at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
      	at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:88)
      	at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:78)
      	at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101)
      	at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:33)
      	at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:40)
      	at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:56)
      	at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80)
      	at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89)
      	at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
      
      1. JavaTest.java
        0.2 kB
        Josh Rosen
      2. ScalaTest.scala
        0.4 kB
        Josh Rosen

        Activity

        Hide
        Alex Cruise added a comment -

        Observed on 2.10.0-M4 too, downloading the nightly...

        Show
        Alex Cruise added a comment - Observed on 2.10.0-M4 too, downloading the nightly...
        Hide
        Alex Cruise added a comment -

        Observed on 2.10.0-20120708-165613-f82a1d122c

        Show
        Alex Cruise added a comment - Observed on 2.10.0-20120708-165613-f82a1d122c
        Hide
        Paul Phillips added a comment -

        This is SI-3452.

        Show
        Paul Phillips added a comment - This is SI-3452 .

          People

          • Assignee:
            Paul Phillips
            Reporter:
            Josh Rosen
          • Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development