// Path: pury-no-op/src/main/java/com/nikitakozlov/pury/Pury.java
// public final class Pury {
// 
//     public static final String LOG_TAG = "Pury";
//     public static final String LOGGER_PLUGIN = "LoggerPlugin";
// 
//     public static void setLogger(Logger logger) {
//     }
// 
//     public synchronized static Logger getLogger() {
//         return null;
//     }
// 
//     public static boolean isEnabled() {
//         return false;
//     }
// 
//     public synchronized static void setEnabled(boolean enabled) {
//     }
// 
//     /**
//      * @param profilerName used to identify profiler. Used in results.
//      * @param stageName    Name of stage to start. Used in results.
//      * @param stageOrder   Stage order must be bigger then order of current most nested active stage.
//      *                     First profiling must starts with value 0.
//      * @param runsCounter  used to identify profiler. Amount of runs to average.
//      *                     Result will be available only after all runs are stopped.
//      */
//     public static void startProfiling(String profilerName, String stageName, int stageOrder,
//                                       int runsCounter) {
//     }
// 
//     /**
//      * @param profilerName used to identify profiler. Used in results.
//      * @param stageName    Name of stage to stop. Used in results.
//      * @param runsCounter  used to identify profiler. Amount of runs to average.
//      *                     Result will be available only after all runs are stopped.
//      */
//     public static void stopProfiling(String profilerName, String stageName, int runsCounter) {
//     }
// 
//     /**
//      * Adding custom Plugins allows to customize result processing. For example instead of
//      * logging result send it somewhere, or save it in a permanent storage. Default
//      * {@link Plugin} logs result into {@link Logger}.
//      *
//      * @param key           that identify Plugin
//      * @param plugin Plugin to process result
//      */
//     public static void addPlugin(String key, Plugin plugin) {
//     }
// 
//     /**
//      * Remove {@link Plugin} by key. To remove default result handler use {@link #LOGGER_PLUGIN}
//      *
//      * @param key that identify Plugin to remove.
//      */
//     public static void removePlugin(String key) {
//     }
// 
//     /**
//      * {@link #startProfiling(String, String, int, int)} and {@link #stopProfiling(String, String, int)}
//      * creates {@link ProfilerId} on every call. To avoid creating same ProfilerId multiple times,
//      * it is possible to call ProfilingManager directly.
//      * @return {@link ProfilingManager}
//      */
//     public static ProfilingManager getProfilingManager() {
//         return null;
//     }
// 
//     static void setProfilingManager(ProfilingManager profilingManager) {
//     }
// }
// 
// Path: pury/src/main/java/com/nikitakozlov/pury/Logger.java
// public interface Logger {
//     void result(String tag, String message);
// 
//     void warning(String tag, String message);
// 
//     void error(String tag, String message);
// }
// 
// Path: example/src/main/java/com/nikitakozlov/pury_example/profilers/StartApp.java
// public final class StartApp {
//     public static final String PROFILER_NAME = "App Start";
// 
//     public static final String TOP_STAGE ="App Start";
//     public static final int TOP_STAGE_ORDER = 0;
// 
//     public static final String SPLASH_SCREEN = "Splash Screen";
//     public static final int SPLASH_SCREEN_ORDER = TOP_STAGE_ORDER + 1;
// 
//     public static final String SPLASH_LOAD_DATA = "Splash Load Data";
//     public static final int SPLASH_LOAD_DATA_ORDER = SPLASH_SCREEN_ORDER + 1;
// 
//     public static final String MAIN_ACTIVITY_LAUNCH = "Main Activity Launch";
//     public static final int MAIN_ACTIVITY_LAUNCH_ORDER = SPLASH_SCREEN_ORDER + 1;
// 
//     public static final String MAIN_ACTIVITY_CREATE = "onCreate()";
//     public static final int MAIN_ACTIVITY_CREATE_ORDER = MAIN_ACTIVITY_LAUNCH_ORDER + 1;
// 
//     public static final String MAIN_ACTIVITY_START = "onStart()";
//     public static final int MAIN_ACTIVITY_START_ORDER = MAIN_ACTIVITY_LAUNCH_ORDER + 1;
// }


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import com.nikitakozlov.pury.Pury;
import com.nikitakozlov.pury.annotations.StartProfiling;
import com.nikitakozlov.pury.annotations.StopProfiling;
import com.nikitakozlov.pury.Logger;
import com.nikitakozlov.pury_example.profilers.StartApp;
package com.nikitakozlov.pury_example;



public class SplashActivity extends AppCompatActivity {

    @StartProfiling(profilerName = StartApp.PROFILER_NAME, stageName = StartApp.TOP_STAGE,
            stageOrder = StartApp.TOP_STAGE_ORDER)
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(newBase);
    }

