You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Renato Athaydes (JIRA)" <ji...@apache.org> on 2015/10/19 14:09:05 UTC
[jira] [Commented] (GROOVY-7387) Trait compilation error:
IllegalArgumentException: Comparison method violates its general contract!
[ https://issues.apache.org/jira/browse/GROOVY-7387?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14963206#comment-14963206 ]
Renato Athaydes commented on GROOVY-7387:
-----------------------------------------
This problem is currently affecting my company. To make matters much worse, the error message does not inform us which trait/class fails to compile, so it's really difficult to diagnose. We're using Groovy 2.4.4.
Stack-trace:
```
[ERROR] General error during canonicalization: Comparison method violates its general contract!
[ERROR]
[ERROR] java.lang.IllegalArgumentException: Comparison method violates its general contract!
[ERROR] at java.util.TimSort.mergeLo(TimSort.java:777)
[ERROR] at java.util.TimSort.mergeAt(TimSort.java:514)
[ERROR] at java.util.TimSort.mergeCollapse(TimSort.java:441)
[ERROR] at java.util.TimSort.sort(TimSort.java:245)
[ERROR] at java.util.Arrays.sort(Arrays.java:1512)
[ERROR] at java.util.ArrayList.sort(ArrayList.java:1454)
[ERROR] at java.util.Collections.sort(Collections.java:175)
[ERROR] at org.codehaus.groovy.transform.trait.TraitComposer.applyTrait(TraitComposer.java:205)
[ERROR] at org.codehaus.groovy.transform.trait.TraitComposer.doExtendTraits(TraitComposer.java:114)
[ERROR] at org.codehaus.groovy.control.CompilationUnit$4.call(CompilationUnit.java:191)
[ERROR] at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1055)
[ERROR] at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
[ERROR] at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
[ERROR] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
[ERROR] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:525)
[ERROR] at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:61)
[ERROR] at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:217)
[ERROR] at org.codehaus.groovy.ant.Groovyc.runCompiler(Groovyc.java:1165)
.......
```
Java version: 1.8.0_60, vendor: Oracle Corporation
Groovy 2.4.4 and 2.4.1 present the error.
> Trait compilation error: IllegalArgumentException: Comparison method violates its general contract!
> ---------------------------------------------------------------------------------------------------
>
> Key: GROOVY-7387
> URL: https://issues.apache.org/jira/browse/GROOVY-7387
> Project: Groovy
> Issue Type: Bug
> Components: Compiler
> Affects Versions: 2.3.6, 2.4.3
> Environment: Using 32-bit Oracle JDK 1.7.0_45, Groovy 2.4.3 with InvokeDynamic enabled (also reproducible using 2.3.6)
> Reporter: Andy Belsky
> Assignee: Cédric Champeau
> Priority: Critical
> Fix For: 2.4.5
>
> Attachments: sample-7387.tgz
>
>
> The smallest sample I could create is the following.
> We've got two Groovy classes, one of which is a trait and another implements that trait.
> {code:title=TestTrait.groovy}
> package test
> trait TestTrait {
> Object userRepository
> Object respondentRepository
> Object surveyStatsRepository
> Object surveyRepository
> Object questionRepository
> Object questionOptionRepository
> Object answerRepository
> Object surveyInvitationRepository
> Object invitationDeliveryRepository
> Object surveyPatternRepository
> Object accessNumberRepository
> Object deliverySubscriberRepository
> }
> {code}
> {code:title=TestClass.groovy}
> package test
> class TestClass implements TestTrait {
> }
> {code}
> Then let's compile those using the command line:
> {code}
> $ JAVA_HOME/bin/java -cp ../lib/groovy-all-2.4.3.jar org.codehaus.groovy.tools.FileSystemCompiler -cp ../lib/groovy-all-2.4.3.jar test/*
> {code}
> This results in the following compiler error:
> {code}
> org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
> General error during canonicalization: Comparison method violates its general contract!
> java.lang.IllegalArgumentException: Comparison method violates its general contract!
> at java.util.TimSort.mergeLo(TimSort.java:747)
> at java.util.TimSort.mergeAt(TimSort.java:483)
> at java.util.TimSort.mergeCollapse(TimSort.java:410)
> at java.util.TimSort.sort(TimSort.java:214)
> at java.util.TimSort.sort(TimSort.java:173)
> at java.util.Arrays.sort(Arrays.java:659)
> at java.util.Collections.sort(Collections.java:217)
> at org.codehaus.groovy.transform.trait.TraitComposer.applyTrait(TraitComposer.java:202)
> at org.codehaus.groovy.transform.trait.TraitComposer.doExtendTraits(TraitComposer.java:111)
> at org.codehaus.groovy.control.CompilationUnit$4.call(CompilationUnit.java:188)
> at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1052)
> at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:588)
> at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:566)
> at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:543)
> at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:522)
> at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:59)
> at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:215)
> at org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompile(FileSystemCompiler.java:148)
> at org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompileWithErrorHandling(FileSystemCompiler.java:178)
> at org.codehaus.groovy.tools.FileSystemCompiler.main(FileSystemCompiler.java:162)
> 1 error
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)