@@ -3579,6 +3579,14 @@ object Types {
3579
3579
private var myDependencyStatus : DependencyStatus = Unknown
3580
3580
private var myParamDependencyStatus : DependencyStatus = Unknown
3581
3581
3582
+ private def refersToParam (tree : Tree )(using Context ): Boolean =
3583
+ tree.existsSubTree {
3584
+ case id : Ident => id.tpe match
3585
+ case TermParamRef (`thisLambdaType`, _) => true
3586
+ case _ => false
3587
+ case _ => false
3588
+ }
3589
+
3582
3590
private def depStatus (initial : DependencyStatus , tp : Type )(using Context ): DependencyStatus =
3583
3591
class DepAcc extends TypeAccumulator [DependencyStatus ]:
3584
3592
def apply (status : DependencyStatus , tp : Type ) = compute(status, tp, this )
@@ -3604,6 +3612,8 @@ object Types {
3604
3612
case tp : AppliedType => tp.fold(status, compute(_, _, theAcc))
3605
3613
case tp : TypeVar if ! tp.isInstantiated => combine(status, Provisional )
3606
3614
case tp : TermParamRef if tp.binder eq thisLambdaType => TrueDeps
3615
+ case AnnotatedType (parent, ConcreteAnnotation (ann)) =>
3616
+ if refersToParam(ann) then TrueDeps else compute(status, parent, theAcc)
3607
3617
case _ : ThisType | _ : BoundType | NoPrefix => status
3608
3618
case _ =>
3609
3619
(if theAcc != null then theAcc else DepAcc ()).foldOver(status, tp)
@@ -3656,8 +3666,10 @@ object Types {
3656
3666
if (isResultDependent) {
3657
3667
val dropDependencies = new ApproximatingTypeMap {
3658
3668
def apply (tp : Type ) = tp match {
3659
- case tp @ TermParamRef (thisLambdaType, _) =>
3669
+ case tp @ TermParamRef (` thisLambdaType` , _) =>
3660
3670
range(defn.NothingType , atVariance(1 )(apply(tp.underlying)))
3671
+ case AnnotatedType (parent, ConcreteAnnotation (ann)) if refersToParam(ann) =>
3672
+ mapOver(parent)
3661
3673
case _ => mapOver(tp)
3662
3674
}
3663
3675
}
0 commit comments