You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Dipanjan Bhowmik (Jira)" <ji...@apache.org> on 2021/06/30 16:50:00 UTC

[jira] [Created] (GROOVY-10159) 2.5.4: Compilation failure: ClassCastException

Dipanjan Bhowmik created GROOVY-10159:
-----------------------------------------

             Summary: 2.5.4: Compilation failure: ClassCastException
                 Key: GROOVY-10159
                 URL: https://issues.apache.org/jira/browse/GROOVY-10159
             Project: Groovy
          Issue Type: Bug
          Components: ast builder
    Affects Versions: 2.5.4
         Environment: JDK: openjdk version "1.8.0_265"(Zulu 8.48.0.53-CA-macosx) (build 1.8.0_265-b11)

            Reporter: Dipanjan Bhowmik


After upgrading 2.5.3 to 2.5.4, observing the following error in my project:

 

{{

General error during class generation: java.lang.Long cannot be cast to java.lang.String

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
 at org.apache.groovy.ast.tools.ExpressionUtils.transformBinaryConstantExpression(ExpressionUtils.java:86)
 at org.apache.groovy.ast.tools.ExpressionUtils.transformInlineConstants(ExpressionUtils.java:248)
 at org.codehaus.groovy.classgen.Verifier.addFieldInitialization(Verifier.java:1163)
 at org.codehaus.groovy.classgen.Verifier.addInitialization(Verifier.java:1048)
 at org.codehaus.groovy.classgen.Verifier.addInitialization(Verifier.java:999)
 at org.codehaus.groovy.classgen.Verifier.visitClass(Verifier.java:250)
 at org.codehaus.groovy.control.CompilationUnit$18.call(CompilationUnit.java:811)
 at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1084)
 at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:640)
 at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:618)
 at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:595)
 at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:574)
 ...
 }}

 

This can be solved with:

From:

(String) ((ConstantExpression) left).getValue()

To:

String.valueOf(((ConstantExpression) left).getValue())

Diff is as follows:

diff --git a/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java b/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java
index 4aa67a52cb..7057f14982 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java
@@ -83,7 +83,7 @@ public final class ExpressionUtils {
 Expression left = transformInlineConstants(be.getLeftExpression(), targetType);
 Expression right = transformInlineConstants(be.getRightExpression(), targetType);
 if (left instanceof ConstantExpression && right instanceof ConstantExpression) {
- return configure(be, new ConstantExpression((String) ((ConstantExpression) left).getValue() +
+ return configure(be, new ConstantExpression(String.valueOf(((ConstantExpression) left).getValue()) +
 ((ConstantExpression) right).getValue()));
 }

 

If you want, I can raise a PR for this.



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