* @param rewrite
*/
private void maintainValuesProperty(
NormalAnnotation normalAnnotation, Map<String, Object> newMemberValues,
AST ast, ASTRewrite rewrite) {
ListRewrite listRewrite = rewrite.getListRewrite(normalAnnotation, NormalAnnotation.VALUES_PROPERTY);
LinkedHashMap<String, Object> existingMemberValues = ASTTools.memberValues(normalAnnotation);
Set<String> existingKeySet = new HashSet<String>(existingMemberValues.keySet());
Set<String> newKeySet = new HashSet<String>(newMemberValues.keySet());
Set<String> commonMembers = new HashSet<String>(existingKeySet);
commonMembers.retainAll(newKeySet);
Set<String> newMembers = new HashSet<String>(newKeySet);
newMembers.removeAll(existingKeySet);
Set<String> removedMembers = new HashSet<String>(existingKeySet);
removedMembers.removeAll(newKeySet);
for(String memberName: commonMembers) {
Object value = newMemberValues.get(memberName);
MemberValuePair memberValuePair =
ASTTools.memberValuePair(normalAnnotation, memberName);
if (value != null) {
MemberValuePair newValuePair = createMemberValuePair(ast, memberName, value);
listRewrite.replace(memberValuePair, newValuePair, null);
} else {
listRewrite.remove(memberValuePair, null);
}
}
for(String memberName: newMembers) {
Object value = newMemberValues.get(memberName);
if (value != null) {
MemberValuePair newValuePair = createMemberValuePair(ast, memberName, value);
// TODO: should attempt to preserve order
listRewrite.insertLast(newValuePair, null);
} else {
// nothing to do
}
}
for(String memberName: removedMembers) {
MemberValuePair memberValuePair =
ASTTools.memberValuePair(normalAnnotation, memberName);
listRewrite.remove(memberValuePair, null);
}
// TODO: earlier implementation; to remove
// for(String memberName: commonMembers) {
// Object value = newMemberValues.get(memberName);