@@ -12,6 +12,9 @@ import NameNormalizer._
12
12
import SyntheticsSupport ._
13
13
import dotty .tools .dotc .core .NameKinds
14
14
15
+ // Please use this only for things defined in the api.scala file
16
+ import dotty .tools .{scaladoc => api }
17
+
15
18
trait ClassLikeSupport :
16
19
self : TastyParser =>
17
20
import qctx .reflect ._
@@ -45,7 +48,7 @@ trait ClassLikeSupport:
45
48
.filter(s => s.exists && ! s.isHiddenByVisibility)
46
49
.map( _.tree.asInstanceOf [DefDef ])
47
50
constr.fold(Nil )(
48
- _.termParamss.map(pList => TermParameterList (pList.params.map(p => mkParameter(p, parameterModifier)), paramListModifier(pList.params)))
51
+ _.termParamss.map(pList => api. TermParameterList (pList.params.map(p => mkParameter(p, parameterModifier)), paramListModifier(pList.params)))
49
52
)
50
53
51
54
if classDef.symbol.flags.is(Flags .Module ) then Kind .Object
@@ -142,11 +145,12 @@ trait ClassLikeSupport:
142
145
dd.symbol.extendedSymbol.map { extSym =>
143
146
val memberInfo = unwrapMemberInfo(c, dd.symbol)
144
147
val typeParams = dd.symbol.extendedTypeParams.map(mkTypeArgument(_, memberInfo.genericTypes))
145
- val termParams = dd.symbol.extendedTermParamLists.zipWithIndex.flatMap { case (paramList, index) =>
146
- memberInfo.paramLists(index) match
147
- case EvidenceOnlyParameterList => Nil
148
- case info : RegularParameterList =>
149
- Seq (TermParameterList (paramList.params.map(mkParameter(_, memberInfo = info)), paramListModifier(paramList.params)))
148
+ val termParams = dd.symbol.extendedTermParamLists.zipWithIndex.flatMap { case (termParamList, index) =>
149
+ memberInfo.termParamLists(index) match
150
+ case MemberInfo .EvidenceOnlyParameterList => None
151
+ case MemberInfo .RegularParameterList (info) =>
152
+ Some (api.TermParameterList (termParamList.params.map(mkParameter(_, memberInfo = info)), paramListModifier(termParamList.params)))
153
+ case _ => assert(false , " memberInfo.termParamLists contains a type parameter list !" )
150
154
}
151
155
val target = ExtensionTarget (
152
156
extSym.symbol.normalizedName,
@@ -349,11 +353,12 @@ trait ClassLikeSupport:
349
353
Right (genericTypes.map(mkTypeArgument(_, memberInfo.genericTypes, memberInfo.contextBounds))) +:
350
354
paramLists.zipWithIndex.flatMap { (pList, index) =>
351
355
memberInfo.paramLists(index) match
352
- case EvidenceOnlyParameterList => None
353
- case info : RegularParameterList =>
356
+ case MemberInfo . EvidenceOnlyParameterList => None
357
+ case MemberInfo . RegularParameterList (info) =>
354
358
Some (Left (TermParameterList (pList.params.map(
355
359
mkParameter(_, paramPrefix, memberInfo = info)), paramListModifier(pList.params)
356
360
)))
361
+ case _ => assert(false , " memberInfo.termParamLists contains a type parameter list !" )
357
362
}
358
363
)
359
364
@@ -404,7 +409,7 @@ trait ClassLikeSupport:
404
409
val inlinePrefix = if argument.symbol.flags.is(Flags .Inline ) then " inline " else " "
405
410
val nameIfNotSynthetic = Option .when(! argument.symbol.flags.is(Flags .Synthetic ))(argument.symbol.normalizedName)
406
411
val name = argument.symbol.normalizedName
407
- TermParameter (
412
+ api. TermParameter (
408
413
argument.symbol.getAnnotations(),
409
414
inlinePrefix + prefix(argument.symbol),
410
415
nameIfNotSynthetic,
@@ -514,16 +519,26 @@ trait ClassLikeSupport:
514
519
experimental = experimental
515
520
)
516
521
517
- object EvidenceOnlyParameterList
518
- type RegularParameterList = Map [String , TypeRepr ]
519
- type ParameterList = RegularParameterList | EvidenceOnlyParameterList .type
520
522
521
523
case class MemberInfo (
522
- genericTypes : Map [String , TypeBounds ],
523
- paramLists : List [ParameterList ],
524
+ paramLists : List [MemberInfo .ParameterList ],
524
525
res : TypeRepr ,
525
526
contextBounds : Map [String , DSignature ] = Map .empty,
526
- )
527
+ ){
528
+ val genericTypes : Map [String , TypeBounds ] = paramLists.collect{ case MemberInfo .TypeParameterList (types) => types }.headOption.getOrElse(Map ())
529
+
530
+ val termParamLists : List [MemberInfo .ParameterList ] = paramLists.filter(_.isTerm)
531
+ }
532
+
533
+ object MemberInfo :
534
+ enum ParameterList (val isTerm : Boolean , val isUsing : Boolean ):
535
+ inline def isType = ! isTerm
536
+ case EvidenceOnlyParameterList extends ParameterList (isTerm = true , isUsing = false )
537
+ case RegularParameterList (m : Map [String , TypeRepr ])(isUsing : Boolean ) extends ParameterList (isTerm = true , isUsing)
538
+ case TypeParameterList (m : Map [String , TypeBounds ]) extends ParameterList (isTerm = false , isUsing = false )
539
+
540
+ export ParameterList .{RegularParameterList , EvidenceOnlyParameterList , TypeParameterList }
541
+
527
542
528
543
529
544
def unwrapMemberInfo (c : ClassDef , symbol : Symbol ): MemberInfo =
@@ -541,10 +556,12 @@ trait ClassLikeSupport:
541
556
symbol.paramSymss.flatten.find(_.name == name).exists(_.flags.is(Flags .Implicit ))
542
557
543
558
def handlePolyType (memberInfo : MemberInfo , polyType : PolyType ): MemberInfo =
544
- MemberInfo (polyType.paramNames.zip(polyType.paramBounds).toMap, memberInfo.paramLists, polyType.resType)
559
+ val typeParamList = MemberInfo .TypeParameterList (polyType.paramNames.zip(polyType.paramBounds).toMap)
560
+ MemberInfo (memberInfo.paramLists :+ typeParamList, polyType.resType)
545
561
546
562
def handleMethodType (memberInfo : MemberInfo , methodType : MethodType ): MemberInfo =
547
563
val rawParams = methodType.paramNames.zip(methodType.paramTypes).toMap
564
+ val isUsing = methodType.isImplicit
548
565
val (evidences, notEvidences) = rawParams.partition(e => isSyntheticEvidence(e._1))
549
566
550
567
def findParamRefs (t : TypeRepr ): Seq [ParamRef ] = t match
@@ -573,22 +590,23 @@ trait ClassLikeSupport:
573
590
574
591
val newParams = notEvidences ++ paramsThatLookLikeContextBounds
575
592
576
- val newLists : List [ParameterList ] = if newParams.isEmpty && contextBounds.nonEmpty
577
- then memberInfo.paramLists ++ Seq (EvidenceOnlyParameterList )
578
- else memberInfo.paramLists ++ Seq (newParams)
593
+ val termParamList = if newParams.isEmpty && contextBounds.nonEmpty
594
+ then MemberInfo .EvidenceOnlyParameterList
595
+ else MemberInfo .RegularParameterList (newParams)(isUsing)
596
+
579
597
580
- MemberInfo (memberInfo.genericTypes, newLists , methodType.resType, contextBounds.toMap)
598
+ MemberInfo (memberInfo.paramLists :+ termParamList , methodType.resType, contextBounds.toMap)
581
599
582
600
def handleByNameType (memberInfo : MemberInfo , byNameType : ByNameType ): MemberInfo =
583
- MemberInfo (memberInfo.genericTypes, memberInfo. paramLists, byNameType.underlying)
601
+ MemberInfo (memberInfo.paramLists, byNameType.underlying)
584
602
585
603
def recursivelyCalculateMemberInfo (memberInfo : MemberInfo ): MemberInfo = memberInfo.res match
586
604
case p : PolyType => recursivelyCalculateMemberInfo(handlePolyType(memberInfo, p))
587
605
case m : MethodType => recursivelyCalculateMemberInfo(handleMethodType(memberInfo, m))
588
606
case b : ByNameType => handleByNameType(memberInfo, b)
589
607
case _ => memberInfo
590
608
591
- recursivelyCalculateMemberInfo(MemberInfo (Map .empty, List .empty, baseTypeRepr))
609
+ recursivelyCalculateMemberInfo(MemberInfo (List .empty, baseTypeRepr))
592
610
593
611
private def paramListModifier (parameters : Seq [ValDef ]): String =
594
612
if parameters.size > 0 then
0 commit comments