[ 
https://issues.apache.org/jira/browse/GROOVY-9973?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

mgroovy updated GROOVY-9973:
----------------------------
    Description: 
*Problem*
 Build fails when applying a binary operation to a property inside a method, 
depending on whether a parameter is involved:
{code:java}
ClassCastException: class org.codehaus.groovy.ast.Parameter cannot be cast to 
class org.codehaus.groovy.ast.expr.VariableExpression
{code}
or not:
{code:java}
BUG! exception in phase 'class generation' in source unit
{code}
Problem does not appear under @TypeChecked, nor when the class member is a 
field or the field is not accessed throug a property.

*Expected*
 Code should compile.

*Sample Code*
{code:java}
@Test @Ignore
void 'Groovy 3-0-7 Arithmetic operation with property throws 
ClassCastException'() {
        final goo = new Goo()

        //
        // ClassCastException: class org.codehaus.groovy.ast.Parameter cannot 
be cast to class org.codehaus.groovy.ast.expr.VariableExpression
        //
        final result = goo.calc(123)

        //
        // BUG! exception in phase 'class generation' in source unit ... On 
receiver: 3 with message: minus and arguments: nrNewEntries
        //
        final result = goo.calc()
        assert result == 333
}
{code}
{code:java}
@CompileStatic
//@TypeChecked // works
class Goo {
        // int nrNewEntries // field without property wrapper works
        // int nrNewEntries() { nrNewEntriesField } // non-property method works
        int nrNewEntriesField
        int getNrNewEntries() { nrNewEntriesField }

        /*
                        Groovyc: While compiling [tests of GroovySimple]: 
java.lang.ClassCastException: class org.codehaus.groovy.ast.Parameter cannot be 
cast to class org.codehaus.groovy.ast.expr.VariableExpression 
(org.codehaus.groovy.ast.Parameter and 
org.codehaus.groovy.ast.expr.VariableExpression are in unnamed module of loader 
org.jetbrains.jps.incremental.groovy.JointCompilationClassLoader @12011fbf)
                        at 
org.codehaus.groovy.classgen.asm.sc.StaticTypesCallSiteWriter.makeSingleArgumentCall(StaticTypesCallSiteWriter.java:598)
                        at 
org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:616)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:590)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionMultiTypeDispatcher.evaluateBinaryExpression(BinaryExpressionMultiTypeDispatcher.java:242)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:222)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:707)
                        at 
org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
                        at 
org.codehaus.groovy.classgen.asm.StatementWriter.writeReturn(StatementWriter.java:613)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:681)
                        at 
org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:73)
                        at 
org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
                        at 
org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:617)
                        at 
org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:461)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:408)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:556)
                        at 
org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1099)
                        at 
org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1092)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:271)
                        at 
org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
                        at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
                        at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
                        at 
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
        */
Integer calc(int i) { i - nrNewEntries }

/*
                Groovyc: While compiling [tests of GroovySimple]: BUG! 
exception in phase 'class generation' in source unit 
'C:\source\GroovySimple\test\simple\groovy\bugs\groovy3\gb_2021_03_08\property_arithmetic_op_throws_class_cast\Goo.groovy'
 At line 49 column 19
                On receiver: 3 with message: minus and arguments: nrNewEntries
                This method should not have been called. Please try to create a 
simple example reproducing
                this error and file a bug report at 
https://issues.apache.org/jira/browse/GROOVY
                        at 
org.codehaus.groovy.classgen.asm.sc.StaticTypesCallSiteWriter.makeSingleArgumentCall(StaticTypesCallSiteWriter.java:607)
                        at 
org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:616)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:590)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionMultiTypeDispatcher.evaluateBinaryExpression(BinaryExpressionMultiTypeDispatcher.java:242)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:222)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:707)
                        at 
org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
                        at 
org.codehaus.groovy.classgen.asm.StatementWriter.writeReturn(StatementWriter.java:613)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:681)
                        at 
org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:73)
                        at 
org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
                        at 
org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:617)
                        at 
org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:461)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:408)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:556)
                        at 
org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1099)
                        at 
org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1092)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:271)
                        at 
org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
                        at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
                        at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
                        at 
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
                        at 
org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:48)
                        at 
org.jetbrains.groovy.compiler.rt.DependentGroovycRunner.runGroovyc(DependentGroovycRunner.java:118)
                        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                        at 
java.base/java.lang.reflect.Method.invoke(Method.java:566)
                        at 
org.jetbrains.groovy.compiler.rt.GroovycRunner.intMain2(GroovycRunner.java:81)
                        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                        at 
java.base/java.lang.reflect.Method.invoke(Method.java:566)
                        at 
org.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovycInThisProcess(InProcessGroovyc.java:167)
                        at 
org.jetbrains.jps.incremental.groovy.InProcessGroovyc.lambda$runGroovyc$0(InProcessGroovyc.java:77)
                        at 
java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
                        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
                        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
                        at java.base/java.lang.Thread.run(Thread.java:834)
*/
Integer calc() { 333 - nrNewEntries }
}
{code}

  was:
