summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-12-31 02:07:58 -0800
committerPaul Phillips <paulp@improving.org>2012-12-31 02:11:06 -0800
commita6ce037f9647615192e4dc1dd3162c0fe0a4d132 (patch)
treee4318b51064d060c00b1a567013da94b32e93f38
parentca98602e8243062c8e1e86afe954c48edc09cbad (diff)
downloadscala-a6ce037f9647615192e4dc1dd3162c0fe0a4d132.tar.gz
scala-a6ce037f9647615192e4dc1dd3162c0fe0a4d132.tar.bz2
scala-a6ce037f9647615192e4dc1dd3162c0fe0a4d132.zip
SI-6896, spurious warning with overloaded main.
Make sure there's no legit main signature before issuing any warnings about missing main methods.
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVMASM.scala24
-rw-r--r--test/files/pos/t6896.flags1
-rw-r--r--test/files/pos/t6896.scala7
3 files changed, 21 insertions, 11 deletions
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) = ???
+}