I ran into this little problem whilst working on the groovy-vfs plugin for Gradle.

The plugin has a map that gets serialized (as per what Gradle does with task attributes). I can simplify it to this bit of Groovy.

   class Task {

      // it does not matter what the content of the closure is; it is
   always the same
      final static def clo = { }

      @Input  // <-- That is just a Gradle annotation
      Map getMap1() {
        [ overwrite : clo, recursive : true ]
      }

   }

The problem lies herein that when getMap1 is serialized and subsequently deserialized, the deserialized map is not equivalent of the original map1. Essentialy the equivalent of the following code

   def m1 = [ a : {} ]
   def m2 = [ a : {} ]

   assert m1 == m2 // fails

Obviously what I am seeing is not unique to Gradle. I can understand at a high level why it is happening, but I was wonder if there is some other way to achieve the result of comparing two closures for some form of equivalence.

--
Schalk W. Cronjé
Twitter / Ello / Toeter : @ysb33r

Reply via email to