// Path: pury-no-op/src/main/java/com/nikitakozlov/pury/Pury.java
// public final class Pury {
// 
//     public static final String LOG_TAG = "Pury";
//     public static final String LOGGER_PLUGIN = "LoggerPlugin";
// 
//     public static void setLogger(Logger logger) {
//     }
// 
//     public synchronized static Logger getLogger() {
//         return null;
//     }
// 
//     public static boolean isEnabled() {
//         return false;
//     }
// 
//     public synchronized static void setEnabled(boolean enabled) {
//     }
// 
//     /**
//      * @param profilerName used to identify profiler. Used in results.
//      * @param stageName    Name of stage to start. Used in results.
//      * @param stageOrder   Stage order must be bigger then order of current most nested active stage.
//      *                     First profiling must starts with value 0.
//      * @param runsCounter  used to identify profiler. Amount of runs to average.
//      *                     Result will be available only after all runs are stopped.
//      */
//     public static void startProfiling(String profilerName, String stageName, int stageOrder,
//                                       int runsCounter) {
//     }
// 
//     /**
//      * @param profilerName used to identify profiler. Used in results.
//      * @param stageName    Name of stage to stop. Used in results.
//      * @param runsCounter  used to identify profiler. Amount of runs to average.
//      *                     Result will be available only after all runs are stopped.
//      */
//     public static void stopProfiling(String profilerName, String stageName, int runsCounter) {
//     }
// 
//     /**
//      * Adding custom Plugins allows to customize result processing. For example instead of
//      * logging result send it somewhere, or save it in a permanent storage. Default
//      * {@link Plugin} logs result into {@link Logger}.
//      *
//      * @param key           that identify Plugin
//      * @param plugin Plugin to process result
//      */
//     public static void addPlugin(String key, Plugin plugin) {
//     }
// 
//     /**
//      * Remove {@link Plugin} by key. To remove default result handler use {@link #LOGGER_PLUGIN}
//      *
//      * @param key that identify Plugin to remove.
//      */
//     public static void removePlugin(String key) {
//     }
// 
//     /**
//      * {@link #startProfiling(String, String, int, int)} and {@link #stopProfiling(String, String, int)}
//      * creates {@link ProfilerId} on every call. To avoid creating same ProfilerId multiple times,
//      * it is possible to call ProfilingManager directly.
//      * @return {@link ProfilingManager}
//      */
//     public static ProfilingManager getProfilingManager() {
//         return null;
//     }
// 
//     static void setProfilingManager(ProfilingManager profilingManager) {
//     }
// }
// 
// Path: pury/src/main/java/com/nikitakozlov/pury/Logger.java
// public interface Logger {
//     void result(String tag, String message);
// 
//     void warning(String tag, String message);
// 
//     void error(String tag, String message);
// }
// 
// Path: example/src/main/java/com/nikitakozlov/pury_example/profilers/StartApp.java
// public final class StartApp {
//     public static final String PROFILER_NAME = "App Start";
// 
//     public static final String TOP_STAGE ="App Start";
//     public static final int TOP_STAGE_ORDER = 0;
// 
//     public static final String SPLASH_SCREEN = "Splash Screen";
//     public static final int SPLASH_SCREEN_ORDER = TOP_STAGE_ORDER + 1;
// 
//     public static final String SPLASH_LOAD_DATA = "Splash Load Data";
//     public static final int SPLASH_LOAD_DATA_ORDER = SPLASH_SCREEN_ORDER + 1;
// 
//     public static final String MAIN_ACTIVITY_LAUNCH = "Main Activity Launch";
//     public static final int MAIN_ACTIVITY_LAUNCH_ORDER = SPLASH_SCREEN_ORDER + 1;
// 
//     public static final String MAIN_ACTIVITY_CREATE = "onCreate()";
//     public static final int MAIN_ACTIVITY_CREATE_ORDER = MAIN_ACTIVITY_LAUNCH_ORDER + 1;
// 
//     public static final String MAIN_ACTIVITY_START = "onStart()";
//     public static final int MAIN_ACTIVITY_START_ORDER = MAIN_ACTIVITY_LAUNCH_ORDER + 1;
// }


// Path: example/src/main/java/com/nikitakozlov/pury_example/SplashActivity.java
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import com.nikitakozlov.pury.Pury;
import com.nikitakozlov.pury.annotations.StartProfiling;
import com.nikitakozlov.pury.annotations.StopProfiling;
import com.nikitakozlov.pury.Logger;
import com.nikitakozlov.pury_example.profilers.StartApp;

package com.nikitakozlov.pury_example;



public class SplashActivity extends AppCompatActivity {

    @StartProfiling(profilerName = StartApp.PROFILER_NAME, stageName = StartApp.TOP_STAGE,
            stageOrder = StartApp.TOP_STAGE_ORDER)
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(newBase);
    }

    @StartProfiling(profilerName = StartApp.PROFILER_NAME, stageName = StartApp.SPLASH_SCREEN,