You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Martin Klähn (JIRA)" <ji...@apache.org> on 2016/12/15 09:50:58 UTC

[jira] [Created] (GROOVY-8023) Compile time increases exponentially when compiling Class implementing a Trait

Martin Klähn created GROOVY-8023:
------------------------------------

             Summary: Compile time increases exponentially when compiling Class implementing a Trait
                 Key: GROOVY-8023
                 URL: https://issues.apache.org/jira/browse/GROOVY-8023
             Project: Groovy
          Issue Type: Bug
          Components: Compiler
    Affects Versions: 2.4.7, 2.4.4
            Reporter: Martin Klähn


Concidering the following classes
{code:title=ATrait.groovy|borderStyle=solid}
trait ATrait {
}
{code}
and
{code:title=AClass.groovy|borderStyle=solid}
class AClass implements ATrait {
    def String cleanName(String name) {
        return name.
            replaceAll(/alpha01/, '/').
            replaceAll(/alpha02/, '/').
            replaceAll(/alpha03/, '/').
            replaceAll(/alpha04/, '/').
            replaceAll(/alpha05/, '/').
            replaceAll(/alpha06/, '/').
            replaceAll(/alpha07/, '/').
            replaceAll(/alpha08/, '/').
            replaceAll(/alpha09/, '/').
            replaceAll(/alpha10/, '/').
            replaceAll(/alpha11/, '/').
            replaceAll(/alpha12/, '/').
            replaceAll(/alpha13/, '/').
            replaceAll(/alpha14/, '/').
            replaceAll(/alpha15/, '/').
            replaceAll(/alpha16/, '/').
            replaceAll(/alpha17/, '/').
            replaceAll(/alpha18/, '/').
            replaceAll(/alpha19/, '/').
            replaceAll(/alpha20/, '/').
            replaceAll(/alpha21/, '/').
            replaceAll(/alpha22/, '/').
            replaceAll(/alpha23/, '/').
//            replaceAll(/alpha24/, '/').
//            replaceAll(/alpha25/, '/').
            replaceAll(/\//, ".").
            replaceAll(/\.\.*/, ".").
            replaceAll(/__+/, "_")
    }
}
{code}
 compiles in about 6 seconds. If I remove the import of the Trait 'ATrait' in 'AClass' the compile proces only takes about 1 second.

If you consider the classes as the are shown above then the compile time nearly duplicates for every method call I add to the chained method call.

With the replaceAll with alpha24 being compiled the compilation process takes approximately 11 seconds and with alpha 25 being compiled in conjunction with alpha24 the compilation takes approximately 20 seconds.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)