Skip to content

Commit 9bffab2

Browse files
committed
desugar Java repeated parms into an Array instead of Seq
1 parent efe6861 commit 9bffab2

File tree

4 files changed

+13
-6
lines changed

4 files changed

+13
-6
lines changed

src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -767,11 +767,12 @@ object desugar {
767767
else // l.op(r), or val x = r; l.op(x), plus handle named args specially
768768
makeBinop(l, op, r)
769769
case PostfixOp(t, op) =>
770-
if ((ctx.mode is Mode.Type) && op == nme.raw.STAR)
770+
if ((ctx.mode is Mode.Type) && op == nme.raw.STAR) {
771+
val seqClass = if (ctx.compilationUnit.isJava) defn.ArrayClass else defn.SeqClass
771772
Annotated(
772773
New(ref(defn.RepeatedAnnot.typeRef), Nil :: Nil),
773-
AppliedTypeTree(ref(defn.SeqClass.typeRef), t))
774-
else {
774+
AppliedTypeTree(ref(seqClass.typeRef), t))
775+
} else {
775776
assert(ctx.mode.isExpr, ctx.mode)
776777
Select(t, op)
777778
}

src/dotty/tools/dotc/core/TypeApplications.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,10 @@ class TypeApplications(val self: Type) extends AnyVal {
288288
* or, if isJava is true, Array type, else the type itself.
289289
*/
290290
def underlyingIfRepeated(isJava: Boolean)(implicit ctx: Context): Type =
291-
if (self.isRepeatedParam) translateParameterized(defn.RepeatedParamClass, defn.SeqClass)
291+
if (self.isRepeatedParam) {
292+
val seqClass = if(isJava) defn.ArrayClass else defn.SeqClass
293+
translateParameterized(defn.RepeatedParamClass, seqClass)
294+
}
292295
else self
293296

294297
/** If this is an encoding of a (partially) applied type, return its arguments,

src/dotty/tools/dotc/core/Types.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1745,7 +1745,9 @@ object Types {
17451745
def fromSymbols(params: List[Symbol], resultType: Type)(implicit ctx: Context) = {
17461746
def paramInfo(param: Symbol): Type = param.info match {
17471747
case AnnotatedType(annot, tp) if annot matches defn.RepeatedAnnot =>
1748-
tp.translateParameterized(defn.SeqClass, defn.RepeatedParamClass)
1748+
val typeSym = param.info.typeSymbol.asClass
1749+
assert(typeSym == defn.SeqClass || typeSym == defn.ArrayClass)
1750+
tp.translateParameterized(typeSym, defn.RepeatedParamClass)
17491751
case tp =>
17501752
tp
17511753
}

src/dotty/tools/dotc/core/transform/Erasure.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ object Erasure {
4747
def erasure(tp: Type)(implicit ctx: Context): Type = scalaErasureFn(tp)
4848
def semiErasure(tp: Type)(implicit ctx: Context): Type = semiErasureFn(tp)
4949
def sigName(tp: Type, isJava: Boolean)(implicit ctx: Context): TypeName = {
50+
val seqClass = if(isJava) defn.ArrayClass else defn.SeqClass
5051
val normTp =
51-
if (tp.isRepeatedParam) tp.translateParameterized(defn.RepeatedParamClass, defn.SeqClass)
52+
if (tp.isRepeatedParam) tp.translateParameterized(defn.RepeatedParamClass, seqClass)
5253
else tp
5354
(if (isJava) javaSigFn else scalaSigFn).sigName(normTp)
5455
}

0 commit comments

Comments
 (0)