[
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)