*Problem*
Build fails when applying a binary operation to a property inside a method, 
depending on whether a parameter is involved:
{code}
ClassCastException: class org.codehaus.groovy.ast.Parameter cannot be cast to 
class org.codehaus.groovy.ast.expr.VariableExpression
{code}
or not:
{code}
BUG! exception in phase 'class generation' in source unit
{code}

Problem does not appear under @TypeChecked, nor when the class member is a 
field or the field is not accessed throug a property.

*Expected*
Code should compile.

*Sample Code*
{code:java}
@Test @Ignore
void 'Groovy 3-0-7 Arithmetic operation with property throws 
ClassCastException'() {
        final goo = new Goo()

        //
        // ClassCastException: class org.codehaus.groovy.ast.Parameter cannot 
be cast to class org.codehaus.groovy.ast.expr.VariableExpression
        //
        final result = goo.calc(123)

        //
        // BUG! exception in phase 'class generation' in source unit ... On 
receiver: 3 with message: minus and arguments: nrNewEntries
        //
        final result = goo.calc()
        assert result == 333
}
{code}
{code:java}
@CompileStatic
//@TypeChecked // works
class Goo {
        // int nrNewEntries // field without property wrapper works
        //int nrNewEntries() { nrNewEntriesField } // non-property method works
        int nrNewEntriesField
        int getNrNewEntries() { nrNewEntriesField }

