// 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;
            "javax.annotation.CheckForNull",

            // JavaEE - https://docs.oracle.com/javaee/7/api/javax/validation/constraints/Null.html
            "javax.validation.constraints.Null",

            // FindBugs - http://findbugs.sourceforge.net/api/edu/umd/cs/findbugs/annotations/Nullable.html
            "edu.umd.cs.findbugs.annotations.Nullable",

            // FindBugs - http://findbugs.sourceforge.net/api/edu/umd/cs/findbugs/annotations/CheckForNull.html
            "edu.umd.cs.findbugs.annotations.CheckForNull",

            // Android - https://developer.android.com/reference/android/support/annotation/Nullable.html
            "android.support.annotation.Nullable",

            // Eclipse - http://help.eclipse.org/oxygen/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-using_null_annotations.htm
            "org.eclipse.jdt.annotation.Nullable",

            // Spring - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/lang/Nullable.html
            "org.springframework.lang.Nullable",

            // Checker - https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/Nullable.html
            "org.checkerframework.checker.nullness.qual.Nullable",

            // Checker - https://checkerframework.org/api/org/checkerframework/checker/nullness/compatqual/NullableDecl.html
            "org.checkerframework.checker.nullness.compatqual.NullableDecl",

            // Checker - https://checkerframework.org/api/org/checkerframework/checker/nullness/compatqual/NullableType.html
            "org.checkerframework.checker.nullness.compatqual.NullableType"
    ));

// 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;

            "javax.annotation.CheckForNull",

            // JavaEE - https://docs.oracle.com/javaee/7/api/javax/validation/constraints/Null.html
            "javax.validation.constraints.Null",

            // FindBugs - http://findbugs.sourceforge.net/api/edu/umd/cs/findbugs/annotations/Nullable.html
            "edu.umd.cs.findbugs.annotations.Nullable",

            // FindBugs - http://findbugs.sourceforge.net/api/edu/umd/cs/findbugs/annotations/CheckForNull.html
            "edu.umd.cs.findbugs.annotations.CheckForNull",

            // Android - https://developer.android.com/reference/android/support/annotation/Nullable.html
            "android.support.annotation.Nullable",

            // Eclipse - http://help.eclipse.org/oxygen/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-using_null_annotations.htm
            "org.eclipse.jdt.annotation.Nullable",

            // Spring - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/lang/Nullable.html
            "org.springframework.lang.Nullable",

            // Checker - https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/Nullable.html
            "org.checkerframework.checker.nullness.qual.Nullable",

            // Checker - https://checkerframework.org/api/org/checkerframework/checker/nullness/compatqual/NullableDecl.html
            "org.checkerframework.checker.nullness.compatqual.NullableDecl",

            // Checker - https://checkerframework.org/api/org/checkerframework/checker/nullness/compatqual/NullableType.html
            "org.checkerframework.checker.nullness.compatqual.NullableType"
    ));

    public static final Set<InstrumentationType> DEFAULT_INSTRUMENTATIONS_TO_APPLY =