Skip to content

Commit 57fdfb7

Browse files
committed
Migrate most of dokka-site in
Create utils over Java Map, Set and List
1 parent 6c0df68 commit 57fdfb7

29 files changed

+753
-138
lines changed

project/Build.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1465,22 +1465,24 @@ object Build {
14651465

14661466
def joinProducts(products: Seq[java.io.File]): String =
14671467
products.iterator.map(_.getAbsolutePath.toString).mkString(java.io.File.pathSeparator)
1468+
1469+
val dokkaVersion = "1.4.10.2"
14681470

14691471
project.settings(commonBootstrappedSettings).
14701472
dependsOn(`scala3-compiler-bootstrapped`).
14711473
dependsOn(`scala3-tasty-inspector`).
14721474
settings(
14731475
// Needed to download dokka and its dependencies
14741476
resolvers += Resolver.jcenterRepo,
1475-
// Needed to download dokka-site
1476-
resolvers += Resolver.bintrayRepo("virtuslab", "dokka"),
14771477
libraryDependencies ++= Seq(
1478-
"com.virtuslab.dokka" % "dokka-site" % "0.1.9",
1478+
"org.jetbrains.dokka" % "dokka-core" % dokkaVersion,
1479+
"org.jetbrains.dokka" % "dokka-base" % dokkaVersion,
1480+
"org.jetbrains.kotlinx" % "kotlinx-html-jvm" % "0.7.2", // Needs update when dokka version changes
14791481
"com.vladsch.flexmark" % "flexmark-all" % "0.42.12",
14801482
"nl.big-o" % "liqp" % "0.6.7",
14811483
"args4j" % "args4j" % "2.33",
14821484

1483-
"org.jetbrains.dokka" % "dokka-test-api" % "1.4.10.2" % "test",
1485+
"org.jetbrains.dokka" % "dokka-test-api" % dokkaVersion % "test",
14841486
"com.novocode" % "junit-interface" % "0.11" % "test",
14851487
),
14861488
Test / test := (Test / test).dependsOn(compile.in(Compile).in(`scala3doc-testcases`)).value,

sbt-dotty/src/dotty/tools/sbtplugin/DottyPlugin.scala

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,7 @@ object DottyPlugin extends AutoPlugin {
358358
}.value,
359359

360360
// Configuration for the doctool
361-
resolvers ++= (if(!useScala3doc.value) Nil else Seq(
362-
Resolver.jcenterRepo,
363-
Resolver.bintrayRepo("virtuslab", "dokka"),
364-
)),
361+
resolvers ++= (if(!useScala3doc.value) Nil else Seq(Resolver.jcenterRepo)),
365362
useScala3doc := false,
366363
scala3docOptions := Nil,
367364
Compile / doc / scalacOptions := {

scala3doc/src/dotty/dokka/DottyDokkaConfig.scala

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,16 @@ package dotty.dokka
33
import org.jetbrains.dokka._
44
import org.jetbrains.dokka.DokkaSourceSetImpl
55
import java.io.File
6-
import java.util.{ List => JList, Map => JMap}
76
import collection.JavaConverters._
87

98
case class DottyDokkaConfig(docConfiguration: DocConfiguration) extends DokkaConfiguration:
109
override def getOutputDir: File = docConfiguration.args.output
1110
override def getCacheRoot: File = null
1211
override def getOfflineMode: Boolean = false
1312
override def getFailOnWarning: Boolean = false
14-
override def getSourceSets: JList[DokkaConfiguration.DokkaSourceSet] = List(mkSourceSet).asJava
15-
override def getModules: JList[DokkaConfiguration.DokkaModuleDescription] = List().asJava
16-
override def getPluginsClasspath: JList[File] = Nil.asJava
13+
override def getSourceSets: JList[DokkaSourceSet] = JList(mkSourceSet)
14+
override def getModules: JList[DokkaConfiguration.DokkaModuleDescription] = JList()
15+
override def getPluginsClasspath: JList[File] = JList()
1716
override def getModuleName(): String = "ModuleName"
1817
override def getModuleVersion(): String = ""
1918

@@ -23,31 +22,31 @@ case class DottyDokkaConfig(docConfiguration: DocConfiguration) extends DokkaCon
2322
DokkaConfiguration$SerializationFormat.JSON.asInstanceOf[DokkaConfiguration$SerializationFormat]
2423
override def getValues: String = docConfiguration.args.docsRoot.getOrElse("")
2524

26-
override def getPluginsConfiguration: JList[DokkaConfiguration.PluginConfiguration] = List(OurConfig).asJava
25+
override def getPluginsConfiguration: JList[DokkaConfiguration.PluginConfiguration] = JList(OurConfig)
2726

28-
def mkSourceSet: DokkaConfiguration.DokkaSourceSet =
27+
def mkSourceSet: DokkaSourceSet =
2928
val sourceLinks:Set[SourceLinkDefinitionImpl] = docConfiguration.args.sourceLinks.map(SourceLinkDefinitionImpl.Companion.parseSourceLinkDefinition(_)).toSet
3029
new DokkaSourceSetImpl(
3130
/*displayName=*/ docConfiguration.args.name,
3231
/*sourceSetID=*/ new DokkaSourceSetID(docConfiguration.args.name, "main"),
33-
/*classpath=*/ Nil.asJava,
34-
/*sourceRoots=*/ Set().asJava,
35-
/*dependentSourceSets=*/ Set().asJava,
36-
/*samples=*/ Set().asJava,
37-
/*includes=*/ Set().asJava,
32+
/*classpath=*/ JList(),
33+
/*sourceRoots=*/ JSet(),
34+
/*dependentSourceSets=*/ JSet(),
35+
/*samples=*/ JSet(),
36+
/*includes=*/ JSet(),
3837
/*includeNonPublic=*/ true,
3938
/*reportUndocumented=*/ false, /* changed because of exception in reportUndocumentedTransformer - there's 'when' which doesnt match because it contains only KotlinVisbility cases */
4039
/*skipEmptyPackages=*/ false, // Now all our packages are empty from dokka perspective
4140
/*skipDeprecated=*/ true,
4241
/*jdkVersion=*/ 8,
4342
/*sourceLinks=*/ sourceLinks.asJava,
44-
/*perPackageOptions=*/ Nil.asJava,
45-
/*externalDocumentationLinks=*/ Set().asJava,
43+
/*perPackageOptions=*/ JList(),
44+
/*externalDocumentationLinks=*/ JSet(),
4645
/*languageVersion=*/ null,
4746
/*apiVersion=*/ null,
4847
/*noStdlibLink=*/ true,
4948
/*noJdkLink=*/ true,
50-
/*suppressedFiles=*/ Set().asJava,
49+
/*suppressedFiles=*/ JSet(),
5150
/*suppressedFiles=*/ Platform.jvm
52-
).asInstanceOf[DokkaConfiguration.DokkaSourceSet] // Why I do need to cast here? Kotlin magic?
51+
).asInstanceOf[DokkaSourceSet] // Why I do need to cast here? Kotlin magic?
5352

scala3doc/src/dotty/dokka/DottyDokkaPlugin.scala

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import org.jetbrains.dokka.links._
1212
import org.jetbrains.dokka.model.doc._
1313
import org.jetbrains.dokka.base.parsers._
1414
import org.jetbrains.dokka.plugability.DokkaContext
15-
import com.virtuslab.dokka.site.SourceSetWrapper
16-
import com.virtuslab.dokka.site.JavaSourceToDocumentableTranslator
1715
import collection.JavaConverters._
1816
import org.jetbrains.dokka.model.properties.PropertyContainer
1917
import dotty.dokka.tasty.{DokkaTastyInspector, SbtDokkaTastyInspector}
@@ -23,10 +21,7 @@ import org.jetbrains.dokka.base.signatures.SignatureProvider
2321
import org.jetbrains.dokka.pages._
2422
import dotty.dokka.model.api._
2523
import org.jetbrains.dokka.CoreExtensions
26-
import com.virtuslab.dokka.site.StaticSitePlugin
2724
import org.jetbrains.dokka.base.DokkaBase
28-
import com.virtuslab.dokka.site.ExtensionBuilderEx
29-
import java.util.{List => JList}
3025

3126
/** Main Dokka plugin for the doctool.
3227
*
@@ -38,7 +33,6 @@ import java.util.{List => JList}
3833
class DottyDokkaPlugin extends DokkaJavaPlugin:
3934

4035
lazy val dokkaBase = plugin(classOf[DokkaBase])
41-
lazy val dokkaSitePlugin = plugin(classOf[StaticSitePlugin])
4236

4337
val provideMembers = extend(
4438
_.extensionPoint(CoreExtensions.INSTANCE.getSourceToDocumentableTranslator)
@@ -116,7 +110,7 @@ class DottyDokkaPlugin extends DokkaJavaPlugin:
116110
val ourRenderer = extend(
117111
_.extensionPoint(CoreExtensions.INSTANCE.getRenderer)
118112
.fromRecipe(ScalaHtmlRenderer(_))
119-
.overrideExtension(dokkaSitePlugin.getCustomRenderer)
113+
.overrideExtension(dokkaBase.getHtmlRenderer)
120114
)
121115

122116
val commentsToContentConverter = extend(
@@ -140,10 +134,23 @@ class DottyDokkaPlugin extends DokkaJavaPlugin:
140134
.name("muteDefaultSourceLinksTransformer")
141135
)
142136

143-
// TODO remove once problem is fixed in Dokka
137+
// TODO (https://github.com/lampepfl/scala3doc/issues/232): remove once problem is fixed in Dokka
144138
extension [T] (builder: ExtensionBuilder[T]):
145-
def before(exts: Extension[_, _, _]*): ExtensionBuilder[T] =
146-
(new ExtensionBuilderEx).newOrdering(builder, exts.toArray, Array.empty)
147-
148-
def after(exts: Extension[_, _, _]*): ExtensionBuilder[T] =
149-
(new ExtensionBuilderEx).newOrdering(builder, Array.empty, exts.toArray)
139+
def ordered(before: Seq[Extension[_, _, _]], after: Seq[Extension[_, _, _]]): ExtensionBuilder[T] =
140+
val byDsl = new OrderingKind.ByDsl(dsl => {
141+
dsl.after(after:_*)
142+
dsl.before(before:_*)
143+
kotlin.Unit.INSTANCE // TODO why U does not work here?
144+
})
145+
// Does not compile but compiles in scala 2
146+
// ExtensionBuilder.copy$default(builder, null, null, null, byDsl, null, null, 55, null)
147+
val m = classOf[ExtensionBuilder[_]].getDeclaredMethods().find(_.getName == "copy$default").get
148+
m.setAccessible(true)
149+
// All nulls and 55 is taken from Kotlin bytecode and represent how defaut parameter are represented in Kotlin
150+
// Defaut arguments are encoded by null and mapping that 55 represent whic arguments are actually provided
151+
m.invoke(null, builder, null, null, null, byDsl, null, null, 55, null).asInstanceOf[ExtensionBuilder[T]]
152+
153+
154+
def before(exts: Extension[_, _, _]*): ExtensionBuilder[T] = ordered(exts, Nil)
155+
156+
def after(exts: Extension[_, _, _]*): ExtensionBuilder[T] = ordered(Nil, exts)

scala3doc/src/dotty/dokka/Main.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import java.io.File
88
import java.util.jar._
99
import collection.JavaConverters._
1010
import collection.immutable.ArraySeq
11-
import java.util.{List => JList}
1211

1312
import scala.tasty.Reflection
1413
import scala.tasty.inspector.TastyInspector

scala3doc/src/dotty/dokka/ScalaModuleCreator.scala

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
package dotty.dokka
22

33
import org.jetbrains.dokka.{ DokkaConfiguration$DokkaSourceSet => DokkaSourceSet }
4-
import com.virtuslab.dokka.site.JavaSourceToDocumentableTranslator
5-
import com.virtuslab.dokka.site.SourceSetWrapper
64
import org.jetbrains.dokka.plugability.DokkaContext
75
import org.jetbrains.dokka.model.properties.PropertyContainer
6+
import org.jetbrains.dokka.model.DModule
7+
import org.jetbrains.dokka.transformers.sources.SourceToDocumentableTranslator
88

99
import dotty.dokka.tasty.{DokkaTastyInspector, SbtDokkaTastyInspector}
1010
import org.jetbrains.dokka.pages._
1111
import dotty.dokka.model.api._
1212
import org.jetbrains.dokka.model._
1313
import org.jetbrains.dokka.links.DRI
14-
import java.util.{List => JList}
1514
import org.jetbrains.dokka.base.parsers.MarkdownParser
1615
import collection.JavaConverters._
16+
import kotlin.coroutines.Continuation
1717

18-
object ScalaModuleProvider extends JavaSourceToDocumentableTranslator:
19-
override def process(rawSourceSet: DokkaSourceSet, cxt: DokkaContext) =
20-
val sourceSet = SourceSetWrapper(rawSourceSet)
18+
object ScalaModuleProvider extends SourceToDocumentableTranslator:
19+
override def invoke(sourceSet: DokkaSourceSet, cxt: DokkaContext, unused: Continuation[? >: DModule]) =
2120
cxt.getConfiguration match
2221
case dottyConfig: DottyDokkaConfig =>
2322
val result = dottyConfig.docConfiguration match {
@@ -41,16 +40,16 @@ object ScalaModuleProvider extends JavaSourceToDocumentableTranslator:
4140
def flattenMember(m: Member): Seq[(DRI, Member)] = (m.dri -> m) +: m.allMembers.flatMap(flattenMember)
4241

4342
new DModule(
44-
sourceSet.getSourceSet.getDisplayName,
43+
sourceSet.getDisplayName,
4544
result.asJava,
46-
Map().asJava,
45+
JMap(),
4746
null,
4847
sourceSet.toSet,
4948
PropertyContainer.Companion.empty() plus ModuleExtension(result.flatMap(flattenMember).toMap)
5049
)
5150
case _ =>
5251
???
5352

54-
object EmptyModuleProvider extends JavaSourceToDocumentableTranslator:
55-
override def process(sourceSet: DokkaSourceSet, context: DokkaContext) =
56-
DModule("", Nil.asJava, Map.empty.asJava, null, Set(sourceSet).asJava, PropertyContainer.Companion.empty())
53+
object EmptyModuleProvider extends SourceToDocumentableTranslator:
54+
override def invoke(sourceSet: DokkaSourceSet, cxt: DokkaContext, unused: Continuation[? >: DModule]) =
55+
DModule("", JList(), Map.empty.asJava, null, Set(sourceSet).asJava, PropertyContainer.Companion.empty())
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package dotty.dokka
2+
3+
import org.jetbrains.dokka.links.{DRI, PointingToDeclaration}
4+
import org.jetbrains.dokka.DokkaConfiguration
5+
import org.jetbrains.dokka.DokkaConfiguration$DokkaSourceSet
6+
import collection.JavaConverters._
7+
import org.jetbrains.dokka.model.DisplaySourceSet
8+
import org.jetbrains.dokka.model.properties.WithExtraProperties
9+
// TODO reproduction! - comment line below to broke compiler!
10+
import org.jetbrains.dokka.model.properties.ExtraProperty
11+
// import java.util.Stream // TODO reproduction uncomment
12+
import java.util.stream.Stream // comment out - wrong error!
13+
import java.util.stream.Collectors
14+
15+
def mkDRI(classNames: String = null, extra: String = null) = new DRI(null, classNames, null, PointingToDeclaration.INSTANCE, extra)
16+
17+
val U: kotlin.Unit = kotlin.Unit.INSTANCE
18+
19+
def JList[T](e: T*): JList[T] = e.asJava
20+
def JSet[T](e: T*): JSet[T] = e.toSet.asJava
21+
def JMap[K, V](e: (K, V)*): JMap[K, V] = e.toMap.asJava
22+
def JMap2[K, V](): JMap[K, V] = ??? // e.toMap.asJava
23+
24+
type JList[T] = java.util.List[T]
25+
type JSet[T] = java.util.Set[T]
26+
type JMap[K, V] = java.util.Map[K, V]
27+
28+
type SourceSetWrapper = DokkaConfiguration$DokkaSourceSet
29+
type DokkaSourceSet = DokkaConfiguration.DokkaSourceSet
30+
31+
extension [T] (wrapper: SourceSetWrapper):
32+
def toSet: JSet[DokkaConfiguration$DokkaSourceSet] = JSet(wrapper)
33+
def toMap(value: T): JMap[DokkaConfiguration$DokkaSourceSet, T] = JMap(wrapper -> value)
34+
35+
extension [T] (wrapper: DokkaSourceSet):
36+
// when named `toSet` fails in runtime -- TODO: create a minimal!
37+
// def toSet: JSet[DokkaConfiguration$DokkaSourceSet] = JSet(wrapper.asInstanceOf[SourceSetWrapper])
38+
def asSet: JSet[DokkaConfiguration$DokkaSourceSet] = JSet(wrapper.asInstanceOf[SourceSetWrapper])
39+
def asMap(value: T): JMap[DokkaConfiguration$DokkaSourceSet, T] = JMap(wrapper.asInstanceOf[SourceSetWrapper] -> value)
40+
41+
extension (sourceSets: JList[DokkaSourceSet]):
42+
def asDokka: JSet[SourceSetWrapper] = sourceSets.asScala.toSet.asJava.asInstanceOf[JSet[SourceSetWrapper]]
43+
def toDisplaySourceSet = sourceSets.asScala.map(ss => DisplaySourceSet(ss.asInstanceOf[SourceSetWrapper])).toSet.asJava
44+
45+
extension (sourceSets: Set[SourceSetWrapper]):
46+
def toDisplay = sourceSets.map(DisplaySourceSet(_)).asJava
47+
48+
extension [V] (a: WithExtraProperties[_]):
49+
def get(key: ExtraProperty.Key[_, V]): V = a.getExtra().getMap().get(key).asInstanceOf[V]
50+
51+
extension [E <: WithExtraProperties[E]] (a: E):
52+
def put(value: ExtraProperty[_ >: E]): E = a.withNewExtras(a.getExtra plus value)
53+
54+
extension [V] (map: JMap[SourceSetWrapper, V]):
55+
def defaultValue: V = map.values.asScala.head
56+
57+
extension [V](jlist: JList[V]):
58+
def ++ (other: JList[V]): JList[V] =
59+
Stream.of(jlist, other).flatMap(_.stream).collect(Collectors.toList())

scala3doc/src/dotty/dokka/model/api/api.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import org.jetbrains.dokka.links._
1010
import org.jetbrains.dokka.model.doc._
1111
import org.jetbrains.dokka.model.properties._
1212
import org.jetbrains.dokka.pages._
13-
import java.util.{List => JList, Set => JSet}
14-
1513

1614
enum Visibility(val name: String):
1715
case Unrestricted extends Visibility("")

scala3doc/src/dotty/dokka/model/api/internalExtensions.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@ import collection.JavaConverters._
2121
import org.jetbrains.dokka.links._
2222
import org.jetbrains.dokka.model.doc.DocumentationNode
2323
import org.jetbrains.dokka.model.properties._
24-
import java.util.{List => JList, Set => JSet}
25-
26-
import com.virtuslab.dokka.site.SourceSetWrapper
2724

2825
private [model] case class MemberExtension(
2926
visibility: Visibility,

scala3doc/src/dotty/dokka/model/extras.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import collection.JavaConverters._
99
import org.jetbrains.dokka.links._
1010
import org.jetbrains.dokka.model.doc._
1111
import org.jetbrains.dokka.model.properties._
12-
import java.util.{List => JList, Set => JSet}
1312
import dotty.dokka.model.api._
1413

1514
case class ModuleExtension(driMap: Map[DRI, Member]) extends ExtraProperty[DModule]:

scala3doc/src/dotty/dokka/model/scalaModel.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import org.jetbrains.dokka.links._
88
import org.jetbrains.dokka.model.doc._
99
import org.jetbrains.dokka.model.properties._
1010
import org.jetbrains.dokka.pages._
11-
import java.util.{List => JList, Set => JSet}
1211
import dotty.dokka.model.api.Signature
1312
import dotty.dokka.model.api.HierarchyGraph
1413

@@ -33,7 +32,7 @@ case class HtmlContentNode(
3332
override def getStyle = style.asJava
3433
override def hasAnyContent = !body.isEmpty
3534
def withSourceSets(sourceSets: JSet[DisplaySourceSet]) = copy(sourceSets = sourceSets.asScala.toSet)
36-
override def getChildren: JList[ContentNode] = Nil.asJava
35+
override def getChildren: JList[ContentNode] = JList()
3736
override def getExtra = extra
3837
override def withNewExtras(p: PropertyContainer[ContentNode]) = copy(extra = p)
3938

@@ -70,7 +69,7 @@ case class HierarchyGraphContentNode(
7069
override def getStyle = style.asJava
7170
override def hasAnyContent = !diagram.edges.isEmpty
7271
def withSourceSets(sourceSets: JSet[DisplaySourceSet]) = copy(sourceSets = sourceSets.asScala.toSet)
73-
override def getChildren: JList[ContentNode] = Nil.asJava
72+
override def getChildren: JList[ContentNode] = JList()
7473
override def getExtra = extra
7574
override def withNewExtras(p: PropertyContainer[ContentNode]) = copy(extra = p)
7675

@@ -91,7 +90,7 @@ abstract class ScalaContentNode(params: ContentNodeParams) extends ContentNode:
9190
override def hasAnyContent = true
9291
def withSourceSets(sourceSets: JSet[DisplaySourceSet]) =
9392
newInstance(params.copy(sourceSets = sourceSets))
94-
override def getChildren: JList[ContentNode] = Nil.asJava
93+
override def getChildren: JList[ContentNode] = JList()
9594
override def getExtra = params.extra
9695
override def withNewExtras(p: PropertyContainer[ContentNode]) = newInstance(params.copy(extra = p))
9796

0 commit comments

Comments
 (0)