// Path: src/main/java/com/timgroup/karg/naming/StringFunctions.java
// public static final Function<String, String> CAPITALISE = new Function<String, String>() {
//     @Override
//     public String apply(String arg0) {
//         switch(arg0.length()) {
//             case 0: return "";
//             case 1: return arg0.toUpperCase();
//             default: return arg0.substring(0, 1).toUpperCase() + arg0.substring(1);
//         }
//     }
// };
// 
// Path: src/main/java/com/timgroup/karg/naming/StringFunctions.java
// public static final Function<String, String> LOWERCASE_TRIM = Functions.compose(LOWERCASE, TRIM);


import java.util.Iterator;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import static com.google.common.base.Functions.compose;
import static com.google.common.collect.Iterators.concat;
import static com.google.common.collect.Iterators.singletonIterator;
import static com.google.common.collect.Iterators.transform;
import static com.google.common.collect.Lists.newArrayList;
import static com.timgroup.karg.naming.StringFunctions.CAPITALISE;
import static com.timgroup.karg.naming.StringFunctions.LOWERCASE_TRIM;
package com.timgroup.karg.naming;




public interface TargetNameFormatter {
    
    static final TargetNameFormatter LOWER_CAMEL_CASE = new LowerCamelCaseFormatter();
    static final TargetNameFormatter UPPER_CAMEL_CASE = new UpperCamelCaseFormatter();
    static final TargetNameFormatter UNDERSCORE_SEPARATED = new UnderscoreSeparatedFormatter();
    
    static final class LowerCamelCaseFormatter implements TargetNameFormatter {
        
        @Override
        public String format(Iterable<String> words) {
// Path: src/main/java/com/timgroup/karg/naming/StringFunctions.java
// public static final Function<String, String> CAPITALISE = new Function<String, String>() {
//     @Override
//     public String apply(String arg0) {
//         switch(arg0.length()) {
//             case 0: return "";
//             case 1: return arg0.toUpperCase();
//             default: return arg0.substring(0, 1).toUpperCase() + arg0.substring(1);
//         }
//     }
// };
// 
// Path: src/main/java/com/timgroup/karg/naming/StringFunctions.java
// public static final Function<String, String> LOWERCASE_TRIM = Functions.compose(LOWERCASE, TRIM);


// Path: src/main/java/com/timgroup/karg/naming/TargetNameFormatter.java
import java.util.Iterator;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import static com.google.common.base.Functions.compose;
import static com.google.common.collect.Iterators.concat;
import static com.google.common.collect.Iterators.singletonIterator;
import static com.google.common.collect.Iterators.transform;
import static com.google.common.collect.Lists.newArrayList;
import static com.timgroup.karg.naming.StringFunctions.CAPITALISE;
import static com.timgroup.karg.naming.StringFunctions.LOWERCASE_TRIM;

package com.timgroup.karg.naming;




public interface TargetNameFormatter {
    
    static final TargetNameFormatter LOWER_CAMEL_CASE = new LowerCamelCaseFormatter();
    static final TargetNameFormatter UPPER_CAMEL_CASE = new UpperCamelCaseFormatter();
    static final TargetNameFormatter UNDERSCORE_SEPARATED = new UnderscoreSeparatedFormatter();
    
    static final class LowerCamelCaseFormatter implements TargetNameFormatter {
        
        @Override
        public String format(Iterable<String> words) {
            Iterator<String> lowercased = transform(words.iterator(), LOWERCASE_TRIM);