Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apache Groovy Joint Validation Build Failing #706

Closed
puneetbehl opened this issue Feb 28, 2024 · 2 comments · Fixed by #707
Closed

Apache Groovy Joint Validation Build Failing #706

puneetbehl opened this issue Feb 28, 2024 · 2 comments · Fixed by #707

Comments

@puneetbehl
Copy link
Contributor

@paulk-asert It seems that the latest snapshot of Apache Groovy (3.0.21-SNAPSHOT) started failing for this project. Do you know what might have changed recently?

Following is the snapshot of the failure logs

> Task :grails-datastore-gorm-mongodb:compileGroovy FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':grails-datastore-gorm-mongodb:compileGroovy'.
> Unrecoverable compilation error: startup failed:
  General error during canonicalization: java.lang.UnsupportedOperationException
  
  java.lang.UnsupportedOperationException
  	at org.codehaus.groovy.transform.stc.UnionTypeClassNode.getComponentType(UnionTypeClassNode.java:232)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.inferLoopElementType(StaticTypeCheckingVisitor.java:19[88](https://github.com/grails/gorm-mongodb/actions/runs/8061943984/job/22020759701#step:8:90))
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitForLoop(StaticTypeCheckingVisitor.java:1954)
  	at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitForLoop(StaticCompilationVisitor.java:467)
  	at org.codehaus.groovy.ast.stmt.ForStatement.visit(ForStatement.java:47)
  	at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86)
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:164)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBlockStatement(StaticTypeCheckingVisitor.java:3975)
  	at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitIfElse(StaticTypeCheckingVisitor.java:3[92](https://github.com/grails/gorm-mongodb/actions/runs/8061943984/job/22020759701#step:8:94)5)
  	at org.codehaus.groovy.ast.stmt.IfStatement.visit(IfStatement.java:41)
  	at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86)
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:164)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBlockStatement(StaticTypeCheckingVisitor.java:3975)
  	at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitIfElse(StaticTypeCheckingVisitor.java:3925)
  	at org.codehaus.groovy.ast.stmt.IfStatement.visit(IfStatement.java:41)
  	at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86)
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:164)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBlockStatement(StaticTypeCheckingVisitor.java:3975)
  	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.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:2183)
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2652)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2620)
  	at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitConstructorOrMethod(StaticCompilationVisitor.java:238)
  	at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitMethod(StaticCompilationVisitor.java:253)
  	at org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1100)
  	at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:10[93](https://github.com/grails/gorm-mongodb/actions/runs/8061943984/job/22020759701#step:8:95))
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
  	at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass(StaticTypeCheckingVisitor.java:424)
  	at org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitClass(StaticCompilationVisitor.java:199)
  	at org.codehaus.groovy.transform.sc.StaticCompileTransformation.visit(StaticCompileTransformation.java:67)
  	at org.codehaus.groovy.transform.ASTTransformationVisitor.visitClass(ASTTransformationVisitor.java:143)
  	at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperations$2(ASTTransformationVisitor.java:221)
  	at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:[94](https://github.com/grails/gorm-mongodb/actions/runs/8061943984/job/22020759701#step:8:96)3)
  	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
  	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
  	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:611)
  	at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:285)
  	at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:67)
  	at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:[97](https://github.com/grails/gorm-mongodb/actions/runs/8061943984/job/22020759701#step:8:99))
  	at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:76)
  	at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerWorkAction.execute(AbstractDaemonCompiler.java:135)
  	at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
  	at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:49)
  	at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:43)
  	at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:[100](https://github.com/grails/gorm-mongodb/actions/runs/8061943984/job/22020759701#step:8:102))
  	at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:43)
  	at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
  	at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
  	at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:87)
  	at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:56)
  	at org.gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:138)
  	at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41)
  	at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:135)
  	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.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
  	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
  	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
  	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
  	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
  	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
  	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
  	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:[112](https://github.com/grails/gorm-mongodb/actions/runs/8061943984/job/22020759701#step:8:114)8)
  	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
  	at java.base/java.lang.Thread.run(Thread.java:829)
  
  1 error

You can find the complete details here

@puneetbehl
Copy link
Contributor Author

I think the problem might be with the following code using @CompileStatic:

protected void encodeEmbeddedCollectionUpdate(EntityAccess parentAccess, BsonDocument sets, Document unsets, Association association, v) {
        if(v instanceof Collection<Object>) {
            if((v instanceof DirtyCheckableCollection) && !((DirtyCheckableCollection)v).hasChangedSize()) {
                int i = 0
                for(o in v) {
                    def embeddedUpdate = encodeUpdate(o, createEntityAccess(o), EncoderContext.builder().build(), true)
                    def embeddedSets = embeddedUpdate.get(MONGO_SET_OPERATOR)
                    if(embeddedSets != null) {

                        def map = (Map) embeddedSets
                        for (key in map.keySet()) {
                            sets.put("${association.name}.${i}.$key".toString(), (BsonValue) map.get(key))
                        }
                    }
                    def embeddedUnsets = embeddedUpdate.get(MONGO_UNSET_OPERATOR)
                    if(embeddedUnsets) {
                        def map = (Map) embeddedUnsets
                        for (key in map.keySet()) {
                            unsets.put("${association.name}.${i}.$key".toString(), BLANK_STRING)
                        }
                    }
                    i++
                }
            }

The complete code can be found in PersistentEntityCodec.groovy#L367

Following are some screenshots from the debugger console:

Screenshot 2024-02-28 at 10 35 25 PM

Screenshot 2024-02-28 at 10 35 48 PM

matrei added a commit to matrei/gorm-mongodb that referenced this issue Feb 28, 2024
@paulk-asert
Copy link

The expansion of the metaDataMap property would be useful to see.

puneetbehl pushed a commit that referenced this issue Feb 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants