From 4316f9440312947ffbc83a0c3c19053f4393bc1a Mon Sep 17 00:00:00 2001 From: Ondrej Lhotak Date: Mon, 2 Feb 2015 09:59:15 +0100 Subject: [PATCH] Java methods: JavaMethodType instead of MethodType, convert Object to Any Fixes two bugs needed for java-override test: Namer was creating a MethodType instead of a JavaMethodType even though the JavaDefined flag was set on the DefDef. Following Scalac, Namer needs to convert Java method parameters of type j.l.Object to s.Any. --- src/dotty/tools/dotc/typer/Namer.scala | 6 +++++- test/dotc/tests.scala | 1 + tests/{pending => }/pos/java-override/A.java | 0 tests/{pending => }/pos/java-override/B.scala | 0 4 files changed, 6 insertions(+), 1 deletion(-) rename tests/{pending => }/pos/java-override/A.java (100%) rename tests/{pending => }/pos/java-override/B.scala (100%) diff --git a/src/dotty/tools/dotc/typer/Namer.scala b/src/dotty/tools/dotc/typer/Namer.scala index 854af688a256..c522a5998e90 100644 --- a/src/dotty/tools/dotc/typer/Namer.scala +++ b/src/dotty/tools/dotc/typer/Namer.scala @@ -654,10 +654,14 @@ class Namer { typer: Typer => else restpe val monotpe = (paramSymss :\ restpe1) { (params, restpe) => + val isJava = ddef.mods is JavaDefined val make = if (params.nonEmpty && (params.head is Implicit)) ImplicitMethodType - else if (ddef.mods.is(JavaDefined)) JavaMethodType + else if(isJava) JavaMethodType else MethodType + if(isJava) params.foreach { symbol => + if(symbol.info.isDirectRef(defn.ObjectClass)) symbol.info = defn.AnyType + } make.fromSymbols(params, restpe) } if (typeParams.nonEmpty) PolyType.fromSymbols(typeParams, monotpe) diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala index 21fdd555bdd5..524f3ce12dc9 100644 --- a/test/dotc/tests.scala +++ b/test/dotc/tests.scala @@ -57,6 +57,7 @@ class tests extends CompilerTest { @Test def pos_packageobject() = compileFile(posDir, "packageobject") @Test def pos_overloaded() = compileFile(posDir, "overloaded") @Test def pos_overrides() = compileFile(posDir, "overrides") + @Test def pos_javaOverride() = compileDir(posDir + "java-override") @Test def pos_templateParents() = compileFile(posDir, "templateParents") @Test def pos_structural() = compileFile(posDir, "structural") @Test def pos_overloadedAccess = compileFile(posDir, "overloadedAccess") diff --git a/tests/pending/pos/java-override/A.java b/tests/pos/java-override/A.java similarity index 100% rename from tests/pending/pos/java-override/A.java rename to tests/pos/java-override/A.java diff --git a/tests/pending/pos/java-override/B.scala b/tests/pos/java-override/B.scala similarity index 100% rename from tests/pending/pos/java-override/B.scala rename to tests/pos/java-override/B.scala