Skip to content

Compiler exception with collection of classes that have an object field #7927

@scabug

Description

@scabug

Attempting to compile (note: if the seq is explicitly typed it compiles)

    trait Foo {
      val bar: Any
    }

    class Foo1 extends Foo {
      object bar
    }

    class Foo2 extends Foo {
      object bar
    }

    val foos/*: Seq[Foo]*/ = Seq(new Foo1, new Foo2)
    foos.map(_.bar)

causes error:

 MatchError: Object (of class scala.reflect.internal.Types$TypeRef$$anon$6)

Compiler exception:

[info] Compiling 8 Scala sources to /media/Data/src/projects/repro/scala/target/scala-2.10/test-classes...

     while compiling: /media/Data/src/projects/repro/scala/src/test/scala/CollectionOfClassesWithObjectField.scala
        during phase: cleanup
     library version: version 2.10.3
    compiler version: version 2.10.3
  reconstructed args: -classpath /media/Data/src/projects/repro/scala/target/scala-2.10/test-classes:/media/Data/src/projects/repro/scala/target/scala-2.10/classes:/home/richard/.ivy2/cache/com.chuusai/shapeless_2.10.2/bundles/shapeless_2.10.2-2.0.0-M1.jar:/home/richard/.sbt/boot/scala-2.10.3/lib/scala-compiler.jar:/home/richard/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.10.3.jar:/home/richard/.ivy2/cache/org.mockito/mockito-core/jars/mockito-core-1.9.0.jar:/home/richard/.ivy2/cache/org.hamcrest/hamcrest-core/jars/hamcrest-core-1.1.jar:/home/richard/.ivy2/cache/org.objenesis/objenesis/jars/objenesis-1.0.jar:/home/richard/.ivy2/cache/org.scalatest/scalatest_2.10/jars/scalatest_2.10-1.9.1.jar:/home/richard/.ivy2/cache/org.scala-lang/scala-actors/jars/scala-actors-2.10.0.jar:/home/richard/.ivy2/cache/com.novocode/junit-interface/jars/junit-interface-0.8.jar:/home/richard/.ivy2/cache/junit/junit/jars/junit-4.8.2.jar:/home/richard/.ivy2/cache/org.scala-tools.testing/test-interface/jars/test-interface-0.5.jar:/home/richard/.ivy2/cache/com.typesafe.akka/akka-actor/jars/akka-actor-2.0.5.jar:/home/richard/.ivy2/cache/com.typesafe/config/bundles/config-0.3.1.jar -bootclasspath /usr/lib/jvm/jdk1.7.0_21/jre/lib/resources.jar:/usr/lib/jvm/jdk1.7.0_21/jre/lib/rt.jar:/usr/lib/jvm/jdk1.7.0_21/jre/lib/sunrsasign.jar:/usr/lib/jvm/jdk1.7.0_21/jre/lib/jsse.jar:/usr/lib/jvm/jdk1.7.0_21/jre/lib/jce.jar:/usr/lib/jvm/jdk1.7.0_21/jre/lib/charsets.jar:/usr/lib/jvm/jdk1.7.0_21/jre/lib/jfr.jar:/usr/lib/jvm/jdk1.7.0_21/jre/classes:/home/richard/.sbt/boot/scala-2.10.3/lib/scala-library.jar -d /media/Data/src/projects/repro/scala/target/scala-2.10/test-classes

  last tree to typer: Assign
              symbol: null
   symbol definition: null
                 tpe: Unit
       symbol owners: 
      context owners: anonymous class anonfun$1 -> package <empty>

== Enclosing template or block ==

