Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-5989 Inner Class Issues
  3. GROOVY-4862

propertyMissing / methodMissing called on outer instead of inner class



    • Type: Sub-task
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 1.7.2, 1.7.10, 1.8.0
    • Fix Version/s: None
    • Component/s: groovy-runtime
    • Labels:
    • Environment:
      Win7 64, JDK 1.6.0_17


      I have an outer FactoryClass creating instances of an InnerClass:

      class MyFactory {
          static def createMyInner(String name) {
            return new MyInnerClass(name)
          static class MyInnerClass {
      //      def prop = "InnerProperty"
            String name
            MyInnerClass(String name) {
              this.name = name

      Now I create an Instance of MyInnerClass and try to access a non-existent property or method on it:

          def myImpl = MyFactory.createMyInner("InnerClass")
          def prop = myImpl.prop

      The following error occurs:

        groovy.lang.MissingFieldException: No such field: prop for class: MyFactory

      When I uncomment the line

        def prop = "InnerProperty"

      it is correctly resolved.
      But if I try to add propertyMissing() to my InnerClass:

          static class MyInnerClass {
            def propertyMissing(name) {
              new MyInnerClass(name)

      the same error persists.

      I read (here: http://groovy.329449.n5.nabble.com/methodMissing-message-td4288343.html#a4305333) that inner classes will get an automatic propertyMissing() from the compiler, delegating to their outer class. Is this the root of the problem here?

      In my Opinion, several things should be changed here:
      1) Existing propertyMissing()-implementations should not be disregarded (this is critical to me!)
      2) The error message should state correctly that InnerClass does not have the specified property
      3) The same goes for methodMissing() (This is going to be critical for me verry soon, too!)

      The problem occurs regardless of MyFactory being a stand-alone class or an inner class of the executing code (f.e. test)

      I'm not good with jUnit, I hope Spock is fine, too.


          Issue Links



              • Assignee:
                myles-g Markus Günther
              • Votes:
                5 Vote for this issue
                4 Start watching this issue


                • Created: