@@ -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,
@@ -348,11 +352,12 @@ trait ClassLikeSupport:
348
352
Right (genericTypes.map(mkTypeArgument(_, memberInfo.genericTypes, memberInfo.contextBounds))) +:
349
353
paramLists.zipWithIndex.flatMap { (pList, index) =>
350
354
memberInfo.paramLists(index) match
351
- case EvidenceOnlyParameterList => None
352
- case info : RegularParameterList =>
355
+ case MemberInfo . EvidenceOnlyParameterList => None
356
+ case MemberInfo . RegularParameterList (info) =>
353
357
Some (Left (TermParameterList (pList.params.map(
354
358
mkParameter(_, paramPrefix, memberInfo = info)), paramListModifier(pList.params)
355
359
)))
360
+ case _ => assert(false , " memberInfo.termParamLists contains a type parameter list !" )
356
361
}
357
362
)
358
363
@@ -403,7 +408,7 @@ trait ClassLikeSupport:
403
408
val inlinePrefix = if argument.symbol.flags.is(Flags .Inline ) then " inline " else " "
404
409
val nameIfNotSynthetic = Option .when(! argument.symbol.flags.is(Flags .Synthetic ))(argument.symbol.normalizedName)
405
410
val name = argument.symbol.normalizedName
406
- TermParameter (
411
+ api. TermParameter (
407
412
argument.symbol.getAnnotations(),
408
413
inlinePrefix + prefix(argument.symbol),
409
414
nameIfNotSynthetic,
@@ -513,16 +518,26 @@ trait ClassLikeSupport:
513
518
experimental = experimental
514
519
)
515
520
516
- object EvidenceOnlyParameterList
517
- type RegularParameterList = Map [String , TypeRepr ]
518
- type ParameterList = RegularParameterList | EvidenceOnlyParameterList .type
519
521
520
522
case class MemberInfo (
521
- genericTypes : Map [String , TypeBounds ],
522
- paramLists : List [ParameterList ],
523
+ paramLists : List [MemberInfo .ParameterList ],
523
524
res : TypeRepr ,
524
525
contextBounds : Map [String , DSignature ] = Map .empty,
525
- )
526
+ ){
527
+ val genericTypes : Map [String , TypeBounds ] = paramLists.collect{ case MemberInfo .TypeParameterList (types) => types }.headOption.getOrElse(Map ())
528
+
529
+ val termParamLists : List [MemberInfo .ParameterList ] = paramLists.filter(_.isTerm)
530
+ }
531
+
532
+ object MemberInfo :
533
+ enum ParameterList (val isTerm : Boolean , val isUsing : Boolean ):
534
+ inline def isType = ! isTerm
535
+ case EvidenceOnlyParameterList extends ParameterList (isTerm = true , isUsing = false )
536
+ case RegularParameterList (m : Map [String , TypeRepr ])(isUsing : Boolean ) extends ParameterList (isTerm = true , isUsing)
537
+ case TypeParameterList (m : Map [String , TypeBounds ]) extends ParameterList (isTerm = false , isUsing = false )
538
+
539
+ export ParameterList .{RegularParameterList , EvidenceOnlyParameterList , TypeParameterList }
540
+
526
541
527
542
528
543
def unwrapMemberInfo (c : ClassDef , symbol : Symbol ): MemberInfo =
@@ -540,10 +555,12 @@ trait ClassLikeSupport:
540
555
symbol.paramSymss.flatten.find(_.name == name).exists(_.flags.is(Flags .Implicit ))
541
556
542
557
def handlePolyType (memberInfo : MemberInfo , polyType : PolyType ): MemberInfo =
543
- MemberInfo (polyType.paramNames.zip(polyType.paramBounds).toMap, memberInfo.paramLists, polyType.resType)
558
+ val typeParamList = MemberInfo .TypeParameterList (polyType.paramNames.zip(polyType.paramBounds).toMap)
559
+ MemberInfo (memberInfo.paramLists :+ typeParamList, polyType.resType)
544
560
545
561
def handleMethodType (memberInfo : MemberInfo , methodType : MethodType ): MemberInfo =
546
562
val rawParams = methodType.paramNames.zip(methodType.paramTypes).toMap
563
+ val isUsing = methodType.isImplicit
547
564
val (evidences, notEvidences) = rawParams.partition(e => isSyntheticEvidence(e._1))
548
565
549
566
def findParamRefs (t : TypeRepr ): Seq [ParamRef ] = t match
@@ -572,22 +589,23 @@ trait ClassLikeSupport:
572
589
573
590
val newParams = notEvidences ++ paramsThatLookLikeContextBounds
574
591
575
- val newLists : List [ParameterList ] = if newParams.isEmpty && contextBounds.nonEmpty
576
- then memberInfo.paramLists ++ Seq (EvidenceOnlyParameterList )
577
- else memberInfo.paramLists ++ Seq (newParams)
592
+ val termParamList = if newParams.isEmpty && contextBounds.nonEmpty
593
+ then MemberInfo .EvidenceOnlyParameterList
594
+ else MemberInfo .RegularParameterList (newParams)(isUsing)
595
+
578
596
579
- MemberInfo (memberInfo.genericTypes, newLists , methodType.resType, contextBounds.toMap)
597
+ MemberInfo (memberInfo.paramLists :+ termParamList , methodType.resType, contextBounds.toMap)
580
598
581
599
def handleByNameType (memberInfo : MemberInfo , byNameType : ByNameType ): MemberInfo =
582
- MemberInfo (memberInfo.genericTypes, memberInfo. paramLists, byNameType.underlying)
600
+ MemberInfo (memberInfo.paramLists, byNameType.underlying)
583
601
584
602
def recursivelyCalculateMemberInfo (memberInfo : MemberInfo ): MemberInfo = memberInfo.res match
585
603
case p : PolyType => recursivelyCalculateMemberInfo(handlePolyType(memberInfo, p))
586
604
case m : MethodType => recursivelyCalculateMemberInfo(handleMethodType(memberInfo, m))
587
605
case b : ByNameType => handleByNameType(memberInfo, b)
588
606
case _ => memberInfo
589
607
590
- recursivelyCalculateMemberInfo(MemberInfo (Map .empty, List .empty, baseTypeRepr))
608
+ recursivelyCalculateMemberInfo(MemberInfo (List .empty, baseTypeRepr))
591
609
592
610
private def paramListModifier (parameters : Seq [ValDef ]): String =
593
611
if parameters.size > 0 then
0 commit comments