Template( // val <local $anonfun>: <notype>, tree.tpe=anonfun$1
  "scala.runtime.AbstractFunction1", "scala.Serializable" // parents
  ValDef(
    private <lifted>
    "_"
    <tpt>
    <empty>
  )
  // 3 statements
  DefDef( // final def apply(x$1: CollectionOfClassesWithObjectField$SO$Foo): Object
    <method> final <triedcooking>
    "apply"
    []
    // 1 parameter list
    ValDef( // x$1: CollectionOfClassesWithObjectField$SO$Foo
      <param> <synthetic> <triedcooking>
      "x$1"
      <tpt> // tree.tpe=CollectionOfClassesWithObjectField$SO$Foo
      <empty>
    )
    <tpt> // tree.tpe=Object
    ApplyDynamic( // val bar: Object, tree.tpe=AnyRef
      "x$1" // x$1: CollectionOfClassesWithObjectField$SO$Foo, tree.tpe=CollectionOfClassesWithObjectField$SO$Foo
      Nil
    )
  )
  DefDef( // final def apply(v1: Object): Object
    <method> final <bridge>
    "apply"
    []
    // 1 parameter list
    ValDef( // v1: Object
      <param> <triedcooking>
      "v1"
      <tpt> // tree.tpe=Object
      <empty>
    )
    <tpt> // tree.tpe=Object
    Apply( // final def apply(x$1: CollectionOfClassesWithObjectField$SO$Foo): Object, tree.tpe=Object
      CollectionOfClassesWithObjectField$SO$$anonfun$1.this."apply" // final def apply(x$1: CollectionOfClassesWithObjectField$SO$Foo): Object, tree.tpe=(x$1: CollectionOfClassesWithObjectField$SO$Foo)Object
      Apply( // final def $asInstanceOf[T0 >: ? <: ?](): T0 in class Object, tree.tpe=CollectionOfClassesWithObjectField$SO$Foo
        TypeApply( // final def $asInstanceOf[T0 >: ? <: ?](): T0 in class Object, tree.tpe=()CollectionOfClassesWithObjectField$SO$Foo
          "v1"."$asInstanceOf" // final def $asInstanceOf[T0 >: ? <: ?](): T0 in class Object, tree.tpe=[T0 >: ? <: ?]()T0
          <tpt> // tree.tpe=CollectionOfClassesWithObjectField$SO$Foo
        )
        Nil
      )
    )
  )
  DefDef( // def <init>(arg$outer: CollectionOfClassesWithObjectField$SO): anonfun$1
    <method> <triedcooking>
    "<init>"
    []
    // 1 parameter list
    ValDef( // $outer: CollectionOfClassesWithObjectField$SO
      <param>
      "$outer"
      <tpt> // tree.tpe=CollectionOfClassesWithObjectField$SO
      <empty>
    )
    <tpt> // tree.tpe=anonfun$1
    Block( // tree.tpe=Unit
      Apply( // def <init>(): scala.runtime.AbstractFunction1 in class AbstractFunction1, tree.tpe=scala.runtime.AbstractFunction1
        CollectionOfClassesWithObjectField$SO$$anonfun$1.super."<init>" // def <init>(): scala.runtime.AbstractFunction1 in class AbstractFunction1, tree.tpe=()scala.runtime.AbstractFunction1
        Nil
      )
      ()
    )
  )
)

== Expanded type of tree ==

TypeRef(TypeSymbol(final abstract class Unit extends ))

unhandled exception while transforming CollectionOfClassesWithObjectField.scala

{{block}}

Callstack:
{{block}}
uncaught exception during compilation: scala.MatchError
scala.MatchError: Object (of class scala.reflect.internal.Types$TypeRef$$anon$6)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transformApplyDynamic(CleanUp.scala:454)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:546)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:26)
	at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1235)
	at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1233)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1232)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:646)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:26)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:2900)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:2900)
	at scala.collection.immutable.List.loop$1(List.scala:170)
	at scala.collection.immutable.List.mapConserve(List.scala:186)
	at scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2900)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.scala$tools$nsc$transform$CleanUp$CleanUpTransformer$$transformTemplate(CleanUp.scala:51)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:559)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:26)
	at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2904)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1280)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1279)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1278)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:646)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:26)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2927)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2925)
	at scala.collection.immutable.List.loop$1(List.scala:170)
	at scala.collection.immutable.List.mapConserve(List.scala:186)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2925)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1298)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1298)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1297)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:646)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:26)
	at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:227)
	at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
	at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:464)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
	at scala.collection.Iterator$class.foreach(Iterator.scala:727)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:431)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1583)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1557)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1553)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1662)
	at xsbt.CachedCompiler0.run(CompilerInterface.scala:90)
	at xsbt.CachedCompiler0.run(CompilerInterface.scala:72)
	at xsbt.CompilerInterface.run(CompilerInterface.scala:26)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:73)
	at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:35)
	at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:29)
	at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:71)
	at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71)
	at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71)
	at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:101)
	at sbt.compiler.AggressiveCompile$$anonfun$4.compileScala$1(AggressiveCompile.scala:70)
	at sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:88)
	at sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:60)
	at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:24)
	at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:22)
	at sbt.inc.Incremental$.cycle(Incremental.scala:39)
	at sbt.inc.Incremental$.compile(Incremental.scala:26)
	at sbt.inc.IncrementalCompile$.apply(Compile.scala:20)
	at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:96)
	at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:44)
	at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:31)
	at sbt.Compiler$.apply(Compiler.scala:79)
	at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:571)
	at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:571)
	at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:578)
	at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:578)
	at scala.Function1$$anonfun$compose$1.apply(Function1.scala:49)
	at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311)
	at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311)
	at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
	at sbt.std.Transform$$anon$5.work(System.scala:71)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
	at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
	at sbt.Execute.work(Execute.scala:238)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
	at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
	at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:722)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions