@@ -327,7 +327,7 @@ object TypeErasure {
327
327
val sym = t.symbol
328
328
// Only a few classes have both primitives and references as subclasses.
329
329
if (sym eq defn.AnyClass ) || (sym eq defn.AnyValClass ) || (sym eq defn.MatchableClass ) || (sym eq defn.SingletonClass )
330
- || isScala2 && ! (t.derivesFrom(defn.ObjectClass ) || t.isNullType) then
330
+ || isScala2 && ! (t.derivesFrom(defn.ObjectClass ) || t.isNullType | t.isNothingType ) then
331
331
NoSymbol
332
332
// We only need to check for primitives because derived value classes in arrays are always boxed.
333
333
else if sym.isPrimitiveValueClass then
@@ -779,14 +779,14 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
779
779
780
780
private def eraseArray (tp : Type )(using Context ) = {
781
781
val defn .ArrayOf (elemtp) = tp : @ unchecked
782
- if ( isGenericArrayElement(elemtp, isScala2 = sourceLanguage.isScala2)) defn. ObjectType
783
- else
784
- try
785
- if sourceLanguage.isScala2 && (elemtp.isNullType || elemtp.isNothingType) then
786
- JavaArrayType (defn. ObjectType )
787
- else erasureFn(sourceLanguage, semiEraseVCs = false , isConstructor, isSymbol, inSigName)(elemtp) match
788
- case _ : WildcardType => WildcardType
789
- case elem => JavaArrayType (elem)
782
+ if isGenericArrayElement(elemtp, isScala2 = sourceLanguage.isScala2) then
783
+ defn. ObjectType
784
+ else if sourceLanguage.isScala2 && (elemtp.hiBound.isNullType || elemtp.hiBound.isNothingType) then
785
+ JavaArrayType (defn. ObjectType )
786
+ else
787
+ try erasureFn(sourceLanguage, semiEraseVCs = false , isConstructor, isSymbol, inSigName)(elemtp) match
788
+ case _ : WildcardType => WildcardType
789
+ case elem => JavaArrayType (elem)
790
790
catch case ex : Throwable =>
791
791
handleRecursive(" erase array type" , tp.show, ex)
792
792
}
0 commit comments