summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-12-18 13:41:35 +0000
committerMartin Odersky <odersky@gmail.com>2007-12-18 13:41:35 +0000
commited8326a3981ea9a8206dd44a63e2160c234c098f (patch)
treef4a8ac43d1e839769e8c4fcadf701af0aaafd7e3
parent6459ab69230170dd3b2c9106d620ddfc8b8d331f (diff)
downloadscala-ed8326a3981ea9a8206dd44a63e2160c234c098f.tar.gz
scala-ed8326a3981ea9a8206dd44a63e2160c234c098f.tar.bz2
scala-ed8326a3981ea9a8206dd44a63e2160c234c098f.zip
made Typers more lenient wrt to redundant type ...
made Typers more lenient wrt to redundant type parameters
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 61f383c240..2e3290c8d1 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -66,6 +66,10 @@ trait Typers { self: Analyzer =>
sym
}
+ /** when in 1.4 mode the compiler accepts and ignores useless
+ * type parameters of Java generics
+ */
+ def onePointFourMode = true // todo changeto: settings.target.value == "jvm-1.4"
// Mode constants
@@ -2007,7 +2011,7 @@ trait Typers { self: Analyzer =>
}
}
}
- for (t <- tp) {
+ for (t <- tp) {
t match {
case ExistentialType(tparams, _) =>
boundSyms ++= tparams
@@ -2032,7 +2036,7 @@ trait Typers { self: Analyzer =>
}
object substLocals extends TypeMap {
- override val dropNonConstraintAnnotations = true
+ override val dropNonConstraintAnnotations = true
def apply(t: Type): Type = t match {
case TypeRef(_, sym, args) if (sym.isLocal && args.length > 0) =>
@@ -2844,7 +2848,8 @@ trait Typers { self: Analyzer =>
}}
TypeTree(owntype) setOriginal(tree) // setPos tree.pos
} else if (tparams.length == 0) {
- errorTree(tree, tpt1.tpe+" does not take type parameters")
+ if (onePointFourMode && (tpt1.symbol hasFlag JAVA)) tpt1
+ else errorTree(tree, tpt1.tpe+" does not take type parameters")
} else {
//Console.println("\{tpt1}:\{tpt1.symbol}:\{tpt1.symbol.info}")
if (settings.debug.value) Console.println(tpt1+":"+tpt1.symbol+":"+tpt1.symbol.info);//debug