diff --git a/src/compiler/scala/tools/nsc/transform/patmat/MatchTreeMaking.scala b/src/compiler/scala/tools/nsc/transform/patmat/MatchTreeMaking.scala index 4a6731744dcd..15f3dba8247b 100644 --- a/src/compiler/scala/tools/nsc/transform/patmat/MatchTreeMaking.scala +++ b/src/compiler/scala/tools/nsc/transform/patmat/MatchTreeMaking.scala @@ -355,7 +355,7 @@ trait MatchTreeMaking extends MatchCodeGen with Debugging { // this also includes methods and (possibly nested) objects inside of methods. def definedInStaticLocation(tp: Type): Boolean = { def isStatic(tp: Type): Boolean = - if (tp == NoType || tp.typeSymbol.isPackageClass || tp == NoPrefix) true + if (tp == NoType || tp.typeSymbol.isPackageClass || tp == NoPrefix || nme.isReplWrapperName(tp.typeSymbol.name)) true else if (tp.typeSymbol.isModuleClass) isStatic(tp.prefix) else false tp.typeSymbol.owner == tp.prefix.typeSymbol && isStatic(tp.prefix) diff --git a/test/files/run/repl-class-based-outer-pointers.check b/test/files/run/repl-class-based-outer-pointers.check new file mode 100644 index 000000000000..0e2fec8062c1 --- /dev/null +++ b/test/files/run/repl-class-based-outer-pointers.check @@ -0,0 +1,14 @@ + +scala> sealed abstract class Value; object Value { + final case class Num(value: Double) extends Value + final case class Str(value: String) extends Value + final case class Bool(value: Boolean) extends Value +} +defined class Value +defined object Value + +scala> class C { final case class Num(value: Double) } // here it should still warn +warning: there was one unchecked warning; for details, enable `:setting -unchecked' or `:replay -unchecked' +defined class C + +scala> :quit diff --git a/test/files/run/repl-class-based-outer-pointers.scala b/test/files/run/repl-class-based-outer-pointers.scala new file mode 100644 index 000000000000..58cbed80b4a5 --- /dev/null +++ b/test/files/run/repl-class-based-outer-pointers.scala @@ -0,0 +1,35 @@ +import scala.tools.nsc.Settings +import scala.tools.partest.ReplTest + +object Test extends ReplTest { + override def transformSettings(s: Settings) = { + s.Yreplclassbased.value = true + s + } + + def code = """ + |sealed abstract class Value; object Value { + | final case class Num(value: Double) extends Value + | final case class Str(value: String) extends Value + | final case class Bool(value: Boolean) extends Value + |} + |class C { final case class Num(value: Double) } // here it should still warn + |""".stripMargin // scala/bug#11902 +} + +/* was: + +scala> sealed abstract class Value; object Value { + final case class Num(value: Double) extends Value + final case class Str(value: String) extends Value + final case class Bool(value: Boolean) extends Value +} +warning: there were three unchecked warnings; for details, enable `:setting -unchecked' or `:replay -unchecked' +defined class Value +defined object Value + +scala> class C { final case class Num(value: Double) } // here it should still warn +warning: there was one unchecked warning; for details, enable `:setting -unchecked' or `:replay -unchecked' +defined class C + + */