Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-7387

Trait compilation error: IllegalArgumentException: Comparison method violates its general contract!

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 2.3.6, 2.4.3
    • Fix Version/s: 2.4.5
    • Component/s: Compiler
    • Labels:
      None
    • Environment:
      Using 32-bit Oracle JDK 1.7.0_45, Groovy 2.4.3 with InvokeDynamic enabled (also reproducible using 2.3.6)

      Description

      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.

      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
      }
      
      TestClass.groovy
      package test
      
      class TestClass implements TestTrait {
      }
      

      Then let's compile those using the command line:

      $ 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/*
      

      This results in the following compiler error:

      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
      

        Attachments

        1. sample-7387.tgz
          5.76 MB
          Andy Belsky

          Activity

            People

            • Assignee:
              melix C├ędric Champeau
              Reporter:
              andy722 Andy Belsky
            • Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: