mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8164408: Add module support for @see, @link and @linkplain javadoc tags
Reviewed-by: jjg
This commit is contained in:
parent
9a8ace2c0a
commit
ac2828ddf1
9 changed files with 649 additions and 123 deletions
|
@ -998,7 +998,7 @@ public class HtmlDocletWriter {
|
|||
|
||||
CommentHelper ch = utils.getCommentHelper(element);
|
||||
String tagName = ch.getTagName(see);
|
||||
String seetext = replaceDocRootDir(utils.normalizeNewlines(ch.getText(see)).toString());
|
||||
String seetext = replaceDocRootDir(removeTrailingSlash(utils.normalizeNewlines(ch.getText(see)).toString()));
|
||||
// Check if @see is an href or "string"
|
||||
if (seetext.startsWith("<") || seetext.startsWith("\"")) {
|
||||
return new RawHtml(seetext);
|
||||
|
@ -1010,7 +1010,6 @@ public class HtmlDocletWriter {
|
|||
Content text = plainOrCode(kind == LINK_PLAIN, new RawHtml(seetext));
|
||||
|
||||
TypeElement refClass = ch.getReferencedClass(see);
|
||||
String refClassName = ch.getReferencedClassName(see);
|
||||
Element refMem = ch.getReferencedMember(see);
|
||||
String refMemName = ch.getReferencedMemberName(see);
|
||||
|
||||
|
@ -1018,6 +1017,10 @@ public class HtmlDocletWriter {
|
|||
refMemName = refMem.toString();
|
||||
}
|
||||
if (refClass == null) {
|
||||
ModuleElement refModule = ch.getReferencedModule(see);
|
||||
if (refModule != null && utils.isIncluded(refModule)) {
|
||||
return getModuleLink(refModule, label.isEmpty() ? text : label);
|
||||
}
|
||||
//@see is not referencing an included class
|
||||
PackageElement refPackage = ch.getReferencedPackage(see);
|
||||
if (refPackage != null && utils.isIncluded(refPackage)) {
|
||||
|
@ -1028,9 +1031,11 @@ public class HtmlDocletWriter {
|
|||
return getPackageLink(refPackage, label);
|
||||
} else {
|
||||
// @see is not referencing an included class, module or package. Check for cross links.
|
||||
DocLink elementCrossLink = (configuration.extern.isModule(refClassName))
|
||||
? getCrossModuleLink(utils.elementUtils.getModuleElement(refClassName)) :
|
||||
(refPackage != null) ? getCrossPackageLink(refPackage) : null;
|
||||
String refModuleName = ch.getReferencedModuleName(see);
|
||||
DocLink elementCrossLink = (refPackage != null) ? getCrossPackageLink(refPackage) :
|
||||
(configuration.extern.isModule(refModuleName))
|
||||
? getCrossModuleLink(utils.elementUtils.getModuleElement(refModuleName))
|
||||
: null;
|
||||
if (elementCrossLink != null) {
|
||||
// Element cross link found
|
||||
return links.createLink(elementCrossLink,
|
||||
|
@ -1118,6 +1123,10 @@ public class HtmlDocletWriter {
|
|||
}
|
||||
}
|
||||
|
||||
private String removeTrailingSlash(String s) {
|
||||
return s.endsWith("/") ? s.substring(0, s.length() -1) : s;
|
||||
}
|
||||
|
||||
private Content plainOrCode(boolean plain, Content body) {
|
||||
return (plain || body.isEmpty()) ? body : HtmlTree.CODE(body);
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ import java.util.List;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.lang.model.element.Element;
|
||||
import javax.lang.model.element.ExecutableElement;
|
||||
import javax.lang.model.element.ModuleElement;
|
||||
import javax.lang.model.element.PackageElement;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
import javax.lang.model.type.TypeMirror;
|
||||
|
@ -376,23 +376,18 @@ public class CommentHelper {
|
|||
return null;
|
||||
} else if (utils.isTypeElement(e)) {
|
||||
return (TypeElement) e;
|
||||
} else if (!utils.isPackage(e)) {
|
||||
} else if (!utils.isPackage(e) && !utils.isModule(e)) {
|
||||
return utils.getEnclosingTypeElement(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getReferencedClassName(DocTree dtree) {
|
||||
Utils utils = configuration.utils;
|
||||
Element e = getReferencedClass(dtree);
|
||||
if (e != null) {
|
||||
return utils.isTypeElement(e) ? utils.getSimpleName(e) : null;
|
||||
}
|
||||
public String getReferencedModuleName(DocTree dtree) {
|
||||
String s = getReferencedSignature(dtree);
|
||||
if (s == null) {
|
||||
if (s == null || s.contains("#") || s.contains("(")) {
|
||||
return null;
|
||||
}
|
||||
int n = s.indexOf("#");
|
||||
int n = s.indexOf("/");
|
||||
return (n == -1) ? s : s.substring(0, n);
|
||||
}
|
||||
|
||||
|
@ -423,6 +418,15 @@ public class CommentHelper {
|
|||
return null;
|
||||
}
|
||||
|
||||
public ModuleElement getReferencedModule(DocTree dtree) {
|
||||
Element e = getReferencedElement(dtree);
|
||||
if (e != null && configuration.utils.isModule(e)) {
|
||||
return (ModuleElement) e;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public List<? extends DocTree> getFirstSentenceTrees(List<? extends DocTree> body) {
|
||||
return configuration.docEnv.getDocTrees().getFirstSentence(body);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue