summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/scala/tools/scalac/typechecker/Analyzer.scala11
-rw-r--r--sources/scalac/symtab/Symbol.java2
-rw-r--r--test/files/neg/Y.check2
3 files changed, 12 insertions, 3 deletions
diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala
index 9550011d61..2ddef1d71c 100644
--- a/sources/scala/tools/scalac/typechecker/Analyzer.scala
+++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala
@@ -2060,7 +2060,16 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
if ((mode & TYPEmode) != 0) {
val sym: Symbol = tree1.symbol();
- if ((mode & FUNmode) == 0 && sym != null && sym.typeParams().length != 0) {
+ def typeParamCount = sym.primaryConstructor().rawInfo() match {
+ case t: LazyTreeType =>
+ t.tree match {
+ case Tree$ClassDef(_, _, tparams, _, _, _) => tparams.length
+ case Tree$AliasTypeDef(_, _, tparams, _) => tparams.length
+ case _ => 0
+ }
+ case _ => sym.typeParams().length
+ }
+ if ((mode & FUNmode) == 0 && sym != null && typeParamCount != 0) {
error(tree.pos, "" + sym + " takes type parameters.");
return errorTree(tree);
}
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index f00f33184c..46c436a901 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -3,7 +3,7 @@
** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
** /_____/\____/\___/\____/____/ **
**
-** $Id$
+
\* */
//todo check significance of JAVA flag.
diff --git a/test/files/neg/Y.check b/test/files/neg/Y.check
index fca14d1c0b..c4c0c91e54 100644
--- a/test/files/neg/Y.check
+++ b/test/files/neg/Y.check
@@ -1,4 +1,4 @@
-/home/odersky/scala/test/files/neg/Y.scala:3: `match' needs to be applied fully
+Y.scala:3: `match' needs to be applied fully
def f(x: Object): java.lang.Object /* !!! Object */ = x.match;
^
one error found