Paul King created GROOVY-9723:
---------------------------------

             Summary: CLONE - ASTTest annotation has runtime retention and 
transform removes required member from AST
                 Key: GROOVY-9723
                 URL: https://issues.apache.org/jira/browse/GROOVY-9723
             Project: Groovy
          Issue Type: Bug
            Reporter: Eric Milles
            Assignee: Eric Milles


Consider the following:
{code:groovy}
import groovy.transform.*
import org.codehaus.groovy.ast.*
import static org.codehaus.groovy.transform.stc.StaticTypesMarker.*

class C {
  void m() {
    def that = this;
    { ->
      @ASTTest(phase=INSTRUCTION_SELECTION, value={
        ClassNode type = node.getNodeMetaData(INFERRED_TYPE)
        assert type?.name == 'C'
      })
      def ref = getThisObject()
      assert ref == that
    }()
  }
}
{code}

This is a typical use of {{@ASTTest}}.  When compiled, the test annotation is 
retained in the class file, which is unnecessary.  When the transform class 
runs, it removes the "value" member from the AST, which is causing compiler 
errors down the line when {{ExtendedVerifier}} runs {{AnnotationVisitor}}.  
Also, the variable scope of the test closure is still connected to the class 
and module, so code completion is making proposals for class members which will 
not be there at run-time.

This was originally investigated from the IDE side (see linked issue).

[https://user-images.githubusercontent.com/18193802/90964420-fd51c800-e485-11ea-8349-c0f89e04561a.png]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to