17
17
package com .lightbend .paradox .apidoc
18
18
19
19
import com .lightbend .paradox .markdown .InlineDirective
20
+ import com .lightbend .paradox .markdown .Writer
20
21
import org .pegdown .Printer
21
22
import org .pegdown .ast .DirectiveNode .Source
22
23
import org .pegdown .ast .{DirectiveNode , Visitor }
23
24
24
- class ApidocDirective (allClassesAndObjects : IndexedSeq [String ], properties : Map [String , String ])
25
- extends InlineDirective (" apidoc" ) {
25
+ class ApidocDirective (allClassesAndObjects : IndexedSeq [String ], ctx : Writer .Context ) extends InlineDirective (" apidoc" ) {
26
26
final val JavadocProperty = raw """ javadoc\.(.*)\.base_url """ .r
27
- final val JavadocBaseUrls = properties.collect {
27
+ final val JavadocBaseUrls = ctx. properties.collect {
28
28
case (JavadocProperty (pkg), url) => pkg -> url
29
29
}
30
30
@@ -86,7 +86,7 @@ class ApidocDirective(allClassesAndObjects: IndexedSeq[String], properties: Map[
86
86
val regex = (query.pattern.replaceAll(" \\ ." , " \\\\ ." ).replaceAll(" \\ *" , " .*" ) + " $" ).r
87
87
allClasses.filter(cls => regex.findFirstMatchIn(cls).isDefined) match {
88
88
case Seq () =>
89
- throw new java.lang. IllegalStateException (s " Class not found for @apidoc[ $query] " )
89
+ ctx.error (s " Class not found for @apidoc[ $query] " , node )
90
90
case results =>
91
91
renderMatches(query, results, node, visitor, printer)
92
92
}
@@ -139,9 +139,12 @@ class ApidocDirective(allClassesAndObjects: IndexedSeq[String], properties: Map[
139
139
140
140
matches.size match {
141
141
case 0 =>
142
- throw new java.lang. IllegalStateException (s " No matches found for $query" )
142
+ ctx.error (s " No matches found for apidoc query [ $query] " , node )
143
143
case 1 if matches(0 ).contains(" adsl" ) =>
144
- throw new java.lang.IllegalStateException (s " Match for $query only found in one language: ${matches(0 )}" )
144
+ ctx.error(
145
+ s " Match for apidoc query [ $query] only found in one language: ${matches(0 )}" ,
146
+ node
147
+ )
145
148
case 1 =>
146
149
val pkg = matches(0 )
147
150
syntheticNode(" scala" , " scala" , query.scalaLabel(pkg), pkg + scalaClassSuffix, sAnchor, node).accept(visitor)
@@ -163,9 +166,10 @@ class ApidocDirective(allClassesAndObjects: IndexedSeq[String], properties: Map[
163
166
}
164
167
})
165
168
case n =>
166
- throw new java.lang. IllegalStateException (
169
+ ctx.error (
167
170
s " $n matches found for $query, but not javadsl/scaladsl: ${matches.mkString(" , " )}. " +
168
- s " You may want to use the fully qualified class name as @apidoc[fqcn] instead of @apidoc[ $query]. "
171
+ s " You may want to use the fully qualified class name as @apidoc[fqcn] instead of @apidoc[ $query]. " ,
172
+ node
169
173
)
170
174
}
171
175
}
0 commit comments