@@ -169,9 +169,9 @@ object TypeErasure {
169169 }
170170 }
171171
172- private def erasureIdx (sourceLanguage : SourceLanguage , semiEraseVCs : Boolean , isConstructor : Boolean , isSymbol : Boolean , wildcardOK : Boolean ) =
172+ private def erasureIdx (sourceLanguage : SourceLanguage , semiEraseVCs : Boolean , isConstructor : Boolean , isSymbol : Boolean , inSigName : Boolean ) =
173173 extension (b : Boolean ) def toInt = if b then 1 else 0
174- wildcardOK .toInt
174+ inSigName .toInt
175175 + (isSymbol.toInt << 1 )
176176 + (isConstructor.toInt << 2 )
177177 + (semiEraseVCs.toInt << 3 )
@@ -184,16 +184,16 @@ object TypeErasure {
184184 semiEraseVCs <- List (false , true )
185185 isConstructor <- List (false , true )
186186 isSymbol <- List (false , true )
187- wildcardOK <- List (false , true )
187+ inSigName <- List (false , true )
188188 do
189- erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK )) =
190- new TypeErasure (sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK )
189+ erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName )) =
190+ new TypeErasure (sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName )
191191
192192 /** Produces an erasure function. See the documentation of the class [[TypeErasure ]]
193193 * for a description of each parameter.
194194 */
195- private def erasureFn (sourceLanguage : SourceLanguage , semiEraseVCs : Boolean , isConstructor : Boolean , isSymbol : Boolean , wildcardOK : Boolean ): TypeErasure =
196- erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK ))
195+ private def erasureFn (sourceLanguage : SourceLanguage , semiEraseVCs : Boolean , isConstructor : Boolean , isSymbol : Boolean , inSigName : Boolean ): TypeErasure =
196+ erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName ))
197197
198198 /** The current context with a phase no later than erasure */
199199 def preErasureCtx (using Context ) =
@@ -204,19 +204,19 @@ object TypeErasure {
204204 * @param tp The type to erase.
205205 */
206206 def erasure (tp : Type )(using Context ): Type =
207- erasureFn(sourceLanguage = SourceLanguage .Scala3 , semiEraseVCs = false , isConstructor = false , isSymbol = false , wildcardOK = false )(tp)(using preErasureCtx)
207+ erasureFn(sourceLanguage = SourceLanguage .Scala3 , semiEraseVCs = false , isConstructor = false , isSymbol = false , inSigName = false )(tp)(using preErasureCtx)
208208
209209 /** The value class erasure of a Scala type, where value classes are semi-erased to
210210 * ErasedValueType (they will be fully erased in [[ElimErasedValueType ]]).
211211 *
212212 * @param tp The type to erase.
213213 */
214214 def valueErasure (tp : Type )(using Context ): Type =
215- erasureFn(sourceLanguage = SourceLanguage .Scala3 , semiEraseVCs = true , isConstructor = false , isSymbol = false , wildcardOK = false )(tp)(using preErasureCtx)
215+ erasureFn(sourceLanguage = SourceLanguage .Scala3 , semiEraseVCs = true , isConstructor = false , isSymbol = false , inSigName = false )(tp)(using preErasureCtx)
216216
217217 /** The erasure that Scala 2 would use for this type. */
218218 def scala2Erasure (tp : Type )(using Context ): Type =
219- erasureFn(sourceLanguage = SourceLanguage .Scala2 , semiEraseVCs = true , isConstructor = false , isSymbol = false , wildcardOK = false )(tp)(using preErasureCtx)
219+ erasureFn(sourceLanguage = SourceLanguage .Scala2 , semiEraseVCs = true , isConstructor = false , isSymbol = false , inSigName = false )(tp)(using preErasureCtx)
220220
221221 /** Like value class erasure, but value classes erase to their underlying type erasure */
222222 def fullErasure (tp : Type )(using Context ): Type =
@@ -226,7 +226,7 @@ object TypeErasure {
226226
227227 def sigName (tp : Type , sourceLanguage : SourceLanguage )(using Context ): TypeName = {
228228 val normTp = tp.translateFromRepeated(toArray = sourceLanguage.isJava)
229- val erase = erasureFn(sourceLanguage, semiEraseVCs = ! sourceLanguage.isJava, isConstructor = false , isSymbol = false , wildcardOK = true )
229+ val erase = erasureFn(sourceLanguage, semiEraseVCs = ! sourceLanguage.isJava, isConstructor = false , isSymbol = false , inSigName = true )
230230 erase.sigName(normTp)(using preErasureCtx)
231231 }
232232
@@ -256,7 +256,7 @@ object TypeErasure {
256256 def transformInfo (sym : Symbol , tp : Type )(using Context ): Type = {
257257 val sourceLanguage = SourceLanguage (sym)
258258 val semiEraseVCs = ! sourceLanguage.isJava // Java sees our value classes as regular classes.
259- val erase = erasureFn(sourceLanguage, semiEraseVCs, sym.isConstructor, isSymbol = true , wildcardOK = false )
259+ val erase = erasureFn(sourceLanguage, semiEraseVCs, sym.isConstructor, isSymbol = true , inSigName = false )
260260
261261 def eraseParamBounds (tp : PolyType ): Type =
262262 tp.derivedLambdaType(
@@ -582,10 +582,10 @@ import TypeErasure._
582582 * If false, they are erased like normal classes.
583583 * @param isConstructor Argument forms part of the type of a constructor
584584 * @param isSymbol If true, the type being erased is the info of a symbol.
585- * @param wildcardOK Wildcards are acceptable (true when using the erasure
586- * for computing a signature name) .
585+ * @param inSigName This eraser is used for `TypeErasure.sigName`,
586+ * see `TypeErasure#apply` for more information .
587587 */
588- class TypeErasure (sourceLanguage : SourceLanguage , semiEraseVCs : Boolean , isConstructor : Boolean , isSymbol : Boolean , wildcardOK : Boolean ) {
588+ class TypeErasure (sourceLanguage : SourceLanguage , semiEraseVCs : Boolean , isConstructor : Boolean , isSymbol : Boolean , inSigName : Boolean ) {
589589
590590 /** The erasure |T| of a type T. This is:
591591 *
@@ -673,7 +673,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
673673 TypeComparer .orType(this (tp1), this (tp2), isErased = true )
674674 case tp : MethodType =>
675675 def paramErasure (tpToErase : Type ) =
676- erasureFn(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK )(tpToErase)
676+ erasureFn(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName )(tpToErase)
677677 val (names, formals0) = if tp.hasErasedParams then
678678 tp.paramNames
679679 .zip(tp.paramInfos)
@@ -725,7 +725,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
725725 }
726726 case _ : ErrorType | JavaArrayType (_) =>
727727 tp
728- case tp : WildcardType if wildcardOK =>
728+ case tp : WildcardType if inSigName =>
729729 tp
730730 case tp if (tp `eq` NoType ) || (tp `eq` NoPrefix ) =>
731731 tp
@@ -760,7 +760,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
760760 val defn .ArrayOf (elemtp) = tp : @ unchecked
761761 if (isGenericArrayElement(elemtp, isScala2 = sourceLanguage.isScala2)) defn.ObjectType
762762 else
763- try JavaArrayType (erasureFn(sourceLanguage, semiEraseVCs = false , isConstructor, isSymbol, wildcardOK )(elemtp))
763+ try JavaArrayType (erasureFn(sourceLanguage, semiEraseVCs = false , isConstructor, isSymbol, inSigName )(elemtp))
764764 catch case ex : Throwable =>
765765 handleRecursive(" erase array type" , tp.show, ex)
766766 }
@@ -804,7 +804,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
804804 val underlying = tp.select(unbox).widen.resultType
805805
806806 // The underlying part of an ErasedValueType cannot be an ErasedValueType itself
807- val erase = erasureFn(sourceLanguage, semiEraseVCs = false , isConstructor, isSymbol, wildcardOK )
807+ val erase = erasureFn(sourceLanguage, semiEraseVCs = false , isConstructor, isSymbol, inSigName )
808808 val erasedUnderlying = erase(underlying)
809809
810810 // Ideally, we would just use `erasedUnderlying` as the erasure of `tp`, but to
@@ -843,7 +843,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
843843 // correctly (see SIP-15 and [[Erasure.Boxing.adaptToType]]), so the result type of a
844844 // constructor method should not be semi-erased.
845845 if semiEraseVCs && isConstructor && ! tp.isInstanceOf [MethodOrPoly ] then
846- erasureFn(sourceLanguage, semiEraseVCs = false , isConstructor, isSymbol, wildcardOK ).eraseResult(tp)
846+ erasureFn(sourceLanguage, semiEraseVCs = false , isConstructor, isSymbol, inSigName ).eraseResult(tp)
847847 else tp match
848848 case tp : TypeRef =>
849849 val sym = tp.symbol
0 commit comments