Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -201,16 +201,44 @@ private static void collectLinkedTag(IJavaElement element, TagElement t, StringB
if (t.fragments().size() > 0) {
try {
String[] res;
String linkTitle;
String linkTitle = null;
if (t.fragments().size() == 2) {
linkTitle = ((TextElement) t.fragments().get(0)).getText();
res = collectLinkElement((ASTNode) children.get(1));
} else {

res = collectLinkElement((ASTNode) children.get(0));
if (res[0].isEmpty() && children.get(0).toString().startsWith("#") && res.length > 1) {// member implicitly refers to the current class
linkTitle = res[1];
if (t.fragments().get(0) instanceof MethodRef methodRef) {
if (methodRef.getName().isSimpleName() && !methodRef.getName().getIdentifier().isEmpty() && methodRef.getQualifier() != null && methodRef.getQualifier().isSimpleName()
&& !methodRef.getQualifier().getFullyQualifiedName().isEmpty()) {
linkTitle = methodRef.getQualifier().getFullyQualifiedName() + "." + methodRef.getName().getIdentifier();
@SuppressWarnings("unchecked")
List<MethodRefParameter> params = methodRef.parameters();
for (int i = 0; i < params.size(); i++) {
if (i == 0) {
linkTitle += "(";
}
linkTitle += params.get(i).toString();
if (i < params.size() - 1) {
linkTitle += ", ";
}
if (i == params.size() - 1) {
linkTitle += ")";
}
}
if (params.size() == 0) {
linkTitle += "()";
}

} else if (methodRef.getQualifier() == null) {
linkTitle = methodRef.getName().getIdentifier() + "()";
}
} else {
linkTitle = res[0];
if (res[0].isEmpty() && children.get(0).toString().startsWith("#") && res.length > 1) {// member implicitly refers to the current class
linkTitle = res[1];
} else {
linkTitle = res[0] + "." + res[1];
}
}
}
buf.append("[" + linkTitle + "]");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1124,4 +1124,92 @@ public void testHoverInlineLinkTagInMarkdown_02() throws Exception {
actual = ResourceUtils.dos2Unix(actual);
assertEquals(expectedJavadoc.toString(), actual.stripTrailing(), "Unexpected hover ");
}

enum HoverSignatureCase {
FIELD_REF("Ball.xxx", 3, 9),
SELF_METHOD("newMethodBeingLinkedToo()", 6, 9),
METHOD_REF("Ball.abc()", 9, 9),
CTOR_REF("Ball.Ball", 12, 9),
CTOR_X("Ball.Ball(int x)", 15, 9),
CTOR_Y("Ball.Ball(String y)", 18,9),
CTOR_MANY("Ball.Ball(String y, int i, Double x)", 21, 9);

final String link;
final int line;
final int column;

HoverSignatureCase(String link, int line, int column) {
this.link = link;
this.line = line;
this.column = column;
}
}

@Test
public void testJavadocHoverShowFullSignature3690_01() throws Exception {
String name = "java25";
importProjects("eclipse/" + name);
IProject project = getProject(name);
IJavaProject javaProject = JavaCore.create(project);
IPackageFragmentRoot packageFragmentRoot = javaProject.getPackageFragmentRoot(project.getFolder("src/main/java"));
IPackageFragment pack1 = packageFragmentRoot.createPackageFragment("test", false, null);
StringBuilder buf = new StringBuilder();
//@formatter:off
buf.append("""
package test;
public class Apple {
/// {@link Ball#xxx}
void foo(){}

/// {@link #newMethodBeingLinkedToo()}
void foo1(){}

/// {@link Ball#abc()}
void voo(){}

/// {@link Ball#Ball}
void voo1(){}

/// {@link Ball#Ball(int x)}
void voo2(){}

/// {@link Ball#Ball(String y)}
void voo3(){}

/// {@link Ball#Ball(String y, int i, Double x)}
void voo4(){}

void newMethodBeingLinkedToo(){}
}
class Ball {
private String xxx;
Ball(int x){}
Ball(String y){}
void abc(){}
}
""");
//@formatter:on
ICompilationUnit cu = pack1.createCompilationUnit("Markdown.java", buf.toString(), false, null);
for (HoverSignatureCase hovercase : HoverSignatureCase.values()) {
enumLinkTest(cu, hovercase.line, hovercase.column, hovercase.link);
}
}

void enumLinkTest(ICompilationUnit cu, int line, int column, String link) {
Hover hover = getHover(cu, line, column);
assertNotNull(hover);
assertEquals(3, hover.getContents().getLeft().size());

String actual = hover.getContents().getLeft().get(1).getLeft();
int hashIndex = actual.lastIndexOf('#');
int endIndex = actual.lastIndexOf(')');
String lineNbr = actual.substring(hashIndex + 1, endIndex);
String uri = JDTUtils.toURI(cu) + "#" + lineNbr;
//@formatter:off
String expectedJavadoc = "[" + link +"](" + uri +")";
//@formatter:on

actual = ResourceUtils.dos2Unix(actual);
assertEquals(expectedJavadoc.toString(), actual.stripTrailing(), "Unexpected hover ");
}
}