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

groovyc doesn't keep RetentionPolicy in generated bytecode

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Not A Problem
    • Affects Version/s: 2.5.7
    • Fix Version/s: None
    • Component/s: Compiler
    • Labels:
      None

      Description

       

      $ groovyc -v
      Groovy compiler version 2.5.7
      Copyright 2003-2019 The Apache Software Foundation. http://groovy-lang.org/
      -------------------------------------------------------------------
      $ cat MyAnnotation.groovy
      import java.lang.annotation.Retention
      import java.lang.annotation.RetentionPolicy
      
      @Retention(RetentionPolicy.SOURCE)
      @interface MyAnnotation {}
      -------------------------------------------------------------------
      $ groovyc MyAnnotation.groovy && javap -private -v MyAnnotation
      Classfile /Users/zhb/Projects/tmp/groovy-anno/MyAnnotation.class
      Last modified 3 Jul 2019; size 146 bytes
      MD5 checksum 485f011b0c78ff7b08bd0e03b1b429cd
      Compiled from "MyAnnotation.groovy"
      public interface MyAnnotation extends java.lang.annotation.Annotation
      minor version: 0
      major version: 51
      flags: (0x2601) ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT, ACC_ANNOTATION
      this_class: #2 // MyAnnotation
      super_class: #4 // java/lang/Object
      interfaces: 1, fields: 0, methods: 0, attributes: 1
      Constant pool:
      #1 = Utf8 MyAnnotation
      #2 = Class #1 // MyAnnotation
      #3 = Utf8 java/lang/Object
      #4 = Class #3 // java/lang/Object
      #5 = Utf8 java/lang/annotation/Annotation
      #6 = Class #5 // java/lang/annotation/Annotation
      #7 = Utf8 MyAnnotation.groovy
      #8 = Utf8 SourceFile
      {
      }
      SourceFile: "MyAnnotation.groovy"
      
      -------------------------------------------------------------------
      $ cat MyJavaAnnotation.java
      import java.lang.annotation.Retention;
      import java.lang.annotation.RetentionPolicy;
      
      @Retention(RetentionPolicy.SOURCE)
      @interface MyJavaAnnotation {}
      -------------------------------------------------------------------
      $ javac MyJavaAnnotation.java && javap -private -v MyJavaAnnotation
      Classfile /Users/zhb/Projects/tmp/groovy-anno/MyJavaAnnotation.class
      Last modified 3 Jul 2019; size 292 bytes
      MD5 checksum c8ea8afe8f9fe148925db48177207f01
      Compiled from "MyJavaAnnotation.java"
      interface MyJavaAnnotation extends java.lang.annotation.Annotation
      minor version: 0
      major version: 55
      flags: (0x2600) ACC_INTERFACE, ACC_ABSTRACT, ACC_ANNOTATION
      this_class: #1 // MyJavaAnnotation
      super_class: #2 // java/lang/Object
      interfaces: 1, fields: 0, methods: 0, attributes: 2
      Constant pool:
      #1 = Class #11 // MyJavaAnnotation
      #2 = Class #12 // java/lang/Object
      #3 = Class #13 // java/lang/annotation/Annotation
      #4 = Utf8 SourceFile
      #5 = Utf8 MyJavaAnnotation.java
      #6 = Utf8 RuntimeVisibleAnnotations
      #7 = Utf8 Ljava/lang/annotation/Retention;
      #8 = Utf8 value
      #9 = Utf8 Ljava/lang/annotation/RetentionPolicy;
      #10 = Utf8 SOURCE
      #11 = Utf8 MyJavaAnnotation
      #12 = Utf8 java/lang/Object
      #13 = Utf8 java/lang/annotation/Annotation
      {
      }
      SourceFile: "MyJavaAnnotation.java"
      RuntimeVisibleAnnotations:
      0: #7(#8=e#9.#10)
      java.lang.annotation.Retention(
      value=Ljava/lang/annotation/RetentionPolicy;.SOURCE
      )
      

       

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              blindpirate zhb
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: