diff options
author | Paul Phillips <paulp@improving.org> | 2011-08-04 02:14:27 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-08-04 02:14:27 +0000 |
commit | e02eecbbadff2d5feccdfc81f8013e7433f10f4c (patch) | |
tree | 043d922a26932d2a4f0618e2560907b769b70f61 | |
parent | 9a86215c18a4eacd2ee1218fa01f458e415a8e7f (diff) | |
download | scala-e02eecbbadff2d5feccdfc81f8013e7433f10f4c.tar.gz scala-e02eecbbadff2d5feccdfc81f8013e7433f10f4c.tar.bz2 scala-e02eecbbadff2d5feccdfc81f8013e7433f10f4c.zip |
Issue a warning about classes/objects inside pa...
Issue a warning about classes/objects inside package objects, no review.
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 7 | ||||
-rw-r--r-- | test/files/neg/package-ob-case.check | 5 | ||||
-rw-r--r-- | test/files/neg/package-ob-case.flags | 1 | ||||
-rw-r--r-- | test/files/neg/package-ob-case.scala | 5 |
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) { } + } +} |