summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala7
-rw-r--r--test/files/neg/package-ob-case.check5
-rw-r--r--test/files/neg/package-ob-case.flags1
-rw-r--r--test/files/neg/package-ob-case.scala5
4 files changed, 18 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index d7b665e214..7a42d6e519 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -453,6 +453,13 @@ trait Namers { self: Analyzer =>
val m = ensureCompanionObject(tree, companionModuleDef(tree))
classAndNamerOfModule(m) = (tree, null)
}
+ val owner = tree.symbol.owner
+ if (owner.isPackageObjectClass) {
+ context.unit.warning(tree.pos,
+ "it is not recommended to define classes/objects inside of package objects.\n" +
+ "If possible, define " + tree.symbol + " in " + owner.skipPackageObject + " instead."
+ )
+ }
case tree @ ModuleDef(mods, name, _) =>
tree.symbol = enterModuleSymbol(tree)
sym.moduleClass setInfo namerOf(sym).moduleClassTypeCompleter(tree)
diff --git a/test/files/neg/package-ob-case.check b/test/files/neg/package-ob-case.check
new file mode 100644
index 0000000000..e6b2f858ef
--- /dev/null
+++ b/test/files/neg/package-ob-case.check
@@ -0,0 +1,5 @@
+package-ob-case.scala:3: error: it is not recommended to define classes/objects inside of package objects.
+If possible, define class X in package foo instead.
+ case class X(z: Int) { }
+ ^
+one error found
diff --git a/test/files/neg/package-ob-case.flags b/test/files/neg/package-ob-case.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/package-ob-case.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/package-ob-case.scala b/test/files/neg/package-ob-case.scala
new file mode 100644
index 0000000000..91a1fb7e48
--- /dev/null
+++ b/test/files/neg/package-ob-case.scala
@@ -0,0 +1,5 @@
+package foo {
+ package object foo {
+ case class X(z: Int) { }
+ }
+}