Skip to content

Commit 943636f

Browse files
committed
Properly handle value classes appearing in Java code
Previously their signature was incorrectly computed (the value class was erased to its underlying type) which lead to valid Java overloads being seen as double definitions.
1 parent e4af70b commit 943636f

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed

compiler/src/dotty/tools/dotc/core/TypeErasure.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ object TypeErasure {
197197

198198
def sigName(tp: Type, sourceLanguage: SourceLanguage)(using Context): TypeName = {
199199
val normTp = tp.translateFromRepeated(toArray = sourceLanguage.isJava)
200-
val erase = erasureFn(sourceLanguage, semiEraseVCs = true, isConstructor = false, wildcardOK = true)
200+
val erase = erasureFn(sourceLanguage, semiEraseVCs = !sourceLanguage.isJava, isConstructor = false, wildcardOK = true)
201201
erase.sigName(normTp)(using preErasureCtx)
202202
}
203203

@@ -667,7 +667,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
667667
if (!info.exists) assert(false, i"undefined: $tp with symbol $sym")
668668
return sigName(info)
669669
}
670-
if (isDerivedValueClass(sym)) {
670+
if (semiEraseVCs && isDerivedValueClass(sym)) {
671671
val erasedVCRef = eraseDerivedValueClass(tp)
672672
if (erasedVCRef.exists) return sigName(erasedVCRef)
673673
}

tests/run/java-vc-overload/A_2.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class A_2 {
2+
public void foo(VC vc) {}
3+
public void foo(String string) {}
4+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
object Test {
2+
def main(args: Array[String]): Unit = {
3+
val a = new A_2
4+
a.foo("")
5+
a.foo(new VC(""))
6+
}
7+
}

tests/run/java-vc-overload/VC_1.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
class VC(val value: String) extends AnyVal

0 commit comments

Comments
 (0)