Fixed ConcurrentModificationException
[hibernate4-maven-plugin] / src / main / java / de / juplo / plugins / hibernate / ModificationTracker.java
index 0282069..7b5791f 100644 (file)
@@ -33,6 +33,7 @@ public class ModificationTracker
   private final Set<String> classNames;
 
   private boolean modified = false;
+  private boolean failed = false;
 
   private final File saved;
   private final MessageDigest digest;
@@ -125,14 +126,28 @@ public class ModificationTracker
 
   boolean modified()
   {
-    modified |= !propertyNames.containsAll(properties.keySet());
-    modified |= !properties.keySet().containsAll(propertyNames);
-    modified |= !classNames.containsAll(classes.keySet());
-    modified |= !classes.keySet().containsAll(classNames);
+    for (String property : new HashSet<String>(properties.keySet()))
+      if (!propertyNames.contains(property))
+      {
+        modified = true;
+        properties.remove(property);
+      }
+     for (String clazz : new HashSet<String>(classes.keySet()))
+      if (!classNames.contains(clazz))
+      {
+        modified = true;
+        classes.remove(clazz);
+      }
     return modified;
   }
 
 
+  void failed()
+  {
+    failed = true;
+  }
+
+
   void load()
   {
     if (saved.isFile() && saved.length() > 0)
@@ -169,6 +184,12 @@ public class ModificationTracker
 
   void save()
   {
+    if (failed)
+    {
+      saved.delete();
+      return;
+    }
+
     if (!modified)
       return;