Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a1cea1a

Browse files
[composer][SampleCode]Update code mark for sample code snippet in Javadoc (#470)
* Update code mark for sample code snippet in Javadoc
1 parent ce36877 commit a1cea1a

File tree

4 files changed

+47
-17
lines changed

4 files changed

+47
-17
lines changed

src/main/java/com/google/api/generator/engine/ast/JavaDocComment.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,17 @@ public Builder addComment(String comment) {
8484
return this;
8585
}
8686

87+
// TODO(developer): <pre> and {@code} is not supporting rendering '@' character, it is evaluated
88+
// as Javadoc tag. Please handle '@' character if need in the future. More details at
89+
// https://reflectoring.io/howto-format-code-snippets-in-javadoc/#pre--code
8790
public Builder addSampleCode(String sampleCode) {
88-
componentsList.add("<pre><code>");
91+
componentsList.add("<pre>{@code");
8992
Arrays.stream(sampleCode.split("\\r?\\n"))
9093
.forEach(
9194
line -> {
92-
componentsList.add(HtmlEscaper.process(line));
95+
componentsList.add(line);
9396
});
94-
componentsList.add("</code></pre>");
97+
componentsList.add("}</pre>");
9598
return this;
9699
}
97100

src/test/java/com/google/api/generator/engine/ast/JavaDocCommentTest.java

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ public void createJavaDocComment_specialCharacter() {
4646
+ "&amp;\"\\f\n"
4747
+ "`'{@literal @}&#42;/\n"
4848
+ "<p> title: GetBigBook: &lt;War and Peace&gt;\n"
49-
+ "<pre><code>\n"
50-
+ "ApiFuture&lt;Shelf&gt; future ="
49+
+ "<pre>{@code\n"
50+
+ "ApiFuture<Shelf> future ="
5151
+ " libraryClient.createShelfCallable().futureCall(request);\n"
52-
+ "</code></pre>\n"
52+
+ "}</pre>\n"
5353
+ "@throws Exception This is an exception.";
5454
assertEquals(javaDocComment.comment(), expected);
5555
}
@@ -62,12 +62,35 @@ public void createJavaDocComment_sampleCode() {
6262
JavaDocComment.builder().addComment(comment).addSampleCode(sampleCode).build();
6363
String expected =
6464
"sample codes:\n"
65-
+ "<pre><code>\n"
65+
+ "<pre>{@code\n"
6666
+ "resource = project/{project}/shelfId/{shelfId}\n"
67-
+ "</code></pre>";
67+
+ "}</pre>";
6868
assertEquals(javaDocComment.comment(), expected);
6969
}
7070

71+
@Test
72+
public void createJavaDocComment_sampleCodePreserveIndentAndLineBreaks() {
73+
String comment = "sample codes:";
74+
String formattedSampleCode =
75+
"SubscriptionAdminSettings subscriptionAdminSettings =\n"
76+
+ " SubscriptionAdminSettings.newBuilder().setEndpoint(myEndpoint).build();\n";
77+
String badFormattingSampleCode =
78+
"SubscriptionAdminSettings subscriptionAdminSettings =\n"
79+
+ " SubscriptionAdminSettings\n"
80+
+ " .newBuilder()\n"
81+
+ " .setEndpoint(myEndpoint)\n"
82+
+ " .build();\n";
83+
JavaDocComment formattedJavaDoc =
84+
JavaDocComment.builder().addComment(comment).addSampleCode(formattedSampleCode).build();
85+
JavaDocComment badFormatJavaDoc =
86+
JavaDocComment.builder().addComment(comment).addSampleCode(badFormattingSampleCode).build();
87+
String expectedFormatted = comment.concat("\n<pre>{@code\n" + formattedSampleCode + "}</pre>");
88+
String expectedBadFormat =
89+
comment.concat("\n<pre>{@code\n" + badFormattingSampleCode + "}</pre>");
90+
assertEquals(formattedJavaDoc.comment(), expectedFormatted);
91+
assertEquals(badFormatJavaDoc.comment(), expectedBadFormat);
92+
}
93+
7194
@Test
7295
public void createJavaDocComment_multipleComments() {
7396
// Add methods, like `addComment()`, should add components at any place,
@@ -198,4 +221,8 @@ public void createavaDocComment_allComponents() {
198221
+ "@deprecated Use the {@link ArchivedBookName} class instead.";
199222
assertEquals(javaDocComment.comment(), expected);
200223
}
224+
225+
private static String createLines(int numLines) {
226+
return new String(new char[numLines]).replace("\0", "%s");
227+
}
201228
}

src/test/java/com/google/api/generator/engine/goldens/JavaCodeGeneratorTest.golden

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ import java.util.Stack;
2626
/**
2727
* Service Description: This is a test comment.
2828
*
29-
* <pre><code>
29+
* <pre>{@code
3030
* LibraryServiceStub libServiceStub = new LibraryServiceStub()
31-
* </code></pre>
31+
* }</pre>
3232
*
3333
* <ol>
3434
* <li>A "flattened" method.

src/test/java/com/google/api/generator/engine/writer/JavaWriterVisitorTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -513,23 +513,23 @@ public void writeJavaDocCommentStatement_allComponents() {
513513
"* this is a test comment\n",
514514
"* <p> This class provides the ability to make remote calls to the backing service"
515515
+ " through method calls that map to API methods. Sample code to get started:\n",
516-
"* <pre><code>\n",
516+
"* <pre>{@code\n",
517517
"* try (boolean condition = false) {\n",
518518
"* int x = 3;\n",
519519
"* }\n",
520-
"* </code></pre>\n",
520+
"* }</pre>\n",
521521
"* <p> The surface of this class includes several types of Java methods for each of"
522522
+ " the API's methods:\n",
523523
"* <ol>\n",
524524
"* <li> A flattened method.\n",
525525
"* <li> A request object method.\n",
526526
"* <li> A callable method.\n",
527527
"* </ol>\n",
528-
"* <pre><code>\n",
528+
"* <pre>{@code\n",
529529
"* try (boolean condition = false) {\n",
530530
"* int x = 3;\n",
531531
"* }\n",
532-
"* </code></pre>\n",
532+
"* }</pre>\n",
533533
"* @param shelfName The name of the shelf where books are published to.\n",
534534
"* @throws com.google.api.gax.rpc.ApiException if the remote call fails.\n",
535535
"* @deprecated Use the {@link ArchivedBookName} class instead.\n",
@@ -627,10 +627,10 @@ public void writeJavaDocComment_specialChar() {
627627
"/**\n",
628628
"* The API has a collection of [Shelf][google.example.library.v1.Shelf] resources\n",
629629
"* named `bookShelves/&#42;`\n",
630-
"* <pre><code>\n",
631-
"* ApiFuture&lt;Shelf&gt; future ="
630+
"* <pre>{@code\n",
631+
"* ApiFuture<Shelf> future ="
632632
+ " libraryClient.createShelfCallable().futureCall(request);\n",
633-
"* </code></pre>\n",
633+
"* }</pre>\n",
634634
"* <ol>\n",
635635
"* <li> A \"flattened\" method.\n",
636636
"* <li> A \"request object\" method.\n",

0 commit comments

Comments
 (0)