From a6ce037f9647615192e4dc1dd3162c0fe0a4d132 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Mon, 31 Dec 2012 02:07:58 -0800 Subject: SI-6896, spurious warning with overloaded main. Make sure there's no legit main signature before issuing any warnings about missing main methods. --- .../scala/tools/nsc/backend/jvm/GenJVMASM.scala | 24 ++++++++++++---------- test/files/pos/t6896.flags | 1 + test/files/pos/t6896.scala | 7 +++++++ 3 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 test/files/pos/t6896.flags create mode 100644 test/files/pos/t6896.scala diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVMASM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVMASM.scala index 49c0fa2757..540935fd57 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVMASM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVMASM.scala @@ -78,17 +78,19 @@ trait GenJVMASM { failNoForwarder("companion is a trait") // Now either succeeed, or issue some additional warnings for things which look like // attempts to be java main methods. - else possibles exists { m => - m.info match { - case PolyType(_, _) => - fail("main methods cannot be generic.") - case MethodType(params, res) => - if (res.typeSymbol :: params exists (_.isAbstractType)) - fail("main methods cannot refer to type parameters or abstract types.", m.pos) - else - isJavaMainMethod(m) || fail("main method must have exact signature (Array[String])Unit", m.pos) - case tp => - fail("don't know what this is: " + tp, m.pos) + else (possibles exists isJavaMainMethod) || { + possibles exists { m => + m.info match { + case PolyType(_, _) => + fail("main methods cannot be generic.") + case MethodType(params, res) => + if (res.typeSymbol :: params exists (_.isAbstractType)) + fail("main methods cannot refer to type parameters or abstract types.", m.pos) + else + isJavaMainMethod(m) || fail("main method must have exact signature (Array[String])Unit", m.pos) + case tp => + fail("don't know what this is: " + tp, m.pos) + } } } } diff --git a/test/files/pos/t6896.flags b/test/files/pos/t6896.flags new file mode 100644 index 0000000000..85d8eb2ba2 --- /dev/null +++ b/test/files/pos/t6896.flags @@ -0,0 +1 @@ +-Xfatal-warnings diff --git a/test/files/pos/t6896.scala b/test/files/pos/t6896.scala new file mode 100644 index 0000000000..ab527a804a --- /dev/null +++ b/test/files/pos/t6896.scala @@ -0,0 +1,7 @@ +object TooManyMains { + def main(args: Array[String]): Unit = { + println("Hello, World!") + } + def main(a: Int, b: Int) = ??? + def main(s: String, n: String) = ??? +} -- cgit v1.2.3