Skip to content

ScalaTest check using <:< either throws an exception or deadlocks #8196

@scabug

Description

@scabug

When the following ScalaTest is executed from within Intellij then an exception is throws (stacktrace see below) or it deadlocks if executed from within sbt (jstack output is attached).

package eu.swdev.play.form

import org.scalatest.FunSuite

import scala.reflect.runtime.{ universe => ru }

/**
  */
class ReflectionTest extends FunSuite {

  trait FormTrait {
    val runtimeMirror = ru.runtimeMirror(this.getClass.getClassLoader)
    val instanceMirror = runtimeMirror.reflect(this)
    val members = instanceMirror.symbol.typeSignature.members
    def fields = members.filter(_.typeSignature <:< ru.typeOf[Int])
  }

  test("reflection test 2") {

    class Form1 extends FormTrait {
      val f1 = 5
    }
    val form1 = new Form1

    println(form1.fields)

    val form2 = new FormTrait {
      val g1 = new Form1
    }

    val x = form2.g1.f1 // comment this line in order to make the test pass
  }
}

The really strange thing is that the check passes if the last line, i.e. the val x = ... assignment is commented.
Stacktrace when executing test using Intellij:

scala.reflect.internal.FatalError: no-symbol does not have an owner
	at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:49)
	at scala.reflect.internal.Symbols$NoSymbol.owner(Symbols.scala:3248)
	at scala.reflect.internal.Symbols$Symbol.newSyntheticValueParam(Symbols.scala:346)
	at scala.reflect.internal.Symbols$Symbol$$anonfun$newSyntheticValueParams$1.apply(Symbols.scala:340)
	at scala.reflect.internal.Symbols$Symbol$$anonfun$newSyntheticValueParams$1.apply(Symbols.scala:340)
	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
	at scala.collection.immutable.List.foreach(List.scala:318)
	at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
	at scala.collection.AbstractTraversable.map(Traversable.scala:105)
	at scala.reflect.internal.Symbols$Symbol.newSyntheticValueParams(Symbols.scala:340)
	at scala.reflect.internal.Symbols$Symbol.newSyntheticValueParams(Symbols.scala:337)
	at scala.reflect.runtime.JavaMirrors$JavaMirror.setMethType(JavaMirrors.scala:1093)
	at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$jmethodAsScala1(JavaMirrors.scala:1112)
	at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$jmethodAsScala$1.apply(JavaMirrors.scala:1103)
	at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$jmethodAsScala$1.apply(JavaMirrors.scala:1103)
	at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$toScala$1.apply(JavaMirrors.scala:104)
	at scala.reflect.runtime.TwoWayCache.toScala(TwoWayCache.scala:38)
	at scala.reflect.runtime.JavaMirrors$JavaMirror.toScala(JavaMirrors.scala:102)
	at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$jmethodAsScala(JavaMirrors.scala:1103)
	at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$1$$anonfun$apply$mcV$sp$2.apply(JavaMirrors.scala:707)
	at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$1$$anonfun$apply$mcV$sp$2.apply(JavaMirrors.scala:706)
	at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
	at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
	at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$1.apply$mcV$sp(JavaMirrors.scala:706)
	at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter.completeRest(JavaMirrors.scala:720)
	at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter$LazyPolyType.complete(JavaMirrors.scala:727)
	at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1229)
	at scala.reflect.internal.Types$ClassTypeRef$class.baseType(Types.scala:2186)
	at scala.reflect.internal.Types$TypeRef$$anon$6.baseType(Types.scala:2544)
	at scala.reflect.internal.Types$class.firstTry$1(Types.scala:6058)
	at scala.reflect.internal.Types$class.isSubType2(Types.scala:6222)
	at scala.reflect.internal.Types$class.isSubType(Types.scala:5831)
	at scala.reflect.runtime.JavaUniverse.scala$reflect$runtime$SynchronizedTypes$$super$isSubType(JavaUniverse.scala:12)
	at scala.reflect.runtime.SynchronizedTypes$class.isSubType(SynchronizedTypes.scala:60)
	at scala.reflect.runtime.JavaUniverse.isSubType(JavaUniverse.scala:12)
	at scala.reflect.internal.Types$Type.$less$colon$less(Types.scala:872)
	at scala.reflect.internal.Types$Type.$less$colon$less(Types.scala:343)
	at eu.swdev.play.form.ReflectionTest$FormTrait$$anonfun$fields$1.apply(ReflectionTest.scala:15)
	at eu.swdev.play.form.ReflectionTest$FormTrait$$anonfun$fields$1.apply(ReflectionTest.scala:15)
	at scala.collection.TraversableLike$$anonfun$filter$1.apply(TraversableLike.scala:264)
	at scala.collection.immutable.List.foreach(List.scala:318)
	at scala.collection.TraversableLike$class.filter(TraversableLike.scala:263)
	at scala.collection.AbstractTraversable.filter(Traversable.scala:105)
	at scala.reflect.internal.Scopes$Scope.filter(Scopes.scala:318)
	at scala.reflect.internal.Scopes$Scope.filter(Scopes.scala:44)
	at eu.swdev.play.form.ReflectionTest$FormTrait$class.fields(ReflectionTest.scala:15)
	at eu.swdev.play.form.ReflectionTest$$anonfun$1$Form1$1.fields(ReflectionTest.scala:20)
	at eu.swdev.play.form.ReflectionTest$$anonfun$1.apply$mcV$sp(ReflectionTest.scala:25)
	at eu.swdev.play.form.ReflectionTest$$anonfun$1.apply(ReflectionTest.scala:18)
	at eu.swdev.play.form.ReflectionTest$$anonfun$1.apply(ReflectionTest.scala:18)
	at org.scalatest.Transformer$$anonfun$apply$1.apply(Transformer.scala:22)
	at org.scalatest.Transformer$$anonfun$apply$1.apply(Transformer.scala:22)
	at org.scalatest.OutcomeOf$class.outcomeOf(OutcomeOf.scala:85)
	at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
	at org.scalatest.Transformer.apply(Transformer.scala:22)
	at org.scalatest.Transformer.apply(Transformer.scala:20)
	at org.scalatest.FunSuiteLike$$anon$1.apply(FunSuiteLike.scala:139)
	at org.scalatest.Suite$class.withFixture(Suite.scala:1121)
	at org.scalatest.FunSuite.withFixture(FunSuite.scala:1371)
	at org.scalatest.FunSuiteLike$class.invokeWithFixture$1(FunSuiteLike.scala:136)
	at org.scalatest.FunSuiteLike$$anonfun$runTest$1.apply(FunSuiteLike.scala:148)
	at org.scalatest.FunSuiteLike$$anonfun$runTest$1.apply(FunSuiteLike.scala:148)
	at org.scalatest.SuperEngine.runTestImpl(Engine.scala:306)
	at org.scalatest.FunSuiteLike$class.runTest(FunSuiteLike.scala:148)
	at org.scalatest.FunSuite.runTest(FunSuite.scala:1371)
	at org.scalatest.FunSuiteLike$$anonfun$runTests$1.apply(FunSuiteLike.scala:180)
	at org.scalatest.FunSuiteLike$$anonfun$runTests$1.apply(FunSuiteLike.scala:180)
	at org.scalatest.SuperEngine$$anonfun$traverseSubNodes$1$1.apply(Engine.scala:413)
	at org.scalatest.SuperEngine$$anonfun$traverseSubNodes$1$1.apply(Engine.scala:401)
	at scala.collection.immutable.List.foreach(List.scala:318)
	at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
	at org.scalatest.SuperEngine.org$scalatest$SuperEngine$$runTestsInBranch(Engine.scala:396)
	at org.scalatest.SuperEngine.runTestsImpl(Engine.scala:483)
	at org.scalatest.FunSuiteLike$class.runTests(FunSuiteLike.scala:180)
	at org.scalatest.FunSuite.runTests(FunSuite.scala:1371)
	at org.scalatest.Suite$class.run(Suite.scala:1437)
	at org.scalatest.FunSuite.org$scalatest$FunSuiteLike$$super$run(FunSuite.scala:1371)
	at org.scalatest.FunSuiteLike$$anonfun$run$1.apply(FunSuiteLike.scala:184)
	at org.scalatest.FunSuiteLike$$anonfun$run$1.apply(FunSuiteLike.scala:184)
	at org.scalatest.SuperEngine.runImpl(Engine.scala:545)
	at org.scalatest.FunSuiteLike$class.run(FunSuiteLike.scala:184)
	at org.scalatest.FunSuite.run(FunSuite.scala:1371)
	at org.scalatest.tools.SuiteRunner.run(SuiteRunner.scala:55)
	at org.scalatest.tools.Runner$$anonfun$doRunRunRunDaDoRunRun$3.apply(Runner.scala:2518)
	at org.scalatest.tools.Runner$$anonfun$doRunRunRunDaDoRunRun$3.apply(Runner.scala:2512)
	at scala.collection.immutable.List.foreach(List.scala:318)
	at org.scalatest.tools.Runner$.doRunRunRunDaDoRunRun(Runner.scala:2512)
	at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1006)
	at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1005)
	at org.scalatest.tools.Runner$.withClassLoaderAndDispatchReporter(Runner.scala:2659)
	at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1005)
	at org.scalatest.tools.Runner$.run(Runner.scala:845)
	at org.scalatest.tools.Runner.run(Runner.scala)
	at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:144)
	at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:35)
	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:606)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions