Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-5358

Different ways of extending a class functionality esp. adding getProperty inconsistent

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • 4.0.0
    • groovy-runtime
    • None

    Description

      When getProperty is used e.g., to mimic a Map behaviour, the result differs depending on whether getProperty was defined directly in the class, added through a mixin, or through a metaclass.

      class FooWorksAsMap { // class names the same length as LinkedHashMap to make output pretty
       def getProperty(String foo) { "OK:FooWorksAsMap.$foo" }
      }
      class BarWorksAsMap {}
      class BaxWorksAsMap {}
      @Category(BarWorksAsMap) class C {
       def getProperty(String foo) { "OK:BarWorksAsMap.$foo" }
      }
      BarWorksAsMap.mixin C
      BaxWorksAsMap.metaClass.getProperty = { foo -> "OK:BaxWorksAsMap.$foo" }
      def maps = [new FooWorksAsMap(), new BarWorksAsMap(), new BaxWorksAsMap(),
                 [foo:'OK:LinkedHashMap.foo', class:'OK:LinkedHashMap.class']]
      for (def prop in ['foo','class']) {
       for (def m in maps) {
         def op = "${m.getClass().getSimpleName()}.$prop"
         try { println "$op -> " + m."$prop" }
         catch (t) { println "$op -> FAIL:$t" }
       }
      }
      

      Attachments

        Activity

          People

            emilles Eric Milles
            oc OC
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 0.5h
                0.5h