Public Methode liefert Private Class im Set
Der Code in:
public Set<ModelPair> readModelsToStrings(final String dir) {
return Stream.of(new File(dir).listFiles())
.filter(file -> !file.isDirectory())
.peek(file -> logger.info("Postprocessing model {}", file.getName()))
.map(file -> new ModelPair(file.toPath(), getFileAsString(file)))
.collect(Collectors.toSet());
}
Liefert ein Set<ModelPair>
nach aussen. Die Klasse ModelPair
ist aber in der Klasse private
deklariert...
Weiterhin fällt mir auf, dass hier ein Mix von File
und Path
benutzt wird. Es sollte auf jeden Fall Path
verwendet werden.
public Set<...> readModels(String dir) {
try (var list = Files.list(Paths.get(dir))) {
return = list.filter(Files::isRegularFile).stream().map(intoModel).toSet();
}
}
static Function<Path, ModelPair> intoModel = path -> {
...
return new ModelPai(...);
}
Und ganz Wichtig. Ich sehe schon viel Code aber keinen einzigen Test.
private static ModelPair replaceContent(final ModelPair pair) {
String content = pair.content;
// Remove all Comments
content = content.replaceAll("\\/\\*([\\S\\s]+?)\\*\\/", "");
content = content.replaceAll("(?s)/\\*.*?\\*/", "");
// Remove unwanted annos
content = content.replaceAll("@ApiModel([\\w]+)((.*))", "");
content = content.replaceAll("@ApiModelProperty([\\w]+)((.*))", "");
content = content.replaceAll("Generated([\\w]+)((.*))", "");
// Replace javax
//content = content.replaceAll("Nonnull([\\w]+)((.*))", "");
//content = content.replaceAll("(@\([\\w]+)\\((.*?)\\)(?:\s|$))", "");
return new ModelPair(pair.originalPath, content);
}
Hier sind soo viele RegEx die schief gehen können ? Da würde ich auf jeden Fall Tests zu schreiben. (Mal abgesehen davon, das die Methode private ist??)` Eventuell wäre hier eine Aufteilung zwei Klassen besser. (siehe auch #8 (closed)).