        /*
                        Groovyc: While compiling [tests of GroovySimple]: 
java.lang.ClassCastException: class org.codehaus.groovy.ast.Parameter cannot be 
cast to class org.codehaus.groovy.ast.expr.VariableExpression 
(org.codehaus.groovy.ast.Parameter and 
org.codehaus.groovy.ast.expr.VariableExpression are in unnamed module of loader 
org.jetbrains.jps.incremental.groovy.JointCompilationClassLoader @12011fbf)
                        at 
org.codehaus.groovy.classgen.asm.sc.StaticTypesCallSiteWriter.makeSingleArgumentCall(StaticTypesCallSiteWriter.java:598)
                        at 
org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:616)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:590)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionMultiTypeDispatcher.evaluateBinaryExpression(BinaryExpressionMultiTypeDispatcher.java:242)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:222)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:707)
                        at 
org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
                        at 
org.codehaus.groovy.classgen.asm.StatementWriter.writeReturn(StatementWriter.java:613)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:681)
                        at 
org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:73)
                        at 
org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
                        at 
org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:617)
                        at 
org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:461)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:408)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:556)
                        at 
org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1099)
                        at 
org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1092)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:271)
                        at 
org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
                        at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
                        at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
                        at 
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
        */
Integer calc(int i) { i - nrNewEntries }

/*
                Groovyc: While compiling [tests of GroovySimple]: BUG! 
exception in phase 'class generation' in source unit 
'C:\source\GroovySimple\test\simple\groovy\bugs\groovy3\gb_2021_03_08\property_arithmetic_op_throws_class_cast\Goo.groovy'
 At line 49 column 19
                On receiver: 3 with message: minus and arguments: nrNewEntries
                This method should not have been called. Please try to create a 
simple example reproducing
                this error and file a bug report at 
https://issues.apache.org/jira/browse/GROOVY
                        at 
org.codehaus.groovy.classgen.asm.sc.StaticTypesCallSiteWriter.makeSingleArgumentCall(StaticTypesCallSiteWriter.java:607)
                        at 
org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:616)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:590)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionMultiTypeDispatcher.evaluateBinaryExpression(BinaryExpressionMultiTypeDispatcher.java:242)
                        at 
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:222)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:707)
                        at 
org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
                        at 
org.codehaus.groovy.classgen.asm.StatementWriter.writeReturn(StatementWriter.java:613)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:681)
                        at 
org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:73)
                        at 
org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
                        at 
org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:617)
                        at 
org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:461)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:408)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:556)
                        at 
org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1099)
                        at 
org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1092)
                        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
                        at 
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:271)
                        at 
org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
                        at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
                        at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
                        at 
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
                        at 
org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:48)
                        at 
org.jetbrains.groovy.compiler.rt.DependentGroovycRunner.runGroovyc(DependentGroovycRunner.java:118)
                        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                        at 
java.base/java.lang.reflect.Method.invoke(Method.java:566)
                        at 
org.jetbrains.groovy.compiler.rt.GroovycRunner.intMain2(GroovycRunner.java:81)
                        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                        at 
java.base/java.lang.reflect.Method.invoke(Method.java:566)
                        at 
org.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovycInThisProcess(InProcessGroovyc.java:167)
                        at 
org.jetbrains.jps.incremental.groovy.InProcessGroovyc.lambda$runGroovyc$0(InProcessGroovyc.java:77)
                        at 
java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
                        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
                        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
                        at java.base/java.lang.Thread.run(Thread.java:834)
*/
Integer calc() { 333 - nrNewEntries }
}
{code}


