@@ -97,15 +97,16 @@ trait ClassLikeSupport:
97
97
val baseMember = mkMember(classDef.symbol, kindForClasslike(classDef), selfSignature)(
98
98
modifiers = modifiers,
99
99
graph = graph,
100
- deprecated = classDef.symbol.isDeprecated()
100
+ deprecated = classDef.symbol.isDeprecated(),
101
+ ).copy(
102
+ directParents = classDef.getParentsAsLinkToTypes,
103
+ parents = supertypes,
101
104
)
102
105
103
106
if summon[DocContext ].args.generateInkuire then doInkuireStuff(classDef)
104
107
105
108
if signatureOnly then baseMember else baseMember.copy(
106
109
members = classDef.extractPatchedMembers.sortBy(m => (m.name, m.kind.name)),
107
- directParents = classDef.getParentsAsLinkToTypes,
108
- parents = supertypes,
109
110
selfType = selfType,
110
111
companion = classDef.getCompanion
111
112
)
@@ -144,15 +145,6 @@ trait ClassLikeSupport:
144
145
)
145
146
parseMethod(c, dd.symbol,specificKind = Kind .Extension (target, _))
146
147
}
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
- }
156
148
157
149
case dd : DefDef if ! dd.symbol.isHiddenByVisibility && dd.symbol.isExported && ! dd.symbol.isArtifact =>
158
150
val exportedTarget = dd.rhs.collect {
@@ -171,58 +163,25 @@ trait ClassLikeSupport:
171
163
Some (parseMethod(c, dd.symbol, specificKind = Kind .Exported (_))
172
164
.withOrigin(Origin .ExportedFrom (s " $instanceName. $functionName" , dri)))
173
165
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 =>
175
167
Some (parseMethod(c, dd.symbol))
176
168
177
169
case td : TypeDef if ! td.symbol.flags.is(Flags .Synthetic ) && (! td.symbol.flags.is(Flags .Case ) || ! td.symbol.flags.is(Flags .Enum )) =>
178
170
Some (parseTypeDef(td))
179
171
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
-
186
172
case vd : ValDef if ! isSyntheticField(vd.symbol) && (! vd.symbol.flags.is(Flags .Case ) || ! vd.symbol.flags.is(Flags .Enum )) =>
187
173
Some (parseValDef(c, vd))
188
174
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 =>
193
176
Some (parseClasslike(c))
194
177
195
178
case _ => None
196
179
}
197
180
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
-
221
181
private def parseInheritedMember (c : ClassDef )(s : Tree ): Option [Member ] =
222
182
def inheritance = Some (InheritedFrom (s.symbol.owner.normalizedName, s.symbol.dri))
223
183
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 ))
226
185
case other => {
227
186
val parsed = parseMember(c)(other)
228
187
parsed.map(p =>
@@ -392,6 +351,7 @@ trait ClassLikeSupport:
392
351
))
393
352
case _ =>
394
353
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))
395
355
else specificKind(basicKind)
396
356
397
357
val origin = if ! methodSymbol.isOverridden then Origin .RegularlyDefined else
@@ -463,10 +423,10 @@ trait ClassLikeSupport:
463
423
def parseValDef (c : ClassDef , valDef : ValDef ): Member =
464
424
def defaultKind = if valDef.symbol.flags.is(Flags .Mutable ) then Kind .Var else Kind .Val
465
425
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
470
430
471
431
mkMember(valDef.symbol, kind, memberInfo.res.asSignature)(deprecated = valDef.symbol.isDeprecated())
472
432
0 commit comments