// Path: core/javac/src/main/java/tech/harmonysoft/oss/traute/javac/common/CompilationUnitProcessingContext.java
// public class CompilationUnitProcessingContext {
// 
//     private final Set<String> imports = new HashSet<>();
// 
//     @NotNull private final TrautePluginSettings          pluginSettings;
//     @NotNull private final TreeMaker                     astFactory;
//     @NotNull private final Names                         symbolsTable;
//     @NotNull private final TrautePluginLogger            logger;
//     @NotNull private final StatsCollector                statsCollector;
//     @NotNull private final ExceptionTextGeneratorManager exceptionTextGeneratorManager;
//     @NotNull private final PackageInfoManager            packageInfoManager;
// 
//     public CompilationUnitProcessingContext(
//             @NotNull TrautePluginSettings pluginSettings,
//             @NotNull TreeMaker astFactory,
//             @NotNull Names symbolsTable,
//             @NotNull TrautePluginLogger logger,
//             @NotNull StatsCollector statsCollector,
//             @NotNull ExceptionTextGeneratorManager exceptionTextGeneratorManager,
//             @NotNull PackageInfoManager packageInfoManager)
//     {
//         this.pluginSettings = pluginSettings;
//         this.statsCollector = statsCollector;
//         this.astFactory = astFactory;
//         this.symbolsTable = symbolsTable;
//         this.logger = logger;
//         this.exceptionTextGeneratorManager = exceptionTextGeneratorManager;
//         this.packageInfoManager = packageInfoManager;
//     }
// 
//     public void addImport(@NotNull String importText) {
//         imports.add(importText);
//     }
// 
//     @NotNull
//     public TrautePluginSettings getPluginSettings() {
//         return pluginSettings;
//     }
// 
//     @NotNull
//     public Set<String> getImports() {
//         return imports;
//     }
// 
//     @NotNull
//     public TreeMaker getAstFactory() {
//         return astFactory;
//     }
// 
//     @NotNull
//     public Names getSymbolsTable() {
//         return symbolsTable;
//     }
// 
//     @NotNull
//     public TrautePluginLogger getLogger() {
//         return logger;
//     }
// 
//     @NotNull
//     public StatsCollector getStatsCollector() {
//         return statsCollector;
//     }
// 
//     @NotNull
//     public ExceptionTextGeneratorManager getExceptionTextGeneratorManager() {
//         return exceptionTextGeneratorManager;
//     }
// 
//     @NotNull
//     public PackageInfoManager getPackageInfoManager() {
//         return packageInfoManager;
//     }
// }
// 
// 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 tech.harmonysoft.oss.traute.javac.common.CompilationUnitProcessingContext;
import tech.harmonysoft.oss.traute.common.instrumentation.InstrumentationType;
package tech.harmonysoft.oss.traute.javac.instrumentation;


/**
 * Holds information necessary to perform instrumentation.
 */
public interface InstrumentationInfo {

    /**
     * @return  instrumentation type of the data stored in the current object
     */
    @NotNull
// Path: core/javac/src/main/java/tech/harmonysoft/oss/traute/javac/common/CompilationUnitProcessingContext.java
// public class CompilationUnitProcessingContext {
// 
//     private final Set<String> imports = new HashSet<>();
// 
//     @NotNull private final TrautePluginSettings          pluginSettings;
//     @NotNull private final TreeMaker                     astFactory;
//     @NotNull private final Names                         symbolsTable;
//     @NotNull private final TrautePluginLogger            logger;
//     @NotNull private final StatsCollector                statsCollector;
//     @NotNull private final ExceptionTextGeneratorManager exceptionTextGeneratorManager;
//     @NotNull private final PackageInfoManager            packageInfoManager;
// 
//     public CompilationUnitProcessingContext(
//             @NotNull TrautePluginSettings pluginSettings,
//             @NotNull TreeMaker astFactory,
//             @NotNull Names symbolsTable,
//             @NotNull TrautePluginLogger logger,
//             @NotNull StatsCollector statsCollector,
//             @NotNull ExceptionTextGeneratorManager exceptionTextGeneratorManager,
//             @NotNull PackageInfoManager packageInfoManager)
//     {
//         this.pluginSettings = pluginSettings;
//         this.statsCollector = statsCollector;
//         this.astFactory = astFactory;
//         this.symbolsTable = symbolsTable;
//         this.logger = logger;
//         this.exceptionTextGeneratorManager = exceptionTextGeneratorManager;
//         this.packageInfoManager = packageInfoManager;
//     }
// 
//     public void addImport(@NotNull String importText) {
//         imports.add(importText);
//     }
// 
//     @NotNull
//     public TrautePluginSettings getPluginSettings() {
//         return pluginSettings;
//     }
// 
//     @NotNull
//     public Set<String> getImports() {
//         return imports;
//     }
// 
//     @NotNull
//     public TreeMaker getAstFactory() {
//         return astFactory;
//     }
// 
//     @NotNull
//     public Names getSymbolsTable() {
//         return symbolsTable;
//     }
// 
//     @NotNull
//     public TrautePluginLogger getLogger() {
//         return logger;
//     }
// 
//     @NotNull
//     public StatsCollector getStatsCollector() {
//         return statsCollector;
//     }
// 
//     @NotNull
//     public ExceptionTextGeneratorManager getExceptionTextGeneratorManager() {
//         return exceptionTextGeneratorManager;
//     }
// 
//     @NotNull
//     public PackageInfoManager getPackageInfoManager() {
//         return packageInfoManager;
//     }
// }
// 
// 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/javac/src/main/java/tech/harmonysoft/oss/traute/javac/instrumentation/InstrumentationInfo.java
import org.jetbrains.annotations.NotNull;
import tech.harmonysoft.oss.traute.javac.common.CompilationUnitProcessingContext;
import tech.harmonysoft.oss.traute.common.instrumentation.InstrumentationType;

package tech.harmonysoft.oss.traute.javac.instrumentation;


/**
 * Holds information necessary to perform instrumentation.
 */
public interface InstrumentationInfo {

    /**
     * @return  instrumentation type of the data stored in the current object
     */
    @NotNull
    InstrumentationType getType();