@@ -5,65 +5,61 @@ import org.jetbrains.dokka.links._
5
5
import org .jetbrains .dokka .model .doc ._
6
6
import collection .JavaConverters ._
7
7
import org .jetbrains .dokka .model .properties ._
8
-
9
- case class MethodExtension (parametersListSizes : Seq [Int ]) extends ExtraProperty [DFunction ]:
10
- override def getKey = MethodExtension
11
-
12
- object MethodExtension extends ExtraProperty .Key [DFunction , MethodExtension ]:
13
- override def mergeStrategyFor (left : MethodExtension , right : MethodExtension ): MergeStrategy [DFunction ] =
14
- MergeStrategy .Remove .INSTANCE .asInstanceOf [MergeStrategy [DFunction ]] // TODO it seems that variance from Kotlin is not respected...
8
+ import dotty .dokka ._
15
9
16
10
trait ClassLikeSupport :
17
11
self : TastyParser =>
18
12
import reflect ._
19
13
20
14
def parseClass (classDef : reflect.ClassDef )(using ctx : Context ): DClasslike =
21
-
22
15
val parents = for
23
- parentTree <- classDef.parents
16
+ parentTree <- classDef.parents // We assume here that order is correct
24
17
parentSymbol = if (parentTree.symbol.isClassConstructor) parentTree.symbol.owner else parentTree.symbol
25
- if ! parentSymbol.flags.is( Flags . Synthetic ) // TODO add beter filtering on parent symbols
26
- yield new DriWithKind (asDRI(parentSymbol), if (parentSymbol.isClassDef) KotlinClassKindTypes . CLASS else KotlinClassKindTypes . INTERFACE )
18
+ if parentSymbol != defn. ObjectClass
19
+ yield parentTree.dokkaType
27
20
28
21
val methods = classDef.symbol.classMethods.filterNot(_.flags.is(Flags .Synthetic ))
29
- val constuctors = classDef.symbol.children.filter(_.isClassConstructor)
22
+ val constuctors = classDef.body.collect {
23
+ case d : DefDef if d.name == " <init>" && classDef.constructor.symbol != d.symbol =>
24
+ parseMethod(d.symbol)
25
+ }
30
26
31
27
new DClass (
32
- asDRI( classDef.symbol) ,
28
+ classDef.symbol.dri ,
33
29
classDef.name,
34
- constuctors.map(parseMethod) .asJava,
35
- methods.map(parseMethod).asJava,
36
- Nil .asJava,
37
- Nil .asJava,
38
- sourceSet.asMap(getSource( classDef.symbol)) ,
39
- sourceSet.asMap(KotlinVisibility .Public .INSTANCE ),
40
- null ,
41
- Nil .asJava,
42
- sourceSet.asMap(parents .asJava),
43
- classDef.symbol.documentation,
44
- null ,
45
- sourceSet.asMap( JavaModifier . Abstract . INSTANCE ),
30
+ /* constuctors = */ constuctors .asJava,
31
+ /* methods = */ methods.map(parseMethod).asJava,
32
+ /* fields = */ Nil .asJava,
33
+ /* nested = */ Nil .asJava,
34
+ /* sources = */ classDef.symbol.source ,
35
+ /* visibility = */ sourceSet.asMap(KotlinVisibility .Public .INSTANCE ), // TODO add support for visibility
36
+ /* companion = */ null ,
37
+ /* generics = */ classDef.constructor.typeParams.map(parseTypeArgument) .asJava,
38
+ /* supertypes = */ Map .empty .asJava, // Not used
39
+ /* documentation = */ classDef.symbol.documentation,
40
+ /* expectPresentInSet = */ null , // unused
41
+ /* modifier = */ Map .empty.asJava, // TODO add support for modifers
46
42
inspector.sourceSet.toSet,
47
- PropertyContainer .Companion .empty()
43
+ PropertyContainer .Companion .empty().plus( ClasslikeExtension (parents, Some (parseMethod(classDef.constructor.symbol))))
48
44
)
49
45
50
46
def parseMethod (methodSymbol : Symbol ): DFunction =
51
- val method = methodSymbol.tree.asInstanceOf [DefDef ]
52
- val paramLists = method.paramss
53
-
47
+ val method = methodSymbol.tree.asInstanceOf [DefDef ]
48
+ val paramLists = method.paramss
49
+
54
50
new DFunction (
55
51
methodSymbol.dri,
56
52
methodSymbol.name,
57
- methodSymbol.isClassConstructor,
58
- paramLists.flatten.map(parseArgument).asJava, // TODO add support for parameters
59
- methodSymbol.documentation,
60
- null ,
61
- methodSymbol.source,
62
- sourceSet.asMap(KotlinVisibility .Public .INSTANCE ),
63
- method.returnTpt.tpe.typeSymbol. dokkaType, // TODO play with it?
53
+ /* isConstructor = */ methodSymbol.isClassConstructor,
54
+ /* parameters = */ paramLists.flatten.map(parseArgument).asJava, // TODO add support for parameters
55
+ /* documentation = */ methodSymbol.documentation,
56
+ /* expectPresentInSet = */ null , // unused
57
+ /* sources = */ methodSymbol.source,
58
+ /* visibility = */ sourceSet.asMap(KotlinVisibility .Public .INSTANCE ), // TODO add support for visibility
59
+ /* type = */ method.returnTpt.dokkaType,
64
60
/* generics =*/ method.typeParams.map(parseTypeArgument).asJava,
65
- /* receiver =*/ null ,
66
- /* modifier =*/ sourceSet.asMap( JavaModifier . Abstract . INSTANCE ),
61
+ /* receiver =*/ null , // Not used
62
+ /* modifier =*/ Map .empty.asJava, // TODO add support for modifers
67
63
sourceSet.toSet(),
68
64
PropertyContainer .Companion .empty() plus MethodExtension (paramLists.map(_.size))
69
65
)
@@ -74,18 +70,18 @@ trait ClassLikeSupport:
74
70
argument.symbol.name,
75
71
argument.symbol.documentation,
76
72
null ,
77
- argument.tpt.tpe.typeSymbol. dokkaType, // Can we get type symbol easier?
73
+ argument.tpt.dokkaType,
78
74
sourceSet.toSet(),
79
75
PropertyContainer .Companion .empty()
80
76
)
81
77
82
78
def parseTypeArgument (argument : TypeDef ): DTypeParameter =
83
79
new DTypeParameter (
84
- argument.symbol.declarationDri, // TODO do we need that? Maybe we can suppot TypeDef in . dri method?
80
+ argument.symbol.dri,
85
81
argument.symbol.name,
86
82
argument.symbol.documentation,
87
83
null ,
88
- Nil . asJava, // TODO add type bounds
84
+ List (argument.rhs.dokkaType). asJava,
89
85
sourceSet.toSet(),
90
86
PropertyContainer .Companion .empty()
91
87
)
0 commit comments