Skip to content

Commit

Permalink
Merge pull request #805 from shalousun/master
Browse files Browse the repository at this point in the history
fix: Generic replacement error causing parsing bug.
  • Loading branch information
shalousun authored Jun 6, 2024
2 parents 4d28eff + 84358a8 commit d22ed6e
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
27 changes: 25 additions & 2 deletions src/main/java/com/ly/doc/utils/DocUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -1066,18 +1066,41 @@ public static List<ApiDocDict> buildDictionary(ApiConfig config, JavaProjectBuil
*/
public static String formatFieldTypeGicName(Map<String, String> genericMap, String[] globGicName, String fieldGicName) {
String gicName = "";
String fieldGicNameCopy = fieldGicName;
String[] gNameArr = DocClassUtil.getSimpleGicName(fieldGicName);
for (String g : gNameArr) {
if (g.length() == 1) {
if (Objects.nonNull(genericMap.get(g))) {
gicName = genericMap.get(g);
}
if (StringUtil.isNotEmpty(gicName)) {
fieldGicName = fieldGicName.replace(g, gicName);
fieldGicNameCopy = replaceGenericParameter(fieldGicName, g, gicName);
}
}
}
return fieldGicName;
return fieldGicNameCopy;
}

/**
* Replaces the specified generic parameter in a string with a given type,
* supporting multi-level generics.
*
* @param baseString The base string
* @param originalGenericParameter The generic parameter to be replaced, like "T"
* @param replacementType The type to replace the original parameter with, like "User"
* @return The modified string
*/
public static String replaceGenericParameter(String baseString, String originalGenericParameter, String replacementType) {
StringBuilder result = new StringBuilder(baseString);
String searchPattern = "<" + originalGenericParameter + ">";
int index = 0;
while ((index = result.indexOf(searchPattern, index)) != -1) {
// Replace the specified generic parameter with the replacement type
result.replace(index, index + searchPattern.length(), "<" + replacementType + ">");
// Update the index to continue searching for the next occurrence
index += replacementType.length() + 2; // +2 for '<' and '>' characters
}
return result.toString();
}

public static String handleConstants(Map<String, String> constantsMap, String value) {
Expand Down
9 changes: 9 additions & 0 deletions src/test/java/com/ly/doc/util/DocUtilTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,13 @@ public void testSplitPathBySlash() {
}
}
}

@Test
public void testReplaceGenericParameter(){
String base = "com.Test<List<T>>";
String originalGeneric = "T";
String replacement = "User";
String result = DocUtil.replaceGenericParameter(base, originalGeneric, replacement);
System.out.println(result); // Output: com.Test<List<Use
}
}

0 comments on commit d22ed6e

Please sign in to comment.