@@ -280,11 +280,18 @@ object Implicits:
280280 buf.toList
281281 }
282282
283+ @ threadUnsafe lazy val eligibleCache : List [Candidate ] = filterMatching(tp)
284+
285+ @ threadUnsafe lazy val eligibleCacheUnsafeNulls : List [Candidate ] =
286+ inContext(ctx.addMode(Mode .UnsafeNullConversion )) {
287+ filterMatching(tp)
288+ }
289+
283290 /** The candidates that are eligible for expected type `tp` */
284- @ threadUnsafe lazy val eligible : List [Candidate ] =
291+ def eligible ( enableUnsafeNulls : Boolean ) : List [Candidate ] =
285292 trace(i " eligible( $tp), companions = ${companionRefs.showAsList}%, % " , implicitsDetailed, show = true ) {
286293 if (refs.nonEmpty && monitored) record(s " check eligible refs in tpe " , refs.length)
287- filterMatching(tp)
294+ if enableUnsafeNulls then eligibleCacheUnsafeNulls else eligibleCache
288295 }
289296
290297 override def isAccessible (ref : TermRef )(using Context ): Boolean =
@@ -1287,7 +1294,7 @@ trait Implicits:
12871294 private def searchImplicit (contextual : Boolean ): SearchResult =
12881295 val eligible =
12891296 if contextual then ctx.implicits.eligible(wildProto, ctx.mode.is(Mode .UnsafeNullConversion ))
1290- else implicitScope(wildProto).eligible
1297+ else implicitScope(wildProto).eligible(ctx.mode.is( Mode . UnsafeNullConversion ))
12911298 searchImplicit(eligible, contextual) match
12921299 case result : SearchSuccess =>
12931300 result
@@ -1330,7 +1337,8 @@ trait Implicits:
13301337 def allImplicits : Set [TermRef ] = {
13311338 val contextuals = ctx.implicits.eligible(wildProto, ctx.mode.is(Mode .UnsafeNullConversion ))
13321339 .map(tryImplicit(_, contextual = true ))
1333- val inscope = implicitScope(wildProto).eligible.map(tryImplicit(_, contextual = false ))
1340+ val inscope = implicitScope(wildProto).eligible(ctx.mode.is(Mode .UnsafeNullConversion ))
1341+ .map(tryImplicit(_, contextual = false ))
13341342 (contextuals.toSet ++ inscope).collect {
13351343 case success : SearchSuccess => success.ref
13361344 }
0 commit comments