// 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/StringFunctions.java
// public static final Predicate<String> NOT_EMPTY = Predicates.not(EMPTY);


import java.util.Iterator;
import java.util.List;
import com.google.common.collect.Lists;
import static com.google.common.collect.Iterators.filter;
import static com.google.common.collect.Iterators.transform;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.newLinkedList;
import static com.timgroup.karg.naming.StringFunctions.LOWERCASE_TRIM;
import static com.timgroup.karg.naming.StringFunctions.NOT_EMPTY;
package com.timgroup.karg.naming;




public interface TargetNameParser {

    static TargetNameParser CAMEL_CASE = new CamelCaseParser();
    static TargetNameParser UNDERSCORE_SEPARATED = new UnderscoreParser();

    TargetName parse(String input);

    static final class UnderscoreParser implements TargetNameParser {
        @Override
        public TargetName parse(String input) {
// 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/StringFunctions.java
// public static final Predicate<String> NOT_EMPTY = Predicates.not(EMPTY);


// Path: src/main/java/com/timgroup/karg/naming/TargetNameParser.java
import java.util.Iterator;
import java.util.List;
import com.google.common.collect.Lists;
import static com.google.common.collect.Iterators.filter;
import static com.google.common.collect.Iterators.transform;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.newLinkedList;
import static com.timgroup.karg.naming.StringFunctions.LOWERCASE_TRIM;
import static com.timgroup.karg.naming.StringFunctions.NOT_EMPTY;

package com.timgroup.karg.naming;




public interface TargetNameParser {

    static TargetNameParser CAMEL_CASE = new CamelCaseParser();
    static TargetNameParser UNDERSCORE_SEPARATED = new UnderscoreParser();

    TargetName parse(String input);

    static final class UnderscoreParser implements TargetNameParser {
        @Override
        public TargetName parse(String input) {
            Iterator<String> words = transform(filter(newArrayList(input.split("_")).iterator(), NOT_EMPTY), LOWERCASE_TRIM);