// Path: src/com/nvinayshetty/DTOnator/DtoCreationOptions/DtoCreationOptionsFacade.java
// public class DtoCreationOptionsFacade {
//     private FieldCreationStrategy fieldCreationStrategy;
//     private ClassCreatorStrategy classAdderStrategy;
//     private KotlinClassCreationStrategy kotlinClassCreationStrategy;
//     private AccessModifier accessModifier;
//     private EnumSet<FieldEncapsulationOptions> encapsulationOptionses;
// 
//     public DtoCreationOptionsFacade(FieldCreationStrategy fieldCreationStrategy, ClassCreatorStrategy classAdderStrategy, AccessModifier accessModifier, HashSet<NameConflictResolverCommand> nameConflictResolverCommands, EnumSet<FieldEncapsulationOptions> encapsulationOptionses) {
//         this.fieldCreationStrategy = fieldCreationStrategy;
//         this.classAdderStrategy = classAdderStrategy;
//         this.accessModifier = accessModifier;
//         this.encapsulationOptionses = encapsulationOptionses;
//     }
// 
//     public DtoCreationOptionsFacade(FieldCreationStrategy fieldCreationStrategy, KotlinClassCreationStrategy classAdderStrategy, AccessModifier accessModifier, HashSet<NameConflictResolverCommand> nameConflictResolverCommands, EnumSet<FieldEncapsulationOptions> encapsulationOptionses) {
//         this.fieldCreationStrategy = fieldCreationStrategy;
//         this.kotlinClassCreationStrategy = classAdderStrategy;
//         this.accessModifier = accessModifier;
//         this.encapsulationOptionses = encapsulationOptionses;
//     }
// 
//     public FieldCreationStrategy getFieldCreationStrategy() {
//         return fieldCreationStrategy;
//     }
// 
// 
//     public ClassCreatorStrategy getClassCreationStrategy() {
//         return classAdderStrategy;
//     }
// 
//     public KotlinClassCreationStrategy getKotlinClassCreationStrategy() {
//         return kotlinClassCreationStrategy;
//     }
// 
//     public AccessModifier getAccessModifier() {
//         return accessModifier;
//     }
// 
//     public void setAccessModifier(AccessModifier accessModifier) {
//         this.accessModifier = accessModifier;
//     }
// 
//     public EnumSet<FieldEncapsulationOptions> getEncapsulationOptionses() {
//         return encapsulationOptionses;
//     }
// 
// 
// }
// 
// Path: src/com/nvinayshetty/DTOnator/FieldCreator/LanguageType.java
// public enum LanguageType {
//     JAVA, KOTLIN_VAL,KOTLIN_VAR,KOTLIN
// }
// 
// Path: src/com/nvinayshetty/DTOnator/NameConventionCommands/ClassName/ClassNameOptions.java
// public enum ClassNameOptions {
//     Bean("Bean"),Entity("Entity"),None("None");
// 
//     private String bean;
// 
//     ClassNameOptions(String bean) {
//         this.bean = bean;
//     }
// 
//     public String getName() {
//         return bean;
//     }
// }
// 
// Path: src/com/nvinayshetty/DTOnator/NameConventionCommands/NameParserCommand.java
// public interface NameParserCommand {
//     String parseFieldName(String name);
// 
//     String undoParsing(String name);
// }
// 
// Path: src/com/nvinayshetty/DTOnator/nameConflictResolvers/NameConflictResolverCommand.java
// public interface NameConflictResolverCommand {
//     String resolve(String keyword);
// }


import com.intellij.psi.PsiClass;
import com.nvinayshetty.DTOnator.DtoCreationOptions.DtoCreationOptionsFacade;
import com.nvinayshetty.DTOnator.FieldCreator.LanguageType;
import com.nvinayshetty.DTOnator.NameConventionCommands.ClassName.ClassNameOptions;
import com.nvinayshetty.DTOnator.NameConventionCommands.NameParserCommand;
import com.nvinayshetty.DTOnator.nameConflictResolvers.NameConflictResolverCommand;
import org.jetbrains.kotlin.psi.KtClass;
import java.util.HashSet;
        this.ktClass = classUnderCaret;
        return this;
    }

    public JsonDtoBuilder setDtoCreationOptionsFacade(DtoCreationOptionsFacade dtoCreationOptionsFacade) {
        this.dtoCreationOptionsFacade = dtoCreationOptionsFacade;
        return this;
    }

    public JsonDtoBuilder setFieldNameParser(HashSet<NameParserCommand> feildNameParser) {
        this.feildNameParser = feildNameParser;
        return this;
    }

    public JsonDtoBuilder setNameConflictResolver(HashSet<NameConflictResolverCommand> nameConflictResolverCommands) {
        this.nameConflictResolverCommands = nameConflictResolverCommands;
        return this;
    }


    public JsonDtoBuilder SetLanguage(LanguageType languageType) {
        this.languageType = languageType;
        return this;
    }

    public JsonDtoBuilder isAbstractClassWithAnnotation(boolean isAbstractClassWithAnnotation) {
        this.isAbstractClassWithAnnotation = isAbstractClassWithAnnotation;
        return this;
    }

