// Path: core/common/src/main/java/tech/harmonysoft/oss/traute/common/instrumentation/InstrumentationType.java
// public enum InstrumentationType {
// 
//     /**
//      * Before:
//      * <pre>
//      *     public void test(&#064;NotNull String s) {
//      *         // body
//      *     }
//      * </pre>
//      * After:
//      * <pre>
//      *     public void test(&#064;NotNull String s) {
//      *         if (s == null) {
//      *             throw new NullPointerException("[problem details]");
//      *         }
//      *         // body
//      *     }
//      * </pre>
//      */
//     METHOD_PARAMETER("parameter"),
// 
//     /**
//      * Before:
//      * <pre>
//      *     &#064;NotNull
//      *     public String compute() {
//      *         return doCompute();
//      *     }
//      * </pre>
//      * After:
//      * <pre>
//      *     &#064;NotNull
//      *     public String compute() {
//      *         String tmpVar = doCompute();
//      *         if (tmpVar == null) {
//      *             throw new NullPointerException("[problem details]");
//      *         }
//      *         return tmpVar;
//      *     }
//      * </pre>
//      */
//     METHOD_RETURN("return");
// 
//     private static Map<String, InstrumentationType> BY_SHORT_NAME = new HashMap<>();
//     static {
//         for (InstrumentationType type : values()) {
//             BY_SHORT_NAME.put(type.getShortName(), type);
//         }
//     }
// 
//     @NotNull private final String shortName;
// 
//     InstrumentationType(@NotNull String shortName) {
//         this.shortName = shortName;
//     }
// 
//     @Nullable
//     public static InstrumentationType byShortName(@NotNull String shortName) {
//         return BY_SHORT_NAME.get(shortName);
//     }
// 
//     @NotNull
//     public String getShortName() {
//         return shortName;
//     }
// }


import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import tech.harmonysoft.oss.traute.common.instrumentation.InstrumentationType;
import java.io.File;
import java.util.*;
import static java.util.Arrays.asList;
import static java.util.Collections.singleton;
        return new TrautePluginSettingsBuilder();
    }

    @NotNull
    public TrautePluginSettingsBuilder withNotNullAnnotations(@NotNull String... notNullAnnotations) {
        this.notNullAnnotations.addAll(Arrays.asList(notNullAnnotations));
        return this;
    }

    @NotNull
    public TrautePluginSettingsBuilder withNullableAnnotations(@NotNull String... nullableAnnotations) {
        this.nullableAnnotations.addAll(Arrays.asList(nullableAnnotations));
        return this;
    }

    @NotNull
    public TrautePluginSettingsBuilder withInstrumentationToApply(@NotNull InstrumentationType type) {
        instrumentationsToApply.add(type);
        return this;
    }

    @NotNull
    public TrautePluginSettingsBuilder withExceptionToThrow(@NotNull InstrumentationType type,
                                                            @NotNull String exceptionToThrow)
    {
        exceptionsToThrow.put(type, exceptionToThrow);
        return this;
    }

    @NotNull
// Path: core/common/src/main/java/tech/harmonysoft/oss/traute/common/instrumentation/InstrumentationType.java
// public enum InstrumentationType {
// 
//     /**
//      * Before:
//      * <pre>
//      *     public void test(&#064;NotNull String s) {
//      *         // body
//      *     }
//      * </pre>
//      * After:
//      * <pre>
//      *     public void test(&#064;NotNull String s) {
//      *         if (s == null) {
//      *             throw new NullPointerException("[problem details]");
//      *         }
//      *         // body
//      *     }
//      * </pre>
//      */
//     METHOD_PARAMETER("parameter"),
// 
//     /**
//      * Before:
//      * <pre>
//      *     &#064;NotNull
//      *     public String compute() {
//      *         return doCompute();
//      *     }
//      * </pre>
//      * After:
//      * <pre>
//      *     &#064;NotNull
//      *     public String compute() {
//      *         String tmpVar = doCompute();
//      *         if (tmpVar == null) {
//      *             throw new NullPointerException("[problem details]");
//      *         }
//      *         return tmpVar;
//      *     }
//      * </pre>
//      */
//     METHOD_RETURN("return");
// 
//     private static Map<String, InstrumentationType> BY_SHORT_NAME = new HashMap<>();
//     static {
//         for (InstrumentationType type : values()) {
//             BY_SHORT_NAME.put(type.getShortName(), type);
//         }
//     }
// 
//     @NotNull private final String shortName;
// 
//     InstrumentationType(@NotNull String shortName) {
//         this.shortName = shortName;
//     }
// 
//     @Nullable
//     public static InstrumentationType byShortName(@NotNull String shortName) {
//         return BY_SHORT_NAME.get(shortName);
//     }
// 
//     @NotNull
//     public String getShortName() {
//         return shortName;
//     }
// }


// Path: core/common/src/main/java/tech/harmonysoft/oss/traute/common/settings/TrautePluginSettingsBuilder.java
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import tech.harmonysoft.oss.traute.common.instrumentation.InstrumentationType;
import java.io.File;
import java.util.*;
import static java.util.Arrays.asList;
import static java.util.Collections.singleton;

        return new TrautePluginSettingsBuilder();
    }

    @NotNull
    public TrautePluginSettingsBuilder withNotNullAnnotations(@NotNull String... notNullAnnotations) {
        this.notNullAnnotations.addAll(Arrays.asList(notNullAnnotations));
        return this;
    }

    @NotNull
    public TrautePluginSettingsBuilder withNullableAnnotations(@NotNull String... nullableAnnotations) {
        this.nullableAnnotations.addAll(Arrays.asList(nullableAnnotations));
        return this;
    }

    @NotNull
    public TrautePluginSettingsBuilder withInstrumentationToApply(@NotNull InstrumentationType type) {
        instrumentationsToApply.add(type);
        return this;
    }

    @NotNull
    public TrautePluginSettingsBuilder withExceptionToThrow(@NotNull InstrumentationType type,
                                                            @NotNull String exceptionToThrow)
    {
        exceptionsToThrow.put(type, exceptionToThrow);
        return this;
    }

    @NotNull
    public TrautePluginSettingsBuilder withExceptionTextPattern(@NotNull InstrumentationType type,