@@ -87,7 +87,7 @@ trait ClassLikeSupport:
87
87
def getSupertypesGraph (link : LinkToType , to : Seq [Tree ]): Seq [(LinkToType , LinkToType )] =
88
88
to.flatMap { case tree =>
89
89
val symbol = if tree.symbol.isClassConstructor then tree.symbol.owner else tree.symbol
90
- val signature = signatureWithName(tree.asSignature(classDef))
90
+ val signature = signatureWithName(tree.asSignature(classDef, classDef.symbol ))
91
91
val superLink = LinkToType (signature, symbol.dri, bareClasslikeKind(symbol))
92
92
val nextTo = unpackTreeToClassDef(tree).parents
93
93
if symbol.isHiddenByVisibility then getSupertypesGraph(link, nextTo)
@@ -98,16 +98,17 @@ trait ClassLikeSupport:
98
98
.filterNot((s, t) => s.isHiddenByVisibility)
99
99
.map {
100
100
case (symbol, tpe) =>
101
- val signature = signatureWithName(tpe.asSignature(classDef))
101
+ val signature = signatureWithName(tpe.asSignature(classDef, classDef.symbol ))
102
102
LinkToType (signature, symbol.dri, bareClasslikeKind(symbol))
103
103
}
104
104
val selfType = classDef.self.map { (valdef : ValDef ) =>
105
105
val symbol = valdef.symbol
106
106
val tpe = valdef.tpt.tpe
107
- val signature = signatureWithName(tpe.asSignature(classDef))
107
+ val owner = if symbol.exists then symbol.owner else Symbol .noSymbol
108
+ val signature = signatureWithName(tpe.asSignature(classDef, owner))
108
109
LinkToType (signature, symbol.dri, Kind .Type (false , false , Seq .empty))
109
110
}
110
- val selfSignature : DSignature = signatureWithName(typeForClass(classDef).asSignature(classDef))
111
+ val selfSignature : DSignature = signatureWithName(typeForClass(classDef).asSignature(classDef, classDef.symbol ))
111
112
112
113
val graph = HierarchyGraph .withEdges(
113
114
getSupertypesGraph(LinkToType (selfSignature, classDef.symbol.dri, bareClasslikeKind(classDef.symbol)), unpackTreeToClassDef(classDef).parents)
@@ -188,7 +189,7 @@ trait ClassLikeSupport:
188
189
extSym.symbol.normalizedName,
189
190
typeParams,
190
191
termParams,
191
- extSym.tpt.asSignature(c),
192
+ extSym.tpt.asSignature(c, extSym.symbol.owner ),
192
193
extSym.tpt.symbol.dri,
193
194
extSym.symbol.pos.get.start
194
195
)
@@ -296,7 +297,7 @@ trait ClassLikeSupport:
296
297
297
298
def getParentsAsLinkToTypes : List [LinkToType ] =
298
299
c.getParentsAsTreeSymbolTuples.map {
299
- (tree, symbol) => LinkToType (tree.asSignature(c), symbol.dri, bareClasslikeKind(symbol))
300
+ (tree, symbol) => LinkToType (tree.asSignature(c, c.symbol, skipThisTypePrefix = true ), symbol.dri, bareClasslikeKind(symbol))
300
301
}
301
302
302
303
def getParentsAsTreeSymbolTuples : List [(Tree , Symbol )] =
@@ -407,7 +408,7 @@ trait ClassLikeSupport:
407
408
))
408
409
case _ =>
409
410
Kind .Implicit (basicDefKind, None )
410
- else if methodSymbol.flags.is(Flags .Given ) then Kind .Given (basicDefKind, Some (method.returnTpt.tpe.asSignature(c)), extractImplicitConversion(method.returnTpt.tpe))
411
+ else if methodSymbol.flags.is(Flags .Given ) then Kind .Given (basicDefKind, Some (method.returnTpt.tpe.asSignature(c, methodSymbol.owner )), extractImplicitConversion(method.returnTpt.tpe))
411
412
else specificKind(basicDefKind)
412
413
413
414
val origin = if ! methodSymbol.isOverridden then Origin .RegularlyDefined else
@@ -423,7 +424,7 @@ trait ClassLikeSupport:
423
424
mkMember(
424
425
methodSymbol,
425
426
methodKind,
426
- method.returnTpt.tpe.asSignature(c),
427
+ method.returnTpt.tpe.asSignature(c, methodSymbol ),
427
428
)(
428
429
modifiers = modifiers,
429
430
origin = origin,
@@ -437,17 +438,17 @@ trait ClassLikeSupport:
437
438
prefix : Symbol => String = _ => " " ,
438
439
isExtendedSymbol : Boolean = false ,
439
440
isGrouped : Boolean = false ,
440
- memberInfo : Map [String , TypeRepr ] = Map .empty,
441
441
) =
442
- val inlinePrefix = if argument.symbol.flags.is(Flags .Inline ) then " inline " else " "
443
- val nameIfNotSynthetic = Option .when(! argument.symbol.flags.is(Flags .Synthetic ))(argument.symbol.normalizedName)
444
- val name = argument.symbol.normalizedName
442
+ val symbol = argument.symbol
443
+ val inlinePrefix = if symbol.flags.is(Flags .Inline ) then " inline " else " "
444
+ val name = symbol.normalizedName
445
+ val nameIfNotSynthetic = Option .when(! symbol.flags.is(Flags .Synthetic ))(name)
445
446
api.TermParameter (
446
- argument. symbol.getAnnotations(),
447
- inlinePrefix + prefix(argument. symbol),
447
+ symbol.getAnnotations(),
448
+ inlinePrefix + prefix(symbol),
448
449
nameIfNotSynthetic,
449
- argument. symbol.dri,
450
- memberInfo.get(name).fold( argument.tpt.asSignature(classDef))(_.asSignature(classDef) ),
450
+ symbol.dri,
451
+ argument.tpt.asSignature(classDef, symbol.owner ),
451
452
isExtendedSymbol,
452
453
isGrouped
453
454
)
@@ -457,30 +458,32 @@ trait ClassLikeSupport:
457
458
classDef : ClassDef ,
458
459
contextBounds : List [TypeRepr ] = Nil ,
459
460
): TypeParameter =
461
+ val symbol = argument.symbol
460
462
val variancePrefix : " +" | " -" | " " =
461
- if argument. symbol.flags.is(Flags .Covariant ) then " +"
462
- else if argument. symbol.flags.is(Flags .Contravariant ) then " -"
463
+ if symbol.flags.is(Flags .Covariant ) then " +"
464
+ else if symbol.flags.is(Flags .Contravariant ) then " -"
463
465
else " "
464
466
465
- val name = argument. symbol.normalizedName
467
+ val name = symbol.normalizedName
466
468
val normalizedName = if name.matches(" _\\ $\\ d*" ) then " _" else name
467
- val boundsSignature = argument.rhs.asSignature(classDef)
469
+ val boundsSignature = argument.rhs.asSignature(classDef, symbol.owner )
468
470
val signature = boundsSignature ++ contextBounds.flatMap(tr =>
469
471
val wrap = tr match
470
472
case _ : TypeLambda => true
471
473
case _ => false
472
- Plain (" : " ) +: inParens(tr.asSignature(classDef), wrap)
474
+ Plain (" : " ) +: inParens(tr.asSignature(classDef, symbol.owner ), wrap)
473
475
)
474
476
475
477
TypeParameter (
476
- argument. symbol.getAnnotations(),
478
+ symbol.getAnnotations(),
477
479
variancePrefix,
478
480
normalizedName,
479
- argument. symbol.dri,
481
+ symbol.dri,
480
482
signature
481
483
)
482
484
483
485
def parseTypeDef (typeDef : TypeDef , classDef : ClassDef ): Member =
486
+ val symbol = typeDef.symbol
484
487
def isTreeAbstract (typ : Tree ): Boolean = typ match {
485
488
case TypeBoundsTree (_, _) => true
486
489
case LambdaTypeTree (params, body) => isTreeAbstract(body)
@@ -490,43 +493,44 @@ trait ClassLikeSupport:
490
493
case LambdaTypeTree (params, body) => (params.map(mkTypeArgument(_, classDef)), body)
491
494
case tpe => (Nil , tpe)
492
495
493
- val defaultKind = Kind .Type (! isTreeAbstract(typeDef.rhs), typeDef. symbol.isOpaque, generics).asInstanceOf [Kind .Type ]
494
- val kind = if typeDef. symbol.flags.is(Flags .Enum ) then Kind .EnumCase (defaultKind)
496
+ val defaultKind = Kind .Type (! isTreeAbstract(typeDef.rhs), symbol.isOpaque, generics).asInstanceOf [Kind .Type ]
497
+ val kind = if symbol.flags.is(Flags .Enum ) then Kind .EnumCase (defaultKind)
495
498
else defaultKind
496
499
497
- if typeDef. symbol.flags.is(Flags .Exported )
500
+ if symbol.flags.is(Flags .Exported )
498
501
then {
499
502
val origin = Some (tpeTree).flatMap {
500
503
case TypeBoundsTree (l : TypeTree , h : TypeTree ) if l.tpe == h.tpe =>
501
504
Some (Link (l.tpe.typeSymbol.owner.name, l.tpe.typeSymbol.owner.dri))
502
505
case _ => None
503
506
}
504
- mkMember(typeDef. symbol, Kind .Exported (kind), tpeTree.asSignature(classDef))(
505
- deprecated = typeDef. symbol.isDeprecated(),
507
+ mkMember(symbol, Kind .Exported (kind), tpeTree.asSignature(classDef, symbol.owner ))(
508
+ deprecated = symbol.isDeprecated(),
506
509
origin = Origin .ExportedFrom (origin),
507
- experimental = typeDef. symbol.isExperimental()
510
+ experimental = symbol.isExperimental()
508
511
)
509
512
}
510
- else mkMember(typeDef. symbol, kind, tpeTree.asSignature(classDef))(deprecated = typeDef. symbol.isDeprecated())
513
+ else mkMember(symbol, kind, tpeTree.asSignature(classDef, symbol.owner ))(deprecated = symbol.isDeprecated())
511
514
512
515
def parseValDef (c : ClassDef , valDef : ValDef ): Member =
513
- def defaultKind = if valDef.symbol.flags.is(Flags .Mutable ) then Kind .Var else Kind .Val
514
- val sig = valDef.tpt.tpe.asSignature(c)
515
- val kind = if valDef.symbol.flags.is(Flags .Implicit ) then Kind .Implicit (Kind .Val , extractImplicitConversion(valDef.tpt.tpe))
516
- else if valDef.symbol.flags.is(Flags .Given ) then Kind .Given (Kind .Val , Some (sig), extractImplicitConversion(valDef.tpt.tpe))
517
- else if valDef.symbol.flags.is(Flags .Enum ) then Kind .EnumCase (Kind .Val )
516
+ val symbol = valDef.symbol
517
+ def defaultKind = if symbol.flags.is(Flags .Mutable ) then Kind .Var else Kind .Val
518
+ val sig = valDef.tpt.tpe.asSignature(c, symbol.owner)
519
+ val kind = if symbol.flags.is(Flags .Implicit ) then Kind .Implicit (Kind .Val , extractImplicitConversion(valDef.tpt.tpe))
520
+ else if symbol.flags.is(Flags .Given ) then Kind .Given (Kind .Val , Some (sig), extractImplicitConversion(valDef.tpt.tpe))
521
+ else if symbol.flags.is(Flags .Enum ) then Kind .EnumCase (Kind .Val )
518
522
else defaultKind
519
523
520
524
val modifiers = kind match
521
- case _ : Kind .Given => valDef. symbol
525
+ case _ : Kind .Given => symbol
522
526
.getExtraModifiers()
523
527
.filterNot(m => m == Modifier .Lazy || m == Modifier .Final )
524
- case _ => valDef. symbol.getExtraModifiers()
528
+ case _ => symbol.getExtraModifiers()
525
529
526
- mkMember(valDef. symbol, kind, sig)(
530
+ mkMember(symbol, kind, sig)(
527
531
modifiers = modifiers,
528
- deprecated = valDef. symbol.isDeprecated(),
529
- experimental = valDef. symbol.isExperimental()
532
+ deprecated = symbol.isDeprecated(),
533
+ experimental = symbol.isExperimental()
530
534
)
531
535
532
536
def mkMember (symbol : Symbol , kind : Kind , signature : DSignature )(
0 commit comments