Skip to content

Commit 26bb979

Browse files
Use new syntax
1 parent 455c8f3 commit 26bb979

File tree

1 file changed

+30
-31
lines changed

1 file changed

+30
-31
lines changed

compiler/src/dotty/tools/dotc/transform/ElimRepeated.scala

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,91 +33,89 @@ class ElimRepeated extends MiniPhase with InfoTransformer { thisPhase =>
3333

3434
override def changesMembers: Boolean = true // the phase adds vararg bridges
3535

36-
def transformInfo(tp: Type, sym: Symbol)(implicit ctx: Context): Type =
36+
def transformInfo(tp: Type, sym: Symbol)(using Context): Type =
3737
elimRepeated(tp)
3838

39-
override def transform(ref: SingleDenotation)(implicit ctx: Context): SingleDenotation =
40-
super.transform(ref) match {
39+
override def transform(ref: SingleDenotation)(using Context): SingleDenotation =
40+
super.transform(ref) match
4141
case ref1: SymDenotation if (ref1 ne ref) && overridesJava(ref1.symbol) =>
4242
// This method won't override the corresponding Java method at the end of this phase,
4343
// only the bridge added by `addVarArgsBridge` will.
4444
ref1.copySymDenotation(initFlags = ref1.flags &~ Override)
4545
case ref1 =>
4646
ref1
47-
}
4847

49-
override def mayChange(sym: Symbol)(implicit ctx: Context): Boolean = sym.is(Method)
48+
override def mayChange(sym: Symbol)(using Context): Boolean = sym.is(Method)
5049

51-
private def overridesJava(sym: Symbol)(implicit ctx: Context) = sym.allOverriddenSymbols.exists(_.is(JavaDefined))
50+
private def overridesJava(sym: Symbol)(using Context) = sym.allOverriddenSymbols.exists(_.is(JavaDefined))
5251

5352
private def hasVargsAnnotation(sym: Symbol)(using ctx: Context) = sym.hasAnnotation(varargsAnnot())
5453

55-
private def elimRepeated(tp: Type)(implicit ctx: Context): Type = tp.stripTypeVar match {
54+
/** Eliminate repeated parameters from method types. */
55+
private def elimRepeated(tp: Type)(using Context): Type = tp.stripTypeVar match
5656
case tp @ MethodTpe(paramNames, paramTypes, resultType) =>
5757
val resultType1 = elimRepeated(resultType)
5858
val paramTypes1 =
59-
if (paramTypes.nonEmpty && paramTypes.last.isRepeatedParam) {
59+
if paramTypes.nonEmpty && paramTypes.last.isRepeatedParam then
6060
val last = paramTypes.last.translateFromRepeated(toArray = tp.isJavaMethod)
6161
paramTypes.init :+ last
62-
}
6362
else paramTypes
6463
tp.derivedLambdaType(paramNames, paramTypes1, resultType1)
6564
case tp: PolyType =>
6665
tp.derivedLambdaType(tp.paramNames, tp.paramInfos, elimRepeated(tp.resultType))
6766
case tp =>
6867
tp
69-
}
7068

71-
def transformTypeOfTree(tree: Tree)(implicit ctx: Context): Tree =
69+
def transformTypeOfTree(tree: Tree)(using Context): Tree =
7270
tree.withType(elimRepeated(tree.tpe))
7371

74-
override def transformIdent(tree: Ident)(implicit ctx: Context): Tree =
72+
override def transformIdent(tree: Ident)(using Context): Tree =
7573
transformTypeOfTree(tree)
7674

77-
override def transformSelect(tree: Select)(implicit ctx: Context): Tree =
75+
override def transformSelect(tree: Select)(using Context): Tree =
7876
transformTypeOfTree(tree)
7977

80-
override def transformApply(tree: Apply)(implicit ctx: Context): Tree = {
78+
override def transformApply(tree: Apply)(using Context): Tree =
8179
val args = tree.args.mapConserve {
8280
case arg: Typed if isWildcardStarArg(arg) =>
8381
val isJavaDefined = tree.fun.symbol.is(JavaDefined)
8482
val tpe = arg.expr.tpe
85-
if (isJavaDefined && tpe.derivesFrom(defn.SeqClass))
83+
if isJavaDefined && tpe.derivesFrom(defn.SeqClass) then
8684
seqToArray(arg.expr)
87-
else if (!isJavaDefined && tpe.derivesFrom(defn.ArrayClass))
85+
else if !isJavaDefined && tpe.derivesFrom(defn.ArrayClass)
8886
arrayToSeq(arg.expr)
8987
else
9088
arg.expr
9189
case arg => arg
9290
}
9391
transformTypeOfTree(cpy.Apply(tree)(tree.fun, args))
94-
}
9592

9693
/** Convert sequence argument to Java array */
97-
private def seqToArray(tree: Tree)(implicit ctx: Context): Tree = tree match {
94+
private def seqToArray(tree: Tree)(using Context): Tree = tree match
9895
case SeqLiteral(elems, elemtpt) =>
9996
JavaSeqLiteral(elems, elemtpt)
10097
case _ =>
10198
val elemType = tree.tpe.elemType
10299
var elemClass = erasure(elemType).classSymbol
103-
if (defn.NotRuntimeClasses.contains(elemClass)) elemClass = defn.ObjectClass
100+
if defn.NotRuntimeClasses.contains(elemClass) then
101+
elemClass = defn.ObjectClass
102+
end if
104103
ref(defn.DottyArraysModule)
105104
.select(nme.seqToArray)
106105
.appliedToType(elemType)
107106
.appliedTo(tree, clsOf(elemClass.typeRef))
108-
}
109107

110108
/** Convert Java array argument to Scala Seq */
111-
private def arrayToSeq(tree: Tree)(implicit ctx: Context): Tree =
109+
private def arrayToSeq(tree: Tree)(using Context): Tree =
112110
tpd.wrapArray(tree, tree.tpe.elemType)
113111

114-
override def transformTypeApply(tree: TypeApply)(implicit ctx: Context): Tree =
112+
override def transformTypeApply(tree: TypeApply)(using Context): Tree =
115113
transformTypeOfTree(tree)
116114

117115
/** If method overrides a Java varargs method or is annotated with @varargs, add a varargs bridge.
118116
* Also transform trees inside method annotation.
119117
*/
120-
override def transformDefDef(tree: DefDef)(implicit ctx: Context): Tree =
118+
override def transformDefDef(tree: DefDef)(using ctx: Context): Tree =
121119
ctx.atPhase(thisPhase) {
122120
val isOverride = overridesJava(tree.symbol)
123121
val hasAnnotation = hasVargsAnnotation(tree.symbol)
@@ -133,23 +131,25 @@ class ElimRepeated extends MiniPhase with InfoTransformer { thisPhase =>
133131
/** Add a Java varargs bridge
134132
* @param ddef the original method definition which is assumed to override
135133
* a Java varargs method JM up to this phase.
136-
* @param addFlag the flag to add to the method definition
134+
* @param addFlag the flag to add to the method symbol
137135
138136
* @return a thicket consisting of `ddef` and a varargs bridge method
139137
* which forwards java varargs to `ddef`. It retains all the
140138
* flags of `ddef` except `Private`.
141139
*
142-
* A bridge is necessary because the following hold
140+
* A bridge is necessary because the following hold:
143141
* - the varargs in `ddef` will change from `RepeatedParam[T]` to `Seq[T]` after this phase
144142
* - _but_ the callers of `ddef` expect its varargs to be changed to `Array[? <: T]`
145143
* The solution is to add a "bridge" method that converts its argument from `Array[? <: T]` to `Seq[T]` and
146144
* forwards it to `ddef`.
147145
*/
148-
private def addVarArgsBridge(ddef: DefDef, addFlag: Flag)(implicit ctx: Context): Tree = {
146+
private def addVarArgsBridge(ddef: DefDef, addFlag: Flag)(using Context): Tree =
149147
val original = ddef.symbol.asTerm
150148
val bridge = original.copy(
151-
flags = (ddef.symbol.flags | addFlag) &~ Private,
152-
info = toJavaVarArgs(ddef.symbol.info)).enteredAfter(thisPhase).asTerm
149+
flags = (ddef.symbol.flags | addFlag) &~ Private,
150+
info = toJavaVarArgs(ddef.symbol.info)
151+
).enteredAfter(thisPhase).asTerm
152+
153153
val bridgeDef = polyDefDef(bridge, trefs => vrefss => {
154154
val (vrefs :+ varArgRef) :: vrefss1 = vrefss
155155
// Can't call `.argTypes` here because the underlying array type is of the
@@ -162,15 +162,14 @@ class ElimRepeated extends MiniPhase with InfoTransformer { thisPhase =>
162162
})
163163

164164
Thicket(ddef, bridgeDef)
165-
}
166165

167166
/** Convert type from Scala to Java varargs method */
168-
private def toJavaVarArgs(tp: Type)(implicit ctx: Context): Type = tp match {
167+
private def toJavaVarArgs(tp: Type)(using Context): Type = tp match
169168
case tp: PolyType =>
170169
tp.derivedLambdaType(tp.paramNames, tp.paramInfos, toJavaVarArgs(tp.resultType))
171170
case tp: MethodType =>
172171
val inits :+ last = tp.paramInfos
173172
val last1 = last.translateFromRepeated(toArray = true)
174173
tp.derivedLambdaType(tp.paramNames, inits :+ last1, tp.resultType)
175-
}
174+
176175
}

0 commit comments

Comments
 (0)