Skip to content

Commit 675d1f4

Browse files
ennruraboof
authored andcommitted
Allow linking to Java class with Scala object (#109)
1 parent c60d8f6 commit 675d1f4

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/main/scala/com/lightbend/paradox/apidoc/ApidocDirective.scala

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,19 @@ class ApidocDirective(allClassesAndObjects: IndexedSeq[String], ctx: Writer.Cont
3434
private case class Query(label: Option[String], pattern: String, generics: String, linkToObject: Boolean) {
3535
def scalaLabel(matched: String): String =
3636
label match {
37-
case None => matched.split('.').last.replace("$", ".") + generics
37+
case None =>
38+
matched
39+
.split('.')
40+
.last
41+
// replace inner class dots
42+
.replaceAll("\\$(.)", ".$1")
43+
// remove ending $
44+
.replaceAll("\\$$", "") + generics
3845
case Some(la) => la + generics
3946
}
4047

4148
def scalaFqcn(matched: String): String =
42-
matched.replace("$", ".")
49+
matched.replaceAll("\\$(.)", ".$1")
4350

4451
def javaLabel(matched: String): String =
4552
scalaLabel(matched)
@@ -102,7 +109,15 @@ class ApidocDirective(allClassesAndObjects: IndexedSeq[String], ctx: Writer.Cont
102109
}
103110
}
104111
} else {
105-
renderMatches(query, allClasses.filter(_.endsWith('.' + query.pattern)), node, visitor, printer)
112+
val className = '.' + query.pattern
113+
val classMatches = allClasses.filter(_.endsWith(className))
114+
if (classMatches.size == 1 && classMatches(0).contains(".javadsl.")) {
115+
val objectName = className + '$'
116+
val allMatches = allClassesAndObjects.filter { name =>
117+
name.endsWith(className) || name.endsWith(objectName)
118+
}
119+
renderMatches(query, allMatches, node, visitor, printer)
120+
} else renderMatches(query, classMatches, node, visitor, printer)
106121
}
107122
}
108123

src/test/scala/com/lightbend/paradox/apidoc/ApidocDirectiveSpec.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ class ApidocDirectiveSpec extends MarkdownBaseSpec {
4747
"akka.stream.javadsl.Flow$",
4848
"akka.stream.scaladsl.Flow",
4949
"akka.stream.scaladsl.Flow$",
50+
"akka.stream.scaladsl.JavaFlowSupport$",
51+
"akka.stream.javadsl.JavaFlowSupport",
5052
"akka.kafka.scaladsl.Consumer$Control",
5153
"akka.kafka.javadsl.Consumer$Control",
5254
"akka.kafka.scaladsl.Consumer$Control$$anonfun$drainAndShutdown$2",
@@ -155,6 +157,16 @@ class ApidocDirectiveSpec extends MarkdownBaseSpec {
155157
)
156158
}
157159

160+
it should "generate markdown correctly for scaladsl `object` and javadsl `class`" in {
161+
markdown("@apidoc[JavaFlowSupport]") shouldEqual
162+
html(
163+
"""<p><span class="group-scala">
164+
|<a href="https://doc.akka.io/api/akka/2.5/akka/stream/scaladsl/JavaFlowSupport$.html" title="akka.stream.scaladsl.JavaFlowSupport"><code>JavaFlowSupport</code></a></span><span class="group-java">
165+
|<a href="https://doc.akka.io/japi/akka/2.5/?akka/stream/javadsl/JavaFlowSupport.html" title="akka.stream.javadsl.JavaFlowSupport"><code>JavaFlowSupport</code></a></span>
166+
|</p>""".stripMargin
167+
)
168+
}
169+
158170
it should "generate markdown correctly for type parameter and wildcard" in {
159171
markdown("@apidoc[Source[ServerSentEvent, \\_]]") shouldEqual
160172
html(

0 commit comments

Comments
 (0)