[ 
https://issues.apache.org/jira/browse/GROOVY-8955?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16831115#comment-16831115
 ] 

Eric Milles commented on GROOVY-8955:
-------------------------------------

Possibly related to GROOVY-9059.  Should be allowed to create AIC without 
specifying type parameter.  Should we also allow "def" instead of the argument 
for "T"?
{code:groovy}
interface PMapping<T extends Property> {
    T getMappedForm()
}
@CompileStatic
void test() {
  def impl = new PMapping() {
    Property getMappedFrom() { ... } // TODO: Support replacing "Property" with 
"def"?
  }
}
{code}


> VerifyError when AIC with @CS can't be detected as not valid
> ------------------------------------------------------------
>
>                 Key: GROOVY-8955
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8955
>             Project: Groovy
>          Issue Type: Bug
>            Reporter: Paul King
>            Priority: Major
>
> In this buggy code the return type of  {{getMappedForm}} method in the AIC 
> should be property. None-the-less, it shouldn't result in a {{VerifyError}}:
> {code}
> import groovy.transform.CompileStatic
> class Property {
>     String generator
> }
> interface PMapping<T extends Property> {
>     T getMappedForm()
> }
> interface PProperty {
>     PMapping getMapping()
> }
> @CompileStatic
> class GPEntity {
>     def method() {
>         PProperty identity = getIdentity()
>         String generatorType = 
> identity.getMapping().getMappedForm().getGenerator()
>     }
>     PProperty getIdentity() {
>         new PProperty() {
>             PMapping getMapping() {
>                 new PMapping() {
>                    def getMappedForm() {
>                        new Property() {
>                            String getGenerator() { 'foo' }
>                        }
>                    }
>                 }
>             }
>         }
>     }
> }
> new GPEntity().method()
> {code}
> The error is:
> {noformat}
> java.lang.VerifyError: Bad return type
> Exception Details:
>   Location:
>     GPEntity$1$2.getMappedForm()LProperty; @4: areturn
>   Reason:
>     Type 'java/lang/Object' (current frame, stack[0]) is not assignable to 
> 'Property' (from method signature)
>   Current Frame:
>     bci: @4
>     flags: { }
>     locals: { 'GPEntity$1$2' }
>     stack: { 'java/lang/Object' }
>   Bytecode:
>     0x0000000: 2ab6 0099 b0                           
>       at GPEntity$1.getMapping(ConsoleScript13:25)
>         ...
> {noformat}
> If the {{PMapping}} method is written without generics, e.g.:
> {code}
> interface PMapping {
>     Property getMappedForm()
> }
> {code}
> Then the error becomes the expected compilation error:
> {noformat}
> The return type of java.lang.Object getMappedForm() in GPEntity$1$2 is 
> incompatible with Property in PMapping
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to