package ${packageName};

public class ${productionClassName} ${extendsAndImplementsClause} {

    public static ${productionClassName} one() { return new ${productionClassName}(); }

    private final String property;
    <% extraFields.each { %>
    ${it.modifier} ${it.type} ${it.name} = ${it.type}.one();
    <% } %>

    public ${productionClassName}(){
        this.property = null;
    }

    public ${productionClassName}(String param) {
        this.property = param;
    }

    public String getProperty() {
        return property;
    }
<% propertyCount.times { %>
    private String prop${it};

    public String getProp${it}() {
        return prop${it};
    }

    public void setProp${it}(String value) {
        prop${it} = value;
    }
<% } %>
}

@@ -18,16 +18,65 @@
 Name%7D;%0A%0A
+import java.util.List;%0Aimport java.util.Arrays;%0A%0A
 public c
@@ -349,16 +349,473 @@
 %7D.one();
+%0A%0A    public boolean check($%7Bit.type%7D o) %7B%0A        // dummy code to add arbitrary compile time%0A        String p = o.getProperty();%0A        p = p.toUpperCase();%0A        List%3CString%3E strings = Arrays.asList(p, this.getProperty());%0A        int len = 0;%0A        for (String s: strings) %7B%0A            len += s.length();%0A            %3C%25 propertyCount.times %7B %25%3E%0A            len += o.getProp$%7Bit%7D().length();%0A            %3C%25%7D%25%3E%0A        %7D%0A        return len%3E10;%0A    %7D
 %0A    %3C%25 

Add arbitrary code to make compile time longer * the original code was too fast to compile to make compile avoidance relevant * the original code didn't represent what we could find in "real" code