Skip to content

Elvis assignment causes stack overflow in editor #1320

@chrylis

Description

@chrylis

In 4.4.0.v202112150033-e2112, using Elvis assignment causes a stack overflow in the editor. Closing the editor allows the workbench to continue. Rewriting the assignment as a conditional prevents the stack overflow.

Offending code:

msg.messageId ?= messageIdGenerator.get()

Working code:

if (!msg.messageId) {
  msg.messageId = messageIdGenerator.get()
}

Error log:

!ENTRY org.eclipse.ui 4 0 2021-12-16 16:35:36.309
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.StackOverflowError
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.storeTypeForSuper(StaticTypeCheckingVisitor.java:666)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitVariableExpression(StaticTypeCheckingVisitor.java:568)
        at org.codehaus.groovy.ast.expr.VariableExpression.visit(VariableExpression.java:70)
        at org.codehaus.groovy.ast.CodeVisitorSupport.visitPropertyExpression(CodeVisitorSupport.java:340)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.existsProperty(StaticTypeCheckingVisitor.java:1689)
        at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.existsProperty(StaticCompilationVisitor.java:550)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.existsProperty(StaticTypeCheckingVisitor.java:1676)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitPropertyExpression(StaticTypeCheckingVisitor.java:706)
        at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitPropertyExpression(StaticCompilationVisitor.java:564)
        at org.codehaus.groovy.ast.expr.PropertyExpression.visit(PropertyExpression.java:63)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBinaryExpression(StaticTypeCheckingVisitor.java:762)
        at org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallArguments(StaticTypeCheckingVisitor.java:3124)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression(StaticTypeCheckingVisitor.java:3826)
        at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitMethodCallExpression(StaticCompilationVisitor.java:414)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.ensureValidSetter(StaticTypeCheckingVisitor.java:1050)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBinaryExpression(StaticTypeCheckingVisitor.java:766)
        at org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallArguments(StaticTypeCheckingVisitor.java:3124)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression(StaticTypeCheckingVisitor.java:3826)
        at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitMethodCallExpression(StaticCompilationVisitor.java:414)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.ensureValidSetter(StaticTypeCheckingVisitor.java:1050)
        at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBinaryExpression(StaticTypeCheckingVisitor.java:766)
        at org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
(repeat)

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions