1 <?cs 2 # Set global vars for template features based on site and target. 3 ?><?cs 4 if:dac ?><?cs 5 # standard devsite warns on inline js and script tags ?><?cs 6 set:enable_javascript = 1 ?><?cs 7 /if ?> 8 9 <?cs # A link to a package ?><?cs 10 def:package_link(pkg) ?> 11 <a href="<?cs 12 if:!pkg.federatedSite ?><?cs 13 var:toroot ?><?cs 14 /if ?><?cs var:pkg.link ?>"><?cs var:pkg.name ?></a><?cs 15 /def ?><?cs 16 17 # A link to a type, or not if it is a primitive type 18 link: whether to create a link at the top level, always creates links in 19 recursive invocations. 20 Overloaded version to support use of 'nav' parameter, which when true, 21 will not include the generics in the class name (good for sidenav lists) 22 Expects the following fields: 23 .name 24 .link 25 .isPrimitive 26 .superBounds.N.(more links) (... super ... & ...) 27 .extendsBounds.N.(more links) (... extends ... & ...) 28 .typeArguments.N.(more links) (< ... >) ?><?cs 29 def:type_link_impl(type, link) ?><?cs call:type_link_impl2(type, link, "false") ?><?cs /def ?><?cs 30 31 def:type_link_impl2(type, link, nav) ?><?cs 32 if:type.link && link=="true" ?><?cs 33 if:type.federated ?><a href="<?cs var:type.link ?>"><?cs 34 var:type.label ?></a><?cs 35 else ?><a href="<?cs var:toroot ?><?cs var:type.link ?>"><?cs var:type.label ?></a><?cs 36 /if ?><?cs 37 else ?><?cs var:type.label ?><?cs 38 /if ?><?cs 39 if:subcount(type.extendsBounds) ?><?cs 40 each:t=type.extendsBounds ?><?cs 41 if:first(t) ?> extends <?cs else ?> & <?cs /if ?><?cs 42 call:type_link_impl(t, "true") ?><?cs 43 /each ?><?cs 44 /if ?><?cs 45 if:subcount(type.superBounds) ?><?cs 46 each:t=type.superBounds ?><?cs 47 if:first(t) ?> super <?cs else ?> & <?cs /if ?><?cs 48 call:type_link_impl(t, "true") ?><?cs 49 /each ?><?cs 50 /if ?><?cs 51 if:subcount(type.typeArguments) && nav=="false" 52 ?><<?cs each:t=type.typeArguments ?><?cs call:type_link_impl(t, "true") ?><?cs 53 if:!last(t) ?>, <?cs /if ?><?cs 54 /each ?>><?cs 55 /if ?><?cs 56 /def ?><?cs 57 58 def:simple_type_link(type)?><?cs 59 if:type.link?><?cs 60 if:type.federated ?><a href="<?cs var:type.link ?>"><?cs var:type.label ?></a><?cs 61 else ?><a href="<?cs var:toroot ?><?cs var:type.link ?>"><?cs var:type.label ?></a><?cs 62 /if?><?cs 63 else ?><?cs var:type.label ?><?cs 64 /if?><?cs 65 if:subcount(type.typeArguments)?><<?cs 66 each:t=type.typeArguments?><?cs 67 call:type_link_impl(t, "true")?><?cs 68 if:!last(t) ?>, <?cs 69 /if ?><?cs 70 /each ?>><?cs 71 /if ?><?cs 72 /def ?><?cs 73 74 def:class_name(type) ?><?cs call:type_link_impl(type, "false") ?><?cs 75 /def ?><?cs 76 def:type_link2(type,nav) ?><?cs call:type_link_impl2(type, "true", nav) ?><?cs 77 /def ?><?cs 78 def:type_link(type) ?><?cs call:type_link2(type, "false") ?><?cs 79 /def ?><?cs 80 81 # a conditional link. 82 if the "condition" parameter evals to true then the link is displayed 83 otherwise only the text is displayed ?><?cs 84 def:cond_link(text, root, path, condition) ?><?cs 85 if:condition ?><a href="<?cs var:root ?><?cs 86 var:path ?>"><?cs /if ?><?cs var:text ?><?cs 87 if:condition ?></a><?cs /if ?><?cs 88 /def ?><?cs 89 90 # A comma separated parameter list ?><?cs 91 def:parameter_list(params) ?><?cs 92 each:param = params ?><?cs 93 call:simple_type_link(param.type)?> <?cs 94 var:param.name ?><?cs 95 if: name(param)!=subcount(params)-1?>, <?cs /if ?><?cs 96 /each ?><?cs 97 /def ?><?cs 98 99 def:doc_root_override() 100 ?><?cs var:toroot ?><?cs 101 /def ?><?cs 102 # Print a list of tags (e.g. description text ?><?cs 103 def:tag_list(tags) ?><?cs 104 each:tag = tags ?><?cs 105 if:tag.name == "Text" ?><?cs var:tag.text?><?cs 106 elif:tag.kind == "@more" ?><p><?cs 107 elif:tag.kind == "@see" ?><code><a href="<?cs 108 if:!tag.federatedSite ?><?cs 109 var:toroot ?><?cs 110 /if ?><?cs var:tag.href ?>"><?cs var:tag.label ?></a></code><?cs 111 elif:tag.kind == "@linkplain" ?><a href="<?cs 112 if:!tag.federatedSite ?><?cs 113 var:toroot ?><?cs 114 /if ?><?cs var:tag.href ?>"><?cs var:tag.label ?></a></a><?cs 115 elif:tag.kind == "@seeHref" ?><a href="<?cs var:tag.href ?>"><?cs var:tag.label ?></a><?cs 116 elif:tag.kind == "@seeJustLabel" ?><?cs var:tag.label ?><?cs 117 elif:tag.kind == "@value" ?><code><a href="<?cs 118 if:!tag.federatedSite ?><?cs 119 var:toroot ?><?cs 120 /if ?><?cs var:tag.href ?>"><?cs var:tag.text ?></a></code><?cs 121 elif:tag.kind == "@code" ?><code><?cs var:tag.text ?></code><?cs 122 elif:tag.kind == "@samplecode" ?><pre><?cs var:tag.text ?></pre><?cs 123 elif:tag.name == "@sample" ?><pre><?cs var:tag.text ?></pre><?cs 124 elif:tag.name == "@include" ?><?cs var:tag.text ?><?cs 125 elif:tag.kind == "@docRoot" ?><?cs call:doc_root_override() ?><?cs 126 elif:tag.kind == "@sdkCurrent" ?><?cs var:sdk.current ?><?cs 127 elif:tag.kind == "@sdkCurrentVersion" ?><?cs var:sdk.version ?><?cs 128 elif:tag.kind == "@sdkCurrentRelId" ?><?cs var:sdk.rel.id ?><?cs 129 elif:tag.kind == "@sdkPlatformVersion" ?><?cs var:sdk.platform.version ?><?cs 130 elif:tag.kind == "@sdkPlatformApiLevel" ?><?cs var:sdk.platform.apiLevel ?><?cs 131 elif:tag.kind == "@sdkPlatformMajorMinor" ?><?cs var:sdk.platform.majorMinor ?><?cs 132 elif:tag.kind == "@sdkPlatformReleaseDate" ?><?cs var:sdk.platform.releaseDate ?><?cs 133 elif:tag.kind == "@sdkPlatformDeployableDate" ?><?cs var:sdk.platform.deployableDate ?><?cs 134 elif:tag.kind == "@adtZipVersion" ?><?cs var:adt.zip.version ?><?cs 135 elif:tag.kind == "@adtZipDownload" ?><?cs var:adt.zip.download ?><?cs 136 elif:tag.kind == "@adtZipBytes" ?><?cs var:adt.zip.bytes ?><?cs 137 elif:tag.kind == "@adtZipChecksum" ?><?cs var:adt.zip.checksum ?><?cs 138 elif:tag.kind == "@inheritDoc" ?><?cs # This is the case when @inheritDoc is in something 139 that does not inherit from anything?><?cs 140 elif:tag.kind == "@attr" ?><?cs 141 elif:tag.kind == "@usesMathJax" ?><?cs 142 if:devsite ?><script src="/_static/js/managed/mathjax/MathJax.js?config=TeX-AMS_SVG"></script><?cs 143 else ?><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_SVG"></script><?cs 144 /if ?><?cs 145 else ?>{<?cs var:tag.name?> <?cs var:tag.text ?>}<?cs 146 /if ?><?cs 147 /each ?><?cs 148 /def ?><?cs 149 150 # Print output for block tags that are not "standard" javadoc tags ?><?cs 151 def:block_tag_list(tags) ?><?cs 152 each:tag = tags ?><?cs 153 if:tag.kind == "@apiNote" ?> 154 <div class="jd-tagdata"> 155 <h5 class="jd-tagtitle">API Note:</h5> 156 <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul> 157 </div><?cs 158 /if ?><?cs 159 if:tag.kind == "@implSpec" ?> 160 <div class="jd-tagdata"> 161 <h5 class="jd-tagtitle">Implementation Requirements:</h5> 162 <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul> 163 </div><?cs 164 /if ?><?cs 165 if:tag.kind == "@implNote" ?> 166 <div class="jd-tagdata"> 167 <h5 class="jd-tagtitle">Implementation Note:</h5> 168 <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul> 169 </div><?cs 170 /if ?><?cs 171 /each ?><?cs 172 /def ?><?cs 173 174 # Print output for aux tags that are not "standard" javadoc tags ?><?cs 175 def:aux_tag_list(tags) ?><?cs 176 /def ?><?cs 177 178 # Show the short-form description of something. These come from shortDescr and deprecated ?><?cs 179 def:short_descr(obj) ?><?cs 180 if:subcount(obj.deprecated) ?><em><?cs 181 if:obj.deprecatedsince ?> 182 This <?cs var:obj.kind ?> was deprecated 183 in API level <?cs var:obj.deprecatedsince ?>.<?cs 184 else ?> 185 This <?cs var:obj.kind ?> is deprecated.<?cs 186 /if ?> 187 <?cs call:tag_list(obj.deprecated) ?></em><?cs 188 else ?><?cs call:tag_list(obj.shortDescr) ?><?cs 189 if:subcount(obj.annotationdocumentation)?><?cs 190 each:annodoc=obj.annotationdocumentation ?> 191 <div><?cs var:annodoc.text?></div><?cs 192 /each?><?cs /if?><?cs 193 /if ?><?cs 194 /def ?><?cs 195 196 # Show a list of annotations associated with obj 197 # 198 # pre is an HTML string to start the list. 199 # between is an HTML string to include between each successive element. 200 # post is an HTML string to end the list. 201 # for example, call:show_annotations_list(cl, "<p>Annotations: ", "<br />", "</p>") 202 # ?><?cs 203 def:show_annotations_list(obj, pre, between, post) ?><?cs 204 each:anno = obj.showAnnotations ?><?cs 205 if:first(anno) ?><?cs 206 var:pre ?><?cs 207 /if ?> 208 @<?cs var:anno.type.label ?>(<?cs 209 each:elem = anno.elementValues ?><?cs 210 var:elem.name ?> = <?cs 211 var:elem.value ?><?cs 212 if:last(elem) == 0 ?>, <?cs 213 /if ?><?cs 214 /each ?>)<?cs 215 if:last(anno) == 0 ?><?cs 216 var:between ?><?cs 217 /if ?><?cs 218 if:last(anno) ?><?cs 219 var:post ?><?cs 220 /if ?><?cs 221 /each ?><?cs 222 /def ?><?cs 223 224 # Show a comma-separated list of annotations associated with obj ?><?cs 225 def:show_simple_annotations_list(obj, pre, post) ?><?cs 226 call:show_annotations_list(obj, pre, ", ", post) ?><?cs 227 /def ?><?cs 228 229 # Show the red box with the deprecated warning ?><?cs 230 def:deprecated_warning(obj) ?><?cs 231 if:subcount(obj.deprecated) ?><p> 232 <p class="caution"><strong><?cs 233 if:obj.deprecatedsince ?> 234 This <?cs var:obj.kind ?> was deprecated 235 in API level <?cs var:obj.deprecatedsince ?>.<?cs 236 else ?> 237 This <?cs var:obj.kind ?> is deprecated.<?cs 238 /if ?></strong><br/> 239 <?cs call:tag_list(obj.deprecated) ?> 240 </p><?cs 241 /if ?><?cs 242 /def ?><?cs 243 244 # print the See Also: section ?><?cs 245 def:see_also_tags(also) ?><?cs 246 if:subcount(also) ?> 247 <div> 248 <p><b>See also:</b></p> 249 <ul class="nolist"><?cs 250 each:tag=also ?><li><?cs 251 if:tag.kind == "@see" ?><code><a href="<?cs 252 if:!tag.federatedSite ?><?cs 253 var:toroot ?><?cs 254 /if ?><?cs var:tag.href ?>"><?cs 255 var:tag.label ?></a></code><?cs 256 elif:tag.kind == "@seeHref" ?><a href="<?cs var:tag.href ?>"><?cs var:tag.label ?></a><?cs 257 elif:tag.kind == "@seeJustLabel" ?><?cs var:tag.label ?><?cs 258 else ?>[ERROR: Unknown @see kind]<?cs 259 /if ?></li><?cs 260 /each ?> 261 </ul> 262 </div><?cs 263 /if ?> 264 <?cs /def ?><?cs 265 266 # print the API Level ?><?cs 267 def:since_tags(obj) ?><?cs 268 if:reference.apilevels && obj.since ?><?cs 269 if:string.slice(obj.since,0,1) > 0 ?> 270 Added in <?cs 271 if:string.find(obj.since,'.') > -1 272 ?><a href="<?cs var:toroot ?>topic/libraries/support-library/revisions.html">version<?cs 273 else 274 ?><a href="<?cs var:toroot ?>guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level<?cs 275 /if ?> <?cs 276 var:obj.since ?></a><?cs if:obj.sdkextsince ?><br/>Also in <a href="<?cs var:toroot ?>sdkExtensions"><?cs var:obj.sdkextsince ?></a><?cs /if ?><?cs 277 else ?><a data-version-added="<?cs var:obj.since ?>" href="<?cs var:toroot ?>preview/"><b>Added in Android <?cs 278 var:obj.since ?></b></a><?cs if:obj.sdkextsince ?><br/>Also in <a href="<?cs var:toroot ?>sdkExtensions"><?cs var:obj.sdkextsince ?></a><?cs /if ?><?cs 279 /if?><?cs 280 elif:obj.sdkextsince ?> 281 <?cs # This symbol exists in an extension SDK, but not in a finalized dessert ?> 282 Added in <a href="<?cs var:toroot ?>sdkExtensions"><?cs var:obj.sdkextsince ?></a> 283 <?cs 284 /if ?> 285 <?cs if:obj.deprecatedsince ?><?cs 286 if:class.artifact ?><br>Deprecated in version <?cs var:obj.deprecatedsince ?><?cs 287 else ?><br>Deprecated in 288 <a href="<?cs var:toroot ?>guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level 289 <?cs var:obj.deprecatedsince ?></a><?cs 290 /if ?> 291 <?cs /if ?><?cs 292 /def ?><?cs 293 294 # print the artifact ?><?cs 295 def:artifact_tags(obj) ?><?cs 296 if:reference.artifacts && obj.artifact ?> 297 belongs to Maven artifact <?cs var:obj.artifact ?></a><?cs 298 /if ?><?cs 299 /def ?><?cs 300 301 def:federated_refs(obj) ?> 302 <?cs if:subcount(obj.federated) ?> 303 <div> 304 Also: 305 <?cs each:federated=obj.federated ?> 306 <a href="<?cs var:federated.url ?>"><?cs var:federated.name ?></a><?cs 307 if:!last(federated) ?>,<?cs /if ?> 308 <?cs /each ?> 309 </div> 310 <?cs /if ?> 311 <?cs /def ?><?cs 312 313 # 314 # Print the long-form description for something. 315 # Uses the following fields: deprecated descr seeAlso since 316 # 317 ?><?cs 318 def:description(obj) ?><?cs 319 call:deprecated_warning(obj) ?> 320 <p><?cs call:tag_list(obj.descr) ?></p><?cs 321 call:aux_tag_list(obj.descrAux) ?><?cs 322 if:subcount(obj.annotationdocumentation)?><?cs 323 each:annodoc=obj.annotationdocumentation ?> 324 <div><?cs var:annodoc.text?></div><?cs 325 /each?><?cs /if?><?cs 326 if:subcount(obj.attrRefs) ?> 327 <p><b>Related XML Attributes:</b></p> 328 <ul class="nolist"><?cs 329 each:attr=obj.attrRefs ?> 330 <li><a href="<?cs 331 if:!attr.federatedSite ?><?cs 332 var:toroot ?><?cs 333 /if ?><?cs var:attr.href ?>"><?cs var:attr.name ?></a></li><?cs 334 /each ?> 335 </ul><?cs 336 /if ?><?cs 337 if:subcount(obj.blockTags) ?> 338 <?cs call:block_tag_list(obj.blockTags) ?><?cs 339 /if ?><?cs 340 # 341 # Print the @param tags 342 # 343 ?><?cs 344 if:subcount(obj.paramTags) ?> 345 <table class="responsive"> 346 <tr><th colspan=2>Parameters</th></tr><?cs 347 each:param=obj.paramTags ?> 348 <tr> 349 <td><code><?cs 350 if:param.isTypeParameter ?><<?cs 351 /if ?><?cs var:param.name ?><?cs 352 if:param.isTypeParameter ?>><?cs 353 /if ?></code></td> 354 <td width="100%"> 355 <code><?cs var:param.kind ?></code><?cs 356 if:string.find(param.comment.0.text, "<!--") != 0 357 ?>:<?cs # Do not print if param comment is an HTML comment ?><?cs 358 /if ?> <?cs 359 call:tag_list(param.comment) ?><?cs 360 call:aux_tag_list(param.commentAux) ?></td> 361 </tr><?cs 362 /each ?> 363 </table><?cs 364 /if ?><?cs 365 # 366 # Print the @return value 367 # 368 ?><?cs 369 if:subcount(obj.returns) || (subcount(method.returnType) && method.returnType.label != 'void') ?> 370 <table class="responsive"> 371 <tr><th colspan=2>Returns</th></tr> 372 <tr> 373 <td><code><?cs call:type_link(method.returnType) ?></code></td> 374 <td width="100%"><?cs 375 if:subcount(obj.returns) ?><?cs 376 call:tag_list(obj.returns) ?><?cs 377 else ?><!-- no returns description in source --><?cs 378 /if ?><?cs 379 call:aux_tag_list(obj.returnsAux) ?></td> 380 </tr> 381 </table><?cs 382 /if ?><?cs 383 # 384 # Print the throwables 385 # 386 ?><?cs 387 if:subcount(obj.throws) ?> 388 <table class="responsive"> 389 <tr><th colspan=2>Throws</th></tr><?cs 390 each:tag=obj.throws ?> 391 <tr> 392 <td><code><?cs call:type_link(tag.type) ?></code></td> 393 <td width="100%"><?cs call:tag_list(tag.comment) ?></td> 394 </tr><?cs 395 /each ?> 396 </table> 397 <?cs 398 /if ?><?cs 399 call:see_also_tags(obj.seeAlso) ?><?cs 400 /def ?><?cs 401 402 # A table of links to classes with descriptions, as in a package file or the nested classes ?><?cs 403 def:class_link_table(classes) ?><?cs 404 set:count = #1 ?> 405 <table class="jd-sumtable-expando"><?cs 406 each:cl=classes ?> 407 <tr <?cs 408 if:cl.type.since 409 ?>data-version-added="<?cs var:cl.type.since ?>"<?cs 410 /if ?><?cs 411 if:cl.type.deprecatedsince 412 ?> data-version-deprecated="<?cs var:cl.type.deprecatedsince ?>"<?cs 413 /if ?> > 414 <td><?cs call:type_link(cl.type) ?></td> 415 <td width="100%"><?cs call:short_descr(cl) ?> </td> 416 </tr><?cs set:count = count + #1 ?><?cs 417 /each ?> 418 </table><?cs 419 /def ?><?cs 420 421 # A list of links to classes, for use in the side navigation of classes when viewing a package (panel nav) ?><?cs 422 def:class_link_list(label, classes) ?><?cs 423 if:subcount(classes) ?> 424 <li><h2 class="hide-from-toc"><?cs var:label ?></h2> 425 <ul><?cs 426 each:cl=classes ?> 427 <li><?cs call:type_link2(cl.type,"true") ?></li><?cs 428 /each ?> 429 </ul> 430 </li><?cs 431 /if ?><?cs 432 /def ?><?cs 433 434 # A list of links to classes, for use in the side navigation of classes when viewing a class (panel nav) ?><?cs 435 def:list(label, classes) ?><?cs 436 if:subcount(classes) ?> 437 <li><h2 class="hide-from-toc"><?cs var:label ?></h2> 438 <ul><?cs 439 each:cl=classes ?> 440 <li<?cs if:class.name == cl.label?> class="selected"<?cs /if ?>><?cs call:type_link2(cl,"true") ?></li><?cs 441 /each ?> 442 </ul> 443 </li><?cs 444 /if ?><?cs 445 /def ?><?cs 446 447 # A list of links to packages, for use in the side navigation of packages (panel nav) ?><?cs 448 def:package_link_list(packages) ?><?cs 449 each:pkg=packages ?> 450 <li<?cs if:(class.package.name == pkg.name) || (package.name == pkg.name)?> class="selected"<?cs /if ?>><?cs call:package_link(pkg) ?></li><?cs 451 /each ?><?cs 452 /def ?> 453 454 <?cs 455 # An expando trigger 456 ?><?cs 457 def:expando_trigger(id, default) ?> 458 <a href="#" id="<?cs var:id ?>" class="jd-expando-trigger closed"<?cs 459 if:enable_javascript ?> 460 onclick="return toggleInherited(this, null)"<?cs 461 /if ?> > 462 <img id="<?cs var:id ?>-trigger" class="jd-expando-trigger-img" 463 height="34" 464 src="<?cs var:toroot ?>assets/images/styles/disclosure_<?cs 465 if:default == 'closed' ?>down<?cs else ?>up<?cs /if ?>.png" /> 466 </a><?cs 467 /def ?> 468 469 <?cs 470 # An expandable list of classes 471 ?><?cs 472 def:expandable_class_list(id, classes, default) ?> 473 <div id="<?cs var:id ?>" class="showalways" > <?cs 474 if:subcount(classes) <= #20 ?><?cs 475 each:cl=classes ?><?cs 476 call:type_link(cl.type) ?><?cs 477 if:!last(cl) 478 ?>, <?cs 479 /if ?><?cs 480 /each ?><?cs 481 else ?><?cs 482 set:leftovers = subcount(classes) - #15 ?><?cs 483 loop:i = #0, #14, #1 ?><?cs 484 with:cl=classes[i] ?><?cs 485 call:type_link(cl.type) ?>, <?cs 486 /with ?><?cs 487 if:(#i == #14) ?> and <?cs var:leftovers ?> others.<?cs 488 /if ?><?cs 489 /loop ?><?cs 490 /if ?> 491 </div> 492 <div id="<?cs var:id ?>-summary"<?cs 493 if:default == "summary" ?> 494 class="showalways"<?cs 495 /if ?> > 496 <?cs call:class_link_table(classes) ?> 497 </div><?cs 498 /def ?> 499 500 <?cs include:"components.cs" ?> 501