diff options
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 7 | ||||
-rw-r--r-- | sources/scalac/typechecker/Infer.java | 3 | ||||
-rw-r--r-- | sources/scalac/typechecker/RefCheck.java | 3 |
3 files changed, 6 insertions, 7 deletions
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index 90adf230c5..883bdf515c 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -211,12 +211,9 @@ public abstract class Symbol implements Modifiers, Kinds { return isInitializedMethod(); } - /* - public final boolean caseClassOfFactory() { - if (isMethod() && !isConstructor() && (flags & CASE) != 0) - return owner.info().lookup(name.toTypeName()).constructor(); + public final boolean isCaseFactory() { + return isMethod() && !isConstructor() && (flags & CASE) != 0; } - */ public final boolean isAbstractClass() { return (flags & ABSTRACTCLASS) != 0 && diff --git a/sources/scalac/typechecker/Infer.java b/sources/scalac/typechecker/Infer.java index f413322284..d71677d58e 100644 --- a/sources/scalac/typechecker/Infer.java +++ b/sources/scalac/typechecker/Infer.java @@ -698,10 +698,13 @@ public class Infer implements Modifiers, Kinds { public Tree mkTypeApply(Tree tree, Symbol[] tparams, Type restype, Type[] targs) { Tree tree1 = tree; Symbol sym = tree.symbol(); + if (sym != null && sym.isCaseFactory()) + sym = sym.type().resultType().symbol().constructor(); int i = 0; while (i < tparams.length && tparams[i].owner() == sym) i++; if (i < tparams.length) { + //System.out.println("tpar " + tparams[i] + " of " + tparams[i].owner() + " <> " + sym);//DEBUG //new Printer().print(tree1);//DEBUG //System.out.println(ArrayApply.toString(targs) + "/" + i + "/" + ArrayApply.toString(tparams));//DEBUG Symbol[] tparams1 = new Symbol[tparams.length - i]; diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java index 5731454a8b..b47569282f 100644 --- a/sources/scalac/typechecker/RefCheck.java +++ b/sources/scalac/typechecker/RefCheck.java @@ -871,8 +871,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { if (fsym != null && fsym.isMethod() && !fsym.isConstructor() && (fsym.flags & CASE) != 0) { // convert case methods to new's - Symbol constr = fsym.owner().info() - .lookup(fsym.name.toTypeName()).constructor(); + Symbol constr = fsym.type().resultType().symbol().constructor(); tree = gen.New(toConstructor(tree, constr)); } return super.transform(tree); |