From dab8a063fabe0dd39eff1aa9442eb80464972b0c Mon Sep 17 00:00:00 2001 From: caryhu Date: Fri, 2 Apr 2021 11:16:17 +0800 Subject: [PATCH 1/5] fix encoding error --- pom.xml | 7 ++++--- src/main/java/com/microsoft/lookup/BaseLookup.java | 4 +++- src/main/java/com/microsoft/util/FileUtil.java | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 94fd833..a9f0bf4 100644 --- a/pom.xml +++ b/pom.xml @@ -127,10 +127,11 @@ jackson-dataformat-yaml ${jackson.version} + - com.overzealous + com.kotcrab.remark remark - ${remark.version} + 1.2.0 @@ -157,7 +158,7 @@ - sprin-libs-repo + spring-libs-repo Spring Lib Release repository https://repo.spring.io/libs-release diff --git a/src/main/java/com/microsoft/lookup/BaseLookup.java b/src/main/java/com/microsoft/lookup/BaseLookup.java index 3fd9e99..bb118e8 100644 --- a/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -23,6 +23,7 @@ import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.text.StringEscapeUtils; public abstract class BaseLookup { @@ -173,10 +174,11 @@ protected String determinePackageName(T element) { } protected String determineComment(T element) { - return getDocCommentTree(element) + var commentContent = getDocCommentTree(element) .map(DocCommentTree::getFullBody) .map(this::replaceLinksAndCodes) .orElse(null); + return StringEscapeUtils.unescapeJava(commentContent); } /** diff --git a/src/main/java/com/microsoft/util/FileUtil.java b/src/main/java/com/microsoft/util/FileUtil.java index b029506..22a6a36 100644 --- a/src/main/java/com/microsoft/util/FileUtil.java +++ b/src/main/java/com/microsoft/util/FileUtil.java @@ -2,6 +2,7 @@ import com.microsoft.model.YmlFile; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -16,7 +17,7 @@ public static void dumpToFile(String content, String fileName) { try { Path path = Paths.get(fileName); Files.createDirectories(path.getParent()); - Files.write(path, content.getBytes()); + Files.write(path, content.getBytes(StandardCharsets.UTF_8)); } catch (IOException ioe) { String exception = "Error during dump to file: " + fileName; throw new RuntimeException(exception, ioe); From cd64f8c8468cb4ca31a21d92d57cdd373b9a2a6c Mon Sep 17 00:00:00 2001 From: caryhu Date: Tue, 6 Apr 2021 15:57:50 +0800 Subject: [PATCH 2/5] add test case --- ...icrosoft.samples.noneascii.Offer.Offer.yml | 15 +++++++++ ...eascii.Offer.getReselleeQualifications.yml | 16 ++++++++++ ...eascii.Offer.getResellerQualifications.yml | 16 ++++++++++ ...eascii.Offer.setReselleeQualifications.yml | 17 ++++++++++ ...eascii.Offer.setResellerQualifications.yml | 17 ++++++++++ .../com.microsoft.samples.noneascii.Offer.yml | 31 +++++++++++++++++++ .../com.microsoft.samples.noneascii.yml | 8 +++++ 7 files changed, 120 insertions(+) create mode 100644 src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.Offer.yml create mode 100644 src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.getReselleeQualifications.yml create mode 100644 src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.getResellerQualifications.yml create mode 100644 src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.setReselleeQualifications.yml create mode 100644 src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.setResellerQualifications.yml create mode 100644 src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.yml create mode 100644 src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.yml diff --git a/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.Offer.yml b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.Offer.yml new file mode 100644 index 0000000..c9a51b1 --- /dev/null +++ b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.Offer.yml @@ -0,0 +1,15 @@ +### YamlMime:JavaMember +uid: "com.microsoft.samples.noneascii.Offer.Offer*" +fullName: "com.microsoft.samples.noneascii.Offer.Offer" +name: "Offer" +nameWithType: "Offer.Offer" +members: +- uid: "com.microsoft.samples.noneascii.Offer.Offer()" + fullName: "com.microsoft.samples.noneascii.Offer.Offer()" + name: "Offer()" + nameWithType: "Offer.Offer()" + summary: "初始化Offer类的新实例。" + syntax: "public Offer()" +type: "constructor" +metadata: {} +package: "com.microsoft.samples.noneascii" diff --git a/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.getReselleeQualifications.yml b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.getReselleeQualifications.yml new file mode 100644 index 0000000..99399e7 --- /dev/null +++ b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.getReselleeQualifications.yml @@ -0,0 +1,16 @@ +### YamlMime:JavaMember +uid: "com.microsoft.samples.noneascii.Offer.getReselleeQualifications*" +fullName: "com.microsoft.samples.noneascii.Offer.getReselleeQualifications" +name: "getReselleeQualifications" +nameWithType: "Offer.getReselleeQualifications" +members: +- uid: "com.microsoft.samples.noneascii.Offer.getReselleeQualifications()" + fullName: "com.microsoft.samples.noneascii.Offer.getReselleeQualifications()" + name: "getReselleeQualifications()" + nameWithType: "Offer.getReselleeQualifications()" + syntax: "public String[] getReselleeQualifications()" + returns: + type: "[]" +type: "method" +metadata: {} +package: "com.microsoft.samples.noneascii" diff --git a/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.getResellerQualifications.yml b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.getResellerQualifications.yml new file mode 100644 index 0000000..7d542e7 --- /dev/null +++ b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.getResellerQualifications.yml @@ -0,0 +1,16 @@ +### YamlMime:JavaMember +uid: "com.microsoft.samples.noneascii.Offer.getResellerQualifications*" +fullName: "com.microsoft.samples.noneascii.Offer.getResellerQualifications" +name: "getResellerQualifications" +nameWithType: "Offer.getResellerQualifications" +members: +- uid: "com.microsoft.samples.noneascii.Offer.getResellerQualifications()" + fullName: "com.microsoft.samples.noneascii.Offer.getResellerQualifications()" + name: "getResellerQualifications()" + nameWithType: "Offer.getResellerQualifications()" + syntax: "public String[] getResellerQualifications()" + returns: + type: "[]" +type: "method" +metadata: {} +package: "com.microsoft.samples.noneascii" diff --git a/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.setReselleeQualifications.yml b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.setReselleeQualifications.yml new file mode 100644 index 0000000..ddd4740 --- /dev/null +++ b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.setReselleeQualifications.yml @@ -0,0 +1,17 @@ +### YamlMime:JavaMember +uid: "com.microsoft.samples.noneascii.Offer.setReselleeQualifications*" +fullName: "com.microsoft.samples.noneascii.Offer.setReselleeQualifications" +name: "setReselleeQualifications" +nameWithType: "Offer.setReselleeQualifications" +members: +- uid: "com.microsoft.samples.noneascii.Offer.setReselleeQualifications(java.lang.String[])" + fullName: "com.microsoft.samples.noneascii.Offer.setReselleeQualifications(String[] value)" + name: "setReselleeQualifications(String[] value)" + nameWithType: "Offer.setReselleeQualifications(String[] value)" + parameters: + - name: "value" + type: "[]" + syntax: "public void setReselleeQualifications(String[] value)" +type: "method" +metadata: {} +package: "com.microsoft.samples.noneascii" diff --git a/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.setResellerQualifications.yml b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.setResellerQualifications.yml new file mode 100644 index 0000000..099bdb1 --- /dev/null +++ b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.setResellerQualifications.yml @@ -0,0 +1,17 @@ +### YamlMime:JavaMember +uid: "com.microsoft.samples.noneascii.Offer.setResellerQualifications*" +fullName: "com.microsoft.samples.noneascii.Offer.setResellerQualifications" +name: "setResellerQualifications" +nameWithType: "Offer.setResellerQualifications" +members: +- uid: "com.microsoft.samples.noneascii.Offer.setResellerQualifications(java.lang.String[])" + fullName: "com.microsoft.samples.noneascii.Offer.setResellerQualifications(String[] value)" + name: "setResellerQualifications(String[] value)" + nameWithType: "Offer.setResellerQualifications(String[] value)" + parameters: + - name: "value" + type: "[]" + syntax: "public void setResellerQualifications(String[] value)" +type: "method" +metadata: {} +package: "com.microsoft.samples.noneascii" diff --git a/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.yml b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.yml new file mode 100644 index 0000000..a31822d --- /dev/null +++ b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.Offer.yml @@ -0,0 +1,31 @@ +### YamlMime:JavaType +uid: "com.microsoft.samples.noneascii.Offer" +fullName: "com.microsoft.samples.noneascii.Offer" +name: "Offer" +nameWithType: "Offer" +summary: "代表客户可用的产品形式" +inheritances: +- "" +inheritedMembers: +- "java.lang.Object.clone()" +- "java.lang.Object.equals(java.lang.Object)" +- "java.lang.Object.finalize()" +- "java.lang.Object.getClass()" +- "java.lang.Object.hashCode()" +- "java.lang.Object.notify()" +- "java.lang.Object.notifyAll()" +- "java.lang.Object.toString()" +- "java.lang.Object.wait()" +- "java.lang.Object.wait(long)" +- "java.lang.Object.wait(long,int)" +syntax: "public class Offer" +constructors: +- "com.microsoft.samples.noneascii.Offer.Offer()" +methods: +- "com.microsoft.samples.noneascii.Offer.getReselleeQualifications()" +- "com.microsoft.samples.noneascii.Offer.getResellerQualifications()" +- "com.microsoft.samples.noneascii.Offer.setReselleeQualifications(java.lang.String[])" +- "com.microsoft.samples.noneascii.Offer.setResellerQualifications(java.lang.String[])" +type: "class" +metadata: {} +package: "com.microsoft.samples.noneascii" diff --git a/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.yml b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.yml new file mode 100644 index 0000000..b7ae9d5 --- /dev/null +++ b/src/test/resources/expected-generated-files/com.microsoft.samples.noneascii.yml @@ -0,0 +1,8 @@ +### YamlMime:JavaPackage +uid: "com.microsoft.samples.noneascii" +fullName: "com.microsoft.samples.noneascii" +name: "com.microsoft.samples.noneascii" +classes: +- "com.microsoft.samples.noneascii.Offer" +metadata: {} +package: "com.microsoft.samples.noneascii" From 7a9ed07ec2c38ebc2aa0c7c850ddf1fabe678c60 Mon Sep 17 00:00:00 2001 From: caryhu Date: Tue, 6 Apr 2021 15:58:40 +0800 Subject: [PATCH 3/5] support summary/returndescription/description etc.. --- .../java/com/microsoft/lookup/BaseLookup.java | 4 +- .../com/microsoft/model/MetadataFileItem.java | 3 +- src/main/java/com/microsoft/model/Return.java | 3 +- .../com/microsoft/model/TypeParameter.java | 3 +- .../java/com/microsoft/util/FileUtil.java | 4 +- .../microsoft/samples/noneascii/Offer.java | 48 +++++++++++++++++++ 6 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 src/test/java/com/microsoft/samples/noneascii/Offer.java diff --git a/src/main/java/com/microsoft/lookup/BaseLookup.java b/src/main/java/com/microsoft/lookup/BaseLookup.java index bb118e8..3fd9e99 100644 --- a/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -23,7 +23,6 @@ import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.text.StringEscapeUtils; public abstract class BaseLookup { @@ -174,11 +173,10 @@ protected String determinePackageName(T element) { } protected String determineComment(T element) { - var commentContent = getDocCommentTree(element) + return getDocCommentTree(element) .map(DocCommentTree::getFullBody) .map(this::replaceLinksAndCodes) .orElse(null); - return StringEscapeUtils.unescapeJava(commentContent); } /** diff --git a/src/main/java/com/microsoft/model/MetadataFileItem.java b/src/main/java/com/microsoft/model/MetadataFileItem.java index d219abb..74afd5d 100644 --- a/src/main/java/com/microsoft/model/MetadataFileItem.java +++ b/src/main/java/com/microsoft/model/MetadataFileItem.java @@ -10,6 +10,7 @@ import java.util.List; import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.text.StringEscapeUtils; @JsonPropertyOrder({"uid", "id", "parent", "children", "href", "langs", "isExternal", "name", "nameWithType", "fullName", "overload", "overridden", "type", "package", "summary", "syntax", "inheritance", "implements", "exceptions", @@ -160,7 +161,7 @@ public String getSummary() { } public void setSummary(String summary) { - this.summary = summary; + this.summary = StringEscapeUtils.unescapeJava(summary); } public Syntax getSyntax() { diff --git a/src/main/java/com/microsoft/model/Return.java b/src/main/java/com/microsoft/model/Return.java index 2ac9daf..eb50513 100644 --- a/src/main/java/com/microsoft/model/Return.java +++ b/src/main/java/com/microsoft/model/Return.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.microsoft.util.XrefHelper; +import org.apache.commons.text.StringEscapeUtils; public class Return { @@ -34,7 +35,7 @@ public String getReturnDescription() { } public void setReturnDescription(String returnDescription) { - this.returnDescription = returnDescription; + this.returnDescription = StringEscapeUtils.unescapeJava(returnDescription); } public String getReturnXrefString() { diff --git a/src/main/java/com/microsoft/model/TypeParameter.java b/src/main/java/com/microsoft/model/TypeParameter.java index c4f7bb6..f1f09c3 100644 --- a/src/main/java/com/microsoft/model/TypeParameter.java +++ b/src/main/java/com/microsoft/model/TypeParameter.java @@ -1,6 +1,7 @@ package com.microsoft.model; import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.commons.text.StringEscapeUtils; public class TypeParameter implements Comparable { @@ -21,7 +22,7 @@ public String getDescription() { } public void setDescription(String description) { - this.description = description; + this.description = StringEscapeUtils.unescapeJava(description); } @Override diff --git a/src/main/java/com/microsoft/util/FileUtil.java b/src/main/java/com/microsoft/util/FileUtil.java index 22a6a36..de73093 100644 --- a/src/main/java/com/microsoft/util/FileUtil.java +++ b/src/main/java/com/microsoft/util/FileUtil.java @@ -2,7 +2,7 @@ import com.microsoft.model.YmlFile; import java.io.IOException; -import java.nio.charset.StandardCharsets; +import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -17,7 +17,7 @@ public static void dumpToFile(String content, String fileName) { try { Path path = Paths.get(fileName); Files.createDirectories(path.getParent()); - Files.write(path, content.getBytes(StandardCharsets.UTF_8)); + Files.write(path, content.getBytes(Charset.forName("UTF-8"))); } catch (IOException ioe) { String exception = "Error during dump to file: " + fileName; throw new RuntimeException(exception, ioe); diff --git a/src/test/java/com/microsoft/samples/noneascii/Offer.java b/src/test/java/com/microsoft/samples/noneascii/Offer.java new file mode 100644 index 0000000..b4f0813 --- /dev/null +++ b/src/test/java/com/microsoft/samples/noneascii/Offer.java @@ -0,0 +1,48 @@ +package com.microsoft.samples.noneascii; + + +import java.net.URI; +import java.util.List; + + /** + * 代表客户可用的产品形式 + */ + public class Offer + { + /** + * 初始化Offer类的新实例。 + */ + public Offer() + { + } + + /** + * 获取或设置合作伙伴要求的资格,以便为客户购买优惠。 + */ + private String[] __ResellerQualifications; + + public String[] getResellerQualifications() + { + return __ResellerQualifications; + } + + public void setResellerQualifications(String[] value) + { + __ResellerQualifications = value; + } + + /** + * 获取或设置客户要求合作伙伴为客户购买的资格。 + */ + private String[] __ReselleeQualifications; + + public String[] getReselleeQualifications() + { + return __ReselleeQualifications; + } + + public void setReselleeQualifications(String[] value) + { + __ReselleeQualifications = value; + } + } \ No newline at end of file From b52dc49d8c1d27310d832b6b10f419b8bf82903c Mon Sep 17 00:00:00 2001 From: caryhu Date: Tue, 6 Apr 2021 16:57:46 +0800 Subject: [PATCH 4/5] change remark.version to 1.2.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a9f0bf4..7b4e6a9 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ 4.2 2.6 1.9 - 1.1.0 + 1.2.0 @@ -131,7 +131,7 @@ com.kotcrab.remark remark - 1.2.0 + ${remark.version} From 325886cc61c739ef32a40a344187435d9c639217 Mon Sep 17 00:00:00 2001 From: caryhu Date: Tue, 6 Apr 2021 17:03:29 +0800 Subject: [PATCH 5/5] update test case --- ...om.microsoft.samples.subpackage.Person.yml | 2 +- .../expected-generated-files/toc.yml | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml b/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml index 09fa43c..7fe6605 100644 --- a/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml +++ b/src/test/resources/expected-generated-files/com.microsoft.samples.subpackage.Person.yml @@ -3,7 +3,7 @@ uid: "com.microsoft.samples.subpackage.Person" fullName: "com.microsoft.samples.subpackage.Person" name: "Person" nameWithType: "Person" -summary: "Class that describes some person This comment has links to:\n\n * Owner class \n * Its inner class \n * Its method \n * Its method without params \n * Its public field \n * Another class which used here \n * Another class which not used here \n * Broken link \n * Plain link \n * Link that starts from '\\#' \n * Link with label \n\nThis is an \"at\" symbol: @" +summary: "Class that describes some person This comment has links to:\n\n * Owner class \n * Its inner class \n * Its method \n * Its method without params \n * Its public field \n * Another class which used here \n * Another class which not used here \n * Broken link \n * Plain link \n * Link that starts from '#' \n * Link with label \n\nThis is an \"at\" symbol: @" inheritances: - "" inheritedMembers: diff --git a/src/test/resources/expected-generated-files/toc.yml b/src/test/resources/expected-generated-files/toc.yml index 63b653f..33ebee3 100644 --- a/src/test/resources/expected-generated-files/toc.yml +++ b/src/test/resources/expected-generated-files/toc.yml @@ -149,6 +149,27 @@ - uid: "com.microsoft.samples.commentinheritance.Viviparous.giveBirth*" name: "giveBirth" type: "method" +- uid: "com.microsoft.samples.noneascii" + name: "com.microsoft.samples.noneascii" + items: + - uid: "com.microsoft.samples.noneascii.Offer" + name: "Offer" + items: + - uid: "com.microsoft.samples.noneascii.Offer.Offer*" + name: "Offer" + type: "constructor" + - uid: "com.microsoft.samples.noneascii.Offer.getReselleeQualifications*" + name: "getReselleeQualifications" + type: "method" + - uid: "com.microsoft.samples.noneascii.Offer.getResellerQualifications*" + name: "getResellerQualifications" + type: "method" + - uid: "com.microsoft.samples.noneascii.Offer.setReselleeQualifications*" + name: "setReselleeQualifications" + type: "method" + - uid: "com.microsoft.samples.noneascii.Offer.setResellerQualifications*" + name: "setResellerQualifications" + type: "method" - uid: "com.microsoft.samples.offers" name: "com.microsoft.samples.offers" items: