package com.prezi.haxe.gradle.incubating;
import com.prezi.haxe.gradle.incubating.typeconversion.NotationParser;
import com.prezi.haxe.gradle.incubating.typeconversion.NotationParserBuilder;
import com.prezi.haxe.gradle.incubating.typeconversion.TypeInfo;
import com.prezi.haxe.gradle.incubating.typeconversion.TypedNotationParser;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
public class SourceSetNotationParser {
public static NotationParser<Object, Set<LanguageSourceSet>> parser() {
return NotationParserBuilder
.toType(new TypeInfo<Set<LanguageSourceSet>>(Set.class))
.parser(new FunctionalSourceSetConverter())
.parser(new SingleLanguageSourceSetConverter())
.parser(new LanguageSourceSetCollectionConverter())
.toComposite();
}
private static class FunctionalSourceSetConverter extends TypedNotationParser<FunctionalSourceSet, Set<LanguageSourceSet>> {
private FunctionalSourceSetConverter() {
super(FunctionalSourceSet.class);
}
@Override
protected Set<LanguageSourceSet> parseType(FunctionalSourceSet notation) {
return notation;
}
}
private static class SingleLanguageSourceSetConverter extends TypedNotationParser<LanguageSourceSet, Set<LanguageSourceSet>> {
private SingleLanguageSourceSetConverter() {
super(LanguageSourceSet.class);
}
@Override
protected Set<LanguageSourceSet> parseType(LanguageSourceSet notation) {
return Collections.singleton(notation);
}
}
private static class LanguageSourceSetCollectionConverter extends TypedNotationParser<Collection<LanguageSourceSet>, Set<LanguageSourceSet>> {
private LanguageSourceSetCollectionConverter() {
super(new TypeInfo<Collection<LanguageSourceSet>>(Collection.class));
}
@Override
protected Set<LanguageSourceSet> parseType(Collection<LanguageSourceSet> notation) {
return new LinkedHashSet<LanguageSourceSet>(notation);
}
}
}