private Collection<Member> gatherFinalMembers(List<Member> members, CompilationUnit cu) {
Map<String, Member> memberMap = new LinkedHashMap<>();
for (Member member : members) {
String key = member.getKey();
if (!memberMap.containsKey(key)) {
memberMap.put(key, member);
} else {
BodyDeclaration<?> copy = member.getDeclaration().clone();
if (copy instanceof ConstructorDeclaration) {
((ConstructorDeclaration) copy).setBody(JavaParser.parseBlock("{}"));
((ConstructorDeclaration) copy).setComment(null);
} else if (copy instanceof MethodDeclaration) {
((MethodDeclaration) copy).setBody(null);
((MethodDeclaration) copy).setComment(null);
} else if (copy instanceof FieldDeclaration) {
((FieldDeclaration) copy).getVariable(0).setInitializer((Expression) null);
((FieldDeclaration) copy).setComment(null);
}
copy.setAnnotations(new NodeList<>());
Logger.getGlobal().warning(String.format("Suppressing already-present generated member in type %s: %s",
cu.getType(0).getNameAsString(), copy.toString()));
}
}
return memberMap.values();
}