// Path: src/com/nvinayshetty/DTOnator/DtoCreationOptions/DtoCreationOptionsFacade.java
// public class DtoCreationOptionsFacade {
//     private FieldCreationStrategy fieldCreationStrategy;
//     private ClassCreatorStrategy classAdderStrategy;
//     private KotlinClassCreationStrategy kotlinClassCreationStrategy;
//     private AccessModifier accessModifier;
//     private EnumSet<FieldEncapsulationOptions> encapsulationOptionses;
// 
//     public DtoCreationOptionsFacade(FieldCreationStrategy fieldCreationStrategy, ClassCreatorStrategy classAdderStrategy, AccessModifier accessModifier, HashSet<NameConflictResolverCommand> nameConflictResolverCommands, EnumSet<FieldEncapsulationOptions> encapsulationOptionses) {
//         this.fieldCreationStrategy = fieldCreationStrategy;
//         this.classAdderStrategy = classAdderStrategy;
//         this.accessModifier = accessModifier;
//         this.encapsulationOptionses = encapsulationOptionses;
//     }
// 
//     public DtoCreationOptionsFacade(FieldCreationStrategy fieldCreationStrategy, KotlinClassCreationStrategy classAdderStrategy, AccessModifier accessModifier, HashSet<NameConflictResolverCommand> nameConflictResolverCommands, EnumSet<FieldEncapsulationOptions> encapsulationOptionses) {
//         this.fieldCreationStrategy = fieldCreationStrategy;
//         this.kotlinClassCreationStrategy = classAdderStrategy;
//         this.accessModifier = accessModifier;
//         this.encapsulationOptionses = encapsulationOptionses;
//     }
// 
//     public FieldCreationStrategy getFieldCreationStrategy() {
//         return fieldCreationStrategy;
//     }
// 
// 
//     public ClassCreatorStrategy getClassCreationStrategy() {
//         return classAdderStrategy;
//     }
// 
//     public KotlinClassCreationStrategy getKotlinClassCreationStrategy() {
//         return kotlinClassCreationStrategy;
//     }
// 
//     public AccessModifier getAccessModifier() {
//         return accessModifier;
//     }
// 
//     public void setAccessModifier(AccessModifier accessModifier) {
//         this.accessModifier = accessModifier;
//     }
// 
//     public EnumSet<FieldEncapsulationOptions> getEncapsulationOptionses() {
//         return encapsulationOptionses;
//     }
// 
// 
// }
// 
// Path: src/com/nvinayshetty/DTOnator/FieldCreator/LanguageType.java
// public enum LanguageType {
//     JAVA, KOTLIN_VAL,KOTLIN_VAR,KOTLIN
// }
// 
// Path: src/com/nvinayshetty/DTOnator/NameConventionCommands/ClassName/ClassNameOptions.java
// public enum ClassNameOptions {
//     Bean("Bean"),Entity("Entity"),None("None");
// 
//     private String bean;
// 
//     ClassNameOptions(String bean) {
//         this.bean = bean;
//     }
// 
//     public String getName() {
//         return bean;
//     }
// }
// 
// Path: src/com/nvinayshetty/DTOnator/NameConventionCommands/NameParserCommand.java
// public interface NameParserCommand {
//     String parseFieldName(String name);
// 
//     String undoParsing(String name);
// }
// 
// Path: src/com/nvinayshetty/DTOnator/nameConflictResolvers/NameConflictResolverCommand.java
// public interface NameConflictResolverCommand {
//     String resolve(String keyword);
// }


// Path: src/com/nvinayshetty/DTOnator/FeedParser/JsonDtoBuilder.java
import com.intellij.psi.PsiClass;
import com.nvinayshetty.DTOnator.DtoCreationOptions.DtoCreationOptionsFacade;
import com.nvinayshetty.DTOnator.FieldCreator.LanguageType;
import com.nvinayshetty.DTOnator.NameConventionCommands.ClassName.ClassNameOptions;
import com.nvinayshetty.DTOnator.NameConventionCommands.NameParserCommand;
import com.nvinayshetty.DTOnator.nameConflictResolvers.NameConflictResolverCommand;
import org.jetbrains.kotlin.psi.KtClass;
import java.util.HashSet;

        this.ktClass = classUnderCaret;
        return this;
    }

    public JsonDtoBuilder setDtoCreationOptionsFacade(DtoCreationOptionsFacade dtoCreationOptionsFacade) {
        this.dtoCreationOptionsFacade = dtoCreationOptionsFacade;
        return this;
    }

    public JsonDtoBuilder setFieldNameParser(HashSet<NameParserCommand> feildNameParser) {
        this.feildNameParser = feildNameParser;
        return this;
    }

    public JsonDtoBuilder setNameConflictResolver(HashSet<NameConflictResolverCommand> nameConflictResolverCommands) {
        this.nameConflictResolverCommands = nameConflictResolverCommands;
        return this;
    }


    public JsonDtoBuilder SetLanguage(LanguageType languageType) {
        this.languageType = languageType;
        return this;
    }

    public JsonDtoBuilder isAbstractClassWithAnnotation(boolean isAbstractClassWithAnnotation) {
        this.isAbstractClassWithAnnotation = isAbstractClassWithAnnotation;
        return this;
    }

    public JsonDtoBuilder setClassNameOptions(ClassNameOptions classNameOptions) {