From 408be44f826417cdd95f5b2239feea520a32e972 Mon Sep 17 00:00:00 2001 From: Dmitry Petrashko Date: Wed, 17 May 2017 15:24:42 +0200 Subject: [PATCH] Fix #2396: don't create refernces to packages in ElimStaticThis. --- .../tools/dotc/transform/ElimStaticThis.scala | 4 ++-- tests/run/i2396.scala | 15 +++++++++++++++ tests/run/i2396c.scala | 15 +++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 tests/run/i2396.scala create mode 100644 tests/run/i2396c.scala diff --git a/compiler/src/dotty/tools/dotc/transform/ElimStaticThis.scala b/compiler/src/dotty/tools/dotc/transform/ElimStaticThis.scala index 0601e0122857..49a1df32a9e8 100644 --- a/compiler/src/dotty/tools/dotc/transform/ElimStaticThis.scala +++ b/compiler/src/dotty/tools/dotc/transform/ElimStaticThis.scala @@ -27,10 +27,10 @@ class ElimStaticThis extends MiniPhaseTransform { override def transformIdent(tree: tpd.Ident)(implicit ctx: Context, info: TransformerInfo): tpd.Tree = { if (ctx.owner.enclosingMethod.is(JavaStatic)) { tree.tpe match { - case TermRef(thiz: ThisType, _) if thiz.cls.is(ModuleClass) => + case TermRef(thiz: ThisType, _) if thiz.cls.is(ModuleClass, JavaDefined) => ref(thiz.cls.sourceModule).select(tree.symbol) case TermRef(thiz: ThisType, _) => - assert(tree.symbol.is(Flags.JavaStatic)) + assert(tree.symbol.is(Flags.JavaStatic) || thiz.cls.is(JavaDefined)) tree case _ => tree } diff --git a/tests/run/i2396.scala b/tests/run/i2396.scala new file mode 100644 index 000000000000..0ccc386995c3 --- /dev/null +++ b/tests/run/i2396.scala @@ -0,0 +1,15 @@ +class B { + val buzz = Some(Bees.Bee("buzz")).collect { + case Bees.Bee(value) => value + } +} + +object Test { + def main(args: Array[String]): Unit = { + new B + } +} + +object Bees { + case class Bee(value: String) +} diff --git a/tests/run/i2396c.scala b/tests/run/i2396c.scala new file mode 100644 index 000000000000..65cd6e71d211 --- /dev/null +++ b/tests/run/i2396c.scala @@ -0,0 +1,15 @@ +class Bees { + import Test._ + + def f: PartialFunction[Bee, Unit] = { + case Test.Bee(_) => "" + // case Bee(_) => "" // This one works + } + + f(new Bee("buzz")) +} + +object Test { + case class Bee(value: String) + def main(args: Array[String]): Unit = new Bees +}