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

GroovyCastException when both @CompileStatic and @Newify are used

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.4.5
    • 2.4.7
    • Static compilation
    • None

    Description

      The following code gives GroovyCastException.

      class Main {
        public static void main(String... args) {
          Test test = new Test()
        }
      }
      
      @CompileStatic @Newify
      class Test {
        private HashMap<String, A> hashMap = [:]
        public Test() {
          set()
          test()
        }
        public void test() {
          hashMap.each() { String string, A a ->
            a.printString()
          }
        }
        public void set() {
          hashMap.put("aaa", B.new("xxx"))
          hashMap.put("bbb", B.new("yyy"))
        }
      }
      
      class A {
        public String string = ""
        public void printString() {
          println(string)
        }
      }
      
      class B extends A {
        public B(String string) {
          this.string = string
        }
      }
      

      The code below is a part of the decompiled Test.class. Groovy tries to cast this instead of a.

      public Object doCall(String string, A a) {
        ((A)ScriptBytecodeAdapter.castToType(((_test_closure1)this).getThisObject(), A.class)).printString();
        return null;
      }
      

      When @CompileStatic is omitted, or when @Newify is omitted and B.new is replaced by new B, the code above gives no exception and runs as expected.

      Attachments

        Activity

          People

            shils Shil Sinha
            Ziphil Natsuki Takanashi
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: