Skip to content

Commit 2440bbb

Browse files
incorporated code-review comments
1 parent dac1622 commit 2440bbb

2 files changed

Lines changed: 88 additions & 12 deletions

File tree

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/javadoc/JavadocContentAccess2.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,9 @@ private static void collectTagElements(String content, IJavaElement element, Tag
166166
while (!queue.isEmpty()) {
167167
ASTNode e = queue.pop();
168168
if (e instanceof TagElement t) {
169-
if ("@link".equals(t.getTagName()) || "@linkplain".equals(t.getTagName())) {
169+
if (TagElement.TAG_LINK.equals(t.getTagName()) || TagElement.TAG_LINKPLAIN.equals(t.getTagName())) {
170170
collectLinkedTag(element, t, buf);
171-
} else if ("@code".equals(t.getTagName()) || "@literal".equals(t.getTagName())) {
171+
} else if (TagElement.TAG_CODE.equals(t.getTagName()) || TagElement.TAG_LITERAL.equals(t.getTagName())) {
172172
collectCodeAndLiteralTag(element, t, buf);
173173
} else {
174174
collectTagElements(content, element, t, buf);
@@ -200,14 +200,30 @@ private static void collectTagElements(String content, IJavaElement element, Tag
200200
private static void collectCodeAndLiteralTag(IJavaElement element, TagElement t, StringBuilder buf) {
201201
if (t.fragments().size() > 0) {
202202
try {
203-
if (t.fragments().size() == 1) {
204-
String code = ((TextElement) t.fragments().get(0)).getText();
205-
if ("@code".equals(t.getTagName())) {
206-
buf.append("`" + code + "`");
207-
} else if ("@literal".equals(t.getTagName())) {
208-
// escape chars applied for <>*^&\`[]
209-
code = code.replaceAll("([<>*^&\\\\`\\[\\]])", "\\\\$1");
210-
buf.append(code);
203+
if (t.fragments().size() > 0) {
204+
if (TagElement.TAG_CODE.equals(t.getTagName())) {
205+
if (t.fragments().size() == 1) {
206+
buf.append("`" + ((TextElement) t.fragments().get(0)).getText().strip() + "`");
207+
} else {
208+
String code;
209+
for (int i = 0; i < t.fragments().size(); i++) {
210+
code = ((TextElement) t.fragments().get(i)).getText().strip();
211+
if (i == 0) {
212+
buf.append("`" + code);
213+
} else if (i == (t.fragments().size() - 1)) {
214+
buf.append(code + "`");
215+
} else {
216+
buf.append(code);
217+
}
218+
}
219+
}
220+
} else if (TagElement.TAG_LITERAL.equals(t.getTagName())) {
221+
String code;
222+
for (int i = 0; i < t.fragments().size(); i++) {
223+
code = ((TextElement) t.fragments().get(i)).getText().strip();
224+
code = code.replaceAll("([<>*^&\\\\`\\[\\]])", "\\\\$1");
225+
buf.append(code);
226+
}
211227
}
212228
}
213229
} catch (Exception e) {

org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandlerTest.java

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,7 +1071,7 @@ public void testHoverMarkdownWithCodeTag_01() throws Exception {
10711071
assertEquals(2, hover.getContents().getLeft().size());
10721072
StringBuilder expectedJavadoc = new StringBuilder();
10731073
//@formatter:off
1074-
expectedJavadoc.append("` List<String>` ");
1074+
expectedJavadoc.append("`List<String>` ");
10751075
//@formatter:on
10761076
String actual = hover.getContents().getLeft().get(1).getLeft();
10771077
actual = ResourceUtils.dos2Unix(actual);
@@ -1098,7 +1098,67 @@ public void testHoverMarkdownWithCodeTag_02() throws Exception {
10981098
assertEquals(2, hover.getContents().getLeft().size());
10991099
StringBuilder expectedJavadoc = new StringBuilder();
11001100
//@formatter:off
1101-
expectedJavadoc.append(" List\\<String\\> \\<\\>\\*\\^\\&\\`\\[\\] ");
1101+
expectedJavadoc.append("List\\<String\\> \\<\\>\\*\\^\\&\\`\\[\\] ");
1102+
//@formatter:on
1103+
String actual = hover.getContents().getLeft().get(1).getLeft();
1104+
actual = ResourceUtils.dos2Unix(actual);
1105+
assertEquals(expectedJavadoc.toString(), actual, "Unexpected hover ");
1106+
}
1107+
1108+
@Test
1109+
public void testHoverMarkdownWithCodeTag_03() throws Exception {
1110+
String name = "java25";
1111+
importProjects("eclipse/" + name);
1112+
IProject project = getProject(name);
1113+
IJavaProject javaProject = JavaCore.create(project);
1114+
IPackageFragmentRoot packageFragmentRoot = javaProject.getPackageFragmentRoot(project.getFolder("src/main/java"));
1115+
IPackageFragment pack1 = packageFragmentRoot.createPackageFragment("test", false, null);
1116+
StringBuilder buf = new StringBuilder();
1117+
//@formatter:off
1118+
buf.append("package test;\n"
1119+
+ "/// Here's some code {@code \n"
1120+
+ "/// List<String> list = List.of(\"Hello World!\");\n"
1121+
+ "/// } \n"
1122+
+ "/// that does something.\n"
1123+
+ "public class Markdown{}\n");
1124+
//@formatter:on
1125+
ICompilationUnit cu = pack1.createCompilationUnit("Test.java", buf.toString(), false, null);
1126+
Hover hover = getHover(cu, 5, 14);
1127+
assertNotNull(hover);
1128+
assertEquals(2, hover.getContents().getLeft().size());
1129+
//@formatter:off
1130+
StringBuilder expectedJavadoc = new StringBuilder();
1131+
expectedJavadoc.append("Here's some code `List<String> list = List.of(\"Hello World!\");` that does something.");
1132+
//@formatter:on
1133+
String actual = hover.getContents().getLeft().get(1).getLeft();
1134+
actual = ResourceUtils.dos2Unix(actual);
1135+
assertEquals(expectedJavadoc.toString(), actual, "Unexpected hover ");
1136+
}
1137+
1138+
@Test
1139+
public void testHoverMarkdownWithCodeTag_04() throws Exception {
1140+
String name = "java25";
1141+
importProjects("eclipse/" + name);
1142+
IProject project = getProject(name);
1143+
IJavaProject javaProject = JavaCore.create(project);
1144+
IPackageFragmentRoot packageFragmentRoot = javaProject.getPackageFragmentRoot(project.getFolder("src/main/java"));
1145+
IPackageFragment pack1 = packageFragmentRoot.createPackageFragment("test", false, null);
1146+
StringBuilder buf = new StringBuilder();
1147+
//@formatter:off
1148+
buf.append("package test;\n"
1149+
+ "/// Here's some code {@literal \n"
1150+
+ "/// List<String> list = List.of(\"Hello World!\");\n"
1151+
+ "/// } \n"
1152+
+ "/// that does something.\n"
1153+
+ "public class Markdown{}\n");
1154+
//@formatter:on
1155+
ICompilationUnit cu = pack1.createCompilationUnit("Test.java", buf.toString(), false, null);
1156+
Hover hover = getHover(cu, 5, 14);
1157+
assertNotNull(hover);
1158+
assertEquals(2, hover.getContents().getLeft().size());
1159+
//@formatter:off
1160+
StringBuilder expectedJavadoc = new StringBuilder();
1161+
expectedJavadoc.append("Here's some code List\\<String\\> list = List.of(\"Hello World!\");} that does something.");
11021162
//@formatter:on
11031163
String actual = hover.getContents().getLeft().get(1).getLeft();
11041164
actual = ResourceUtils.dos2Unix(actual);

0 commit comments

Comments
 (0)