> @CompileStatic: Binary operation with property throws ClassCastException
> ------------------------------------------------------------------------
>
>                 Key: GROOVY-9973
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9973
>             Project: Groovy
>          Issue Type: Bug
>            Reporter: mgroovy
>            Priority: Major
>
> *Problem*
>  Build fails when applying a binary operation to a property inside a method, 
> depending on whether a parameter is involved:
> {code:java}
> ClassCastException: class org.codehaus.groovy.ast.Parameter cannot be cast to 
> class org.codehaus.groovy.ast.expr.VariableExpression
> {code}
> or not:
> {code:java}
> BUG! exception in phase 'class generation' in source unit
> {code}
> Problem does not appear under @TypeChecked, nor when the class member is a 
> field or the field is not accessed throug a property.
> *Expected*
>  Code should compile.
> *Sample Code*
> {code:java}
> @Test @Ignore
> void 'Groovy 3-0-7 Arithmetic operation with property throws 
> ClassCastException'() {
>       final goo = new Goo()
>       //
>       // ClassCastException: class org.codehaus.groovy.ast.Parameter cannot 
> be cast to class org.codehaus.groovy.ast.expr.VariableExpression
>       //
>       final result = goo.calc(123)
>       //
>       // BUG! exception in phase 'class generation' in source unit ... On 
> receiver: 3 with message: minus and arguments: nrNewEntries
>       //
>       final result = goo.calc()
>       assert result == 333
> }
> {code}
> {code:java}
> @CompileStatic
> //@TypeChecked // works
> class Goo {
>       // int nrNewEntries // field without property wrapper works
>       // int nrNewEntries() { nrNewEntriesField } // non-property method works
>       int nrNewEntriesField
>       int getNrNewEntries() { nrNewEntriesField }
>       /*
>                       Groovyc: While compiling [tests of GroovySimple]: 
> java.lang.ClassCastException: class org.codehaus.groovy.ast.Parameter cannot 
> be cast to class org.codehaus.groovy.ast.expr.VariableExpression 
> (org.codehaus.groovy.ast.Parameter and 
> org.codehaus.groovy.ast.expr.VariableExpression are in unnamed module of 
> loader org.jetbrains.jps.incremental.groovy.JointCompilationClassLoader 
> @12011fbf)
>                       at 
> org.codehaus.groovy.classgen.asm.sc.StaticTypesCallSiteWriter.makeSingleArgumentCall(StaticTypesCallSiteWriter.java:598)
>                       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:616)
>                       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:590)
>                       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionMultiTypeDispatcher.evaluateBinaryExpression(BinaryExpressionMultiTypeDispatcher.java:242)
>                       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:222)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:707)
>                       at 
> org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
>                       at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeReturn(StatementWriter.java:613)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:681)
>                       at 
> org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:73)
>                       at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
>                       at 
> org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:617)
>                       at 
> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
>                       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
>                       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:461)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:408)
>                       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:556)
>                       at 
> org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1099)
>                       at 
> org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1092)
>                       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:271)
>                       at 
> org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
>                       at 
> org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
>                       at 
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
>                       at 
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
>       */
> Integer calc(int i) { i - nrNewEntries }
> /*
>               Groovyc: While compiling [tests of GroovySimple]: BUG! 
> exception in phase 'class generation' in source unit 
> 'C:\source\GroovySimple\test\simple\groovy\bugs\groovy3\gb_2021_03_08\property_arithmetic_op_throws_class_cast\Goo.groovy'
>  At line 49 column 19
>               On receiver: 3 with message: minus and arguments: nrNewEntries
>               This method should not have been called. Please try to create a 
> simple example reproducing
>               this error and file a bug report at 
> https://issues.apache.org/jira/browse/GROOVY
>                       at 
> org.codehaus.groovy.classgen.asm.sc.StaticTypesCallSiteWriter.makeSingleArgumentCall(StaticTypesCallSiteWriter.java:607)
>                       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:616)
>                       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:590)
>                       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionMultiTypeDispatcher.evaluateBinaryExpression(BinaryExpressionMultiTypeDispatcher.java:242)
>                       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:222)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:707)
>                       at 
> org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
>                       at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeReturn(StatementWriter.java:613)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:681)
>                       at 
> org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:73)
>                       at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
>                       at 
> org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:617)
>                       at 
> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
>                       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
>                       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:461)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:408)
>                       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:556)
>                       at 
> org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1099)
>                       at 
> org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1092)
>                       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
>                       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:271)
>                       at 
> org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
>                       at 
> org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
>                       at 
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
>                       at 
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
>                       at 
> org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:48)
>                       at 
> org.jetbrains.groovy.compiler.rt.DependentGroovycRunner.runGroovyc(DependentGroovycRunner.java:118)
>                       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>                       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>                       at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>                       at 
> java.base/java.lang.reflect.Method.invoke(Method.java:566)
>                       at 
> org.jetbrains.groovy.compiler.rt.GroovycRunner.intMain2(GroovycRunner.java:81)
>                       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>                       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>                       at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>                       at 
> java.base/java.lang.reflect.Method.invoke(Method.java:566)
>                       at 
> org.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovycInThisProcess(InProcessGroovyc.java:167)
>                       at 
> org.jetbrains.jps.incremental.groovy.InProcessGroovyc.lambda$runGroovyc$0(InProcessGroovyc.java:77)
>                       at 
> java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>                       at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>                       at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>                       at java.base/java.lang.Thread.run(Thread.java:834)
> */
> Integer calc() { 333 - nrNewEntries }
> }
> {code}



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

Reply via email to