@@ -149,21 +149,23 @@ trait ClassLikeSupport:
149
149
}
150
150
151
151
case dd : DefDef if ! dd.symbol.isHiddenByVisibility && dd.symbol.isExported && ! dd.symbol.isArtifact =>
152
- val exportedTarget = dd.rhs.collect {
153
- case a : Apply => a.fun.asInstanceOf [Select ]
154
- case s : Select => s
152
+ dd.rhs.map {
153
+ case TypeApply (rhs, _) => rhs
154
+ case Apply (TypeApply (rhs, _), _) => rhs
155
+ case rhs => rhs
156
+ }.map(_.tpe.termSymbol).filter(_.exists).map(_.tree).map {
157
+ case v : ValDef if v.symbol.flags.is(Flags .Module ) && ! v.symbol.flags.is(Flags .Synthetic ) =>
158
+ v.symbol.owner -> Symbol .newVal(c.symbol, dd.name, v.tpt.tpe, Flags .Final , Symbol .noSymbol).tree
159
+ case other => other.symbol.owner -> other
160
+ }.flatMap { (originalOwner, tree) =>
161
+ parseMember(c)(tree)
162
+ .map { m => m
163
+ .withDRI(dd.symbol.dri)
164
+ .withName(dd.symbol.normalizedName)
165
+ .withKind(Kind .Exported (m.kind))
166
+ .withOrigin(Origin .ExportedFrom (Some (Link (originalOwner.normalizedName, originalOwner.dri))))
167
+ }
155
168
}
156
- val functionName = exportedTarget.fold(" function" )(_.name)
157
- val instanceName = exportedTarget.collect {
158
- case Select (qualifier : Select , _) => qualifier.name
159
- case Select (qualifier : Ident , _) => qualifier.tpe.typeSymbol.normalizedName
160
- }.getOrElse(" instance" )
161
- val dri = dd.rhs.collect {
162
- case s : Select if s.symbol.isDefDef => s.symbol.dri
163
- }.orElse(exportedTarget.map(_.qualifier.tpe.typeSymbol.dri))
164
-
165
- Some (parseMethod(c, dd.symbol, specificKind = Kind .Exported (_))
166
- .withOrigin(Origin .ExportedFrom (s " $instanceName. $functionName" , dri)))
167
169
168
170
case dd : DefDef if ! dd.symbol.isHiddenByVisibility && ! dd.symbol.isSyntheticFunc && ! dd.symbol.isExtensionMethod && ! dd.symbol.isArtifact =>
169
171
Some (parseMethod(c, dd.symbol))
@@ -423,7 +425,17 @@ trait ClassLikeSupport:
423
425
val defaultKind = Kind .Type (! isTreeAbstract(typeDef.rhs), typeDef.symbol.isOpaque, generics).asInstanceOf [Kind .Type ]
424
426
val kind = if typeDef.symbol.flags.is(Flags .Enum ) then Kind .EnumCase (defaultKind)
425
427
else defaultKind
426
- mkMember(typeDef.symbol, kind, tpeTree.asSignature)(deprecated = typeDef.symbol.isDeprecated())
428
+
429
+ if typeDef.symbol.flags.is(Flags .Exported )
430
+ then {
431
+ val origin = Some (tpeTree).flatMap {
432
+ case TypeBoundsTree (l : TypeTree , h : TypeTree ) if l.tpe == h.tpe =>
433
+ Some (Link (l.tpe.typeSymbol.owner.name, l.tpe.typeSymbol.owner.dri))
434
+ case _ => None
435
+ }
436
+ mkMember(typeDef.symbol, Kind .Exported (kind), tpeTree.asSignature)(deprecated = typeDef.symbol.isDeprecated(), origin = Origin .ExportedFrom (origin))
437
+ }
438
+ else mkMember(typeDef.symbol, kind, tpeTree.asSignature)(deprecated = typeDef.symbol.isDeprecated())
427
439
428
440
def parseValDef (c : ClassDef , valDef : ValDef ): Member =
429
441
def defaultKind = if valDef.symbol.flags.is(Flags .Mutable ) then Kind .Var else Kind .Val
0 commit comments