@@ -53,20 +53,26 @@ trait ImplicitConversionProvider { def conversion: Option[ImplicitConversion] }
5353trait Classlike
5454
5555enum Kind (val name : String ){
56- case Class extends Kind (" class" ) with Classlike
56+ case Class (typeParams : Seq [TypeParameter ], argsLists : Seq [Seq [Parameter ]])
57+ extends Kind (" class" ) with Classlike
5758 case Object extends Kind (" object" ) with Classlike
58- case Trait extends Kind (" trait" ) with Classlike
59+ case Trait (typeParams : Seq [TypeParameter ], argsLists : Seq [Seq [Parameter ]])
60+ extends Kind (" trait" ) with Classlike
5961 case Enum extends Kind (" enum" ) with Classlike
60- case EnumCase extends Kind (" case" )
61- case Def extends Kind (" def" )
62- case Extension (on : ExtensionTarget ) extends Kind (" def" )
63- case Constructor extends Kind (" def" )
62+ case EnumCase (kind : Object .type | Type | Val .type ) extends Kind (" case" )
63+ case Def (typeParams : Seq [TypeParameter ], argsLists : Seq [Seq [Parameter ]])
64+ extends Kind (" def" )
65+ case Extension (on : ExtensionTarget , m : Kind .Def ) extends Kind (" def" )
66+ case Constructor (base : Kind .Def ) extends Kind (" def" )
6467 case Var extends Kind (" var" )
6568 case Val extends Kind (" val" )
66- case Exported extends Kind (" export" )
67- case Type (concreate : Boolean , opaque : Boolean ) extends Kind (" Type" ) // should we handle opaque as modifier?
68- case Given (as : Option [Signature ], conversion : Option [ImplicitConversion ]) extends Kind (" Given" ) with ImplicitConversionProvider
69- case Implicit (kind : Kind , conversion : Option [ImplicitConversion ]) extends Kind (kind.name) with ImplicitConversionProvider
69+ case Exported (m : Kind .Def ) extends Kind (" export" )
70+ case Type (concreate : Boolean , opaque : Boolean , typeParams : Seq [TypeParameter ])
71+ extends Kind (" Type" ) // should we handle opaque as modifier?
72+ case Given (kind : Def | Class , as : Option [Signature ], conversion : Option [ImplicitConversion ])
73+ extends Kind (" Given" ) with ImplicitConversionProvider
74+ case Implicit (kind : Kind .Def | Kind .Val .type , conversion : Option [ImplicitConversion ])
75+ extends Kind (kind.name) with ImplicitConversionProvider
7076 case Unknown extends Kind (" Unknown" )
7177}
7278
@@ -91,6 +97,23 @@ object Annotation:
9197 case class LinkParameter (name : Option [String ] = None , dri : DRI , value : String ) extends AnnotationParameter
9298 case class UnresolvedParameter (name : Option [String ] = None , unresolvedText : String ) extends AnnotationParameter
9399
100+ case class Parameter (
101+ annotations : Seq [Annotation ],
102+ modifiers : String ,
103+ name : String ,
104+ dri : DRI ,
105+ signature : Signature ,
106+ isExtendedSymbol : Boolean = false ,
107+ isGrouped : Boolean = false
108+ )
109+
110+ case class TypeParameter (
111+ variance : " " | " +" | " -" ,
112+ name : String ,
113+ dri : DRI ,
114+ signature : Signature
115+ )
116+
94117// TODO (longterm) properly represent signatures
95118case class Link (name : String , dri : DRI )
96119type Signature = Seq [String | Link ]
@@ -114,7 +137,7 @@ object HierarchyGraph:
114137 def withEdges (edges : Seq [(LinkToType , LinkToType )]) = HierarchyGraph .empty ++ edges
115138
116139
117- type Member = Documentable // with WithExtraProperty[_] // Kotlin does not add generics to ExtraProperty implemented by e.g. DFunction
140+ type Member = Documentable
118141
119142object Member :
120143 def unapply (d : Documentable ): Option [(String , DRI , Visibility , Kind , Origin )] =
@@ -146,10 +169,12 @@ extension[T] (member: Member)
146169 def parents : Seq [LinkToType ] = compositeMemberExt.fold(Nil )(_.parents)
147170 def directParents : Seq [Signature ] = compositeMemberExt.fold(Nil )(_.directParents)
148171 def knownChildren : Seq [LinkToType ] = compositeMemberExt.fold(Nil )(_.knownChildren)
172+ def companion : Option [DRI ] = compositeMemberExt.fold(None )(_.companion)
149173
150174 def membersBy (op : Member => Boolean ): Seq [Member ] = allMembers.filter(op)
151- def membersByWithInheritancePartition (op : Member => Boolean ): (Seq [Member ], Seq [Member ]) = membersBy(op).partition(_.inheritedFrom.isEmpty)
152175
176+ extension (members : Seq [Member ]) def byInheritance =
177+ members.partition(_.inheritedFrom.isEmpty)
153178
154179extension (module : DModule )
155180 def driMap : Map [DRI , Member ] = ModuleExtension .getFrom(module).fold(Map .empty)(_.driMap)
0 commit comments