Skip to content

Commit cd8410d

Browse files
authored
Merge pull request scala#8787 from dwijnand/2.12/repl/class-based/outer-pointers
[2.12] Silence outer pointer warnings in class-based REPL
2 parents e1e2bfe + be3df17 commit cd8410d

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

src/compiler/scala/tools/nsc/transform/patmat/MatchTreeMaking.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ trait MatchTreeMaking extends MatchCodeGen with Debugging {
355355
// this also includes methods and (possibly nested) objects inside of methods.
356356
def definedInStaticLocation(tp: Type): Boolean = {
357357
def isStatic(tp: Type): Boolean =
358-
if (tp == NoType || tp.typeSymbol.isPackageClass || tp == NoPrefix) true
358+
if (tp == NoType || tp.typeSymbol.isPackageClass || tp == NoPrefix || nme.isReplWrapperName(tp.typeSymbol.name)) true
359359
else if (tp.typeSymbol.isModuleClass) isStatic(tp.prefix)
360360
else false
361361
tp.typeSymbol.owner == tp.prefix.typeSymbol && isStatic(tp.prefix)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
scala> sealed abstract class Value; object Value {
3+
final case class Num(value: Double) extends Value
4+
final case class Str(value: String) extends Value
5+
final case class Bool(value: Boolean) extends Value
6+
}
7+
defined class Value
8+
defined object Value
9+
10+
scala> class C { final case class Num(value: Double) } // here it should still warn
11+
warning: there was one unchecked warning; for details, enable `:setting -unchecked' or `:replay -unchecked'
12+
defined class C
13+
14+
scala> :quit
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import scala.tools.nsc.Settings
2+
import scala.tools.partest.ReplTest
3+
4+
object Test extends ReplTest {
5+
override def transformSettings(s: Settings) = {
6+
s.Yreplclassbased.value = true
7+
s
8+
}
9+
10+
def code = """
11+
|sealed abstract class Value; object Value {
12+
| final case class Num(value: Double) extends Value
13+
| final case class Str(value: String) extends Value
14+
| final case class Bool(value: Boolean) extends Value
15+
|}
16+
|class C { final case class Num(value: Double) } // here it should still warn
17+
|""".stripMargin // scala/bug#11902
18+
}
19+
20+
/* was:
21+
22+
scala> sealed abstract class Value; object Value {
23+
final case class Num(value: Double) extends Value
24+
final case class Str(value: String) extends Value
25+
final case class Bool(value: Boolean) extends Value
26+
}
27+
warning: there were three unchecked warnings; for details, enable `:setting -unchecked' or `:replay -unchecked'
28+
defined class Value
29+
defined object Value
30+
31+
scala> class C { final case class Num(value: Double) } // here it should still warn
32+
warning: there was one unchecked warning; for details, enable `:setting -unchecked' or `:replay -unchecked'
33+
defined class C
34+
35+
*/

0 commit comments

Comments
 (0)