@@ -97,15 +97,16 @@ trait ClassLikeSupport:
9797 val baseMember = mkMember(classDef.symbol, kindForClasslike(classDef), selfSignature)(
9898 modifiers = modifiers,
9999 graph = graph,
100- deprecated = classDef.symbol.isDeprecated()
100+ deprecated = classDef.symbol.isDeprecated(),
101+ ).copy(
102+ directParents = classDef.getParentsAsLinkToTypes,
103+ parents = supertypes,
101104 )
102105
103106 if summon[DocContext ].args.generateInkuire then doInkuireStuff(classDef)
104107
105108 if signatureOnly then baseMember else baseMember.copy(
106109 members = classDef.extractPatchedMembers.sortBy(m => (m.name, m.kind.name)),
107- directParents = classDef.getParentsAsLinkToTypes,
108- parents = supertypes,
109110 selfType = selfType,
110111 companion = classDef.getCompanion
111112 )
@@ -144,15 +145,6 @@ trait ClassLikeSupport:
144145 )
145146 parseMethod(c, dd.symbol,specificKind = Kind .Extension (target, _))
146147 }
147- // TODO check given methods?
148- case dd : DefDef if ! dd.symbol.isHiddenByVisibility && dd.symbol.isGiven && ! dd.symbol.isArtifact =>
149- Some (dd.symbol.owner.typeMember(dd.name))
150- .filterNot(_.exists)
151- .map { _ =>
152- parseMethod(c, dd.symbol, specificKind =
153- Kind .Given (_, getGivenInstance(dd), None )
154- )
155- }
156148
157149 case dd : DefDef if ! dd.symbol.isHiddenByVisibility && dd.symbol.isExported && ! dd.symbol.isArtifact =>
158150 val exportedTarget = dd.rhs.collect {
@@ -171,58 +163,25 @@ trait ClassLikeSupport:
171163 Some (parseMethod(c, dd.symbol, specificKind = Kind .Exported (_))
172164 .withOrigin(Origin .ExportedFrom (s " $instanceName. $functionName" , dri)))
173165
174- case dd : DefDef if ! dd.symbol.isHiddenByVisibility && ! dd.symbol.isGiven && ! dd.symbol. isSyntheticFunc && ! dd.symbol.isExtensionMethod && ! dd.symbol.isArtifact =>
166+ case dd : DefDef if ! dd.symbol.isHiddenByVisibility && ! dd.symbol.isSyntheticFunc && ! dd.symbol.isExtensionMethod && ! dd.symbol.isArtifact =>
175167 Some (parseMethod(c, dd.symbol))
176168
177169 case td : TypeDef if ! td.symbol.flags.is(Flags .Synthetic ) && (! td.symbol.flags.is(Flags .Case ) || ! td.symbol.flags.is(Flags .Enum )) =>
178170 Some (parseTypeDef(td))
179171
180- case vd : ValDef if ! isSyntheticField(vd.symbol)
181- && (! vd.symbol.flags.is(Flags .Case ) || ! vd.symbol.flags.is(Flags .Enum ))
182- && vd.symbol.isGiven =>
183- val classDef = Some (vd.tpt.tpe).flatMap(_.classSymbol.map(_.tree.asInstanceOf [ClassDef ]))
184- Some (classDef.filter(_.symbol.flags.is(Flags .Module )).fold[Member ](parseValDef(c, vd))(parseGivenClasslike(_)))
185-
186172 case vd : ValDef if ! isSyntheticField(vd.symbol) && (! vd.symbol.flags.is(Flags .Case ) || ! vd.symbol.flags.is(Flags .Enum )) =>
187173 Some (parseValDef(c, vd))
188174
189- case c : ClassDef if c.symbol.owner.methodMember(c.name).exists(_.flags.is(Flags .Given )) =>
190- Some (parseGivenClasslike(c))
191-
192- case c : ClassDef if c.symbol.shouldDocumentClasslike && ! c.symbol.isGiven =>
175+ case c : ClassDef if c.symbol.shouldDocumentClasslike =>
193176 Some (parseClasslike(c))
194177
195178 case _ => None
196179 }
197180
198- private def parseGivenClasslike (c : ClassDef ): Member = {
199- val parsedClasslike = parseClasslike(c)
200-
201- val parentTpe = c.parents(0 ) match {
202- case t : TypeTree => Some (t.tpe)
203- case t : Term => Some (t.tpe)
204- case _ => None
205- }
206-
207- val givenParents = parsedClasslike.directParents.headOption
208- val cls : Kind .Class = parsedClasslike.kind match
209- case Kind .Object => Kind .Class (Nil , Nil )
210- case Kind .Trait (tps, args) => Kind .Class (tps, args)
211- case cls : Kind .Class => cls
212- case other =>
213- report.warning(" Unrecoginzed kind for given: $other" , c.pos)
214- Kind .Class (Nil , Nil )
215-
216- parsedClasslike.withKind(
217- Kind .Given (cls, givenParents.map(_.signature), parentTpe.flatMap(extractImplicitConversion))
218- )
219- }
220-
221181 private def parseInheritedMember (c : ClassDef )(s : Tree ): Option [Member ] =
222182 def inheritance = Some (InheritedFrom (s.symbol.owner.normalizedName, s.symbol.dri))
223183 processTreeOpt(s)(s match
224- case c : ClassDef if c.symbol.shouldDocumentClasslike && ! c.symbol.isGiven => Some (parseClasslike(c, signatureOnly = true ))
225- case c : ClassDef if c.symbol.owner.methodMember(c.name).exists(_.flags.is(Flags .Given )) => Some (parseGivenClasslike(c))
184+ case c : ClassDef if c.symbol.shouldDocumentClasslike => Some (parseClasslike(c, signatureOnly = true ))
226185 case other => {
227186 val parsed = parseMember(c)(other)
228187 parsed.map(p =>
@@ -392,6 +351,7 @@ trait ClassLikeSupport:
392351 ))
393352 case _ =>
394353 Kind .Implicit (basicKind, None )
354+ else if methodSymbol.flags.is(Flags .Given ) then Kind .Given (basicKind, Some (method.returnTpt.tpe.asSignature), extractImplicitConversion(method.returnTpt.tpe))
395355 else specificKind(basicKind)
396356
397357 val origin = if ! methodSymbol.isOverridden then Origin .RegularlyDefined else
@@ -463,10 +423,10 @@ trait ClassLikeSupport:
463423 def parseValDef (c : ClassDef , valDef : ValDef ): Member =
464424 def defaultKind = if valDef.symbol.flags.is(Flags .Mutable ) then Kind .Var else Kind .Val
465425 val memberInfo = unwrapMemberInfo(c, valDef.symbol)
466- val kind = if valDef.symbol.flags.is(Flags .Implicit ) then
467- Kind .Implicit (Kind .Val , extractImplicitConversion(valDef.tpt.tpe))
468- else if valDef.symbol.flags.is(Flags .Enum ) then Kind .EnumCase (Kind .Val )
469- else defaultKind
426+ val kind = if valDef.symbol.flags.is(Flags .Implicit ) then Kind . Implicit ( Kind . Val , extractImplicitConversion(valDef.tpt.tpe))
427+ else if valDef.symbol.flags.is( Flags . Given ) then Kind .Given (Kind .Val , Some (memberInfo.res.asSignature) , extractImplicitConversion(valDef.tpt.tpe))
428+ else if valDef.symbol.flags.is(Flags .Enum ) then Kind .EnumCase (Kind .Val )
429+ else defaultKind
470430
471431 mkMember(valDef.symbol, kind, memberInfo.res.asSignature)(deprecated = valDef.symbol.isDeprecated())
472432
0 commit comments