@@ -375,17 +375,30 @@ class ImplicitSearchError(
375
375
* def foo(implicit foo: Foo): Any = ???
376
376
*/
377
377
private def userDefinedImplicitNotFoundTypeMessage : Option [String ] =
378
- pt.baseClasses.iterator
379
- // Don't inherit "No implicit view available..." message if subtypes of Function1 are not treated as implicit conversions anymore
380
- .filter(sym => Feature .migrateTo3 || sym != defn.Function1 )
381
- .map(userDefinedImplicitNotFoundTypeMessage(_))
382
- .find(_.isDefined).flatten
383
-
384
- private def userDefinedImplicitNotFoundTypeMessage (classSym : ClassSymbol ): Option [String ] =
385
- userDefinedMsg(classSym, defn.ImplicitNotFoundAnnot ).map { rawMsg =>
386
- val substituteType = (_ : Type ).asSeenFrom(pt, classSym)
387
- formatAnnotationMessage(rawMsg, classSym, substituteType)
388
- }
378
+ def recur (tp : Type ): Option [String ] = tp match
379
+ case tp : TypeRef =>
380
+ val sym = tp.symbol
381
+ userDefinedImplicitNotFoundTypeMessage(sym).orElse(recur(tp.info))
382
+ case tp : ClassInfo =>
383
+ tp.baseClasses.iterator
384
+ .map(userDefinedImplicitNotFoundTypeMessage)
385
+ .find(_.isDefined).flatten
386
+ case tp : TypeProxy =>
387
+ recur(tp.underlying)
388
+ case tp : AndType =>
389
+ recur(tp.tp1).orElse(recur(tp.tp2))
390
+ case _ =>
391
+ None
392
+ recur(pt)
393
+
394
+ private def userDefinedImplicitNotFoundTypeMessage (sym : Symbol ): Option [String ] =
395
+ for
396
+ rawMsg <- userDefinedMsg(sym, defn.ImplicitNotFoundAnnot )
397
+ if Feature .migrateTo3 || sym != defn.Function1
398
+ // Don't inherit "No implicit view available..." message if subtypes of Function1 are not treated as implicit conversions anymore
399
+ yield
400
+ val substituteType = (_ : Type ).asSeenFrom(pt, sym)
401
+ formatAnnotationMessage(rawMsg, sym, substituteType)
389
402
390
403
private def hiddenImplicitsAddendum : String =
391
404
def hiddenImplicitNote (s : SearchSuccess ) =
0 commit comments