// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: studio_stats.proto

package com.google.wireless.android.sdk.stats;

public final class AndroidStudioStats {
  private AndroidStudioStats() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public interface AndroidStudioEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.AndroidStudioEvent.EventCategory category = 1;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.EventCategory category = 1;</code>
     *
     * <pre>
     * Describes a group of event kinds related to each other.
     * </pre>
     */
    boolean hasCategory();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.EventCategory category = 1;</code>
     *
     * <pre>
     * Describes a group of event kinds related to each other.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory getCategory();

    // optional .android_studio.AndroidStudioEvent.EventKind kind = 2;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.EventKind kind = 2;</code>
     *
     * <pre>
     * Specific kind of event, primary separation key of all Android Studio
     *  related events.
     * </pre>
     */
    boolean hasKind();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.EventKind kind = 2;</code>
     *
     * <pre>
     * Specific kind of event, primary separation key of all Android Studio
     *  related events.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind getKind();

    // optional string studio_session_id = 3;
    /**
     * <code>optional string studio_session_id = 3;</code>
     *
     * <pre>
     * The session id is a UUID tracking a single instance of Android Studio
     *  to associate events together such as kind = TEST_RUN
     * </pre>
     */
    boolean hasStudioSessionId();
    /**
     * <code>optional string studio_session_id = 3;</code>
     *
     * <pre>
     * The session id is a UUID tracking a single instance of Android Studio
     *  to associate events together such as kind = TEST_RUN
     * </pre>
     */
    java.lang.String getStudioSessionId();
    /**
     * <code>optional string studio_session_id = 3;</code>
     *
     * <pre>
     * The session id is a UUID tracking a single instance of Android Studio
     *  to associate events together such as kind = TEST_RUN
     * </pre>
     */
    com.google.protobuf.ByteString
        getStudioSessionIdBytes();

    // optional .android_studio.ProductDetails product_details = 4;
    /**
     * <code>optional .android_studio.ProductDetails product_details = 4;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     *  or kind = EMULATOR_PING
     *  or ANDROID_STUDIO_TEST
     *  or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    boolean hasProductDetails();
    /**
     * <code>optional .android_studio.ProductDetails product_details = 4;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     *  or kind = EMULATOR_PING
     *  or ANDROID_STUDIO_TEST
     *  or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails getProductDetails();
    /**
     * <code>optional .android_studio.ProductDetails product_details = 4;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     *  or kind = EMULATOR_PING
     *  or ANDROID_STUDIO_TEST
     *  or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetailsOrBuilder getProductDetailsOrBuilder();

    // optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;</code>
     *
     * <pre>
     * set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
     * </pre>
     */
    boolean hasMonitorType();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;</code>
     *
     * <pre>
     * set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType getMonitorType();

    // optional bool monitor_paused = 6;
    /**
     * <code>optional bool monitor_paused = 6;</code>
     *
     * <pre>
     * set when kind = MONITOR_RUNNING
     * </pre>
     */
    boolean hasMonitorPaused();
    /**
     * <code>optional bool monitor_paused = 6;</code>
     *
     * <pre>
     * set when kind = MONITOR_RUNNING
     * </pre>
     */
    boolean getMonitorPaused();

    // optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;</code>
     *
     * <pre>
     * set when kind = PROFILING_OPEN or PROFILING_CAPTURE
     * </pre>
     */
    boolean hasProfilerCaptureType();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;</code>
     *
     * <pre>
     * set when kind = PROFILING_OPEN or PROFILING_CAPTURE
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType getProfilerCaptureType();

    // optional string cloud_testing_error_message = 8;
    /**
     * <code>optional string cloud_testing_error_message = 8;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_BACKEND_ERROR
     * </pre>
     */
    boolean hasCloudTestingErrorMessage();
    /**
     * <code>optional string cloud_testing_error_message = 8;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_BACKEND_ERROR
     * </pre>
     */
    java.lang.String getCloudTestingErrorMessage();
    /**
     * <code>optional string cloud_testing_error_message = 8;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_BACKEND_ERROR
     * </pre>
     */
    com.google.protobuf.ByteString
        getCloudTestingErrorMessageBytes();

    // optional int32 cloud_testing_loaded_screenshots_count = 9;
    /**
     * <code>optional int32 cloud_testing_loaded_screenshots_count = 9;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
     * </pre>
     */
    boolean hasCloudTestingLoadedScreenshotsCount();
    /**
     * <code>optional int32 cloud_testing_loaded_screenshots_count = 9;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
     * </pre>
     */
    int getCloudTestingLoadedScreenshotsCount();

    // optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_STARTED
     * </pre>
     */
    boolean hasRunConfigurationType();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_STARTED
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType getRunConfigurationType();

    // optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_STARTED
     * </pre>
     */
    boolean hasDebuggerType();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_STARTED
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType getDebuggerType();

    // optional .android_studio.DeviceInfo device_info = 12;
    /**
     * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
     *
     * <pre>
     * set when kind = LLDB_LAUNCHED
     *  or kind = DEPLOYMENT_APK
     *  or kind = DEPLOYMENT_EMULATOR
     *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
     *  or kind = TEST_RUN
     * </pre>
     */
    boolean hasDeviceInfo();
    /**
     * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
     *
     * <pre>
     * set when kind = LLDB_LAUNCHED
     *  or kind = DEPLOYMENT_APK
     *  or kind = DEPLOYMENT_EMULATOR
     *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
     *  or kind = TEST_RUN
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo getDeviceInfo();
    /**
     * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
     *
     * <pre>
     * set when kind = LLDB_LAUNCHED
     *  or kind = DEPLOYMENT_APK
     *  or kind = DEPLOYMENT_EMULATOR
     *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
     *  or kind = TEST_RUN
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfoOrBuilder getDeviceInfoOrBuilder();

    // optional string lldb_session_failure_message = 13;
    /**
     * <code>optional string lldb_session_failure_message = 13;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
     *  e.g. 'failed to get reply to handshake packet'
     * </pre>
     */
    boolean hasLldbSessionFailureMessage();
    /**
     * <code>optional string lldb_session_failure_message = 13;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
     *  e.g. 'failed to get reply to handshake packet'
     * </pre>
     */
    java.lang.String getLldbSessionFailureMessage();
    /**
     * <code>optional string lldb_session_failure_message = 13;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
     *  e.g. 'failed to get reply to handshake packet'
     * </pre>
     */
    com.google.protobuf.ByteString
        getLldbSessionFailureMessageBytes();

    // optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;</code>
     *
     * <pre>
     * set when kind = DEVELOPER_SERVICES_INSTALLED
     *  or kind = DEVELOPER_SERVICES_REMOVED
     * </pre>
     */
    boolean hasDeveloperServiceKind();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;</code>
     *
     * <pre>
     * set when kind = DEVELOPER_SERVICES_INSTALLED
     *  or kind = DEVELOPER_SERVICES_REMOVED
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind getDeveloperServiceKind();

    // optional string gradle_version = 15;
    /**
     * <code>optional string gradle_version = 15;</code>
     *
     * <pre>
     * set when category = GRADLE_SYNC
     * </pre>
     */
    boolean hasGradleVersion();
    /**
     * <code>optional string gradle_version = 15;</code>
     *
     * <pre>
     * set when category = GRADLE_SYNC
     * </pre>
     */
    java.lang.String getGradleVersion();
    /**
     * <code>optional string gradle_version = 15;</code>
     *
     * <pre>
     * set when category = GRADLE_SYNC
     * </pre>
     */
    com.google.protobuf.ByteString
        getGradleVersionBytes();

    // optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;</code>
     *
     * <pre>
     * e.g. '2.10'
     * set when kind = GRADLE_SYNC_FAILURE
     * </pre>
     */
    boolean hasGradleSyncFailure();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;</code>
     *
     * <pre>
     * e.g. '2.10'
     * set when kind = GRADLE_SYNC_FAILURE
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure getGradleSyncFailure();

    // optional string gradle_missing_signature = 17;
    /**
     * <code>optional string gradle_missing_signature = 17;</code>
     *
     * <pre>
     * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
     *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
     * </pre>
     */
    boolean hasGradleMissingSignature();
    /**
     * <code>optional string gradle_missing_signature = 17;</code>
     *
     * <pre>
     * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
     *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
     * </pre>
     */
    java.lang.String getGradleMissingSignature();
    /**
     * <code>optional string gradle_missing_signature = 17;</code>
     *
     * <pre>
     * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
     *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
     * </pre>
     */
    com.google.protobuf.ByteString
        getGradleMissingSignatureBytes();

    // optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;</code>
     *
     * <pre>
     * set when kind = TEMPLATE_RENDERER
     * </pre>
     */
    boolean hasTemplateRenderer();
    /**
     * <code>optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;</code>
     *
     * <pre>
     * set when kind = TEMPLATE_RENDERER
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer getTemplateRenderer();

    // optional .android_studio.StudioCrash studio_crash = 19;
    /**
     * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
     *
     * <pre>
     * set when kind = STUDIO_CRASH
     * </pre>
     */
    boolean hasStudioCrash();
    /**
     * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
     *
     * <pre>
     * set when kind = STUDIO_CRASH
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash getStudioCrash();
    /**
     * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
     *
     * <pre>
     * set when kind = STUDIO_CRASH
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrashOrBuilder getStudioCrashOrBuilder();

    // optional .android_studio.GradleBuildDetails gradle_build_details = 20;
    /**
     * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_DETAILS
     * </pre>
     */
    boolean hasGradleBuildDetails();
    /**
     * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_DETAILS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails getGradleBuildDetails();
    /**
     * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_DETAILS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetailsOrBuilder getGradleBuildDetailsOrBuilder();

    // optional .android_studio.InstantRun instant_run = 21;
    /**
     * <code>optional .android_studio.InstantRun instant_run = 21;</code>
     *
     * <pre>
     * set when kind = INSTANT_RUN
     * </pre>
     */
    boolean hasInstantRun();
    /**
     * <code>optional .android_studio.InstantRun instant_run = 21;</code>
     *
     * <pre>
     * set when kind = INSTANT_RUN
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun getInstantRun();
    /**
     * <code>optional .android_studio.InstantRun instant_run = 21;</code>
     *
     * <pre>
     * set when kind = INSTANT_RUN
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunOrBuilder getInstantRunOrBuilder();

    // optional .android_studio.MetaMetrics meta_metrics = 22;
    /**
     * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
     *
     * <pre>
     * set when kind = META_METRICS
     * </pre>
     */
    boolean hasMetaMetrics();
    /**
     * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
     *
     * <pre>
     * set when kind = META_METRICS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics getMetaMetrics();
    /**
     * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
     *
     * <pre>
     * set when kind = META_METRICS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetricsOrBuilder getMetaMetricsOrBuilder();

    // optional .android_studio.EmulatorDetails emulator_details = 23;
    /**
     * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
     *
     * <pre>
     * set when kind = EMULATOR_PING
     * </pre>
     */
    boolean hasEmulatorDetails();
    /**
     * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
     *
     * <pre>
     * set when kind = EMULATOR_PING
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails getEmulatorDetails();
    /**
     * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
     *
     * <pre>
     * set when kind = EMULATOR_PING
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetailsOrBuilder getEmulatorDetailsOrBuilder();

    // optional .android_studio.TestRun test_run = 24;
    /**
     * <code>optional .android_studio.TestRun test_run = 24;</code>
     *
     * <pre>
     * set when kind = TEST_RUN
     * </pre>
     */
    boolean hasTestRun();
    /**
     * <code>optional .android_studio.TestRun test_run = 24;</code>
     *
     * <pre>
     * set when kind = TEST_RUN
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun getTestRun();
    /**
     * <code>optional .android_studio.TestRun test_run = 24;</code>
     *
     * <pre>
     * set when kind = TEST_RUN
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRunOrBuilder getTestRunOrBuilder();

    // optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;
    /**
     * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
     *
     * <pre>
     * set when kind = EMULATOR_UI_EVENT
     * </pre>
     */
    boolean hasEmulatorUiEvent();
    /**
     * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
     *
     * <pre>
     * set when kind = EMULATOR_UI_EVENT
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent getEmulatorUiEvent();
    /**
     * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
     *
     * <pre>
     * set when kind = EMULATOR_UI_EVENT
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEventOrBuilder getEmulatorUiEventOrBuilder();

    // optional .android_studio.Hypervisor hypervisor = 26;
    /**
     * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
     *
     * <pre>
     * set when kind = HYPERVISOR
     * </pre>
     */
    boolean hasHypervisor();
    /**
     * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
     *
     * <pre>
     * set when kind = HYPERVISOR
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor getHypervisor();
    /**
     * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
     *
     * <pre>
     * set when kind = HYPERVISOR
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.HypervisorOrBuilder getHypervisorOrBuilder();

    // optional .android_studio.EmulatorHost emulator_host = 27;
    /**
     * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
     *
     * <pre>
     * set when kind = EMULATOR_HOST
     * </pre>
     */
    boolean hasEmulatorHost();
    /**
     * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
     *
     * <pre>
     * set when kind = EMULATOR_HOST
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost getEmulatorHost();
    /**
     * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
     *
     * <pre>
     * set when kind = EMULATOR_HOST
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHostOrBuilder getEmulatorHostOrBuilder();

    // optional .android_studio.GradleBuildProfile gradle_build_profile = 28;
    /**
     * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_PROFILE
     * </pre>
     */
    boolean hasGradleBuildProfile();
    /**
     * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_PROFILE
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile getGradleBuildProfile();
    /**
     * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_PROFILE
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileOrBuilder getGradleBuildProfileOrBuilder();

    // optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;
    /**
     * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
     *
     * <pre>
     * set when kind = LLDB_FRONTEND_EXITED
     * </pre>
     */
    boolean hasLldbFrontendDetails();
    /**
     * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
     *
     * <pre>
     * set when kind = LLDB_FRONTEND_EXITED
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails getLldbFrontendDetails();
    /**
     * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
     *
     * <pre>
     * set when kind = LLDB_FRONTEND_EXITED
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetailsOrBuilder getLldbFrontendDetailsOrBuilder();

    // optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;
    /**
     * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
     *
     * <pre>
     * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
     *  kind FIREBASE_ASSISTANT_SILENT_ERROR
     * </pre>
     */
    boolean hasFirebaseErrorDetails();
    /**
     * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
     *
     * <pre>
     * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
     *  kind FIREBASE_ASSISTANT_SILENT_ERROR
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails getFirebaseErrorDetails();
    /**
     * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
     *
     * <pre>
     * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
     *  kind FIREBASE_ASSISTANT_SILENT_ERROR
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetailsOrBuilder getFirebaseErrorDetailsOrBuilder();

    // optional string project_id = 31;
    /**
     * <code>optional string project_id = 31;</code>
     *
     * <pre>
     * Client-side salted (rotating every 28 days), sha256 of the project id.
     *  set when kind = PROJECT_STRUCTURE_*.
     * </pre>
     */
    boolean hasProjectId();
    /**
     * <code>optional string project_id = 31;</code>
     *
     * <pre>
     * Client-side salted (rotating every 28 days), sha256 of the project id.
     *  set when kind = PROJECT_STRUCTURE_*.
     * </pre>
     */
    java.lang.String getProjectId();
    /**
     * <code>optional string project_id = 31;</code>
     *
     * <pre>
     * Client-side salted (rotating every 28 days), sha256 of the project id.
     *  set when kind = PROJECT_STRUCTURE_*.
     * </pre>
     */
    com.google.protobuf.ByteString
        getProjectIdBytes();

    // optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;
    /**
     * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
     *
     * <pre>
     * set when kind = GFX_TRACE_*
     * </pre>
     */
    boolean hasGfxTracingDetails();
    /**
     * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
     *
     * <pre>
     * set when kind = GFX_TRACE_*
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails getGfxTracingDetails();
    /**
     * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
     *
     * <pre>
     * set when kind = GFX_TRACE_*
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetailsOrBuilder getGfxTracingDetailsOrBuilder();

    // optional .android_studio.TestRecorderDetails test_recorder_details = 33;
    /**
     * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
     *
     * <pre>
     * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
     * </pre>
     */
    boolean hasTestRecorderDetails();
    /**
     * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
     *
     * <pre>
     * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails getTestRecorderDetails();
    /**
     * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
     *
     * <pre>
     * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetailsOrBuilder getTestRecorderDetailsOrBuilder();

    // optional .android_studio.UIActionStats ui_action_stats = 34;
    /**
     * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
     *
     * <pre>
     * set when kind = STUDIO_UI_ACTION_STATS
     * </pre>
     */
    boolean hasUiActionStats();
    /**
     * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
     *
     * <pre>
     * set when kind = STUDIO_UI_ACTION_STATS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats getUiActionStats();
    /**
     * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
     *
     * <pre>
     * set when kind = STUDIO_UI_ACTION_STATS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStatsOrBuilder getUiActionStatsOrBuilder();

    // optional .android_studio.MachineDetails machine_details = 35;
    /**
     * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    boolean hasMachineDetails();
    /**
     * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails getMachineDetails();
    /**
     * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetailsOrBuilder getMachineDetailsOrBuilder();

    // optional .android_studio.JvmDetails jvm_details = 36;
    /**
     * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    boolean hasJvmDetails();
    /**
     * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails getJvmDetails();
    /**
     * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetailsOrBuilder getJvmDetailsOrBuilder();

    // optional .android_studio.JavaProcessStats java_process_stats = 37;
    /**
     * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
     *
     * <pre>
     * set when kind = STUDIO_PROCESS_STATS
     * </pre>
     */
    boolean hasJavaProcessStats();
    /**
     * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
     *
     * <pre>
     * set when kind = STUDIO_PROCESS_STATS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats getJavaProcessStats();
    /**
     * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
     *
     * <pre>
     * set when kind = STUDIO_PROCESS_STATS
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStatsOrBuilder getJavaProcessStatsOrBuilder();
  }
  /**
   * Protobuf type {@code android_studio.AndroidStudioEvent}
   */
  public static final class AndroidStudioEvent extends
      com.google.protobuf.GeneratedMessage
      implements AndroidStudioEventOrBuilder {
    // Use AndroidStudioEvent.newBuilder() to construct.
    private AndroidStudioEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidStudioEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidStudioEvent defaultInstance;
    public static AndroidStudioEvent getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidStudioEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidStudioEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      int mutable_bitField1_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                category_ = value;
              }
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                kind_ = value;
              }
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              studioSessionId_ = input.readBytes();
              break;
            }
            case 34: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = productDetails_.toBuilder();
              }
              productDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(productDetails_);
                productDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 40: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(5, rawValue);
              } else {
                bitField0_ |= 0x00000010;
                monitorType_ = value;
              }
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              monitorPaused_ = input.readBool();
              break;
            }
            case 56: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(7, rawValue);
              } else {
                bitField0_ |= 0x00000040;
                profilerCaptureType_ = value;
              }
              break;
            }
            case 66: {
              bitField0_ |= 0x00000080;
              cloudTestingErrorMessage_ = input.readBytes();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000100;
              cloudTestingLoadedScreenshotsCount_ = input.readInt32();
              break;
            }
            case 80: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(10, rawValue);
              } else {
                bitField0_ |= 0x00000200;
                runConfigurationType_ = value;
              }
              break;
            }
            case 88: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(11, rawValue);
              } else {
                bitField0_ |= 0x00000400;
                debuggerType_ = value;
              }
              break;
            }
            case 98: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000800) == 0x00000800)) {
                subBuilder = deviceInfo_.toBuilder();
              }
              deviceInfo_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceInfo_);
                deviceInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000800;
              break;
            }
            case 106: {
              bitField0_ |= 0x00001000;
              lldbSessionFailureMessage_ = input.readBytes();
              break;
            }
            case 112: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(14, rawValue);
              } else {
                bitField0_ |= 0x00002000;
                developerServiceKind_ = value;
              }
              break;
            }
            case 122: {
              bitField0_ |= 0x00004000;
              gradleVersion_ = input.readBytes();
              break;
            }
            case 128: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(16, rawValue);
              } else {
                bitField0_ |= 0x00008000;
                gradleSyncFailure_ = value;
              }
              break;
            }
            case 138: {
              bitField0_ |= 0x00010000;
              gradleMissingSignature_ = input.readBytes();
              break;
            }
            case 144: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer value = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(18, rawValue);
              } else {
                bitField0_ |= 0x00020000;
                templateRenderer_ = value;
              }
              break;
            }
            case 154: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.Builder subBuilder = null;
              if (((bitField0_ & 0x00040000) == 0x00040000)) {
                subBuilder = studioCrash_.toBuilder();
              }
              studioCrash_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(studioCrash_);
                studioCrash_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00040000;
              break;
            }
            case 162: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00080000) == 0x00080000)) {
                subBuilder = gradleBuildDetails_.toBuilder();
              }
              gradleBuildDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(gradleBuildDetails_);
                gradleBuildDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00080000;
              break;
            }
            case 170: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.Builder subBuilder = null;
              if (((bitField0_ & 0x00100000) == 0x00100000)) {
                subBuilder = instantRun_.toBuilder();
              }
              instantRun_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(instantRun_);
                instantRun_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00100000;
              break;
            }
            case 178: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.Builder subBuilder = null;
              if (((bitField0_ & 0x00200000) == 0x00200000)) {
                subBuilder = metaMetrics_.toBuilder();
              }
              metaMetrics_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(metaMetrics_);
                metaMetrics_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00200000;
              break;
            }
            case 186: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00400000) == 0x00400000)) {
                subBuilder = emulatorDetails_.toBuilder();
              }
              emulatorDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(emulatorDetails_);
                emulatorDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00400000;
              break;
            }
            case 194: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.Builder subBuilder = null;
              if (((bitField0_ & 0x00800000) == 0x00800000)) {
                subBuilder = testRun_.toBuilder();
              }
              testRun_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(testRun_);
                testRun_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00800000;
              break;
            }
            case 202: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x01000000) == 0x01000000)) {
                subBuilder = emulatorUiEvent_.toBuilder();
              }
              emulatorUiEvent_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(emulatorUiEvent_);
                emulatorUiEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x01000000;
              break;
            }
            case 210: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.Builder subBuilder = null;
              if (((bitField0_ & 0x02000000) == 0x02000000)) {
                subBuilder = hypervisor_.toBuilder();
              }
              hypervisor_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(hypervisor_);
                hypervisor_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x02000000;
              break;
            }
            case 218: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.Builder subBuilder = null;
              if (((bitField0_ & 0x04000000) == 0x04000000)) {
                subBuilder = emulatorHost_.toBuilder();
              }
              emulatorHost_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(emulatorHost_);
                emulatorHost_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x04000000;
              break;
            }
            case 226: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.Builder subBuilder = null;
              if (((bitField0_ & 0x08000000) == 0x08000000)) {
                subBuilder = gradleBuildProfile_.toBuilder();
              }
              gradleBuildProfile_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(gradleBuildProfile_);
                gradleBuildProfile_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x08000000;
              break;
            }
            case 234: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x10000000) == 0x10000000)) {
                subBuilder = lldbFrontendDetails_.toBuilder();
              }
              lldbFrontendDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(lldbFrontendDetails_);
                lldbFrontendDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x10000000;
              break;
            }
            case 242: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x20000000) == 0x20000000)) {
                subBuilder = firebaseErrorDetails_.toBuilder();
              }
              firebaseErrorDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(firebaseErrorDetails_);
                firebaseErrorDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x20000000;
              break;
            }
            case 250: {
              bitField0_ |= 0x40000000;
              projectId_ = input.readBytes();
              break;
            }
            case 258: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x80000000) == 0x80000000)) {
                subBuilder = gfxTracingDetails_.toBuilder();
              }
              gfxTracingDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(gfxTracingDetails_);
                gfxTracingDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x80000000;
              break;
            }
            case 266: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.Builder subBuilder = null;
              if (((bitField1_ & 0x00000001) == 0x00000001)) {
                subBuilder = testRecorderDetails_.toBuilder();
              }
              testRecorderDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(testRecorderDetails_);
                testRecorderDetails_ = subBuilder.buildPartial();
              }
              bitField1_ |= 0x00000001;
              break;
            }
            case 274: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.Builder subBuilder = null;
              if (((bitField1_ & 0x00000002) == 0x00000002)) {
                subBuilder = uiActionStats_.toBuilder();
              }
              uiActionStats_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(uiActionStats_);
                uiActionStats_ = subBuilder.buildPartial();
              }
              bitField1_ |= 0x00000002;
              break;
            }
            case 282: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.Builder subBuilder = null;
              if (((bitField1_ & 0x00000004) == 0x00000004)) {
                subBuilder = machineDetails_.toBuilder();
              }
              machineDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(machineDetails_);
                machineDetails_ = subBuilder.buildPartial();
              }
              bitField1_ |= 0x00000004;
              break;
            }
            case 290: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.Builder subBuilder = null;
              if (((bitField1_ & 0x00000008) == 0x00000008)) {
                subBuilder = jvmDetails_.toBuilder();
              }
              jvmDetails_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(jvmDetails_);
                jvmDetails_ = subBuilder.buildPartial();
              }
              bitField1_ |= 0x00000008;
              break;
            }
            case 298: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.Builder subBuilder = null;
              if (((bitField1_ & 0x00000010) == 0x00000010)) {
                subBuilder = javaProcessStats_.toBuilder();
              }
              javaProcessStats_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(javaProcessStats_);
                javaProcessStats_ = subBuilder.buildPartial();
              }
              bitField1_ |= 0x00000010;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_AndroidStudioEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_AndroidStudioEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidStudioEvent> PARSER =
        new com.google.protobuf.AbstractParser<AndroidStudioEvent>() {
      public AndroidStudioEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidStudioEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidStudioEvent> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.EventCategory}
     *
     * <pre>
     * Describes a group of event kinds related to each other.
     * </pre>
     */
    public enum EventCategory
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>NO_EVENT_CATEGORY = 0;</code>
       *
       * <pre>
       * The event was not grouped into any specific category (default).
       * </pre>
       */
      NO_EVENT_CATEGORY(0, 0),
      /**
       * <code>DEPLOYMENT = 1;</code>
       *
       * <pre>
       * The event is related to deployment to a device or emulator.
       * </pre>
       */
      DEPLOYMENT(1, 1),
      /**
       * <code>STUDIO_BUILD = 2;</code>
       *
       * <pre>
       * Stats on builds from Studio.
       * </pre>
       */
      STUDIO_BUILD(2, 2),
      /**
       * <code>DEVELOPER_SERVICES = 3;</code>
       *
       * <pre>
       * The event is related to usage of 'Google Developer Services'
       *  inside Android Studio.
       * </pre>
       */
      DEVELOPER_SERVICES(3, 3),
      /**
       * <code>GRADLE_SYNC = 4;</code>
       *
       * <pre>
       * The event is related to interaction between Android Studio and Gradle.
       * </pre>
       */
      GRADLE_SYNC(4, 4),
      /**
       * <code>PROFILING = 5;</code>
       *
       * <pre>
       * The event is related to Performance Profiling.
       * </pre>
       */
      PROFILING(5, 5),
      /**
       * <code>MONITOR = 6;</code>
       *
       * <pre>
       * The event is related to Performance Monitoring.
       * </pre>
       */
      MONITOR(6, 6),
      /**
       * <code>SDK_MANAGER = 7;</code>
       *
       * <pre>
       * The event is related to the SDK Manager.
       * </pre>
       */
      SDK_MANAGER(7, 7),
      /**
       * <code>TEMPLATE = 8;</code>
       *
       * <pre>
       * The event is related to project/file templates.
       * </pre>
       */
      TEMPLATE(8, 8),
      /**
       * <code>THEME_EDITOR = 9;</code>
       *
       * <pre>
       * The event is related to Theme Editor.
       * </pre>
       */
      THEME_EDITOR(9, 9),
      /**
       * <code>APP_INDEXING = 10;</code>
       *
       * <pre>
       * The event is related to App Indexing integration.
       *  (http://go/studio-app-indexing)
       * </pre>
       */
      APP_INDEXING(10, 10),
      /**
       * <code>LLDB = 11;</code>
       *
       * <pre>
       * The event is related to C++ debugging.
       * </pre>
       */
      LLDB(11, 11),
      /**
       * <code>CLOUD_TESTING = 12;</code>
       *
       * <pre>
       * The event is related to Google Cloud Test Lab integration.
       * </pre>
       */
      CLOUD_TESTING(12, 12),
      /**
       * <code>PING = 13;</code>
       *
       * <pre>
       * The event is a regular ping from the application.
       * </pre>
       */
      PING(13, 13),
      /**
       * <code>TESTS = 14;</code>
       *
       * <pre>
       * The event is related to running tests.
       * </pre>
       */
      TESTS(14, 14),
      /**
       * <code>META = 15;</code>
       *
       * <pre>
       * The event is a meta event reporting metrics on metrics.
       * </pre>
       */
      META(15, 15),
      /**
       * <code>EMULATOR_UI = 16;</code>
       *
       * <pre>
       * The event is related to the Emulator UI
       * </pre>
       */
      EMULATOR_UI(16, 16),
      /**
       * <code>SYSTEM = 17;</code>
       *
       * <pre>
       * The event describes System Info
       * </pre>
       */
      SYSTEM(17, 17),
      /**
       * <code>PROJECT_STRUCTURE_DIALOG = 18;</code>
       *
       * <pre>
       * The event is related to the Project Structure Dialog.
       * </pre>
       */
      PROJECT_STRUCTURE_DIALOG(18, 18),
      /**
       * <code>GRADLE = 19;</code>
       *
       * <pre>
       * The event is from the Android Gradle plugin.
       * </pre>
       */
      GRADLE(19, 19),
      /**
       * <code>FIREBASE_ASSISTANT = 20;</code>
       *
       * <pre>
       * The event is related to the Firebase assistant.
       * </pre>
       */
      FIREBASE_ASSISTANT(20, 20),
      /**
       * <code>GPU_PROFILER = 21;</code>
       *
       * <pre>
       * The event is related to the GPU Profiler.
       * </pre>
       */
      GPU_PROFILER(21, 21),
      /**
       * <code>TEST_RECORDER = 22;</code>
       *
       * <pre>
       * the event is related to the test recorder (Cassette)
       * </pre>
       */
      TEST_RECORDER(22, 22),
      /**
       * <code>STUDIO_UI = 23;</code>
       *
       * <pre>
       * the event is related to the Android Studio UI.
       * </pre>
       */
      STUDIO_UI(23, 23),
      ;

      /**
       * <code>NO_EVENT_CATEGORY = 0;</code>
       *
       * <pre>
       * The event was not grouped into any specific category (default).
       * </pre>
       */
      public static final int NO_EVENT_CATEGORY_VALUE = 0;
      /**
       * <code>DEPLOYMENT = 1;</code>
       *
       * <pre>
       * The event is related to deployment to a device or emulator.
       * </pre>
       */
      public static final int DEPLOYMENT_VALUE = 1;
      /**
       * <code>STUDIO_BUILD = 2;</code>
       *
       * <pre>
       * Stats on builds from Studio.
       * </pre>
       */
      public static final int STUDIO_BUILD_VALUE = 2;
      /**
       * <code>DEVELOPER_SERVICES = 3;</code>
       *
       * <pre>
       * The event is related to usage of 'Google Developer Services'
       *  inside Android Studio.
       * </pre>
       */
      public static final int DEVELOPER_SERVICES_VALUE = 3;
      /**
       * <code>GRADLE_SYNC = 4;</code>
       *
       * <pre>
       * The event is related to interaction between Android Studio and Gradle.
       * </pre>
       */
      public static final int GRADLE_SYNC_VALUE = 4;
      /**
       * <code>PROFILING = 5;</code>
       *
       * <pre>
       * The event is related to Performance Profiling.
       * </pre>
       */
      public static final int PROFILING_VALUE = 5;
      /**
       * <code>MONITOR = 6;</code>
       *
       * <pre>
       * The event is related to Performance Monitoring.
       * </pre>
       */
      public static final int MONITOR_VALUE = 6;
      /**
       * <code>SDK_MANAGER = 7;</code>
       *
       * <pre>
       * The event is related to the SDK Manager.
       * </pre>
       */
      public static final int SDK_MANAGER_VALUE = 7;
      /**
       * <code>TEMPLATE = 8;</code>
       *
       * <pre>
       * The event is related to project/file templates.
       * </pre>
       */
      public static final int TEMPLATE_VALUE = 8;
      /**
       * <code>THEME_EDITOR = 9;</code>
       *
       * <pre>
       * The event is related to Theme Editor.
       * </pre>
       */
      public static final int THEME_EDITOR_VALUE = 9;
      /**
       * <code>APP_INDEXING = 10;</code>
       *
       * <pre>
       * The event is related to App Indexing integration.
       *  (http://go/studio-app-indexing)
       * </pre>
       */
      public static final int APP_INDEXING_VALUE = 10;
      /**
       * <code>LLDB = 11;</code>
       *
       * <pre>
       * The event is related to C++ debugging.
       * </pre>
       */
      public static final int LLDB_VALUE = 11;
      /**
       * <code>CLOUD_TESTING = 12;</code>
       *
       * <pre>
       * The event is related to Google Cloud Test Lab integration.
       * </pre>
       */
      public static final int CLOUD_TESTING_VALUE = 12;
      /**
       * <code>PING = 13;</code>
       *
       * <pre>
       * The event is a regular ping from the application.
       * </pre>
       */
      public static final int PING_VALUE = 13;
      /**
       * <code>TESTS = 14;</code>
       *
       * <pre>
       * The event is related to running tests.
       * </pre>
       */
      public static final int TESTS_VALUE = 14;
      /**
       * <code>META = 15;</code>
       *
       * <pre>
       * The event is a meta event reporting metrics on metrics.
       * </pre>
       */
      public static final int META_VALUE = 15;
      /**
       * <code>EMULATOR_UI = 16;</code>
       *
       * <pre>
       * The event is related to the Emulator UI
       * </pre>
       */
      public static final int EMULATOR_UI_VALUE = 16;
      /**
       * <code>SYSTEM = 17;</code>
       *
       * <pre>
       * The event describes System Info
       * </pre>
       */
      public static final int SYSTEM_VALUE = 17;
      /**
       * <code>PROJECT_STRUCTURE_DIALOG = 18;</code>
       *
       * <pre>
       * The event is related to the Project Structure Dialog.
       * </pre>
       */
      public static final int PROJECT_STRUCTURE_DIALOG_VALUE = 18;
      /**
       * <code>GRADLE = 19;</code>
       *
       * <pre>
       * The event is from the Android Gradle plugin.
       * </pre>
       */
      public static final int GRADLE_VALUE = 19;
      /**
       * <code>FIREBASE_ASSISTANT = 20;</code>
       *
       * <pre>
       * The event is related to the Firebase assistant.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_VALUE = 20;
      /**
       * <code>GPU_PROFILER = 21;</code>
       *
       * <pre>
       * The event is related to the GPU Profiler.
       * </pre>
       */
      public static final int GPU_PROFILER_VALUE = 21;
      /**
       * <code>TEST_RECORDER = 22;</code>
       *
       * <pre>
       * the event is related to the test recorder (Cassette)
       * </pre>
       */
      public static final int TEST_RECORDER_VALUE = 22;
      /**
       * <code>STUDIO_UI = 23;</code>
       *
       * <pre>
       * the event is related to the Android Studio UI.
       * </pre>
       */
      public static final int STUDIO_UI_VALUE = 23;


      public final int getNumber() { return value; }

      public static EventCategory valueOf(int value) {
        switch (value) {
          case 0: return NO_EVENT_CATEGORY;
          case 1: return DEPLOYMENT;
          case 2: return STUDIO_BUILD;
          case 3: return DEVELOPER_SERVICES;
          case 4: return GRADLE_SYNC;
          case 5: return PROFILING;
          case 6: return MONITOR;
          case 7: return SDK_MANAGER;
          case 8: return TEMPLATE;
          case 9: return THEME_EDITOR;
          case 10: return APP_INDEXING;
          case 11: return LLDB;
          case 12: return CLOUD_TESTING;
          case 13: return PING;
          case 14: return TESTS;
          case 15: return META;
          case 16: return EMULATOR_UI;
          case 17: return SYSTEM;
          case 18: return PROJECT_STRUCTURE_DIALOG;
          case 19: return GRADLE;
          case 20: return FIREBASE_ASSISTANT;
          case 21: return GPU_PROFILER;
          case 22: return TEST_RECORDER;
          case 23: return STUDIO_UI;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<EventCategory>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<EventCategory>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<EventCategory>() {
              public EventCategory findValueByNumber(int number) {
                return EventCategory.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(0);
      }

      private static final EventCategory[] VALUES = values();

      public static EventCategory valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private EventCategory(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.EventCategory)
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.EventKind}
     *
     * <pre>
     * Specific kind of event, primary separation key of all Android Studio
     *  related events.
     * </pre>
     */
    public enum EventKind
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_EVENT_KIND = 0;</code>
       */
      UNKNOWN_EVENT_KIND(0, 0),
      /**
       * <code>DEPLOYMENT_APK = 1;</code>
       *
       * <pre>
       * An APK (android application) is deployed.
       * </pre>
       */
      DEPLOYMENT_APK(1, 1),
      /**
       * <code>DEPLOYMENT_TO_EMULATOR = 2;</code>
       *
       * <pre>
       * A deployment to the emulator.
       * </pre>
       */
      DEPLOYMENT_TO_EMULATOR(2, 2),
      /**
       * <code>DEVELOPER_SERVICES_INSTALLED = 3;</code>
       *
       * <pre>
       * The developer added a Google Developer Service to their app.
       * </pre>
       */
      DEVELOPER_SERVICES_INSTALLED(3, 3),
      /**
       * <code>DEVELOPER_SERVICES_REMOVED = 4;</code>
       *
       * <pre>
       * The developer removed  a Google Developer Service from their app.
       * </pre>
       */
      DEVELOPER_SERVICES_REMOVED(4, 4),
      /**
       * <code>GRADLE_SYNC_STARTED = 5;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle started.
       * </pre>
       */
      GRADLE_SYNC_STARTED(5, 5),
      /**
       * <code>GRADLE_SYNC_ENDED = 6;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle ended.
       * </pre>
       */
      GRADLE_SYNC_ENDED(6, 6),
      /**
       * <code>GRADLE_SYNC_SKIPPED = 7;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle was skipped.
       * </pre>
       */
      GRADLE_SYNC_SKIPPED(7, 7),
      /**
       * <code>GRADLE_SYNC_FAILURE = 8;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle failed.
       * </pre>
       */
      GRADLE_SYNC_FAILURE(8, 8),
      /**
       * <code>GRADLE_CPP_SYNC_COMPLETED = 9;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle C++ support completed.
       * </pre>
       */
      GRADLE_CPP_SYNC_COMPLETED(9, 9),
      /**
       * <code>PROFILING_CAPTURE = 10;</code>
       *
       * <pre>
       * Performance profiling capture started.
       * </pre>
       */
      PROFILING_CAPTURE(10, 10),
      /**
       * <code>PROFILING_OPEN = 11;</code>
       *
       * <pre>
       * Performance profiling capture opened in the IDE.
       * </pre>
       */
      PROFILING_OPEN(11, 11),
      /**
       * <code>PROFILING_CONVERT_HPROF = 12;</code>
       *
       * <pre>
       * Conversion of hprof profiling data in progress.
       * </pre>
       */
      PROFILING_CONVERT_HPROF(12, 12),
      /**
       * <code>PROFILING_ANALYSIS_RUN = 13;</code>
       *
       * <pre>
       * Analysis of the profiling data in progress.
       * </pre>
       */
      PROFILING_ANALYSIS_RUN(13, 13),
      /**
       * <code>MONITOR_ACTIVATED = 14;</code>
       *
       * <pre>
       * Performance monitoring has been activated.
       * </pre>
       */
      MONITOR_ACTIVATED(14, 14),
      /**
       * <code>MONITOR_RUNNING = 15;</code>
       *
       * <pre>
       * Performance monitoring is running.
       * </pre>
       */
      MONITOR_RUNNING(15, 15),
      /**
       * <code>SDK_MANAGER_TOOLBAR_CLICKED = 16;</code>
       *
       * <pre>
       * The user selected an action from the SDK Manager Toolbar.
       * </pre>
       */
      SDK_MANAGER_TOOLBAR_CLICKED(16, 16),
      /**
       * <code>SDK_MANAGER_STANDALONE_LAUNCHED = 17;</code>
       *
       * <pre>
       * The standalone SDK Manager was launched.
       * </pre>
       */
      SDK_MANAGER_STANDALONE_LAUNCHED(17, 17),
      /**
       * <code>SDK_MANAGER_LOADED = 18;</code>
       *
       * <pre>
       * The built-in SDK Manager was launched.
       * </pre>
       */
      SDK_MANAGER_LOADED(18, 18),
      /**
       * <code>TEMPLATE_RENDER = 19;</code>
       *
       * <pre>
       * A new file/project is created based on a template.
       * </pre>
       */
      TEMPLATE_RENDER(19, 19),
      /**
       * <code>THEME_EDITOR_OPEN = 20;</code>
       *
       * <pre>
       * User opened the Theme Editor.
       * </pre>
       */
      THEME_EDITOR_OPEN(20, 20),
      /**
       * <code>APP_INDEXING_DEEP_LINK_CREATED = 21;</code>
       *
       * <pre>
       * A deep link was created for app indexing.
       * </pre>
       */
      APP_INDEXING_DEEP_LINK_CREATED(21, 21),
      /**
       * <code>APP_INDEXING_API_CODE_CREATED = 22;</code>
       *
       * <pre>
       * An api code was created for app indexing.
       * </pre>
       */
      APP_INDEXING_API_CODE_CREATED(22, 22),
      /**
       * <code>APP_INDEXING_DEEP_LINK_LAUNCHED = 23;</code>
       *
       * <pre>
       * An app indexing deep link was launched.
       * </pre>
       */
      APP_INDEXING_DEEP_LINK_LAUNCHED(23, 23),
      /**
       * <code>APP_INDEXING_TRIGGER_QUICKFIX = 24;</code>
       *
       * <pre>
       * An app indexing quick fix was applied.
       * </pre>
       */
      APP_INDEXING_TRIGGER_QUICKFIX(24, 24),
      /**
       * <code>APP_INDEXING_SHOW_FEAG_DIALOG = 25;</code>
       *
       * <pre>
       * App Indexing Fetch As Google dialog is shown.
       * </pre>
       */
      APP_INDEXING_SHOW_FEAG_DIALOG(25, 25),
      /**
       * <code>APP_INDEXING_START_FEAG_TASK = 26;</code>
       *
       * <pre>
       * App Indexing Fetch As Google task has started.
       * </pre>
       */
      APP_INDEXING_START_FEAG_TASK(26, 26),
      /**
       * <code>LLDB_LAUNCHED = 27;</code>
       *
       * <pre>
       * Native debugger is launched.
       * </pre>
       */
      LLDB_LAUNCHED(27, 27),
      /**
       * <code>LLDB_SESSION_STARTED = 28;</code>
       *
       * <pre>
       * Native debugger session has started.
       * </pre>
       */
      LLDB_SESSION_STARTED(28, 28),
      /**
       * <code>LLDB_SESSION_FAILED = 29;</code>
       *
       * <pre>
       * Native debugger session has failed.
       * </pre>
       */
      LLDB_SESSION_FAILED(29, 29),
      /**
       * <code>LLDB_SESSION_COMPLETED = 30;</code>
       *
       * <pre>
       * Native debugger session has completed successfully.
       * </pre>
       */
      LLDB_SESSION_COMPLETED(30, 30),
      /**
       * <code>LLDB_INSTALL_STARTED = 31;</code>
       *
       * <pre>
       * SDK Manager QuickFix Wizard is invoked to install LLDB package.
       * </pre>
       */
      LLDB_INSTALL_STARTED(31, 31),
      /**
       * <code>LLDB_INSTALL_FAILED = 32;</code>
       *
       * <pre>
       * SDK Manager QuickFix Wizard invocation to install LLDB package failed.
       * </pre>
       */
      LLDB_INSTALL_FAILED(32, 32),
      /**
       * <code>LLDB_INSTALL_COMPLETED = 33;</code>
       *
       * <pre>
       * SDK Manager QuickFix Wizard invocation to install LLDB package completed
       *  successfully.
       * </pre>
       */
      LLDB_INSTALL_COMPLETED(33, 33),
      /**
       * <code>LLDB_SESSION_USED_WATCHPOINTS = 34;</code>
       *
       * <pre>
       * A watchpoint was added to native code.
       * </pre>
       */
      LLDB_SESSION_USED_WATCHPOINTS(34, 34),
      /**
       * <code>CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE = 35;</code>
       *
       * <pre>
       * A Cloud Device was configured for Cloud Testing.
       * </pre>
       */
      CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE(35, 35),
      /**
       * <code>CLOUD_TESTING_CONFIGURE_MATRIX = 36;</code>
       *
       * <pre>
       * A Matrix of Cloud Devices was configured for Cloud Testing.
       * </pre>
       */
      CLOUD_TESTING_CONFIGURE_MATRIX(36, 36),
      /**
       * <code>CLOUD_TESTING_LAUNCH_CLOUD_DEVICE = 37;</code>
       *
       * <pre>
       * A Cloud Devices was launched for Cloud Testing.
       * </pre>
       */
      CLOUD_TESTING_LAUNCH_CLOUD_DEVICE(37, 37),
      /**
       * <code>CLOUD_TESTING_RUN_TEST_MATRIX = 38;</code>
       *
       * <pre>
       * A Matrix of Cloud Devices was run for Cloud Testing.
       * </pre>
       */
      CLOUD_TESTING_RUN_TEST_MATRIX(38, 38),
      /**
       * <code>CLOUD_TESTING_BACKEND_ERROR = 39;</code>
       *
       * <pre>
       * Cloud Testing reported a backend error.
       * </pre>
       */
      CLOUD_TESTING_BACKEND_ERROR(39, 39),
      /**
       * <code>CLOUD_TESTING_DEBUG_FROM_RESULTS = 40;</code>
       *
       * <pre>
       * A Debug session was launched from Cloud Testing results.
       * </pre>
       */
      CLOUD_TESTING_DEBUG_FROM_RESULTS(40, 40),
      /**
       * <code>CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED = 41;</code>
       *
       * <pre>
       * The compare screenshots window was opened from a Cloud Testing run.
       * </pre>
       */
      CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED(41, 41),
      /**
       * <code>STUDIO_CRASH = 42;</code>
       *
       * <pre>
       * Studio crash statistics were sent.
       * </pre>
       */
      STUDIO_CRASH(42, 42),
      /**
       * <code>GRADLE_BUILD_DETAILS = 44;</code>
       *
       * <pre>
       * A Gradle Build was run and statistics are available.
       * </pre>
       */
      GRADLE_BUILD_DETAILS(43, 44),
      /**
       * <code>INSTANT_RUN = 45;</code>
       *
       * <pre>
       * Stats on Instant Run.
       * </pre>
       */
      INSTANT_RUN(44, 45),
      /**
       * <code>STUDIO_PING = 46;</code>
       *
       * <pre>
       * Daily Android Studio ping with version &amp; os details.
       * </pre>
       */
      STUDIO_PING(45, 46),
      /**
       * <code>EMULATOR_PING = 47;</code>
       *
       * <pre>
       * Daily emulator ping with version &amp; os details.
       * </pre>
       */
      EMULATOR_PING(46, 47),
      /**
       * <code>META_METRICS = 48;</code>
       *
       * <pre>
       * Metrics on Metrics.
       * </pre>
       */
      META_METRICS(47, 48),
      /**
       * <code>TEST_RUN = 50;</code>
       *
       * <pre>
       * User ran tests.
       * </pre>
       */
      TEST_RUN(48, 50),
      /**
       * <code>EMULATOR_UI_EVENT = 51;</code>
       *
       * <pre>
       * User clicked something in the Emulator UI.
       * </pre>
       */
      EMULATOR_UI_EVENT(49, 51),
      /**
       * <code>HYPERVISOR = 52;</code>
       *
       * <pre>
       * Information on the host OS's hypervisor support.
       * </pre>
       */
      HYPERVISOR(50, 52),
      /**
       * <code>EMULATOR_HOST = 53;</code>
       *
       * <pre>
       * Provides info on the Emulator Host
       * </pre>
       */
      EMULATOR_HOST(51, 53),
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_OPEN = 54;</code>
       *
       * <pre>
       * Various UI events in the Project Structure Dialog.
       * </pre>
       */
      PROJECT_STRUCTURE_DIALOG_OPEN(52, 54),
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_SAVE = 55;</code>
       */
      PROJECT_STRUCTURE_DIALOG_SAVE(53, 55),
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_TOP_TAB_CLICK = 56;</code>
       */
      PROJECT_STRUCTURE_DIALOG_TOP_TAB_CLICK(54, 56),
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_TOP_TAB_SAVE = 57;</code>
       */
      PROJECT_STRUCTURE_DIALOG_TOP_TAB_SAVE(55, 57),
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_LEFT_NAV_CLICK = 58;</code>
       */
      PROJECT_STRUCTURE_DIALOG_LEFT_NAV_CLICK(56, 58),
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_LEFT_NAV_SAVE = 59;</code>
       */
      PROJECT_STRUCTURE_DIALOG_LEFT_NAV_SAVE(57, 59),
      /**
       * <code>GRADLE_BUILD_PROFILE = 60;</code>
       *
       * <pre>
       * A gradle build profile
       * </pre>
       */
      GRADLE_BUILD_PROFILE(58, 60),
      /**
       * <code>LLDB_FRONTEND_EXITED = 61;</code>
       *
       * <pre>
       * The LLDB Frontend has unexpectedly exited
       * </pre>
       */
      LLDB_FRONTEND_EXITED(59, 61),
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_CREATED = 62;</code>
       *
       * <pre>
       * The Firebase assistant created a project.
       * </pre>
       */
      FIREBASE_ASSISTANT_PROJECT_CREATED(60, 62),
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_CREATE_FAILED = 63;</code>
       *
       * <pre>
       * The Firebase assistant failed to create a project.
       * </pre>
       */
      FIREBASE_ASSISTANT_PROJECT_CREATE_FAILED(61, 63),
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_UPGRADED = 64;</code>
       *
       * <pre>
       * The Firebase assistant upgraded a project.
       * </pre>
       */
      FIREBASE_ASSISTANT_PROJECT_UPGRADED(62, 64),
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_UPGRADE_FAILED = 66;</code>
       *
       * <pre>
       * The Firebase assistant failed to upgrade a project.
       * </pre>
       */
      FIREBASE_ASSISTANT_PROJECT_UPGRADE_FAILED(63, 66),
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_CONFIG_CREATE_FAILED = 67;</code>
       *
       * <pre>
       * The Firebase assistant failed to create a config.
       * </pre>
       */
      FIREBASE_ASSISTANT_PROJECT_CONFIG_CREATE_FAILED(64, 67),
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_UPDATED = 68;</code>
       *
       * <pre>
       * The Firebase assistant updated a project.
       * </pre>
       */
      FIREBASE_ASSISTANT_PROJECT_UPDATED(65, 68),
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_UPDATE_FAILED = 69;</code>
       *
       * <pre>
       * The Firebase assistant failed to update a project.
       * </pre>
       */
      FIREBASE_ASSISTANT_PROJECT_UPDATE_FAILED(66, 69),
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_CONFIG_WRITE_FAILED = 70;</code>
       *
       * <pre>
       * The Firebase assistant failed to write the project config.
       * </pre>
       */
      FIREBASE_ASSISTANT_PROJECT_CONFIG_WRITE_FAILED(67, 70),
      /**
       * <code>FIREBASE_ASSISTANT_TOS_FAILED = 71;</code>
       *
       * <pre>
       * The Firebase assistant failed as the user did not accept the TOS.
       * </pre>
       */
      FIREBASE_ASSISTANT_TOS_FAILED(68, 71),
      /**
       * <code>FIREBASE_ASSISTANT_ATTEMPT_LOGIN = 72;</code>
       *
       * <pre>
       * The Firebase assistant is trying to login.
       * </pre>
       */
      FIREBASE_ASSISTANT_ATTEMPT_LOGIN(69, 72),
      /**
       * <code>FIREBASE_ASSISTANT_LOGIN_SUCCESS = 73;</code>
       *
       * <pre>
       * The Firebase assistant successfully logged in.
       * </pre>
       */
      FIREBASE_ASSISTANT_LOGIN_SUCCESS(70, 73),
      /**
       * <code>FIREBASE_ASSISTANT_RECONNECT_DIALOG_SYNC = 74;</code>
       *
       * <pre>
       * The Firebase assistant showed the dialog to offer to reconnect.
       * </pre>
       */
      FIREBASE_ASSISTANT_RECONNECT_DIALOG_SYNC(71, 74),
      /**
       * <code>FIREBASE_ASSISTANT_CONNECT_REQUESTED = 75;</code>
       *
       * <pre>
       * The Firebase assistant was requested to connect to the server.
       * </pre>
       */
      FIREBASE_ASSISTANT_CONNECT_REQUESTED(72, 75),
      /**
       * <code>FIREBASE_ASSISTANT_OPEN = 76;</code>
       *
       * <pre>
       * The Firebase assistant panel was opened.
       * </pre>
       */
      FIREBASE_ASSISTANT_OPEN(73, 76),
      /**
       * <code>FIREBASE_ASSISTANT_CONNECT_DIALOG_OPENED = 77;</code>
       *
       * <pre>
       * The Firebase assistant connect dialog was opened.
       * </pre>
       */
      FIREBASE_ASSISTANT_CONNECT_DIALOG_OPENED(74, 77),
      /**
       * <code>FIREBASE_ASSISTANT_CONNECT_DIALOG_SYNC = 78;</code>
       *
       * <pre>
       * The Firebase assistant connect dialog was asked to connect.
       * </pre>
       */
      FIREBASE_ASSISTANT_CONNECT_DIALOG_SYNC(75, 78),
      /**
       * <code>FIREBASE_ASSISTANT_ERROR_PRESENTED = 79;</code>
       *
       * <pre>
       * The Firebase assistant presented an error to the user.
       * </pre>
       */
      FIREBASE_ASSISTANT_ERROR_PRESENTED(76, 79),
      /**
       * <code>FIREBASE_ASSISTANT_SILENT_ERROR = 80;</code>
       *
       * <pre>
       * The Firebase assistant encounted an error but didn't inform the user.
       * </pre>
       */
      FIREBASE_ASSISTANT_SILENT_ERROR(77, 80),
      /**
       * <code>FIREBASE_ASSISTANT_RECONNECT_DIALOG_OPENED = 81;</code>
       *
       * <pre>
       * The Firebase assistant reconnect dialog was opened.
       * </pre>
       */
      FIREBASE_ASSISTANT_RECONNECT_DIALOG_OPENED(78, 81),
      /**
       * <code>GFX_TRACE_INIT_ERROR = 82;</code>
       *
       * <pre>
       * The GPU Debugger tracing had an initialization failure.
       * </pre>
       */
      GFX_TRACE_INIT_ERROR(79, 82),
      /**
       * <code>GFX_TRACE_CLOSED = 83;</code>
       *
       * <pre>
       * The GPU Debugger tracing was closed.
       * </pre>
       */
      GFX_TRACE_CLOSED(80, 83),
      /**
       * <code>GFX_TRACE_PARAMETER_EDITED = 84;</code>
       *
       * <pre>
       * The GPU Debugger tracing had a parameter edited.
       * </pre>
       */
      GFX_TRACE_PARAMETER_EDITED(81, 84),
      /**
       * <code>GFX_TRACE_TRACE_STARTED = 85;</code>
       *
       * <pre>
       * The GPU Debugger tracing was started.
       * </pre>
       */
      GFX_TRACE_TRACE_STARTED(82, 85),
      /**
       * <code>GFX_TRACE_TRACE_STOPPED = 86;</code>
       *
       * <pre>
       * The GPU Debugger tracing was stopped.
       * </pre>
       */
      GFX_TRACE_TRACE_STOPPED(83, 86),
      /**
       * <code>GFX_TRACE_COMMAND_SELECTED = 87;</code>
       *
       * <pre>
       * A UI command influencing the the GPU Debugger was selected.
       * </pre>
       */
      GFX_TRACE_COMMAND_SELECTED(84, 87),
      /**
       * <code>GFX_TRACE_LINK_CLICKED = 88;</code>
       *
       * <pre>
       * A link from  the GPU Debugger tracing results was clicked.
       * </pre>
       */
      GFX_TRACE_LINK_CLICKED(85, 88),
      /**
       * <code>GFX_TRACE_MEMORY_VIEWED = 89;</code>
       *
       * <pre>
       * A memory snapshot from  the GPU Debugger tracing results was clicked.
       * </pre>
       */
      GFX_TRACE_MEMORY_VIEWED(86, 89),
      /**
       * <code>GFX_TRACE_TEXTURE_VIEWED = 90;</code>
       *
       * <pre>
       * A texture from the GPU Debugger tracing results was viewed.
       * </pre>
       */
      GFX_TRACE_TEXTURE_VIEWED(87, 90),
      /**
       * <code>LEGACY_IDEA_ANDROID_PROJECT = 91;</code>
       *
       * <pre>
       * A "legacy" IntelliJ style project was loaded.
       * </pre>
       */
      LEGACY_IDEA_ANDROID_PROJECT(88, 91),
      /**
       * <code>TEST_RECORDER_GENERATE_TEST_CLASS = 92;</code>
       *
       * <pre>
       * The user requested the test recorder to generate a test class.
       * </pre>
       */
      TEST_RECORDER_GENERATE_TEST_CLASS(89, 92),
      /**
       * <code>TEST_RECORDER_MISSING_ESPRESSO_DEPENDENCIES = 93;</code>
       *
       * <pre>
       * The test recorder failed as the project is missing espresso dependencies.
       * </pre>
       */
      TEST_RECORDER_MISSING_ESPRESSO_DEPENDENCIES(90, 93),
      /**
       * <code>TEST_RECORDER_MISSING_INSTRUMENTATION_TEST_FOLDER = 94;</code>
       *
       * <pre>
       * The test recorder failed as the instrumentation test folder is missing.
       * </pre>
       */
      TEST_RECORDER_MISSING_INSTRUMENTATION_TEST_FOLDER(91, 94),
      /**
       * <code>TEST_RECORDER_LAUNCH = 95;</code>
       *
       * <pre>
       * The test recorder was launched.
       * </pre>
       */
      TEST_RECORDER_LAUNCH(92, 95),
      /**
       * <code>GFX_TRACE_OPEN = 96;</code>
       *
       * <pre>
       * A GPU Debugger Trace session was opened but not started yet.
       * </pre>
       */
      GFX_TRACE_OPEN(93, 96),
      /**
       * <code>STUDIO_UI_ACTION_STATS = 97;</code>
       *
       * <pre>
       * Statistics on user actions in the Android Studio UI.
       * </pre>
       */
      STUDIO_UI_ACTION_STATS(94, 97),
      /**
       * <code>STUDIO_PROCESS_STATS = 98;</code>
       *
       * <pre>
       * Stats on the current running Android Studio process.
       * </pre>
       */
      STUDIO_PROCESS_STATS(95, 98),
      ;

      /**
       * <code>UNKNOWN_EVENT_KIND = 0;</code>
       */
      public static final int UNKNOWN_EVENT_KIND_VALUE = 0;
      /**
       * <code>DEPLOYMENT_APK = 1;</code>
       *
       * <pre>
       * An APK (android application) is deployed.
       * </pre>
       */
      public static final int DEPLOYMENT_APK_VALUE = 1;
      /**
       * <code>DEPLOYMENT_TO_EMULATOR = 2;</code>
       *
       * <pre>
       * A deployment to the emulator.
       * </pre>
       */
      public static final int DEPLOYMENT_TO_EMULATOR_VALUE = 2;
      /**
       * <code>DEVELOPER_SERVICES_INSTALLED = 3;</code>
       *
       * <pre>
       * The developer added a Google Developer Service to their app.
       * </pre>
       */
      public static final int DEVELOPER_SERVICES_INSTALLED_VALUE = 3;
      /**
       * <code>DEVELOPER_SERVICES_REMOVED = 4;</code>
       *
       * <pre>
       * The developer removed  a Google Developer Service from their app.
       * </pre>
       */
      public static final int DEVELOPER_SERVICES_REMOVED_VALUE = 4;
      /**
       * <code>GRADLE_SYNC_STARTED = 5;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle started.
       * </pre>
       */
      public static final int GRADLE_SYNC_STARTED_VALUE = 5;
      /**
       * <code>GRADLE_SYNC_ENDED = 6;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle ended.
       * </pre>
       */
      public static final int GRADLE_SYNC_ENDED_VALUE = 6;
      /**
       * <code>GRADLE_SYNC_SKIPPED = 7;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle was skipped.
       * </pre>
       */
      public static final int GRADLE_SYNC_SKIPPED_VALUE = 7;
      /**
       * <code>GRADLE_SYNC_FAILURE = 8;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle failed.
       * </pre>
       */
      public static final int GRADLE_SYNC_FAILURE_VALUE = 8;
      /**
       * <code>GRADLE_CPP_SYNC_COMPLETED = 9;</code>
       *
       * <pre>
       * A sync between Android Studio and Gradle C++ support completed.
       * </pre>
       */
      public static final int GRADLE_CPP_SYNC_COMPLETED_VALUE = 9;
      /**
       * <code>PROFILING_CAPTURE = 10;</code>
       *
       * <pre>
       * Performance profiling capture started.
       * </pre>
       */
      public static final int PROFILING_CAPTURE_VALUE = 10;
      /**
       * <code>PROFILING_OPEN = 11;</code>
       *
       * <pre>
       * Performance profiling capture opened in the IDE.
       * </pre>
       */
      public static final int PROFILING_OPEN_VALUE = 11;
      /**
       * <code>PROFILING_CONVERT_HPROF = 12;</code>
       *
       * <pre>
       * Conversion of hprof profiling data in progress.
       * </pre>
       */
      public static final int PROFILING_CONVERT_HPROF_VALUE = 12;
      /**
       * <code>PROFILING_ANALYSIS_RUN = 13;</code>
       *
       * <pre>
       * Analysis of the profiling data in progress.
       * </pre>
       */
      public static final int PROFILING_ANALYSIS_RUN_VALUE = 13;
      /**
       * <code>MONITOR_ACTIVATED = 14;</code>
       *
       * <pre>
       * Performance monitoring has been activated.
       * </pre>
       */
      public static final int MONITOR_ACTIVATED_VALUE = 14;
      /**
       * <code>MONITOR_RUNNING = 15;</code>
       *
       * <pre>
       * Performance monitoring is running.
       * </pre>
       */
      public static final int MONITOR_RUNNING_VALUE = 15;
      /**
       * <code>SDK_MANAGER_TOOLBAR_CLICKED = 16;</code>
       *
       * <pre>
       * The user selected an action from the SDK Manager Toolbar.
       * </pre>
       */
      public static final int SDK_MANAGER_TOOLBAR_CLICKED_VALUE = 16;
      /**
       * <code>SDK_MANAGER_STANDALONE_LAUNCHED = 17;</code>
       *
       * <pre>
       * The standalone SDK Manager was launched.
       * </pre>
       */
      public static final int SDK_MANAGER_STANDALONE_LAUNCHED_VALUE = 17;
      /**
       * <code>SDK_MANAGER_LOADED = 18;</code>
       *
       * <pre>
       * The built-in SDK Manager was launched.
       * </pre>
       */
      public static final int SDK_MANAGER_LOADED_VALUE = 18;
      /**
       * <code>TEMPLATE_RENDER = 19;</code>
       *
       * <pre>
       * A new file/project is created based on a template.
       * </pre>
       */
      public static final int TEMPLATE_RENDER_VALUE = 19;
      /**
       * <code>THEME_EDITOR_OPEN = 20;</code>
       *
       * <pre>
       * User opened the Theme Editor.
       * </pre>
       */
      public static final int THEME_EDITOR_OPEN_VALUE = 20;
      /**
       * <code>APP_INDEXING_DEEP_LINK_CREATED = 21;</code>
       *
       * <pre>
       * A deep link was created for app indexing.
       * </pre>
       */
      public static final int APP_INDEXING_DEEP_LINK_CREATED_VALUE = 21;
      /**
       * <code>APP_INDEXING_API_CODE_CREATED = 22;</code>
       *
       * <pre>
       * An api code was created for app indexing.
       * </pre>
       */
      public static final int APP_INDEXING_API_CODE_CREATED_VALUE = 22;
      /**
       * <code>APP_INDEXING_DEEP_LINK_LAUNCHED = 23;</code>
       *
       * <pre>
       * An app indexing deep link was launched.
       * </pre>
       */
      public static final int APP_INDEXING_DEEP_LINK_LAUNCHED_VALUE = 23;
      /**
       * <code>APP_INDEXING_TRIGGER_QUICKFIX = 24;</code>
       *
       * <pre>
       * An app indexing quick fix was applied.
       * </pre>
       */
      public static final int APP_INDEXING_TRIGGER_QUICKFIX_VALUE = 24;
      /**
       * <code>APP_INDEXING_SHOW_FEAG_DIALOG = 25;</code>
       *
       * <pre>
       * App Indexing Fetch As Google dialog is shown.
       * </pre>
       */
      public static final int APP_INDEXING_SHOW_FEAG_DIALOG_VALUE = 25;
      /**
       * <code>APP_INDEXING_START_FEAG_TASK = 26;</code>
       *
       * <pre>
       * App Indexing Fetch As Google task has started.
       * </pre>
       */
      public static final int APP_INDEXING_START_FEAG_TASK_VALUE = 26;
      /**
       * <code>LLDB_LAUNCHED = 27;</code>
       *
       * <pre>
       * Native debugger is launched.
       * </pre>
       */
      public static final int LLDB_LAUNCHED_VALUE = 27;
      /**
       * <code>LLDB_SESSION_STARTED = 28;</code>
       *
       * <pre>
       * Native debugger session has started.
       * </pre>
       */
      public static final int LLDB_SESSION_STARTED_VALUE = 28;
      /**
       * <code>LLDB_SESSION_FAILED = 29;</code>
       *
       * <pre>
       * Native debugger session has failed.
       * </pre>
       */
      public static final int LLDB_SESSION_FAILED_VALUE = 29;
      /**
       * <code>LLDB_SESSION_COMPLETED = 30;</code>
       *
       * <pre>
       * Native debugger session has completed successfully.
       * </pre>
       */
      public static final int LLDB_SESSION_COMPLETED_VALUE = 30;
      /**
       * <code>LLDB_INSTALL_STARTED = 31;</code>
       *
       * <pre>
       * SDK Manager QuickFix Wizard is invoked to install LLDB package.
       * </pre>
       */
      public static final int LLDB_INSTALL_STARTED_VALUE = 31;
      /**
       * <code>LLDB_INSTALL_FAILED = 32;</code>
       *
       * <pre>
       * SDK Manager QuickFix Wizard invocation to install LLDB package failed.
       * </pre>
       */
      public static final int LLDB_INSTALL_FAILED_VALUE = 32;
      /**
       * <code>LLDB_INSTALL_COMPLETED = 33;</code>
       *
       * <pre>
       * SDK Manager QuickFix Wizard invocation to install LLDB package completed
       *  successfully.
       * </pre>
       */
      public static final int LLDB_INSTALL_COMPLETED_VALUE = 33;
      /**
       * <code>LLDB_SESSION_USED_WATCHPOINTS = 34;</code>
       *
       * <pre>
       * A watchpoint was added to native code.
       * </pre>
       */
      public static final int LLDB_SESSION_USED_WATCHPOINTS_VALUE = 34;
      /**
       * <code>CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE = 35;</code>
       *
       * <pre>
       * A Cloud Device was configured for Cloud Testing.
       * </pre>
       */
      public static final int CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE_VALUE = 35;
      /**
       * <code>CLOUD_TESTING_CONFIGURE_MATRIX = 36;</code>
       *
       * <pre>
       * A Matrix of Cloud Devices was configured for Cloud Testing.
       * </pre>
       */
      public static final int CLOUD_TESTING_CONFIGURE_MATRIX_VALUE = 36;
      /**
       * <code>CLOUD_TESTING_LAUNCH_CLOUD_DEVICE = 37;</code>
       *
       * <pre>
       * A Cloud Devices was launched for Cloud Testing.
       * </pre>
       */
      public static final int CLOUD_TESTING_LAUNCH_CLOUD_DEVICE_VALUE = 37;
      /**
       * <code>CLOUD_TESTING_RUN_TEST_MATRIX = 38;</code>
       *
       * <pre>
       * A Matrix of Cloud Devices was run for Cloud Testing.
       * </pre>
       */
      public static final int CLOUD_TESTING_RUN_TEST_MATRIX_VALUE = 38;
      /**
       * <code>CLOUD_TESTING_BACKEND_ERROR = 39;</code>
       *
       * <pre>
       * Cloud Testing reported a backend error.
       * </pre>
       */
      public static final int CLOUD_TESTING_BACKEND_ERROR_VALUE = 39;
      /**
       * <code>CLOUD_TESTING_DEBUG_FROM_RESULTS = 40;</code>
       *
       * <pre>
       * A Debug session was launched from Cloud Testing results.
       * </pre>
       */
      public static final int CLOUD_TESTING_DEBUG_FROM_RESULTS_VALUE = 40;
      /**
       * <code>CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED = 41;</code>
       *
       * <pre>
       * The compare screenshots window was opened from a Cloud Testing run.
       * </pre>
       */
      public static final int CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED_VALUE = 41;
      /**
       * <code>STUDIO_CRASH = 42;</code>
       *
       * <pre>
       * Studio crash statistics were sent.
       * </pre>
       */
      public static final int STUDIO_CRASH_VALUE = 42;
      /**
       * <code>GRADLE_BUILD_DETAILS = 44;</code>
       *
       * <pre>
       * A Gradle Build was run and statistics are available.
       * </pre>
       */
      public static final int GRADLE_BUILD_DETAILS_VALUE = 44;
      /**
       * <code>INSTANT_RUN = 45;</code>
       *
       * <pre>
       * Stats on Instant Run.
       * </pre>
       */
      public static final int INSTANT_RUN_VALUE = 45;
      /**
       * <code>STUDIO_PING = 46;</code>
       *
       * <pre>
       * Daily Android Studio ping with version &amp; os details.
       * </pre>
       */
      public static final int STUDIO_PING_VALUE = 46;
      /**
       * <code>EMULATOR_PING = 47;</code>
       *
       * <pre>
       * Daily emulator ping with version &amp; os details.
       * </pre>
       */
      public static final int EMULATOR_PING_VALUE = 47;
      /**
       * <code>META_METRICS = 48;</code>
       *
       * <pre>
       * Metrics on Metrics.
       * </pre>
       */
      public static final int META_METRICS_VALUE = 48;
      /**
       * <code>TEST_RUN = 50;</code>
       *
       * <pre>
       * User ran tests.
       * </pre>
       */
      public static final int TEST_RUN_VALUE = 50;
      /**
       * <code>EMULATOR_UI_EVENT = 51;</code>
       *
       * <pre>
       * User clicked something in the Emulator UI.
       * </pre>
       */
      public static final int EMULATOR_UI_EVENT_VALUE = 51;
      /**
       * <code>HYPERVISOR = 52;</code>
       *
       * <pre>
       * Information on the host OS's hypervisor support.
       * </pre>
       */
      public static final int HYPERVISOR_VALUE = 52;
      /**
       * <code>EMULATOR_HOST = 53;</code>
       *
       * <pre>
       * Provides info on the Emulator Host
       * </pre>
       */
      public static final int EMULATOR_HOST_VALUE = 53;
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_OPEN = 54;</code>
       *
       * <pre>
       * Various UI events in the Project Structure Dialog.
       * </pre>
       */
      public static final int PROJECT_STRUCTURE_DIALOG_OPEN_VALUE = 54;
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_SAVE = 55;</code>
       */
      public static final int PROJECT_STRUCTURE_DIALOG_SAVE_VALUE = 55;
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_TOP_TAB_CLICK = 56;</code>
       */
      public static final int PROJECT_STRUCTURE_DIALOG_TOP_TAB_CLICK_VALUE = 56;
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_TOP_TAB_SAVE = 57;</code>
       */
      public static final int PROJECT_STRUCTURE_DIALOG_TOP_TAB_SAVE_VALUE = 57;
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_LEFT_NAV_CLICK = 58;</code>
       */
      public static final int PROJECT_STRUCTURE_DIALOG_LEFT_NAV_CLICK_VALUE = 58;
      /**
       * <code>PROJECT_STRUCTURE_DIALOG_LEFT_NAV_SAVE = 59;</code>
       */
      public static final int PROJECT_STRUCTURE_DIALOG_LEFT_NAV_SAVE_VALUE = 59;
      /**
       * <code>GRADLE_BUILD_PROFILE = 60;</code>
       *
       * <pre>
       * A gradle build profile
       * </pre>
       */
      public static final int GRADLE_BUILD_PROFILE_VALUE = 60;
      /**
       * <code>LLDB_FRONTEND_EXITED = 61;</code>
       *
       * <pre>
       * The LLDB Frontend has unexpectedly exited
       * </pre>
       */
      public static final int LLDB_FRONTEND_EXITED_VALUE = 61;
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_CREATED = 62;</code>
       *
       * <pre>
       * The Firebase assistant created a project.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_PROJECT_CREATED_VALUE = 62;
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_CREATE_FAILED = 63;</code>
       *
       * <pre>
       * The Firebase assistant failed to create a project.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_PROJECT_CREATE_FAILED_VALUE = 63;
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_UPGRADED = 64;</code>
       *
       * <pre>
       * The Firebase assistant upgraded a project.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_PROJECT_UPGRADED_VALUE = 64;
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_UPGRADE_FAILED = 66;</code>
       *
       * <pre>
       * The Firebase assistant failed to upgrade a project.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_PROJECT_UPGRADE_FAILED_VALUE = 66;
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_CONFIG_CREATE_FAILED = 67;</code>
       *
       * <pre>
       * The Firebase assistant failed to create a config.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_PROJECT_CONFIG_CREATE_FAILED_VALUE = 67;
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_UPDATED = 68;</code>
       *
       * <pre>
       * The Firebase assistant updated a project.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_PROJECT_UPDATED_VALUE = 68;
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_UPDATE_FAILED = 69;</code>
       *
       * <pre>
       * The Firebase assistant failed to update a project.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_PROJECT_UPDATE_FAILED_VALUE = 69;
      /**
       * <code>FIREBASE_ASSISTANT_PROJECT_CONFIG_WRITE_FAILED = 70;</code>
       *
       * <pre>
       * The Firebase assistant failed to write the project config.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_PROJECT_CONFIG_WRITE_FAILED_VALUE = 70;
      /**
       * <code>FIREBASE_ASSISTANT_TOS_FAILED = 71;</code>
       *
       * <pre>
       * The Firebase assistant failed as the user did not accept the TOS.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_TOS_FAILED_VALUE = 71;
      /**
       * <code>FIREBASE_ASSISTANT_ATTEMPT_LOGIN = 72;</code>
       *
       * <pre>
       * The Firebase assistant is trying to login.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_ATTEMPT_LOGIN_VALUE = 72;
      /**
       * <code>FIREBASE_ASSISTANT_LOGIN_SUCCESS = 73;</code>
       *
       * <pre>
       * The Firebase assistant successfully logged in.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_LOGIN_SUCCESS_VALUE = 73;
      /**
       * <code>FIREBASE_ASSISTANT_RECONNECT_DIALOG_SYNC = 74;</code>
       *
       * <pre>
       * The Firebase assistant showed the dialog to offer to reconnect.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_RECONNECT_DIALOG_SYNC_VALUE = 74;
      /**
       * <code>FIREBASE_ASSISTANT_CONNECT_REQUESTED = 75;</code>
       *
       * <pre>
       * The Firebase assistant was requested to connect to the server.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_CONNECT_REQUESTED_VALUE = 75;
      /**
       * <code>FIREBASE_ASSISTANT_OPEN = 76;</code>
       *
       * <pre>
       * The Firebase assistant panel was opened.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_OPEN_VALUE = 76;
      /**
       * <code>FIREBASE_ASSISTANT_CONNECT_DIALOG_OPENED = 77;</code>
       *
       * <pre>
       * The Firebase assistant connect dialog was opened.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_CONNECT_DIALOG_OPENED_VALUE = 77;
      /**
       * <code>FIREBASE_ASSISTANT_CONNECT_DIALOG_SYNC = 78;</code>
       *
       * <pre>
       * The Firebase assistant connect dialog was asked to connect.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_CONNECT_DIALOG_SYNC_VALUE = 78;
      /**
       * <code>FIREBASE_ASSISTANT_ERROR_PRESENTED = 79;</code>
       *
       * <pre>
       * The Firebase assistant presented an error to the user.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_ERROR_PRESENTED_VALUE = 79;
      /**
       * <code>FIREBASE_ASSISTANT_SILENT_ERROR = 80;</code>
       *
       * <pre>
       * The Firebase assistant encounted an error but didn't inform the user.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_SILENT_ERROR_VALUE = 80;
      /**
       * <code>FIREBASE_ASSISTANT_RECONNECT_DIALOG_OPENED = 81;</code>
       *
       * <pre>
       * The Firebase assistant reconnect dialog was opened.
       * </pre>
       */
      public static final int FIREBASE_ASSISTANT_RECONNECT_DIALOG_OPENED_VALUE = 81;
      /**
       * <code>GFX_TRACE_INIT_ERROR = 82;</code>
       *
       * <pre>
       * The GPU Debugger tracing had an initialization failure.
       * </pre>
       */
      public static final int GFX_TRACE_INIT_ERROR_VALUE = 82;
      /**
       * <code>GFX_TRACE_CLOSED = 83;</code>
       *
       * <pre>
       * The GPU Debugger tracing was closed.
       * </pre>
       */
      public static final int GFX_TRACE_CLOSED_VALUE = 83;
      /**
       * <code>GFX_TRACE_PARAMETER_EDITED = 84;</code>
       *
       * <pre>
       * The GPU Debugger tracing had a parameter edited.
       * </pre>
       */
      public static final int GFX_TRACE_PARAMETER_EDITED_VALUE = 84;
      /**
       * <code>GFX_TRACE_TRACE_STARTED = 85;</code>
       *
       * <pre>
       * The GPU Debugger tracing was started.
       * </pre>
       */
      public static final int GFX_TRACE_TRACE_STARTED_VALUE = 85;
      /**
       * <code>GFX_TRACE_TRACE_STOPPED = 86;</code>
       *
       * <pre>
       * The GPU Debugger tracing was stopped.
       * </pre>
       */
      public static final int GFX_TRACE_TRACE_STOPPED_VALUE = 86;
      /**
       * <code>GFX_TRACE_COMMAND_SELECTED = 87;</code>
       *
       * <pre>
       * A UI command influencing the the GPU Debugger was selected.
       * </pre>
       */
      public static final int GFX_TRACE_COMMAND_SELECTED_VALUE = 87;
      /**
       * <code>GFX_TRACE_LINK_CLICKED = 88;</code>
       *
       * <pre>
       * A link from  the GPU Debugger tracing results was clicked.
       * </pre>
       */
      public static final int GFX_TRACE_LINK_CLICKED_VALUE = 88;
      /**
       * <code>GFX_TRACE_MEMORY_VIEWED = 89;</code>
       *
       * <pre>
       * A memory snapshot from  the GPU Debugger tracing results was clicked.
       * </pre>
       */
      public static final int GFX_TRACE_MEMORY_VIEWED_VALUE = 89;
      /**
       * <code>GFX_TRACE_TEXTURE_VIEWED = 90;</code>
       *
       * <pre>
       * A texture from the GPU Debugger tracing results was viewed.
       * </pre>
       */
      public static final int GFX_TRACE_TEXTURE_VIEWED_VALUE = 90;
      /**
       * <code>LEGACY_IDEA_ANDROID_PROJECT = 91;</code>
       *
       * <pre>
       * A "legacy" IntelliJ style project was loaded.
       * </pre>
       */
      public static final int LEGACY_IDEA_ANDROID_PROJECT_VALUE = 91;
      /**
       * <code>TEST_RECORDER_GENERATE_TEST_CLASS = 92;</code>
       *
       * <pre>
       * The user requested the test recorder to generate a test class.
       * </pre>
       */
      public static final int TEST_RECORDER_GENERATE_TEST_CLASS_VALUE = 92;
      /**
       * <code>TEST_RECORDER_MISSING_ESPRESSO_DEPENDENCIES = 93;</code>
       *
       * <pre>
       * The test recorder failed as the project is missing espresso dependencies.
       * </pre>
       */
      public static final int TEST_RECORDER_MISSING_ESPRESSO_DEPENDENCIES_VALUE = 93;
      /**
       * <code>TEST_RECORDER_MISSING_INSTRUMENTATION_TEST_FOLDER = 94;</code>
       *
       * <pre>
       * The test recorder failed as the instrumentation test folder is missing.
       * </pre>
       */
      public static final int TEST_RECORDER_MISSING_INSTRUMENTATION_TEST_FOLDER_VALUE = 94;
      /**
       * <code>TEST_RECORDER_LAUNCH = 95;</code>
       *
       * <pre>
       * The test recorder was launched.
       * </pre>
       */
      public static final int TEST_RECORDER_LAUNCH_VALUE = 95;
      /**
       * <code>GFX_TRACE_OPEN = 96;</code>
       *
       * <pre>
       * A GPU Debugger Trace session was opened but not started yet.
       * </pre>
       */
      public static final int GFX_TRACE_OPEN_VALUE = 96;
      /**
       * <code>STUDIO_UI_ACTION_STATS = 97;</code>
       *
       * <pre>
       * Statistics on user actions in the Android Studio UI.
       * </pre>
       */
      public static final int STUDIO_UI_ACTION_STATS_VALUE = 97;
      /**
       * <code>STUDIO_PROCESS_STATS = 98;</code>
       *
       * <pre>
       * Stats on the current running Android Studio process.
       * </pre>
       */
      public static final int STUDIO_PROCESS_STATS_VALUE = 98;


      public final int getNumber() { return value; }

      public static EventKind valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_EVENT_KIND;
          case 1: return DEPLOYMENT_APK;
          case 2: return DEPLOYMENT_TO_EMULATOR;
          case 3: return DEVELOPER_SERVICES_INSTALLED;
          case 4: return DEVELOPER_SERVICES_REMOVED;
          case 5: return GRADLE_SYNC_STARTED;
          case 6: return GRADLE_SYNC_ENDED;
          case 7: return GRADLE_SYNC_SKIPPED;
          case 8: return GRADLE_SYNC_FAILURE;
          case 9: return GRADLE_CPP_SYNC_COMPLETED;
          case 10: return PROFILING_CAPTURE;
          case 11: return PROFILING_OPEN;
          case 12: return PROFILING_CONVERT_HPROF;
          case 13: return PROFILING_ANALYSIS_RUN;
          case 14: return MONITOR_ACTIVATED;
          case 15: return MONITOR_RUNNING;
          case 16: return SDK_MANAGER_TOOLBAR_CLICKED;
          case 17: return SDK_MANAGER_STANDALONE_LAUNCHED;
          case 18: return SDK_MANAGER_LOADED;
          case 19: return TEMPLATE_RENDER;
          case 20: return THEME_EDITOR_OPEN;
          case 21: return APP_INDEXING_DEEP_LINK_CREATED;
          case 22: return APP_INDEXING_API_CODE_CREATED;
          case 23: return APP_INDEXING_DEEP_LINK_LAUNCHED;
          case 24: return APP_INDEXING_TRIGGER_QUICKFIX;
          case 25: return APP_INDEXING_SHOW_FEAG_DIALOG;
          case 26: return APP_INDEXING_START_FEAG_TASK;
          case 27: return LLDB_LAUNCHED;
          case 28: return LLDB_SESSION_STARTED;
          case 29: return LLDB_SESSION_FAILED;
          case 30: return LLDB_SESSION_COMPLETED;
          case 31: return LLDB_INSTALL_STARTED;
          case 32: return LLDB_INSTALL_FAILED;
          case 33: return LLDB_INSTALL_COMPLETED;
          case 34: return LLDB_SESSION_USED_WATCHPOINTS;
          case 35: return CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE;
          case 36: return CLOUD_TESTING_CONFIGURE_MATRIX;
          case 37: return CLOUD_TESTING_LAUNCH_CLOUD_DEVICE;
          case 38: return CLOUD_TESTING_RUN_TEST_MATRIX;
          case 39: return CLOUD_TESTING_BACKEND_ERROR;
          case 40: return CLOUD_TESTING_DEBUG_FROM_RESULTS;
          case 41: return CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED;
          case 42: return STUDIO_CRASH;
          case 44: return GRADLE_BUILD_DETAILS;
          case 45: return INSTANT_RUN;
          case 46: return STUDIO_PING;
          case 47: return EMULATOR_PING;
          case 48: return META_METRICS;
          case 50: return TEST_RUN;
          case 51: return EMULATOR_UI_EVENT;
          case 52: return HYPERVISOR;
          case 53: return EMULATOR_HOST;
          case 54: return PROJECT_STRUCTURE_DIALOG_OPEN;
          case 55: return PROJECT_STRUCTURE_DIALOG_SAVE;
          case 56: return PROJECT_STRUCTURE_DIALOG_TOP_TAB_CLICK;
          case 57: return PROJECT_STRUCTURE_DIALOG_TOP_TAB_SAVE;
          case 58: return PROJECT_STRUCTURE_DIALOG_LEFT_NAV_CLICK;
          case 59: return PROJECT_STRUCTURE_DIALOG_LEFT_NAV_SAVE;
          case 60: return GRADLE_BUILD_PROFILE;
          case 61: return LLDB_FRONTEND_EXITED;
          case 62: return FIREBASE_ASSISTANT_PROJECT_CREATED;
          case 63: return FIREBASE_ASSISTANT_PROJECT_CREATE_FAILED;
          case 64: return FIREBASE_ASSISTANT_PROJECT_UPGRADED;
          case 66: return FIREBASE_ASSISTANT_PROJECT_UPGRADE_FAILED;
          case 67: return FIREBASE_ASSISTANT_PROJECT_CONFIG_CREATE_FAILED;
          case 68: return FIREBASE_ASSISTANT_PROJECT_UPDATED;
          case 69: return FIREBASE_ASSISTANT_PROJECT_UPDATE_FAILED;
          case 70: return FIREBASE_ASSISTANT_PROJECT_CONFIG_WRITE_FAILED;
          case 71: return FIREBASE_ASSISTANT_TOS_FAILED;
          case 72: return FIREBASE_ASSISTANT_ATTEMPT_LOGIN;
          case 73: return FIREBASE_ASSISTANT_LOGIN_SUCCESS;
          case 74: return FIREBASE_ASSISTANT_RECONNECT_DIALOG_SYNC;
          case 75: return FIREBASE_ASSISTANT_CONNECT_REQUESTED;
          case 76: return FIREBASE_ASSISTANT_OPEN;
          case 77: return FIREBASE_ASSISTANT_CONNECT_DIALOG_OPENED;
          case 78: return FIREBASE_ASSISTANT_CONNECT_DIALOG_SYNC;
          case 79: return FIREBASE_ASSISTANT_ERROR_PRESENTED;
          case 80: return FIREBASE_ASSISTANT_SILENT_ERROR;
          case 81: return FIREBASE_ASSISTANT_RECONNECT_DIALOG_OPENED;
          case 82: return GFX_TRACE_INIT_ERROR;
          case 83: return GFX_TRACE_CLOSED;
          case 84: return GFX_TRACE_PARAMETER_EDITED;
          case 85: return GFX_TRACE_TRACE_STARTED;
          case 86: return GFX_TRACE_TRACE_STOPPED;
          case 87: return GFX_TRACE_COMMAND_SELECTED;
          case 88: return GFX_TRACE_LINK_CLICKED;
          case 89: return GFX_TRACE_MEMORY_VIEWED;
          case 90: return GFX_TRACE_TEXTURE_VIEWED;
          case 91: return LEGACY_IDEA_ANDROID_PROJECT;
          case 92: return TEST_RECORDER_GENERATE_TEST_CLASS;
          case 93: return TEST_RECORDER_MISSING_ESPRESSO_DEPENDENCIES;
          case 94: return TEST_RECORDER_MISSING_INSTRUMENTATION_TEST_FOLDER;
          case 95: return TEST_RECORDER_LAUNCH;
          case 96: return GFX_TRACE_OPEN;
          case 97: return STUDIO_UI_ACTION_STATS;
          case 98: return STUDIO_PROCESS_STATS;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<EventKind>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<EventKind>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<EventKind>() {
              public EventKind findValueByNumber(int number) {
                return EventKind.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(1);
      }

      private static final EventKind[] VALUES = values();

      public static EventKind valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private EventKind(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.EventKind)
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.MonitorType}
     *
     * <pre>
     * Represents different Performance Monitoring types.
     * </pre>
     */
    public enum MonitorType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_MONITOR_TYPE = 0;</code>
       */
      UNKNOWN_MONITOR_TYPE(0, 0),
      /**
       * <code>CPU = 1;</code>
       */
      CPU(1, 1),
      /**
       * <code>GPU = 2;</code>
       */
      GPU(2, 2),
      /**
       * <code>MEMORY = 3;</code>
       */
      MEMORY(3, 3),
      /**
       * <code>NETWORK = 4;</code>
       */
      NETWORK(4, 4),
      ;

      /**
       * <code>UNKNOWN_MONITOR_TYPE = 0;</code>
       */
      public static final int UNKNOWN_MONITOR_TYPE_VALUE = 0;
      /**
       * <code>CPU = 1;</code>
       */
      public static final int CPU_VALUE = 1;
      /**
       * <code>GPU = 2;</code>
       */
      public static final int GPU_VALUE = 2;
      /**
       * <code>MEMORY = 3;</code>
       */
      public static final int MEMORY_VALUE = 3;
      /**
       * <code>NETWORK = 4;</code>
       */
      public static final int NETWORK_VALUE = 4;


      public final int getNumber() { return value; }

      public static MonitorType valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_MONITOR_TYPE;
          case 1: return CPU;
          case 2: return GPU;
          case 3: return MEMORY;
          case 4: return NETWORK;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<MonitorType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<MonitorType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<MonitorType>() {
              public MonitorType findValueByNumber(int number) {
                return MonitorType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(2);
      }

      private static final MonitorType[] VALUES = values();

      public static MonitorType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private MonitorType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.MonitorType)
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.ProfilerCaptureType}
     *
     * <pre>
     * Represents different Performance Profiler Capture types.
     * </pre>
     */
    public enum ProfilerCaptureType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_PROFILER_CAPTURE_TYPE = 0;</code>
       */
      UNKNOWN_PROFILER_CAPTURE_TYPE(0, 0),
      /**
       * <code>ALLOCATION = 1;</code>
       */
      ALLOCATION(1, 1),
      /**
       * <code>FILE = 2;</code>
       */
      FILE(2, 2),
      /**
       * <code>GFX_TRACE = 3;</code>
       */
      GFX_TRACE(3, 3),
      /**
       * <code>HEAP = 4;</code>
       */
      HEAP(4, 4),
      /**
       * <code>SYSTEM_INFO = 5;</code>
       */
      SYSTEM_INFO(5, 5),
      /**
       * <code>VM_TRACE = 6;</code>
       */
      VM_TRACE(6, 6),
      /**
       * <code>METHOD_TRACING = 7;</code>
       */
      METHOD_TRACING(7, 7),
      /**
       * <code>LAYOUT_INSPECTOR_SNAPSHOT = 8;</code>
       */
      LAYOUT_INSPECTOR_SNAPSHOT(8, 8),
      /**
       * <code>HIERARCHY_VIEW = 9;</code>
       */
      HIERARCHY_VIEW(9, 9),
      ;

      /**
       * <code>UNKNOWN_PROFILER_CAPTURE_TYPE = 0;</code>
       */
      public static final int UNKNOWN_PROFILER_CAPTURE_TYPE_VALUE = 0;
      /**
       * <code>ALLOCATION = 1;</code>
       */
      public static final int ALLOCATION_VALUE = 1;
      /**
       * <code>FILE = 2;</code>
       */
      public static final int FILE_VALUE = 2;
      /**
       * <code>GFX_TRACE = 3;</code>
       */
      public static final int GFX_TRACE_VALUE = 3;
      /**
       * <code>HEAP = 4;</code>
       */
      public static final int HEAP_VALUE = 4;
      /**
       * <code>SYSTEM_INFO = 5;</code>
       */
      public static final int SYSTEM_INFO_VALUE = 5;
      /**
       * <code>VM_TRACE = 6;</code>
       */
      public static final int VM_TRACE_VALUE = 6;
      /**
       * <code>METHOD_TRACING = 7;</code>
       */
      public static final int METHOD_TRACING_VALUE = 7;
      /**
       * <code>LAYOUT_INSPECTOR_SNAPSHOT = 8;</code>
       */
      public static final int LAYOUT_INSPECTOR_SNAPSHOT_VALUE = 8;
      /**
       * <code>HIERARCHY_VIEW = 9;</code>
       */
      public static final int HIERARCHY_VIEW_VALUE = 9;


      public final int getNumber() { return value; }

      public static ProfilerCaptureType valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_PROFILER_CAPTURE_TYPE;
          case 1: return ALLOCATION;
          case 2: return FILE;
          case 3: return GFX_TRACE;
          case 4: return HEAP;
          case 5: return SYSTEM_INFO;
          case 6: return VM_TRACE;
          case 7: return METHOD_TRACING;
          case 8: return LAYOUT_INSPECTOR_SNAPSHOT;
          case 9: return HIERARCHY_VIEW;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<ProfilerCaptureType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<ProfilerCaptureType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<ProfilerCaptureType>() {
              public ProfilerCaptureType findValueByNumber(int number) {
                return ProfilerCaptureType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(3);
      }

      private static final ProfilerCaptureType[] VALUES = values();

      public static ProfilerCaptureType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private ProfilerCaptureType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.ProfilerCaptureType)
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.RunConfigurationType}
     *
     * <pre>
     * Represents the different Run Configurations the debugger supports.
     * </pre>
     */
    public enum RunConfigurationType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_RUN_CONFIGURATION_TYPE = 0;</code>
       */
      UNKNOWN_RUN_CONFIGURATION_TYPE(0, 0),
      /**
       * <code>ANDROID = 1;</code>
       */
      ANDROID(1, 1),
      /**
       * <code>ANDROID_NATIVE = 2;</code>
       */
      ANDROID_NATIVE(2, 2),
      /**
       * <code>ANDROID_TEST = 3;</code>
       */
      ANDROID_TEST(3, 3),
      ;

      /**
       * <code>UNKNOWN_RUN_CONFIGURATION_TYPE = 0;</code>
       */
      public static final int UNKNOWN_RUN_CONFIGURATION_TYPE_VALUE = 0;
      /**
       * <code>ANDROID = 1;</code>
       */
      public static final int ANDROID_VALUE = 1;
      /**
       * <code>ANDROID_NATIVE = 2;</code>
       */
      public static final int ANDROID_NATIVE_VALUE = 2;
      /**
       * <code>ANDROID_TEST = 3;</code>
       */
      public static final int ANDROID_TEST_VALUE = 3;


      public final int getNumber() { return value; }

      public static RunConfigurationType valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_RUN_CONFIGURATION_TYPE;
          case 1: return ANDROID;
          case 2: return ANDROID_NATIVE;
          case 3: return ANDROID_TEST;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<RunConfigurationType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<RunConfigurationType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<RunConfigurationType>() {
              public RunConfigurationType findValueByNumber(int number) {
                return RunConfigurationType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(4);
      }

      private static final RunConfigurationType[] VALUES = values();

      public static RunConfigurationType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private RunConfigurationType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.RunConfigurationType)
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.DebuggerType}
     *
     * <pre>
     * Represents the different debugger types supported.
     * </pre>
     */
    public enum DebuggerType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_DEBUGGER_TYPE = 0;</code>
       */
      UNKNOWN_DEBUGGER_TYPE(0, 0),
      /**
       * <code>JAVA = 1;</code>
       */
      JAVA(1, 1),
      /**
       * <code>HYBRID = 2;</code>
       */
      HYBRID(2, 2),
      /**
       * <code>NATIVE = 3;</code>
       */
      NATIVE(3, 3),
      ;

      /**
       * <code>UNKNOWN_DEBUGGER_TYPE = 0;</code>
       */
      public static final int UNKNOWN_DEBUGGER_TYPE_VALUE = 0;
      /**
       * <code>JAVA = 1;</code>
       */
      public static final int JAVA_VALUE = 1;
      /**
       * <code>HYBRID = 2;</code>
       */
      public static final int HYBRID_VALUE = 2;
      /**
       * <code>NATIVE = 3;</code>
       */
      public static final int NATIVE_VALUE = 3;


      public final int getNumber() { return value; }

      public static DebuggerType valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_DEBUGGER_TYPE;
          case 1: return JAVA;
          case 2: return HYBRID;
          case 3: return NATIVE;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<DebuggerType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<DebuggerType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<DebuggerType>() {
              public DebuggerType findValueByNumber(int number) {
                return DebuggerType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(5);
      }

      private static final DebuggerType[] VALUES = values();

      public static DebuggerType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private DebuggerType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.DebuggerType)
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.DeveloperServiceKind}
     *
     * <pre>
     * Represents the different Google Developer Services that can be
     *  (semi-)automatically integrated into Android Applications.
     * </pre>
     */
    public enum DeveloperServiceKind
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_DEVELOPER_SERVICE_KIND = 0;</code>
       */
      UNKNOWN_DEVELOPER_SERVICE_KIND(0, 0),
      /**
       * <code>GOOGLE_CLOUD_MESSAGING = 1;</code>
       */
      GOOGLE_CLOUD_MESSAGING(1, 1),
      /**
       * <code>AD_MOB = 2;</code>
       */
      AD_MOB(2, 2),
      /**
       * <code>GOOGLE_SIGN_IN = 3;</code>
       */
      GOOGLE_SIGN_IN(3, 3),
      /**
       * <code>GOOGLE_ANALYTICS = 4;</code>
       */
      GOOGLE_ANALYTICS(4, 4),
      /**
       * <code>FIREBASE = 5;</code>
       */
      FIREBASE(5, 5),
      /**
       * <code>REALTIME_DATABASE = 6;</code>
       */
      REALTIME_DATABASE(6, 6),
      /**
       * <code>AUTHENTICATION = 7;</code>
       */
      AUTHENTICATION(7, 7),
      /**
       * <code>CRASH_REPORTING = 8;</code>
       */
      CRASH_REPORTING(8, 8),
      /**
       * <code>NOTIFICATIONS = 9;</code>
       */
      NOTIFICATIONS(9, 9),
      /**
       * <code>REMOTE_CONFIG = 10;</code>
       */
      REMOTE_CONFIG(10, 10),
      /**
       * <code>STORAGE = 11;</code>
       */
      STORAGE(11, 11),
      /**
       * <code>APP_INVITES = 12;</code>
       */
      APP_INVITES(12, 12),
      /**
       * <code>DYNAMIC_LINKS = 13;</code>
       */
      DYNAMIC_LINKS(13, 13),
      ;

      /**
       * <code>UNKNOWN_DEVELOPER_SERVICE_KIND = 0;</code>
       */
      public static final int UNKNOWN_DEVELOPER_SERVICE_KIND_VALUE = 0;
      /**
       * <code>GOOGLE_CLOUD_MESSAGING = 1;</code>
       */
      public static final int GOOGLE_CLOUD_MESSAGING_VALUE = 1;
      /**
       * <code>AD_MOB = 2;</code>
       */
      public static final int AD_MOB_VALUE = 2;
      /**
       * <code>GOOGLE_SIGN_IN = 3;</code>
       */
      public static final int GOOGLE_SIGN_IN_VALUE = 3;
      /**
       * <code>GOOGLE_ANALYTICS = 4;</code>
       */
      public static final int GOOGLE_ANALYTICS_VALUE = 4;
      /**
       * <code>FIREBASE = 5;</code>
       */
      public static final int FIREBASE_VALUE = 5;
      /**
       * <code>REALTIME_DATABASE = 6;</code>
       */
      public static final int REALTIME_DATABASE_VALUE = 6;
      /**
       * <code>AUTHENTICATION = 7;</code>
       */
      public static final int AUTHENTICATION_VALUE = 7;
      /**
       * <code>CRASH_REPORTING = 8;</code>
       */
      public static final int CRASH_REPORTING_VALUE = 8;
      /**
       * <code>NOTIFICATIONS = 9;</code>
       */
      public static final int NOTIFICATIONS_VALUE = 9;
      /**
       * <code>REMOTE_CONFIG = 10;</code>
       */
      public static final int REMOTE_CONFIG_VALUE = 10;
      /**
       * <code>STORAGE = 11;</code>
       */
      public static final int STORAGE_VALUE = 11;
      /**
       * <code>APP_INVITES = 12;</code>
       */
      public static final int APP_INVITES_VALUE = 12;
      /**
       * <code>DYNAMIC_LINKS = 13;</code>
       */
      public static final int DYNAMIC_LINKS_VALUE = 13;


      public final int getNumber() { return value; }

      public static DeveloperServiceKind valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_DEVELOPER_SERVICE_KIND;
          case 1: return GOOGLE_CLOUD_MESSAGING;
          case 2: return AD_MOB;
          case 3: return GOOGLE_SIGN_IN;
          case 4: return GOOGLE_ANALYTICS;
          case 5: return FIREBASE;
          case 6: return REALTIME_DATABASE;
          case 7: return AUTHENTICATION;
          case 8: return CRASH_REPORTING;
          case 9: return NOTIFICATIONS;
          case 10: return REMOTE_CONFIG;
          case 11: return STORAGE;
          case 12: return APP_INVITES;
          case 13: return DYNAMIC_LINKS;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<DeveloperServiceKind>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<DeveloperServiceKind>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<DeveloperServiceKind>() {
              public DeveloperServiceKind findValueByNumber(int number) {
                return DeveloperServiceKind.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(6);
      }

      private static final DeveloperServiceKind[] VALUES = values();

      public static DeveloperServiceKind valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private DeveloperServiceKind(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.DeveloperServiceKind)
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.TemplateRenderer}
     *
     * <pre>
     * The various templates the template engine could be asked to render.
     * </pre>
     */
    public enum TemplateRenderer
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_TEMPLATE_RENDERER = 0;</code>
       */
      UNKNOWN_TEMPLATE_RENDERER(0, 0),
      /**
       * <code>CUSTOM_TEMPLATE_RENDERER = 1;</code>
       */
      CUSTOM_TEMPLATE_RENDERER(1, 1),
      /**
       * <code>ANDROID_MODULE = 2;</code>
       */
      ANDROID_MODULE(2, 2),
      /**
       * <code>ANDROID_PROJECT = 3;</code>
       */
      ANDROID_PROJECT(3, 3),
      /**
       * <code>EMPTY_ACTIVITY = 4;</code>
       */
      EMPTY_ACTIVITY(4, 4),
      /**
       * <code>BLANK_ACTIVITY = 5;</code>
       */
      BLANK_ACTIVITY(5, 5),
      /**
       * <code>LAYOUT_XML_FILE = 6;</code>
       */
      LAYOUT_XML_FILE(6, 6),
      /**
       * <code>FRAGMENT_BLANK = 7;</code>
       */
      FRAGMENT_BLANK(7, 7),
      /**
       * <code>NAVIGATION_DRAWER_ACTIVITY = 8;</code>
       */
      NAVIGATION_DRAWER_ACTIVITY(8, 8),
      /**
       * <code>VALUES_XML_FILE = 9;</code>
       */
      VALUES_XML_FILE(9, 9),
      /**
       * <code>GOOGLE_MAPS_ACTIVITY = 10;</code>
       */
      GOOGLE_MAPS_ACTIVITY(10, 10),
      /**
       * <code>LOGIN_ACTIVITY = 11;</code>
       */
      LOGIN_ACTIVITY(11, 11),
      /**
       * <code>ASSETS_FOLDER = 12;</code>
       */
      ASSETS_FOLDER(12, 12),
      /**
       * <code>TABBED_ACTIVITY = 13;</code>
       */
      TABBED_ACTIVITY(13, 13),
      /**
       * <code>SCROLLING_ACTIVITY = 14;</code>
       */
      SCROLLING_ACTIVITY(14, 14),
      /**
       * <code>FULLSCREEN_ACTIVITY = 15;</code>
       */
      FULLSCREEN_ACTIVITY(15, 15),
      /**
       * <code>SERVICE = 16;</code>
       */
      SERVICE(16, 16),
      /**
       * <code>JAVA_LIBRARY = 17;</code>
       */
      JAVA_LIBRARY(17, 17),
      /**
       * <code>SETTINGS_ACTIVITY = 18;</code>
       */
      SETTINGS_ACTIVITY(18, 18),
      /**
       * <code>FRAGMENT_LIST = 19;</code>
       */
      FRAGMENT_LIST(19, 19),
      /**
       * <code>MASTER_DETAIL_FLOW = 20;</code>
       */
      MASTER_DETAIL_FLOW(20, 20),
      /**
       * <code>ANDROID_WEAR_MODULE = 21;</code>
       */
      ANDROID_WEAR_MODULE(21, 21),
      /**
       * <code>BROADCAST_RECEIVER = 22;</code>
       */
      BROADCAST_RECEIVER(22, 22),
      /**
       * <code>AIDL_FILE = 23;</code>
       */
      AIDL_FILE(23, 23),
      /**
       * <code>INTENT_SERVICE = 24;</code>
       */
      INTENT_SERVICE(24, 24),
      /**
       * <code>JNI_FOLDER = 25;</code>
       */
      JNI_FOLDER(25, 25),
      /**
       * <code>JAVA_FOLDER = 26;</code>
       */
      JAVA_FOLDER(26, 26),
      /**
       * <code>CUSTOM_VIEW = 27;</code>
       */
      CUSTOM_VIEW(27, 27),
      /**
       * <code>ANDROID_TV_MODULE = 28;</code>
       */
      ANDROID_TV_MODULE(28, 28),
      /**
       * <code>GOOGLE_ADMOBS_ADS_ACTIVITY = 29;</code>
       */
      GOOGLE_ADMOBS_ADS_ACTIVITY(29, 29),
      /**
       * <code>ALWAYS_ON_WEAR_ACTIVITY = 30;</code>
       */
      ALWAYS_ON_WEAR_ACTIVITY(30, 30),
      /**
       * <code>RES_FOLDER = 31;</code>
       */
      RES_FOLDER(31, 31),
      /**
       * <code>ANDROID_TV_ACTIVITY = 32;</code>
       */
      ANDROID_TV_ACTIVITY(32, 32),
      /**
       * <code>BLANK_WEAR_ACTIVITY = 33;</code>
       */
      BLANK_WEAR_ACTIVITY(33, 33),
      /**
       * <code>BASIC_ACTIVITIY = 34;</code>
       */
      BASIC_ACTIVITIY(34, 34),
      /**
       * <code>APP_WIDGET = 35;</code>
       */
      APP_WIDGET(35, 35),
      ;

      /**
       * <code>UNKNOWN_TEMPLATE_RENDERER = 0;</code>
       */
      public static final int UNKNOWN_TEMPLATE_RENDERER_VALUE = 0;
      /**
       * <code>CUSTOM_TEMPLATE_RENDERER = 1;</code>
       */
      public static final int CUSTOM_TEMPLATE_RENDERER_VALUE = 1;
      /**
       * <code>ANDROID_MODULE = 2;</code>
       */
      public static final int ANDROID_MODULE_VALUE = 2;
      /**
       * <code>ANDROID_PROJECT = 3;</code>
       */
      public static final int ANDROID_PROJECT_VALUE = 3;
      /**
       * <code>EMPTY_ACTIVITY = 4;</code>
       */
      public static final int EMPTY_ACTIVITY_VALUE = 4;
      /**
       * <code>BLANK_ACTIVITY = 5;</code>
       */
      public static final int BLANK_ACTIVITY_VALUE = 5;
      /**
       * <code>LAYOUT_XML_FILE = 6;</code>
       */
      public static final int LAYOUT_XML_FILE_VALUE = 6;
      /**
       * <code>FRAGMENT_BLANK = 7;</code>
       */
      public static final int FRAGMENT_BLANK_VALUE = 7;
      /**
       * <code>NAVIGATION_DRAWER_ACTIVITY = 8;</code>
       */
      public static final int NAVIGATION_DRAWER_ACTIVITY_VALUE = 8;
      /**
       * <code>VALUES_XML_FILE = 9;</code>
       */
      public static final int VALUES_XML_FILE_VALUE = 9;
      /**
       * <code>GOOGLE_MAPS_ACTIVITY = 10;</code>
       */
      public static final int GOOGLE_MAPS_ACTIVITY_VALUE = 10;
      /**
       * <code>LOGIN_ACTIVITY = 11;</code>
       */
      public static final int LOGIN_ACTIVITY_VALUE = 11;
      /**
       * <code>ASSETS_FOLDER = 12;</code>
       */
      public static final int ASSETS_FOLDER_VALUE = 12;
      /**
       * <code>TABBED_ACTIVITY = 13;</code>
       */
      public static final int TABBED_ACTIVITY_VALUE = 13;
      /**
       * <code>SCROLLING_ACTIVITY = 14;</code>
       */
      public static final int SCROLLING_ACTIVITY_VALUE = 14;
      /**
       * <code>FULLSCREEN_ACTIVITY = 15;</code>
       */
      public static final int FULLSCREEN_ACTIVITY_VALUE = 15;
      /**
       * <code>SERVICE = 16;</code>
       */
      public static final int SERVICE_VALUE = 16;
      /**
       * <code>JAVA_LIBRARY = 17;</code>
       */
      public static final int JAVA_LIBRARY_VALUE = 17;
      /**
       * <code>SETTINGS_ACTIVITY = 18;</code>
       */
      public static final int SETTINGS_ACTIVITY_VALUE = 18;
      /**
       * <code>FRAGMENT_LIST = 19;</code>
       */
      public static final int FRAGMENT_LIST_VALUE = 19;
      /**
       * <code>MASTER_DETAIL_FLOW = 20;</code>
       */
      public static final int MASTER_DETAIL_FLOW_VALUE = 20;
      /**
       * <code>ANDROID_WEAR_MODULE = 21;</code>
       */
      public static final int ANDROID_WEAR_MODULE_VALUE = 21;
      /**
       * <code>BROADCAST_RECEIVER = 22;</code>
       */
      public static final int BROADCAST_RECEIVER_VALUE = 22;
      /**
       * <code>AIDL_FILE = 23;</code>
       */
      public static final int AIDL_FILE_VALUE = 23;
      /**
       * <code>INTENT_SERVICE = 24;</code>
       */
      public static final int INTENT_SERVICE_VALUE = 24;
      /**
       * <code>JNI_FOLDER = 25;</code>
       */
      public static final int JNI_FOLDER_VALUE = 25;
      /**
       * <code>JAVA_FOLDER = 26;</code>
       */
      public static final int JAVA_FOLDER_VALUE = 26;
      /**
       * <code>CUSTOM_VIEW = 27;</code>
       */
      public static final int CUSTOM_VIEW_VALUE = 27;
      /**
       * <code>ANDROID_TV_MODULE = 28;</code>
       */
      public static final int ANDROID_TV_MODULE_VALUE = 28;
      /**
       * <code>GOOGLE_ADMOBS_ADS_ACTIVITY = 29;</code>
       */
      public static final int GOOGLE_ADMOBS_ADS_ACTIVITY_VALUE = 29;
      /**
       * <code>ALWAYS_ON_WEAR_ACTIVITY = 30;</code>
       */
      public static final int ALWAYS_ON_WEAR_ACTIVITY_VALUE = 30;
      /**
       * <code>RES_FOLDER = 31;</code>
       */
      public static final int RES_FOLDER_VALUE = 31;
      /**
       * <code>ANDROID_TV_ACTIVITY = 32;</code>
       */
      public static final int ANDROID_TV_ACTIVITY_VALUE = 32;
      /**
       * <code>BLANK_WEAR_ACTIVITY = 33;</code>
       */
      public static final int BLANK_WEAR_ACTIVITY_VALUE = 33;
      /**
       * <code>BASIC_ACTIVITIY = 34;</code>
       */
      public static final int BASIC_ACTIVITIY_VALUE = 34;
      /**
       * <code>APP_WIDGET = 35;</code>
       */
      public static final int APP_WIDGET_VALUE = 35;


      public final int getNumber() { return value; }

      public static TemplateRenderer valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_TEMPLATE_RENDERER;
          case 1: return CUSTOM_TEMPLATE_RENDERER;
          case 2: return ANDROID_MODULE;
          case 3: return ANDROID_PROJECT;
          case 4: return EMPTY_ACTIVITY;
          case 5: return BLANK_ACTIVITY;
          case 6: return LAYOUT_XML_FILE;
          case 7: return FRAGMENT_BLANK;
          case 8: return NAVIGATION_DRAWER_ACTIVITY;
          case 9: return VALUES_XML_FILE;
          case 10: return GOOGLE_MAPS_ACTIVITY;
          case 11: return LOGIN_ACTIVITY;
          case 12: return ASSETS_FOLDER;
          case 13: return TABBED_ACTIVITY;
          case 14: return SCROLLING_ACTIVITY;
          case 15: return FULLSCREEN_ACTIVITY;
          case 16: return SERVICE;
          case 17: return JAVA_LIBRARY;
          case 18: return SETTINGS_ACTIVITY;
          case 19: return FRAGMENT_LIST;
          case 20: return MASTER_DETAIL_FLOW;
          case 21: return ANDROID_WEAR_MODULE;
          case 22: return BROADCAST_RECEIVER;
          case 23: return AIDL_FILE;
          case 24: return INTENT_SERVICE;
          case 25: return JNI_FOLDER;
          case 26: return JAVA_FOLDER;
          case 27: return CUSTOM_VIEW;
          case 28: return ANDROID_TV_MODULE;
          case 29: return GOOGLE_ADMOBS_ADS_ACTIVITY;
          case 30: return ALWAYS_ON_WEAR_ACTIVITY;
          case 31: return RES_FOLDER;
          case 32: return ANDROID_TV_ACTIVITY;
          case 33: return BLANK_WEAR_ACTIVITY;
          case 34: return BASIC_ACTIVITIY;
          case 35: return APP_WIDGET;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<TemplateRenderer>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<TemplateRenderer>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<TemplateRenderer>() {
              public TemplateRenderer findValueByNumber(int number) {
                return TemplateRenderer.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(7);
      }

      private static final TemplateRenderer[] VALUES = values();

      public static TemplateRenderer valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private TemplateRenderer(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.TemplateRenderer)
    }

    /**
     * Protobuf enum {@code android_studio.AndroidStudioEvent.GradleSyncFailure}
     *
     * <pre>
     * Reasons Gradle sync failed.
     * </pre>
     */
    public enum GradleSyncFailure
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_GRADLE_FAILURE = 0;</code>
       */
      UNKNOWN_GRADLE_FAILURE(0, 0),
      /**
       * <code>CONNECTION_DENIED = 1;</code>
       */
      CONNECTION_DENIED(1, 1),
      /**
       * <code>CLASS_NOT_FOUND = 2;</code>
       */
      CLASS_NOT_FOUND(2, 2),
      /**
       * <code>DSL_METHOD_NOT_FOUND = 3;</code>
       */
      DSL_METHOD_NOT_FOUND(3, 3),
      /**
       * <code>FAILED_TO_PARSE_SDK = 4;</code>
       */
      FAILED_TO_PARSE_SDK(4, 4),
      /**
       * <code>METHOD_NOT_FOUND = 5;</code>
       */
      METHOD_NOT_FOUND(5, 5),
      /**
       * <code>MISSING_ANDROID_PLATFORM = 6;</code>
       */
      MISSING_ANDROID_PLATFORM(6, 6),
      /**
       * <code>MISSING_ANDROID_SUPPORT_REPO = 7;</code>
       */
      MISSING_ANDROID_SUPPORT_REPO(7, 7),
      /**
       * <code>MISSING_BUILD_TOOLS = 8;</code>
       */
      MISSING_BUILD_TOOLS(8, 8),
      /**
       * <code>OUT_OF_MEMORY = 9;</code>
       */
      OUT_OF_MEMORY(9, 9),
      /**
       * <code>SDK_NOT_FOUND = 10;</code>
       */
      SDK_NOT_FOUND(10, 10),
      /**
       * <code>UNKNOWN_HOST = 11;</code>
       */
      UNKNOWN_HOST(11, 11),
      /**
       * <code>UNSUPPORTED_ANDROID_MODEL_VERSION = 12;</code>
       */
      UNSUPPORTED_ANDROID_MODEL_VERSION(12, 12),
      /**
       * <code>UNSUPPORTED_GRADLE_VERSION = 13;</code>
       */
      UNSUPPORTED_GRADLE_VERSION(13, 13),
      ;

      /**
       * <code>UNKNOWN_GRADLE_FAILURE = 0;</code>
       */
      public static final int UNKNOWN_GRADLE_FAILURE_VALUE = 0;
      /**
       * <code>CONNECTION_DENIED = 1;</code>
       */
      public static final int CONNECTION_DENIED_VALUE = 1;
      /**
       * <code>CLASS_NOT_FOUND = 2;</code>
       */
      public static final int CLASS_NOT_FOUND_VALUE = 2;
      /**
       * <code>DSL_METHOD_NOT_FOUND = 3;</code>
       */
      public static final int DSL_METHOD_NOT_FOUND_VALUE = 3;
      /**
       * <code>FAILED_TO_PARSE_SDK = 4;</code>
       */
      public static final int FAILED_TO_PARSE_SDK_VALUE = 4;
      /**
       * <code>METHOD_NOT_FOUND = 5;</code>
       */
      public static final int METHOD_NOT_FOUND_VALUE = 5;
      /**
       * <code>MISSING_ANDROID_PLATFORM = 6;</code>
       */
      public static final int MISSING_ANDROID_PLATFORM_VALUE = 6;
      /**
       * <code>MISSING_ANDROID_SUPPORT_REPO = 7;</code>
       */
      public static final int MISSING_ANDROID_SUPPORT_REPO_VALUE = 7;
      /**
       * <code>MISSING_BUILD_TOOLS = 8;</code>
       */
      public static final int MISSING_BUILD_TOOLS_VALUE = 8;
      /**
       * <code>OUT_OF_MEMORY = 9;</code>
       */
      public static final int OUT_OF_MEMORY_VALUE = 9;
      /**
       * <code>SDK_NOT_FOUND = 10;</code>
       */
      public static final int SDK_NOT_FOUND_VALUE = 10;
      /**
       * <code>UNKNOWN_HOST = 11;</code>
       */
      public static final int UNKNOWN_HOST_VALUE = 11;
      /**
       * <code>UNSUPPORTED_ANDROID_MODEL_VERSION = 12;</code>
       */
      public static final int UNSUPPORTED_ANDROID_MODEL_VERSION_VALUE = 12;
      /**
       * <code>UNSUPPORTED_GRADLE_VERSION = 13;</code>
       */
      public static final int UNSUPPORTED_GRADLE_VERSION_VALUE = 13;


      public final int getNumber() { return value; }

      public static GradleSyncFailure valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_GRADLE_FAILURE;
          case 1: return CONNECTION_DENIED;
          case 2: return CLASS_NOT_FOUND;
          case 3: return DSL_METHOD_NOT_FOUND;
          case 4: return FAILED_TO_PARSE_SDK;
          case 5: return METHOD_NOT_FOUND;
          case 6: return MISSING_ANDROID_PLATFORM;
          case 7: return MISSING_ANDROID_SUPPORT_REPO;
          case 8: return MISSING_BUILD_TOOLS;
          case 9: return OUT_OF_MEMORY;
          case 10: return SDK_NOT_FOUND;
          case 11: return UNKNOWN_HOST;
          case 12: return UNSUPPORTED_ANDROID_MODEL_VERSION;
          case 13: return UNSUPPORTED_GRADLE_VERSION;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<GradleSyncFailure>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<GradleSyncFailure>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<GradleSyncFailure>() {
              public GradleSyncFailure findValueByNumber(int number) {
                return GradleSyncFailure.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDescriptor().getEnumTypes().get(8);
      }

      private static final GradleSyncFailure[] VALUES = values();

      public static GradleSyncFailure valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private GradleSyncFailure(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.AndroidStudioEvent.GradleSyncFailure)
    }

    private int bitField0_;
    private int bitField1_;
    // optional .android_studio.AndroidStudioEvent.EventCategory category = 1;
    public static final int CATEGORY_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory category_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.EventCategory category = 1;</code>
     *
     * <pre>
     * Describes a group of event kinds related to each other.
     * </pre>
     */
    public boolean hasCategory() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.EventCategory category = 1;</code>
     *
     * <pre>
     * Describes a group of event kinds related to each other.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory getCategory() {
      return category_;
    }

    // optional .android_studio.AndroidStudioEvent.EventKind kind = 2;
    public static final int KIND_FIELD_NUMBER = 2;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind kind_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.EventKind kind = 2;</code>
     *
     * <pre>
     * Specific kind of event, primary separation key of all Android Studio
     *  related events.
     * </pre>
     */
    public boolean hasKind() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.EventKind kind = 2;</code>
     *
     * <pre>
     * Specific kind of event, primary separation key of all Android Studio
     *  related events.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind getKind() {
      return kind_;
    }

    // optional string studio_session_id = 3;
    public static final int STUDIO_SESSION_ID_FIELD_NUMBER = 3;
    private java.lang.Object studioSessionId_;
    /**
     * <code>optional string studio_session_id = 3;</code>
     *
     * <pre>
     * The session id is a UUID tracking a single instance of Android Studio
     *  to associate events together such as kind = TEST_RUN
     * </pre>
     */
    public boolean hasStudioSessionId() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string studio_session_id = 3;</code>
     *
     * <pre>
     * The session id is a UUID tracking a single instance of Android Studio
     *  to associate events together such as kind = TEST_RUN
     * </pre>
     */
    public java.lang.String getStudioSessionId() {
      java.lang.Object ref = studioSessionId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          studioSessionId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string studio_session_id = 3;</code>
     *
     * <pre>
     * The session id is a UUID tracking a single instance of Android Studio
     *  to associate events together such as kind = TEST_RUN
     * </pre>
     */
    public com.google.protobuf.ByteString
        getStudioSessionIdBytes() {
      java.lang.Object ref = studioSessionId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        studioSessionId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.ProductDetails product_details = 4;
    public static final int PRODUCT_DETAILS_FIELD_NUMBER = 4;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails productDetails_;
    /**
     * <code>optional .android_studio.ProductDetails product_details = 4;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     *  or kind = EMULATOR_PING
     *  or ANDROID_STUDIO_TEST
     *  or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    public boolean hasProductDetails() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .android_studio.ProductDetails product_details = 4;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     *  or kind = EMULATOR_PING
     *  or ANDROID_STUDIO_TEST
     *  or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails getProductDetails() {
      return productDetails_;
    }
    /**
     * <code>optional .android_studio.ProductDetails product_details = 4;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     *  or kind = EMULATOR_PING
     *  or ANDROID_STUDIO_TEST
     *  or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetailsOrBuilder getProductDetailsOrBuilder() {
      return productDetails_;
    }

    // optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;
    public static final int MONITOR_TYPE_FIELD_NUMBER = 5;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType monitorType_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;</code>
     *
     * <pre>
     * set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
     * </pre>
     */
    public boolean hasMonitorType() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;</code>
     *
     * <pre>
     * set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType getMonitorType() {
      return monitorType_;
    }

    // optional bool monitor_paused = 6;
    public static final int MONITOR_PAUSED_FIELD_NUMBER = 6;
    private boolean monitorPaused_;
    /**
     * <code>optional bool monitor_paused = 6;</code>
     *
     * <pre>
     * set when kind = MONITOR_RUNNING
     * </pre>
     */
    public boolean hasMonitorPaused() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool monitor_paused = 6;</code>
     *
     * <pre>
     * set when kind = MONITOR_RUNNING
     * </pre>
     */
    public boolean getMonitorPaused() {
      return monitorPaused_;
    }

    // optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;
    public static final int PROFILER_CAPTURE_TYPE_FIELD_NUMBER = 7;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType profilerCaptureType_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;</code>
     *
     * <pre>
     * set when kind = PROFILING_OPEN or PROFILING_CAPTURE
     * </pre>
     */
    public boolean hasProfilerCaptureType() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;</code>
     *
     * <pre>
     * set when kind = PROFILING_OPEN or PROFILING_CAPTURE
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType getProfilerCaptureType() {
      return profilerCaptureType_;
    }

    // optional string cloud_testing_error_message = 8;
    public static final int CLOUD_TESTING_ERROR_MESSAGE_FIELD_NUMBER = 8;
    private java.lang.Object cloudTestingErrorMessage_;
    /**
     * <code>optional string cloud_testing_error_message = 8;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_BACKEND_ERROR
     * </pre>
     */
    public boolean hasCloudTestingErrorMessage() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string cloud_testing_error_message = 8;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_BACKEND_ERROR
     * </pre>
     */
    public java.lang.String getCloudTestingErrorMessage() {
      java.lang.Object ref = cloudTestingErrorMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          cloudTestingErrorMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string cloud_testing_error_message = 8;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_BACKEND_ERROR
     * </pre>
     */
    public com.google.protobuf.ByteString
        getCloudTestingErrorMessageBytes() {
      java.lang.Object ref = cloudTestingErrorMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        cloudTestingErrorMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 cloud_testing_loaded_screenshots_count = 9;
    public static final int CLOUD_TESTING_LOADED_SCREENSHOTS_COUNT_FIELD_NUMBER = 9;
    private int cloudTestingLoadedScreenshotsCount_;
    /**
     * <code>optional int32 cloud_testing_loaded_screenshots_count = 9;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
     * </pre>
     */
    public boolean hasCloudTestingLoadedScreenshotsCount() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional int32 cloud_testing_loaded_screenshots_count = 9;</code>
     *
     * <pre>
     * set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
     * </pre>
     */
    public int getCloudTestingLoadedScreenshotsCount() {
      return cloudTestingLoadedScreenshotsCount_;
    }

    // optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;
    public static final int RUN_CONFIGURATION_TYPE_FIELD_NUMBER = 10;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType runConfigurationType_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_STARTED
     * </pre>
     */
    public boolean hasRunConfigurationType() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_STARTED
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType getRunConfigurationType() {
      return runConfigurationType_;
    }

    // optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;
    public static final int DEBUGGER_TYPE_FIELD_NUMBER = 11;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType debuggerType_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_STARTED
     * </pre>
     */
    public boolean hasDebuggerType() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_STARTED
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType getDebuggerType() {
      return debuggerType_;
    }

    // optional .android_studio.DeviceInfo device_info = 12;
    public static final int DEVICE_INFO_FIELD_NUMBER = 12;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo deviceInfo_;
    /**
     * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
     *
     * <pre>
     * set when kind = LLDB_LAUNCHED
     *  or kind = DEPLOYMENT_APK
     *  or kind = DEPLOYMENT_EMULATOR
     *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
     *  or kind = TEST_RUN
     * </pre>
     */
    public boolean hasDeviceInfo() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
     *
     * <pre>
     * set when kind = LLDB_LAUNCHED
     *  or kind = DEPLOYMENT_APK
     *  or kind = DEPLOYMENT_EMULATOR
     *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
     *  or kind = TEST_RUN
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo getDeviceInfo() {
      return deviceInfo_;
    }
    /**
     * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
     *
     * <pre>
     * set when kind = LLDB_LAUNCHED
     *  or kind = DEPLOYMENT_APK
     *  or kind = DEPLOYMENT_EMULATOR
     *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
     *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
     *  or kind = TEST_RUN
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfoOrBuilder getDeviceInfoOrBuilder() {
      return deviceInfo_;
    }

    // optional string lldb_session_failure_message = 13;
    public static final int LLDB_SESSION_FAILURE_MESSAGE_FIELD_NUMBER = 13;
    private java.lang.Object lldbSessionFailureMessage_;
    /**
     * <code>optional string lldb_session_failure_message = 13;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
     *  e.g. 'failed to get reply to handshake packet'
     * </pre>
     */
    public boolean hasLldbSessionFailureMessage() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional string lldb_session_failure_message = 13;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
     *  e.g. 'failed to get reply to handshake packet'
     * </pre>
     */
    public java.lang.String getLldbSessionFailureMessage() {
      java.lang.Object ref = lldbSessionFailureMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          lldbSessionFailureMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string lldb_session_failure_message = 13;</code>
     *
     * <pre>
     * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
     *  e.g. 'failed to get reply to handshake packet'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getLldbSessionFailureMessageBytes() {
      java.lang.Object ref = lldbSessionFailureMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        lldbSessionFailureMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;
    public static final int DEVELOPER_SERVICE_KIND_FIELD_NUMBER = 14;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind developerServiceKind_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;</code>
     *
     * <pre>
     * set when kind = DEVELOPER_SERVICES_INSTALLED
     *  or kind = DEVELOPER_SERVICES_REMOVED
     * </pre>
     */
    public boolean hasDeveloperServiceKind() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;</code>
     *
     * <pre>
     * set when kind = DEVELOPER_SERVICES_INSTALLED
     *  or kind = DEVELOPER_SERVICES_REMOVED
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind getDeveloperServiceKind() {
      return developerServiceKind_;
    }

    // optional string gradle_version = 15;
    public static final int GRADLE_VERSION_FIELD_NUMBER = 15;
    private java.lang.Object gradleVersion_;
    /**
     * <code>optional string gradle_version = 15;</code>
     *
     * <pre>
     * set when category = GRADLE_SYNC
     * </pre>
     */
    public boolean hasGradleVersion() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <code>optional string gradle_version = 15;</code>
     *
     * <pre>
     * set when category = GRADLE_SYNC
     * </pre>
     */
    public java.lang.String getGradleVersion() {
      java.lang.Object ref = gradleVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gradleVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gradle_version = 15;</code>
     *
     * <pre>
     * set when category = GRADLE_SYNC
     * </pre>
     */
    public com.google.protobuf.ByteString
        getGradleVersionBytes() {
      java.lang.Object ref = gradleVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gradleVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;
    public static final int GRADLE_SYNC_FAILURE_FIELD_NUMBER = 16;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure gradleSyncFailure_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;</code>
     *
     * <pre>
     * e.g. '2.10'
     * set when kind = GRADLE_SYNC_FAILURE
     * </pre>
     */
    public boolean hasGradleSyncFailure() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;</code>
     *
     * <pre>
     * e.g. '2.10'
     * set when kind = GRADLE_SYNC_FAILURE
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure getGradleSyncFailure() {
      return gradleSyncFailure_;
    }

    // optional string gradle_missing_signature = 17;
    public static final int GRADLE_MISSING_SIGNATURE_FIELD_NUMBER = 17;
    private java.lang.Object gradleMissingSignature_;
    /**
     * <code>optional string gradle_missing_signature = 17;</code>
     *
     * <pre>
     * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
     *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
     * </pre>
     */
    public boolean hasGradleMissingSignature() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     * <code>optional string gradle_missing_signature = 17;</code>
     *
     * <pre>
     * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
     *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
     * </pre>
     */
    public java.lang.String getGradleMissingSignature() {
      java.lang.Object ref = gradleMissingSignature_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gradleMissingSignature_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gradle_missing_signature = 17;</code>
     *
     * <pre>
     * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
     *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getGradleMissingSignatureBytes() {
      java.lang.Object ref = gradleMissingSignature_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gradleMissingSignature_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;
    public static final int TEMPLATE_RENDERER_FIELD_NUMBER = 18;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer templateRenderer_;
    /**
     * <code>optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;</code>
     *
     * <pre>
     * set when kind = TEMPLATE_RENDERER
     * </pre>
     */
    public boolean hasTemplateRenderer() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     * <code>optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;</code>
     *
     * <pre>
     * set when kind = TEMPLATE_RENDERER
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer getTemplateRenderer() {
      return templateRenderer_;
    }

    // optional .android_studio.StudioCrash studio_crash = 19;
    public static final int STUDIO_CRASH_FIELD_NUMBER = 19;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash studioCrash_;
    /**
     * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
     *
     * <pre>
     * set when kind = STUDIO_CRASH
     * </pre>
     */
    public boolean hasStudioCrash() {
      return ((bitField0_ & 0x00040000) == 0x00040000);
    }
    /**
     * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
     *
     * <pre>
     * set when kind = STUDIO_CRASH
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash getStudioCrash() {
      return studioCrash_;
    }
    /**
     * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
     *
     * <pre>
     * set when kind = STUDIO_CRASH
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrashOrBuilder getStudioCrashOrBuilder() {
      return studioCrash_;
    }

    // optional .android_studio.GradleBuildDetails gradle_build_details = 20;
    public static final int GRADLE_BUILD_DETAILS_FIELD_NUMBER = 20;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails gradleBuildDetails_;
    /**
     * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_DETAILS
     * </pre>
     */
    public boolean hasGradleBuildDetails() {
      return ((bitField0_ & 0x00080000) == 0x00080000);
    }
    /**
     * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_DETAILS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails getGradleBuildDetails() {
      return gradleBuildDetails_;
    }
    /**
     * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_DETAILS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetailsOrBuilder getGradleBuildDetailsOrBuilder() {
      return gradleBuildDetails_;
    }

    // optional .android_studio.InstantRun instant_run = 21;
    public static final int INSTANT_RUN_FIELD_NUMBER = 21;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun instantRun_;
    /**
     * <code>optional .android_studio.InstantRun instant_run = 21;</code>
     *
     * <pre>
     * set when kind = INSTANT_RUN
     * </pre>
     */
    public boolean hasInstantRun() {
      return ((bitField0_ & 0x00100000) == 0x00100000);
    }
    /**
     * <code>optional .android_studio.InstantRun instant_run = 21;</code>
     *
     * <pre>
     * set when kind = INSTANT_RUN
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun getInstantRun() {
      return instantRun_;
    }
    /**
     * <code>optional .android_studio.InstantRun instant_run = 21;</code>
     *
     * <pre>
     * set when kind = INSTANT_RUN
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunOrBuilder getInstantRunOrBuilder() {
      return instantRun_;
    }

    // optional .android_studio.MetaMetrics meta_metrics = 22;
    public static final int META_METRICS_FIELD_NUMBER = 22;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics metaMetrics_;
    /**
     * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
     *
     * <pre>
     * set when kind = META_METRICS
     * </pre>
     */
    public boolean hasMetaMetrics() {
      return ((bitField0_ & 0x00200000) == 0x00200000);
    }
    /**
     * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
     *
     * <pre>
     * set when kind = META_METRICS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics getMetaMetrics() {
      return metaMetrics_;
    }
    /**
     * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
     *
     * <pre>
     * set when kind = META_METRICS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetricsOrBuilder getMetaMetricsOrBuilder() {
      return metaMetrics_;
    }

    // optional .android_studio.EmulatorDetails emulator_details = 23;
    public static final int EMULATOR_DETAILS_FIELD_NUMBER = 23;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails emulatorDetails_;
    /**
     * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
     *
     * <pre>
     * set when kind = EMULATOR_PING
     * </pre>
     */
    public boolean hasEmulatorDetails() {
      return ((bitField0_ & 0x00400000) == 0x00400000);
    }
    /**
     * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
     *
     * <pre>
     * set when kind = EMULATOR_PING
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails getEmulatorDetails() {
      return emulatorDetails_;
    }
    /**
     * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
     *
     * <pre>
     * set when kind = EMULATOR_PING
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetailsOrBuilder getEmulatorDetailsOrBuilder() {
      return emulatorDetails_;
    }

    // optional .android_studio.TestRun test_run = 24;
    public static final int TEST_RUN_FIELD_NUMBER = 24;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun testRun_;
    /**
     * <code>optional .android_studio.TestRun test_run = 24;</code>
     *
     * <pre>
     * set when kind = TEST_RUN
     * </pre>
     */
    public boolean hasTestRun() {
      return ((bitField0_ & 0x00800000) == 0x00800000);
    }
    /**
     * <code>optional .android_studio.TestRun test_run = 24;</code>
     *
     * <pre>
     * set when kind = TEST_RUN
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun getTestRun() {
      return testRun_;
    }
    /**
     * <code>optional .android_studio.TestRun test_run = 24;</code>
     *
     * <pre>
     * set when kind = TEST_RUN
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRunOrBuilder getTestRunOrBuilder() {
      return testRun_;
    }

    // optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;
    public static final int EMULATOR_UI_EVENT_FIELD_NUMBER = 25;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent emulatorUiEvent_;
    /**
     * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
     *
     * <pre>
     * set when kind = EMULATOR_UI_EVENT
     * </pre>
     */
    public boolean hasEmulatorUiEvent() {
      return ((bitField0_ & 0x01000000) == 0x01000000);
    }
    /**
     * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
     *
     * <pre>
     * set when kind = EMULATOR_UI_EVENT
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent getEmulatorUiEvent() {
      return emulatorUiEvent_;
    }
    /**
     * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
     *
     * <pre>
     * set when kind = EMULATOR_UI_EVENT
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEventOrBuilder getEmulatorUiEventOrBuilder() {
      return emulatorUiEvent_;
    }

    // optional .android_studio.Hypervisor hypervisor = 26;
    public static final int HYPERVISOR_FIELD_NUMBER = 26;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor hypervisor_;
    /**
     * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
     *
     * <pre>
     * set when kind = HYPERVISOR
     * </pre>
     */
    public boolean hasHypervisor() {
      return ((bitField0_ & 0x02000000) == 0x02000000);
    }
    /**
     * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
     *
     * <pre>
     * set when kind = HYPERVISOR
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor getHypervisor() {
      return hypervisor_;
    }
    /**
     * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
     *
     * <pre>
     * set when kind = HYPERVISOR
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.HypervisorOrBuilder getHypervisorOrBuilder() {
      return hypervisor_;
    }

    // optional .android_studio.EmulatorHost emulator_host = 27;
    public static final int EMULATOR_HOST_FIELD_NUMBER = 27;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost emulatorHost_;
    /**
     * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
     *
     * <pre>
     * set when kind = EMULATOR_HOST
     * </pre>
     */
    public boolean hasEmulatorHost() {
      return ((bitField0_ & 0x04000000) == 0x04000000);
    }
    /**
     * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
     *
     * <pre>
     * set when kind = EMULATOR_HOST
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost getEmulatorHost() {
      return emulatorHost_;
    }
    /**
     * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
     *
     * <pre>
     * set when kind = EMULATOR_HOST
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHostOrBuilder getEmulatorHostOrBuilder() {
      return emulatorHost_;
    }

    // optional .android_studio.GradleBuildProfile gradle_build_profile = 28;
    public static final int GRADLE_BUILD_PROFILE_FIELD_NUMBER = 28;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile gradleBuildProfile_;
    /**
     * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_PROFILE
     * </pre>
     */
    public boolean hasGradleBuildProfile() {
      return ((bitField0_ & 0x08000000) == 0x08000000);
    }
    /**
     * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_PROFILE
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile getGradleBuildProfile() {
      return gradleBuildProfile_;
    }
    /**
     * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
     *
     * <pre>
     * set when kind = GRADLE_BUILD_PROFILE
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileOrBuilder getGradleBuildProfileOrBuilder() {
      return gradleBuildProfile_;
    }

    // optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;
    public static final int LLDB_FRONTEND_DETAILS_FIELD_NUMBER = 29;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails lldbFrontendDetails_;
    /**
     * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
     *
     * <pre>
     * set when kind = LLDB_FRONTEND_EXITED
     * </pre>
     */
    public boolean hasLldbFrontendDetails() {
      return ((bitField0_ & 0x10000000) == 0x10000000);
    }
    /**
     * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
     *
     * <pre>
     * set when kind = LLDB_FRONTEND_EXITED
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails getLldbFrontendDetails() {
      return lldbFrontendDetails_;
    }
    /**
     * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
     *
     * <pre>
     * set when kind = LLDB_FRONTEND_EXITED
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetailsOrBuilder getLldbFrontendDetailsOrBuilder() {
      return lldbFrontendDetails_;
    }

    // optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;
    public static final int FIREBASE_ERROR_DETAILS_FIELD_NUMBER = 30;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails firebaseErrorDetails_;
    /**
     * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
     *
     * <pre>
     * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
     *  kind FIREBASE_ASSISTANT_SILENT_ERROR
     * </pre>
     */
    public boolean hasFirebaseErrorDetails() {
      return ((bitField0_ & 0x20000000) == 0x20000000);
    }
    /**
     * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
     *
     * <pre>
     * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
     *  kind FIREBASE_ASSISTANT_SILENT_ERROR
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails getFirebaseErrorDetails() {
      return firebaseErrorDetails_;
    }
    /**
     * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
     *
     * <pre>
     * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
     *  kind FIREBASE_ASSISTANT_SILENT_ERROR
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetailsOrBuilder getFirebaseErrorDetailsOrBuilder() {
      return firebaseErrorDetails_;
    }

    // optional string project_id = 31;
    public static final int PROJECT_ID_FIELD_NUMBER = 31;
    private java.lang.Object projectId_;
    /**
     * <code>optional string project_id = 31;</code>
     *
     * <pre>
     * Client-side salted (rotating every 28 days), sha256 of the project id.
     *  set when kind = PROJECT_STRUCTURE_*.
     * </pre>
     */
    public boolean hasProjectId() {
      return ((bitField0_ & 0x40000000) == 0x40000000);
    }
    /**
     * <code>optional string project_id = 31;</code>
     *
     * <pre>
     * Client-side salted (rotating every 28 days), sha256 of the project id.
     *  set when kind = PROJECT_STRUCTURE_*.
     * </pre>
     */
    public java.lang.String getProjectId() {
      java.lang.Object ref = projectId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          projectId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string project_id = 31;</code>
     *
     * <pre>
     * Client-side salted (rotating every 28 days), sha256 of the project id.
     *  set when kind = PROJECT_STRUCTURE_*.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getProjectIdBytes() {
      java.lang.Object ref = projectId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        projectId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;
    public static final int GFX_TRACING_DETAILS_FIELD_NUMBER = 32;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails gfxTracingDetails_;
    /**
     * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
     *
     * <pre>
     * set when kind = GFX_TRACE_*
     * </pre>
     */
    public boolean hasGfxTracingDetails() {
      return ((bitField0_ & 0x80000000) == 0x80000000);
    }
    /**
     * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
     *
     * <pre>
     * set when kind = GFX_TRACE_*
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails getGfxTracingDetails() {
      return gfxTracingDetails_;
    }
    /**
     * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
     *
     * <pre>
     * set when kind = GFX_TRACE_*
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetailsOrBuilder getGfxTracingDetailsOrBuilder() {
      return gfxTracingDetails_;
    }

    // optional .android_studio.TestRecorderDetails test_recorder_details = 33;
    public static final int TEST_RECORDER_DETAILS_FIELD_NUMBER = 33;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails testRecorderDetails_;
    /**
     * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
     *
     * <pre>
     * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
     * </pre>
     */
    public boolean hasTestRecorderDetails() {
      return ((bitField1_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
     *
     * <pre>
     * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails getTestRecorderDetails() {
      return testRecorderDetails_;
    }
    /**
     * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
     *
     * <pre>
     * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetailsOrBuilder getTestRecorderDetailsOrBuilder() {
      return testRecorderDetails_;
    }

    // optional .android_studio.UIActionStats ui_action_stats = 34;
    public static final int UI_ACTION_STATS_FIELD_NUMBER = 34;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats uiActionStats_;
    /**
     * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
     *
     * <pre>
     * set when kind = STUDIO_UI_ACTION_STATS
     * </pre>
     */
    public boolean hasUiActionStats() {
      return ((bitField1_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
     *
     * <pre>
     * set when kind = STUDIO_UI_ACTION_STATS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats getUiActionStats() {
      return uiActionStats_;
    }
    /**
     * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
     *
     * <pre>
     * set when kind = STUDIO_UI_ACTION_STATS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStatsOrBuilder getUiActionStatsOrBuilder() {
      return uiActionStats_;
    }

    // optional .android_studio.MachineDetails machine_details = 35;
    public static final int MACHINE_DETAILS_FIELD_NUMBER = 35;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails machineDetails_;
    /**
     * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    public boolean hasMachineDetails() {
      return ((bitField1_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails getMachineDetails() {
      return machineDetails_;
    }
    /**
     * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetailsOrBuilder getMachineDetailsOrBuilder() {
      return machineDetails_;
    }

    // optional .android_studio.JvmDetails jvm_details = 36;
    public static final int JVM_DETAILS_FIELD_NUMBER = 36;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails jvmDetails_;
    /**
     * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    public boolean hasJvmDetails() {
      return ((bitField1_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails getJvmDetails() {
      return jvmDetails_;
    }
    /**
     * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
     *
     * <pre>
     * set when kind = STUDIO_PING
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetailsOrBuilder getJvmDetailsOrBuilder() {
      return jvmDetails_;
    }

    // optional .android_studio.JavaProcessStats java_process_stats = 37;
    public static final int JAVA_PROCESS_STATS_FIELD_NUMBER = 37;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats javaProcessStats_;
    /**
     * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
     *
     * <pre>
     * set when kind = STUDIO_PROCESS_STATS
     * </pre>
     */
    public boolean hasJavaProcessStats() {
      return ((bitField1_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
     *
     * <pre>
     * set when kind = STUDIO_PROCESS_STATS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats getJavaProcessStats() {
      return javaProcessStats_;
    }
    /**
     * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
     *
     * <pre>
     * set when kind = STUDIO_PROCESS_STATS
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStatsOrBuilder getJavaProcessStatsOrBuilder() {
      return javaProcessStats_;
    }

    private void initFields() {
      category_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory.NO_EVENT_CATEGORY;
      kind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind.UNKNOWN_EVENT_KIND;
      studioSessionId_ = "";
      productDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDefaultInstance();
      monitorType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType.UNKNOWN_MONITOR_TYPE;
      monitorPaused_ = false;
      profilerCaptureType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType.UNKNOWN_PROFILER_CAPTURE_TYPE;
      cloudTestingErrorMessage_ = "";
      cloudTestingLoadedScreenshotsCount_ = 0;
      runConfigurationType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType.UNKNOWN_RUN_CONFIGURATION_TYPE;
      debuggerType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType.UNKNOWN_DEBUGGER_TYPE;
      deviceInfo_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDefaultInstance();
      lldbSessionFailureMessage_ = "";
      developerServiceKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind.UNKNOWN_DEVELOPER_SERVICE_KIND;
      gradleVersion_ = "";
      gradleSyncFailure_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure.UNKNOWN_GRADLE_FAILURE;
      gradleMissingSignature_ = "";
      templateRenderer_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer.UNKNOWN_TEMPLATE_RENDERER;
      studioCrash_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.getDefaultInstance();
      gradleBuildDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.getDefaultInstance();
      instantRun_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDefaultInstance();
      metaMetrics_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.getDefaultInstance();
      emulatorDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDefaultInstance();
      testRun_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDefaultInstance();
      emulatorUiEvent_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDefaultInstance();
      hypervisor_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.getDefaultInstance();
      emulatorHost_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.getDefaultInstance();
      gradleBuildProfile_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.getDefaultInstance();
      lldbFrontendDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.getDefaultInstance();
      firebaseErrorDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.getDefaultInstance();
      projectId_ = "";
      gfxTracingDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.getDefaultInstance();
      testRecorderDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.getDefaultInstance();
      uiActionStats_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.getDefaultInstance();
      machineDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.getDefaultInstance();
      jvmDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.getDefaultInstance();
      javaProcessStats_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, category_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, kind_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getStudioSessionIdBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, productDetails_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeEnum(5, monitorType_.getNumber());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, monitorPaused_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeEnum(7, profilerCaptureType_.getNumber());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getCloudTestingErrorMessageBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeInt32(9, cloudTestingLoadedScreenshotsCount_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeEnum(10, runConfigurationType_.getNumber());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeEnum(11, debuggerType_.getNumber());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeMessage(12, deviceInfo_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBytes(13, getLldbSessionFailureMessageBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeEnum(14, developerServiceKind_.getNumber());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeBytes(15, getGradleVersionBytes());
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeEnum(16, gradleSyncFailure_.getNumber());
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeBytes(17, getGradleMissingSignatureBytes());
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeEnum(18, templateRenderer_.getNumber());
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        output.writeMessage(19, studioCrash_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        output.writeMessage(20, gradleBuildDetails_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        output.writeMessage(21, instantRun_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        output.writeMessage(22, metaMetrics_);
      }
      if (((bitField0_ & 0x00400000) == 0x00400000)) {
        output.writeMessage(23, emulatorDetails_);
      }
      if (((bitField0_ & 0x00800000) == 0x00800000)) {
        output.writeMessage(24, testRun_);
      }
      if (((bitField0_ & 0x01000000) == 0x01000000)) {
        output.writeMessage(25, emulatorUiEvent_);
      }
      if (((bitField0_ & 0x02000000) == 0x02000000)) {
        output.writeMessage(26, hypervisor_);
      }
      if (((bitField0_ & 0x04000000) == 0x04000000)) {
        output.writeMessage(27, emulatorHost_);
      }
      if (((bitField0_ & 0x08000000) == 0x08000000)) {
        output.writeMessage(28, gradleBuildProfile_);
      }
      if (((bitField0_ & 0x10000000) == 0x10000000)) {
        output.writeMessage(29, lldbFrontendDetails_);
      }
      if (((bitField0_ & 0x20000000) == 0x20000000)) {
        output.writeMessage(30, firebaseErrorDetails_);
      }
      if (((bitField0_ & 0x40000000) == 0x40000000)) {
        output.writeBytes(31, getProjectIdBytes());
      }
      if (((bitField0_ & 0x80000000) == 0x80000000)) {
        output.writeMessage(32, gfxTracingDetails_);
      }
      if (((bitField1_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(33, testRecorderDetails_);
      }
      if (((bitField1_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(34, uiActionStats_);
      }
      if (((bitField1_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(35, machineDetails_);
      }
      if (((bitField1_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(36, jvmDetails_);
      }
      if (((bitField1_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(37, javaProcessStats_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, category_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, kind_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getStudioSessionIdBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, productDetails_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, monitorType_.getNumber());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, monitorPaused_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(7, profilerCaptureType_.getNumber());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getCloudTestingErrorMessageBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, cloudTestingLoadedScreenshotsCount_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(10, runConfigurationType_.getNumber());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(11, debuggerType_.getNumber());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, deviceInfo_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getLldbSessionFailureMessageBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(14, developerServiceKind_.getNumber());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(15, getGradleVersionBytes());
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(16, gradleSyncFailure_.getNumber());
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(17, getGradleMissingSignatureBytes());
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(18, templateRenderer_.getNumber());
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(19, studioCrash_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, gradleBuildDetails_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(21, instantRun_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(22, metaMetrics_);
      }
      if (((bitField0_ & 0x00400000) == 0x00400000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(23, emulatorDetails_);
      }
      if (((bitField0_ & 0x00800000) == 0x00800000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(24, testRun_);
      }
      if (((bitField0_ & 0x01000000) == 0x01000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(25, emulatorUiEvent_);
      }
      if (((bitField0_ & 0x02000000) == 0x02000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(26, hypervisor_);
      }
      if (((bitField0_ & 0x04000000) == 0x04000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(27, emulatorHost_);
      }
      if (((bitField0_ & 0x08000000) == 0x08000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(28, gradleBuildProfile_);
      }
      if (((bitField0_ & 0x10000000) == 0x10000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(29, lldbFrontendDetails_);
      }
      if (((bitField0_ & 0x20000000) == 0x20000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(30, firebaseErrorDetails_);
      }
      if (((bitField0_ & 0x40000000) == 0x40000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(31, getProjectIdBytes());
      }
      if (((bitField0_ & 0x80000000) == 0x80000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(32, gfxTracingDetails_);
      }
      if (((bitField1_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(33, testRecorderDetails_);
      }
      if (((bitField1_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(34, uiActionStats_);
      }
      if (((bitField1_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(35, machineDetails_);
      }
      if (((bitField1_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(36, jvmDetails_);
      }
      if (((bitField1_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(37, javaProcessStats_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.AndroidStudioEvent}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_AndroidStudioEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_AndroidStudioEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getProductDetailsFieldBuilder();
          getDeviceInfoFieldBuilder();
          getStudioCrashFieldBuilder();
          getGradleBuildDetailsFieldBuilder();
          getInstantRunFieldBuilder();
          getMetaMetricsFieldBuilder();
          getEmulatorDetailsFieldBuilder();
          getTestRunFieldBuilder();
          getEmulatorUiEventFieldBuilder();
          getHypervisorFieldBuilder();
          getEmulatorHostFieldBuilder();
          getGradleBuildProfileFieldBuilder();
          getLldbFrontendDetailsFieldBuilder();
          getFirebaseErrorDetailsFieldBuilder();
          getGfxTracingDetailsFieldBuilder();
          getTestRecorderDetailsFieldBuilder();
          getUiActionStatsFieldBuilder();
          getMachineDetailsFieldBuilder();
          getJvmDetailsFieldBuilder();
          getJavaProcessStatsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        category_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory.NO_EVENT_CATEGORY;
        bitField0_ = (bitField0_ & ~0x00000001);
        kind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind.UNKNOWN_EVENT_KIND;
        bitField0_ = (bitField0_ & ~0x00000002);
        studioSessionId_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        if (productDetailsBuilder_ == null) {
          productDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDefaultInstance();
        } else {
          productDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        monitorType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType.UNKNOWN_MONITOR_TYPE;
        bitField0_ = (bitField0_ & ~0x00000010);
        monitorPaused_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        profilerCaptureType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType.UNKNOWN_PROFILER_CAPTURE_TYPE;
        bitField0_ = (bitField0_ & ~0x00000040);
        cloudTestingErrorMessage_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        cloudTestingLoadedScreenshotsCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        runConfigurationType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType.UNKNOWN_RUN_CONFIGURATION_TYPE;
        bitField0_ = (bitField0_ & ~0x00000200);
        debuggerType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType.UNKNOWN_DEBUGGER_TYPE;
        bitField0_ = (bitField0_ & ~0x00000400);
        if (deviceInfoBuilder_ == null) {
          deviceInfo_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDefaultInstance();
        } else {
          deviceInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        lldbSessionFailureMessage_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        developerServiceKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind.UNKNOWN_DEVELOPER_SERVICE_KIND;
        bitField0_ = (bitField0_ & ~0x00002000);
        gradleVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00004000);
        gradleSyncFailure_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure.UNKNOWN_GRADLE_FAILURE;
        bitField0_ = (bitField0_ & ~0x00008000);
        gradleMissingSignature_ = "";
        bitField0_ = (bitField0_ & ~0x00010000);
        templateRenderer_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer.UNKNOWN_TEMPLATE_RENDERER;
        bitField0_ = (bitField0_ & ~0x00020000);
        if (studioCrashBuilder_ == null) {
          studioCrash_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.getDefaultInstance();
        } else {
          studioCrashBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00040000);
        if (gradleBuildDetailsBuilder_ == null) {
          gradleBuildDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.getDefaultInstance();
        } else {
          gradleBuildDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00080000);
        if (instantRunBuilder_ == null) {
          instantRun_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDefaultInstance();
        } else {
          instantRunBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00100000);
        if (metaMetricsBuilder_ == null) {
          metaMetrics_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.getDefaultInstance();
        } else {
          metaMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00200000);
        if (emulatorDetailsBuilder_ == null) {
          emulatorDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDefaultInstance();
        } else {
          emulatorDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00400000);
        if (testRunBuilder_ == null) {
          testRun_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDefaultInstance();
        } else {
          testRunBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00800000);
        if (emulatorUiEventBuilder_ == null) {
          emulatorUiEvent_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDefaultInstance();
        } else {
          emulatorUiEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x01000000);
        if (hypervisorBuilder_ == null) {
          hypervisor_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.getDefaultInstance();
        } else {
          hypervisorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x02000000);
        if (emulatorHostBuilder_ == null) {
          emulatorHost_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.getDefaultInstance();
        } else {
          emulatorHostBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x04000000);
        if (gradleBuildProfileBuilder_ == null) {
          gradleBuildProfile_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.getDefaultInstance();
        } else {
          gradleBuildProfileBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x08000000);
        if (lldbFrontendDetailsBuilder_ == null) {
          lldbFrontendDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.getDefaultInstance();
        } else {
          lldbFrontendDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x10000000);
        if (firebaseErrorDetailsBuilder_ == null) {
          firebaseErrorDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.getDefaultInstance();
        } else {
          firebaseErrorDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x20000000);
        projectId_ = "";
        bitField0_ = (bitField0_ & ~0x40000000);
        if (gfxTracingDetailsBuilder_ == null) {
          gfxTracingDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.getDefaultInstance();
        } else {
          gfxTracingDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x80000000);
        if (testRecorderDetailsBuilder_ == null) {
          testRecorderDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.getDefaultInstance();
        } else {
          testRecorderDetailsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000001);
        if (uiActionStatsBuilder_ == null) {
          uiActionStats_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.getDefaultInstance();
        } else {
          uiActionStatsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000002);
        if (machineDetailsBuilder_ == null) {
          machineDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.getDefaultInstance();
        } else {
          machineDetailsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000004);
        if (jvmDetailsBuilder_ == null) {
          jvmDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.getDefaultInstance();
        } else {
          jvmDetailsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000008);
        if (javaProcessStatsBuilder_ == null) {
          javaProcessStats_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.getDefaultInstance();
        } else {
          javaProcessStatsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_AndroidStudioEvent_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent(this);
        int from_bitField0_ = bitField0_;
        int from_bitField1_ = bitField1_;
        int to_bitField0_ = 0;
        int to_bitField1_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.category_ = category_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.kind_ = kind_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.studioSessionId_ = studioSessionId_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (productDetailsBuilder_ == null) {
          result.productDetails_ = productDetails_;
        } else {
          result.productDetails_ = productDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.monitorType_ = monitorType_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.monitorPaused_ = monitorPaused_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.profilerCaptureType_ = profilerCaptureType_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.cloudTestingErrorMessage_ = cloudTestingErrorMessage_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.cloudTestingLoadedScreenshotsCount_ = cloudTestingLoadedScreenshotsCount_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.runConfigurationType_ = runConfigurationType_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.debuggerType_ = debuggerType_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        if (deviceInfoBuilder_ == null) {
          result.deviceInfo_ = deviceInfo_;
        } else {
          result.deviceInfo_ = deviceInfoBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.lldbSessionFailureMessage_ = lldbSessionFailureMessage_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.developerServiceKind_ = developerServiceKind_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.gradleVersion_ = gradleVersion_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00008000;
        }
        result.gradleSyncFailure_ = gradleSyncFailure_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00010000;
        }
        result.gradleMissingSignature_ = gradleMissingSignature_;
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00020000;
        }
        result.templateRenderer_ = templateRenderer_;
        if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
          to_bitField0_ |= 0x00040000;
        }
        if (studioCrashBuilder_ == null) {
          result.studioCrash_ = studioCrash_;
        } else {
          result.studioCrash_ = studioCrashBuilder_.build();
        }
        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
          to_bitField0_ |= 0x00080000;
        }
        if (gradleBuildDetailsBuilder_ == null) {
          result.gradleBuildDetails_ = gradleBuildDetails_;
        } else {
          result.gradleBuildDetails_ = gradleBuildDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
          to_bitField0_ |= 0x00100000;
        }
        if (instantRunBuilder_ == null) {
          result.instantRun_ = instantRun_;
        } else {
          result.instantRun_ = instantRunBuilder_.build();
        }
        if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
          to_bitField0_ |= 0x00200000;
        }
        if (metaMetricsBuilder_ == null) {
          result.metaMetrics_ = metaMetrics_;
        } else {
          result.metaMetrics_ = metaMetricsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00400000) == 0x00400000)) {
          to_bitField0_ |= 0x00400000;
        }
        if (emulatorDetailsBuilder_ == null) {
          result.emulatorDetails_ = emulatorDetails_;
        } else {
          result.emulatorDetails_ = emulatorDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00800000) == 0x00800000)) {
          to_bitField0_ |= 0x00800000;
        }
        if (testRunBuilder_ == null) {
          result.testRun_ = testRun_;
        } else {
          result.testRun_ = testRunBuilder_.build();
        }
        if (((from_bitField0_ & 0x01000000) == 0x01000000)) {
          to_bitField0_ |= 0x01000000;
        }
        if (emulatorUiEventBuilder_ == null) {
          result.emulatorUiEvent_ = emulatorUiEvent_;
        } else {
          result.emulatorUiEvent_ = emulatorUiEventBuilder_.build();
        }
        if (((from_bitField0_ & 0x02000000) == 0x02000000)) {
          to_bitField0_ |= 0x02000000;
        }
        if (hypervisorBuilder_ == null) {
          result.hypervisor_ = hypervisor_;
        } else {
          result.hypervisor_ = hypervisorBuilder_.build();
        }
        if (((from_bitField0_ & 0x04000000) == 0x04000000)) {
          to_bitField0_ |= 0x04000000;
        }
        if (emulatorHostBuilder_ == null) {
          result.emulatorHost_ = emulatorHost_;
        } else {
          result.emulatorHost_ = emulatorHostBuilder_.build();
        }
        if (((from_bitField0_ & 0x08000000) == 0x08000000)) {
          to_bitField0_ |= 0x08000000;
        }
        if (gradleBuildProfileBuilder_ == null) {
          result.gradleBuildProfile_ = gradleBuildProfile_;
        } else {
          result.gradleBuildProfile_ = gradleBuildProfileBuilder_.build();
        }
        if (((from_bitField0_ & 0x10000000) == 0x10000000)) {
          to_bitField0_ |= 0x10000000;
        }
        if (lldbFrontendDetailsBuilder_ == null) {
          result.lldbFrontendDetails_ = lldbFrontendDetails_;
        } else {
          result.lldbFrontendDetails_ = lldbFrontendDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x20000000) == 0x20000000)) {
          to_bitField0_ |= 0x20000000;
        }
        if (firebaseErrorDetailsBuilder_ == null) {
          result.firebaseErrorDetails_ = firebaseErrorDetails_;
        } else {
          result.firebaseErrorDetails_ = firebaseErrorDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x40000000) == 0x40000000)) {
          to_bitField0_ |= 0x40000000;
        }
        result.projectId_ = projectId_;
        if (((from_bitField0_ & 0x80000000) == 0x80000000)) {
          to_bitField0_ |= 0x80000000;
        }
        if (gfxTracingDetailsBuilder_ == null) {
          result.gfxTracingDetails_ = gfxTracingDetails_;
        } else {
          result.gfxTracingDetails_ = gfxTracingDetailsBuilder_.build();
        }
        if (((from_bitField1_ & 0x00000001) == 0x00000001)) {
          to_bitField1_ |= 0x00000001;
        }
        if (testRecorderDetailsBuilder_ == null) {
          result.testRecorderDetails_ = testRecorderDetails_;
        } else {
          result.testRecorderDetails_ = testRecorderDetailsBuilder_.build();
        }
        if (((from_bitField1_ & 0x00000002) == 0x00000002)) {
          to_bitField1_ |= 0x00000002;
        }
        if (uiActionStatsBuilder_ == null) {
          result.uiActionStats_ = uiActionStats_;
        } else {
          result.uiActionStats_ = uiActionStatsBuilder_.build();
        }
        if (((from_bitField1_ & 0x00000004) == 0x00000004)) {
          to_bitField1_ |= 0x00000004;
        }
        if (machineDetailsBuilder_ == null) {
          result.machineDetails_ = machineDetails_;
        } else {
          result.machineDetails_ = machineDetailsBuilder_.build();
        }
        if (((from_bitField1_ & 0x00000008) == 0x00000008)) {
          to_bitField1_ |= 0x00000008;
        }
        if (jvmDetailsBuilder_ == null) {
          result.jvmDetails_ = jvmDetails_;
        } else {
          result.jvmDetails_ = jvmDetailsBuilder_.build();
        }
        if (((from_bitField1_ & 0x00000010) == 0x00000010)) {
          to_bitField1_ |= 0x00000010;
        }
        if (javaProcessStatsBuilder_ == null) {
          result.javaProcessStats_ = javaProcessStats_;
        } else {
          result.javaProcessStats_ = javaProcessStatsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        result.bitField1_ = to_bitField1_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.getDefaultInstance()) return this;
        if (other.hasCategory()) {
          setCategory(other.getCategory());
        }
        if (other.hasKind()) {
          setKind(other.getKind());
        }
        if (other.hasStudioSessionId()) {
          bitField0_ |= 0x00000004;
          studioSessionId_ = other.studioSessionId_;
          onChanged();
        }
        if (other.hasProductDetails()) {
          mergeProductDetails(other.getProductDetails());
        }
        if (other.hasMonitorType()) {
          setMonitorType(other.getMonitorType());
        }
        if (other.hasMonitorPaused()) {
          setMonitorPaused(other.getMonitorPaused());
        }
        if (other.hasProfilerCaptureType()) {
          setProfilerCaptureType(other.getProfilerCaptureType());
        }
        if (other.hasCloudTestingErrorMessage()) {
          bitField0_ |= 0x00000080;
          cloudTestingErrorMessage_ = other.cloudTestingErrorMessage_;
          onChanged();
        }
        if (other.hasCloudTestingLoadedScreenshotsCount()) {
          setCloudTestingLoadedScreenshotsCount(other.getCloudTestingLoadedScreenshotsCount());
        }
        if (other.hasRunConfigurationType()) {
          setRunConfigurationType(other.getRunConfigurationType());
        }
        if (other.hasDebuggerType()) {
          setDebuggerType(other.getDebuggerType());
        }
        if (other.hasDeviceInfo()) {
          mergeDeviceInfo(other.getDeviceInfo());
        }
        if (other.hasLldbSessionFailureMessage()) {
          bitField0_ |= 0x00001000;
          lldbSessionFailureMessage_ = other.lldbSessionFailureMessage_;
          onChanged();
        }
        if (other.hasDeveloperServiceKind()) {
          setDeveloperServiceKind(other.getDeveloperServiceKind());
        }
        if (other.hasGradleVersion()) {
          bitField0_ |= 0x00004000;
          gradleVersion_ = other.gradleVersion_;
          onChanged();
        }
        if (other.hasGradleSyncFailure()) {
          setGradleSyncFailure(other.getGradleSyncFailure());
        }
        if (other.hasGradleMissingSignature()) {
          bitField0_ |= 0x00010000;
          gradleMissingSignature_ = other.gradleMissingSignature_;
          onChanged();
        }
        if (other.hasTemplateRenderer()) {
          setTemplateRenderer(other.getTemplateRenderer());
        }
        if (other.hasStudioCrash()) {
          mergeStudioCrash(other.getStudioCrash());
        }
        if (other.hasGradleBuildDetails()) {
          mergeGradleBuildDetails(other.getGradleBuildDetails());
        }
        if (other.hasInstantRun()) {
          mergeInstantRun(other.getInstantRun());
        }
        if (other.hasMetaMetrics()) {
          mergeMetaMetrics(other.getMetaMetrics());
        }
        if (other.hasEmulatorDetails()) {
          mergeEmulatorDetails(other.getEmulatorDetails());
        }
        if (other.hasTestRun()) {
          mergeTestRun(other.getTestRun());
        }
        if (other.hasEmulatorUiEvent()) {
          mergeEmulatorUiEvent(other.getEmulatorUiEvent());
        }
        if (other.hasHypervisor()) {
          mergeHypervisor(other.getHypervisor());
        }
        if (other.hasEmulatorHost()) {
          mergeEmulatorHost(other.getEmulatorHost());
        }
        if (other.hasGradleBuildProfile()) {
          mergeGradleBuildProfile(other.getGradleBuildProfile());
        }
        if (other.hasLldbFrontendDetails()) {
          mergeLldbFrontendDetails(other.getLldbFrontendDetails());
        }
        if (other.hasFirebaseErrorDetails()) {
          mergeFirebaseErrorDetails(other.getFirebaseErrorDetails());
        }
        if (other.hasProjectId()) {
          bitField0_ |= 0x40000000;
          projectId_ = other.projectId_;
          onChanged();
        }
        if (other.hasGfxTracingDetails()) {
          mergeGfxTracingDetails(other.getGfxTracingDetails());
        }
        if (other.hasTestRecorderDetails()) {
          mergeTestRecorderDetails(other.getTestRecorderDetails());
        }
        if (other.hasUiActionStats()) {
          mergeUiActionStats(other.getUiActionStats());
        }
        if (other.hasMachineDetails()) {
          mergeMachineDetails(other.getMachineDetails());
        }
        if (other.hasJvmDetails()) {
          mergeJvmDetails(other.getJvmDetails());
        }
        if (other.hasJavaProcessStats()) {
          mergeJavaProcessStats(other.getJavaProcessStats());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;
      private int bitField1_;

      // optional .android_studio.AndroidStudioEvent.EventCategory category = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory category_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory.NO_EVENT_CATEGORY;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.EventCategory category = 1;</code>
       *
       * <pre>
       * Describes a group of event kinds related to each other.
       * </pre>
       */
      public boolean hasCategory() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.EventCategory category = 1;</code>
       *
       * <pre>
       * Describes a group of event kinds related to each other.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory getCategory() {
        return category_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.EventCategory category = 1;</code>
       *
       * <pre>
       * Describes a group of event kinds related to each other.
       * </pre>
       */
      public Builder setCategory(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        category_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.EventCategory category = 1;</code>
       *
       * <pre>
       * Describes a group of event kinds related to each other.
       * </pre>
       */
      public Builder clearCategory() {
        bitField0_ = (bitField0_ & ~0x00000001);
        category_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventCategory.NO_EVENT_CATEGORY;
        onChanged();
        return this;
      }

      // optional .android_studio.AndroidStudioEvent.EventKind kind = 2;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind kind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind.UNKNOWN_EVENT_KIND;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.EventKind kind = 2;</code>
       *
       * <pre>
       * Specific kind of event, primary separation key of all Android Studio
       *  related events.
       * </pre>
       */
      public boolean hasKind() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.EventKind kind = 2;</code>
       *
       * <pre>
       * Specific kind of event, primary separation key of all Android Studio
       *  related events.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind getKind() {
        return kind_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.EventKind kind = 2;</code>
       *
       * <pre>
       * Specific kind of event, primary separation key of all Android Studio
       *  related events.
       * </pre>
       */
      public Builder setKind(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        kind_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.EventKind kind = 2;</code>
       *
       * <pre>
       * Specific kind of event, primary separation key of all Android Studio
       *  related events.
       * </pre>
       */
      public Builder clearKind() {
        bitField0_ = (bitField0_ & ~0x00000002);
        kind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.EventKind.UNKNOWN_EVENT_KIND;
        onChanged();
        return this;
      }

      // optional string studio_session_id = 3;
      private java.lang.Object studioSessionId_ = "";
      /**
       * <code>optional string studio_session_id = 3;</code>
       *
       * <pre>
       * The session id is a UUID tracking a single instance of Android Studio
       *  to associate events together such as kind = TEST_RUN
       * </pre>
       */
      public boolean hasStudioSessionId() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string studio_session_id = 3;</code>
       *
       * <pre>
       * The session id is a UUID tracking a single instance of Android Studio
       *  to associate events together such as kind = TEST_RUN
       * </pre>
       */
      public java.lang.String getStudioSessionId() {
        java.lang.Object ref = studioSessionId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          studioSessionId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string studio_session_id = 3;</code>
       *
       * <pre>
       * The session id is a UUID tracking a single instance of Android Studio
       *  to associate events together such as kind = TEST_RUN
       * </pre>
       */
      public com.google.protobuf.ByteString
          getStudioSessionIdBytes() {
        java.lang.Object ref = studioSessionId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          studioSessionId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string studio_session_id = 3;</code>
       *
       * <pre>
       * The session id is a UUID tracking a single instance of Android Studio
       *  to associate events together such as kind = TEST_RUN
       * </pre>
       */
      public Builder setStudioSessionId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        studioSessionId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string studio_session_id = 3;</code>
       *
       * <pre>
       * The session id is a UUID tracking a single instance of Android Studio
       *  to associate events together such as kind = TEST_RUN
       * </pre>
       */
      public Builder clearStudioSessionId() {
        bitField0_ = (bitField0_ & ~0x00000004);
        studioSessionId_ = getDefaultInstance().getStudioSessionId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string studio_session_id = 3;</code>
       *
       * <pre>
       * The session id is a UUID tracking a single instance of Android Studio
       *  to associate events together such as kind = TEST_RUN
       * </pre>
       */
      public Builder setStudioSessionIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        studioSessionId_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.ProductDetails product_details = 4;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails productDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetailsOrBuilder> productDetailsBuilder_;
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public boolean hasProductDetails() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails getProductDetails() {
        if (productDetailsBuilder_ == null) {
          return productDetails_;
        } else {
          return productDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public Builder setProductDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails value) {
        if (productDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          productDetails_ = value;
          onChanged();
        } else {
          productDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public Builder setProductDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.Builder builderForValue) {
        if (productDetailsBuilder_ == null) {
          productDetails_ = builderForValue.build();
          onChanged();
        } else {
          productDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public Builder mergeProductDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails value) {
        if (productDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              productDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDefaultInstance()) {
            productDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.newBuilder(productDetails_).mergeFrom(value).buildPartial();
          } else {
            productDetails_ = value;
          }
          onChanged();
        } else {
          productDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public Builder clearProductDetails() {
        if (productDetailsBuilder_ == null) {
          productDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDefaultInstance();
          onChanged();
        } else {
          productDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.Builder getProductDetailsBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getProductDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetailsOrBuilder getProductDetailsOrBuilder() {
        if (productDetailsBuilder_ != null) {
          return productDetailsBuilder_.getMessageOrBuilder();
        } else {
          return productDetails_;
        }
      }
      /**
       * <code>optional .android_studio.ProductDetails product_details = 4;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       *  or kind = EMULATOR_PING
       *  or ANDROID_STUDIO_TEST
       *  or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetailsOrBuilder> 
          getProductDetailsFieldBuilder() {
        if (productDetailsBuilder_ == null) {
          productDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetailsOrBuilder>(
                  productDetails_,
                  getParentForChildren(),
                  isClean());
          productDetails_ = null;
        }
        return productDetailsBuilder_;
      }

      // optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType monitorType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType.UNKNOWN_MONITOR_TYPE;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;</code>
       *
       * <pre>
       * set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
       * </pre>
       */
      public boolean hasMonitorType() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;</code>
       *
       * <pre>
       * set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType getMonitorType() {
        return monitorType_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;</code>
       *
       * <pre>
       * set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
       * </pre>
       */
      public Builder setMonitorType(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000010;
        monitorType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.MonitorType monitor_type = 5;</code>
       *
       * <pre>
       * set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING
       * </pre>
       */
      public Builder clearMonitorType() {
        bitField0_ = (bitField0_ & ~0x00000010);
        monitorType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.MonitorType.UNKNOWN_MONITOR_TYPE;
        onChanged();
        return this;
      }

      // optional bool monitor_paused = 6;
      private boolean monitorPaused_ ;
      /**
       * <code>optional bool monitor_paused = 6;</code>
       *
       * <pre>
       * set when kind = MONITOR_RUNNING
       * </pre>
       */
      public boolean hasMonitorPaused() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool monitor_paused = 6;</code>
       *
       * <pre>
       * set when kind = MONITOR_RUNNING
       * </pre>
       */
      public boolean getMonitorPaused() {
        return monitorPaused_;
      }
      /**
       * <code>optional bool monitor_paused = 6;</code>
       *
       * <pre>
       * set when kind = MONITOR_RUNNING
       * </pre>
       */
      public Builder setMonitorPaused(boolean value) {
        bitField0_ |= 0x00000020;
        monitorPaused_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool monitor_paused = 6;</code>
       *
       * <pre>
       * set when kind = MONITOR_RUNNING
       * </pre>
       */
      public Builder clearMonitorPaused() {
        bitField0_ = (bitField0_ & ~0x00000020);
        monitorPaused_ = false;
        onChanged();
        return this;
      }

      // optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType profilerCaptureType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType.UNKNOWN_PROFILER_CAPTURE_TYPE;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;</code>
       *
       * <pre>
       * set when kind = PROFILING_OPEN or PROFILING_CAPTURE
       * </pre>
       */
      public boolean hasProfilerCaptureType() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;</code>
       *
       * <pre>
       * set when kind = PROFILING_OPEN or PROFILING_CAPTURE
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType getProfilerCaptureType() {
        return profilerCaptureType_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;</code>
       *
       * <pre>
       * set when kind = PROFILING_OPEN or PROFILING_CAPTURE
       * </pre>
       */
      public Builder setProfilerCaptureType(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000040;
        profilerCaptureType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.ProfilerCaptureType profiler_capture_type = 7;</code>
       *
       * <pre>
       * set when kind = PROFILING_OPEN or PROFILING_CAPTURE
       * </pre>
       */
      public Builder clearProfilerCaptureType() {
        bitField0_ = (bitField0_ & ~0x00000040);
        profilerCaptureType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.ProfilerCaptureType.UNKNOWN_PROFILER_CAPTURE_TYPE;
        onChanged();
        return this;
      }

      // optional string cloud_testing_error_message = 8;
      private java.lang.Object cloudTestingErrorMessage_ = "";
      /**
       * <code>optional string cloud_testing_error_message = 8;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_BACKEND_ERROR
       * </pre>
       */
      public boolean hasCloudTestingErrorMessage() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string cloud_testing_error_message = 8;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_BACKEND_ERROR
       * </pre>
       */
      public java.lang.String getCloudTestingErrorMessage() {
        java.lang.Object ref = cloudTestingErrorMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          cloudTestingErrorMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string cloud_testing_error_message = 8;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_BACKEND_ERROR
       * </pre>
       */
      public com.google.protobuf.ByteString
          getCloudTestingErrorMessageBytes() {
        java.lang.Object ref = cloudTestingErrorMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          cloudTestingErrorMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string cloud_testing_error_message = 8;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_BACKEND_ERROR
       * </pre>
       */
      public Builder setCloudTestingErrorMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        cloudTestingErrorMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string cloud_testing_error_message = 8;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_BACKEND_ERROR
       * </pre>
       */
      public Builder clearCloudTestingErrorMessage() {
        bitField0_ = (bitField0_ & ~0x00000080);
        cloudTestingErrorMessage_ = getDefaultInstance().getCloudTestingErrorMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string cloud_testing_error_message = 8;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_BACKEND_ERROR
       * </pre>
       */
      public Builder setCloudTestingErrorMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        cloudTestingErrorMessage_ = value;
        onChanged();
        return this;
      }

      // optional int32 cloud_testing_loaded_screenshots_count = 9;
      private int cloudTestingLoadedScreenshotsCount_ ;
      /**
       * <code>optional int32 cloud_testing_loaded_screenshots_count = 9;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
       * </pre>
       */
      public boolean hasCloudTestingLoadedScreenshotsCount() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional int32 cloud_testing_loaded_screenshots_count = 9;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
       * </pre>
       */
      public int getCloudTestingLoadedScreenshotsCount() {
        return cloudTestingLoadedScreenshotsCount_;
      }
      /**
       * <code>optional int32 cloud_testing_loaded_screenshots_count = 9;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
       * </pre>
       */
      public Builder setCloudTestingLoadedScreenshotsCount(int value) {
        bitField0_ |= 0x00000100;
        cloudTestingLoadedScreenshotsCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 cloud_testing_loaded_screenshots_count = 9;</code>
       *
       * <pre>
       * set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED
       * </pre>
       */
      public Builder clearCloudTestingLoadedScreenshotsCount() {
        bitField0_ = (bitField0_ & ~0x00000100);
        cloudTestingLoadedScreenshotsCount_ = 0;
        onChanged();
        return this;
      }

      // optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType runConfigurationType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType.UNKNOWN_RUN_CONFIGURATION_TYPE;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_STARTED
       * </pre>
       */
      public boolean hasRunConfigurationType() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_STARTED
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType getRunConfigurationType() {
        return runConfigurationType_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_STARTED
       * </pre>
       */
      public Builder setRunConfigurationType(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000200;
        runConfigurationType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.RunConfigurationType run_configuration_type = 10;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_STARTED
       * </pre>
       */
      public Builder clearRunConfigurationType() {
        bitField0_ = (bitField0_ & ~0x00000200);
        runConfigurationType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.RunConfigurationType.UNKNOWN_RUN_CONFIGURATION_TYPE;
        onChanged();
        return this;
      }

      // optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType debuggerType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType.UNKNOWN_DEBUGGER_TYPE;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_STARTED
       * </pre>
       */
      public boolean hasDebuggerType() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_STARTED
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType getDebuggerType() {
        return debuggerType_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_STARTED
       * </pre>
       */
      public Builder setDebuggerType(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000400;
        debuggerType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.DebuggerType debugger_type = 11;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_STARTED
       * </pre>
       */
      public Builder clearDebuggerType() {
        bitField0_ = (bitField0_ & ~0x00000400);
        debuggerType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DebuggerType.UNKNOWN_DEBUGGER_TYPE;
        onChanged();
        return this;
      }

      // optional .android_studio.DeviceInfo device_info = 12;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo deviceInfo_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfoOrBuilder> deviceInfoBuilder_;
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      public boolean hasDeviceInfo() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo getDeviceInfo() {
        if (deviceInfoBuilder_ == null) {
          return deviceInfo_;
        } else {
          return deviceInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      public Builder setDeviceInfo(com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo value) {
        if (deviceInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceInfo_ = value;
          onChanged();
        } else {
          deviceInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      public Builder setDeviceInfo(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.Builder builderForValue) {
        if (deviceInfoBuilder_ == null) {
          deviceInfo_ = builderForValue.build();
          onChanged();
        } else {
          deviceInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      public Builder mergeDeviceInfo(com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo value) {
        if (deviceInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              deviceInfo_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDefaultInstance()) {
            deviceInfo_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.newBuilder(deviceInfo_).mergeFrom(value).buildPartial();
          } else {
            deviceInfo_ = value;
          }
          onChanged();
        } else {
          deviceInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      public Builder clearDeviceInfo() {
        if (deviceInfoBuilder_ == null) {
          deviceInfo_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDefaultInstance();
          onChanged();
        } else {
          deviceInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.Builder getDeviceInfoBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getDeviceInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfoOrBuilder getDeviceInfoOrBuilder() {
        if (deviceInfoBuilder_ != null) {
          return deviceInfoBuilder_.getMessageOrBuilder();
        } else {
          return deviceInfo_;
        }
      }
      /**
       * <code>optional .android_studio.DeviceInfo device_info = 12;</code>
       *
       * <pre>
       * set when kind = LLDB_LAUNCHED
       *  or kind = DEPLOYMENT_APK
       *  or kind = DEPLOYMENT_EMULATOR
       *  or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE
       *  or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS
       *  or kind = TEST_RUN
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfoOrBuilder> 
          getDeviceInfoFieldBuilder() {
        if (deviceInfoBuilder_ == null) {
          deviceInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfoOrBuilder>(
                  deviceInfo_,
                  getParentForChildren(),
                  isClean());
          deviceInfo_ = null;
        }
        return deviceInfoBuilder_;
      }

      // optional string lldb_session_failure_message = 13;
      private java.lang.Object lldbSessionFailureMessage_ = "";
      /**
       * <code>optional string lldb_session_failure_message = 13;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
       *  e.g. 'failed to get reply to handshake packet'
       * </pre>
       */
      public boolean hasLldbSessionFailureMessage() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string lldb_session_failure_message = 13;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
       *  e.g. 'failed to get reply to handshake packet'
       * </pre>
       */
      public java.lang.String getLldbSessionFailureMessage() {
        java.lang.Object ref = lldbSessionFailureMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          lldbSessionFailureMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string lldb_session_failure_message = 13;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
       *  e.g. 'failed to get reply to handshake packet'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getLldbSessionFailureMessageBytes() {
        java.lang.Object ref = lldbSessionFailureMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          lldbSessionFailureMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string lldb_session_failure_message = 13;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
       *  e.g. 'failed to get reply to handshake packet'
       * </pre>
       */
      public Builder setLldbSessionFailureMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        lldbSessionFailureMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string lldb_session_failure_message = 13;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
       *  e.g. 'failed to get reply to handshake packet'
       * </pre>
       */
      public Builder clearLldbSessionFailureMessage() {
        bitField0_ = (bitField0_ & ~0x00001000);
        lldbSessionFailureMessage_ = getDefaultInstance().getLldbSessionFailureMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string lldb_session_failure_message = 13;</code>
       *
       * <pre>
       * set when kind = LLDB_SESSION_FAILED or kind = LLDB_INSTALL_FAILED
       *  e.g. 'failed to get reply to handshake packet'
       * </pre>
       */
      public Builder setLldbSessionFailureMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        lldbSessionFailureMessage_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind developerServiceKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind.UNKNOWN_DEVELOPER_SERVICE_KIND;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;</code>
       *
       * <pre>
       * set when kind = DEVELOPER_SERVICES_INSTALLED
       *  or kind = DEVELOPER_SERVICES_REMOVED
       * </pre>
       */
      public boolean hasDeveloperServiceKind() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;</code>
       *
       * <pre>
       * set when kind = DEVELOPER_SERVICES_INSTALLED
       *  or kind = DEVELOPER_SERVICES_REMOVED
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind getDeveloperServiceKind() {
        return developerServiceKind_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;</code>
       *
       * <pre>
       * set when kind = DEVELOPER_SERVICES_INSTALLED
       *  or kind = DEVELOPER_SERVICES_REMOVED
       * </pre>
       */
      public Builder setDeveloperServiceKind(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00002000;
        developerServiceKind_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.DeveloperServiceKind developer_service_kind = 14;</code>
       *
       * <pre>
       * set when kind = DEVELOPER_SERVICES_INSTALLED
       *  or kind = DEVELOPER_SERVICES_REMOVED
       * </pre>
       */
      public Builder clearDeveloperServiceKind() {
        bitField0_ = (bitField0_ & ~0x00002000);
        developerServiceKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.DeveloperServiceKind.UNKNOWN_DEVELOPER_SERVICE_KIND;
        onChanged();
        return this;
      }

      // optional string gradle_version = 15;
      private java.lang.Object gradleVersion_ = "";
      /**
       * <code>optional string gradle_version = 15;</code>
       *
       * <pre>
       * set when category = GRADLE_SYNC
       * </pre>
       */
      public boolean hasGradleVersion() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <code>optional string gradle_version = 15;</code>
       *
       * <pre>
       * set when category = GRADLE_SYNC
       * </pre>
       */
      public java.lang.String getGradleVersion() {
        java.lang.Object ref = gradleVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          gradleVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string gradle_version = 15;</code>
       *
       * <pre>
       * set when category = GRADLE_SYNC
       * </pre>
       */
      public com.google.protobuf.ByteString
          getGradleVersionBytes() {
        java.lang.Object ref = gradleVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gradleVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gradle_version = 15;</code>
       *
       * <pre>
       * set when category = GRADLE_SYNC
       * </pre>
       */
      public Builder setGradleVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        gradleVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_version = 15;</code>
       *
       * <pre>
       * set when category = GRADLE_SYNC
       * </pre>
       */
      public Builder clearGradleVersion() {
        bitField0_ = (bitField0_ & ~0x00004000);
        gradleVersion_ = getDefaultInstance().getGradleVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_version = 15;</code>
       *
       * <pre>
       * set when category = GRADLE_SYNC
       * </pre>
       */
      public Builder setGradleVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        gradleVersion_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure gradleSyncFailure_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure.UNKNOWN_GRADLE_FAILURE;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;</code>
       *
       * <pre>
       * e.g. '2.10'
       * set when kind = GRADLE_SYNC_FAILURE
       * </pre>
       */
      public boolean hasGradleSyncFailure() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;</code>
       *
       * <pre>
       * e.g. '2.10'
       * set when kind = GRADLE_SYNC_FAILURE
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure getGradleSyncFailure() {
        return gradleSyncFailure_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;</code>
       *
       * <pre>
       * e.g. '2.10'
       * set when kind = GRADLE_SYNC_FAILURE
       * </pre>
       */
      public Builder setGradleSyncFailure(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00008000;
        gradleSyncFailure_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.GradleSyncFailure gradle_sync_failure = 16;</code>
       *
       * <pre>
       * e.g. '2.10'
       * set when kind = GRADLE_SYNC_FAILURE
       * </pre>
       */
      public Builder clearGradleSyncFailure() {
        bitField0_ = (bitField0_ & ~0x00008000);
        gradleSyncFailure_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.GradleSyncFailure.UNKNOWN_GRADLE_FAILURE;
        onChanged();
        return this;
      }

      // optional string gradle_missing_signature = 17;
      private java.lang.Object gradleMissingSignature_ = "";
      /**
       * <code>optional string gradle_missing_signature = 17;</code>
       *
       * <pre>
       * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
       *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
       * </pre>
       */
      public boolean hasGradleMissingSignature() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <code>optional string gradle_missing_signature = 17;</code>
       *
       * <pre>
       * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
       *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
       * </pre>
       */
      public java.lang.String getGradleMissingSignature() {
        java.lang.Object ref = gradleMissingSignature_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          gradleMissingSignature_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string gradle_missing_signature = 17;</code>
       *
       * <pre>
       * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
       *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getGradleMissingSignatureBytes() {
        java.lang.Object ref = gradleMissingSignature_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gradleMissingSignature_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gradle_missing_signature = 17;</code>
       *
       * <pre>
       * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
       *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
       * </pre>
       */
      public Builder setGradleMissingSignature(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        gradleMissingSignature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_missing_signature = 17;</code>
       *
       * <pre>
       * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
       *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
       * </pre>
       */
      public Builder clearGradleMissingSignature() {
        bitField0_ = (bitField0_ & ~0x00010000);
        gradleMissingSignature_ = getDefaultInstance().getGradleMissingSignature();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_missing_signature = 17;</code>
       *
       * <pre>
       * set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND
       *  e.g. 'org.gradle.api.internal.DemoClass.demoMethod'
       * </pre>
       */
      public Builder setGradleMissingSignatureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        gradleMissingSignature_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer templateRenderer_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer.UNKNOWN_TEMPLATE_RENDERER;
      /**
       * <code>optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;</code>
       *
       * <pre>
       * set when kind = TEMPLATE_RENDERER
       * </pre>
       */
      public boolean hasTemplateRenderer() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;</code>
       *
       * <pre>
       * set when kind = TEMPLATE_RENDERER
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer getTemplateRenderer() {
        return templateRenderer_;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;</code>
       *
       * <pre>
       * set when kind = TEMPLATE_RENDERER
       * </pre>
       */
      public Builder setTemplateRenderer(com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00020000;
        templateRenderer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.AndroidStudioEvent.TemplateRenderer template_renderer = 18;</code>
       *
       * <pre>
       * set when kind = TEMPLATE_RENDERER
       * </pre>
       */
      public Builder clearTemplateRenderer() {
        bitField0_ = (bitField0_ & ~0x00020000);
        templateRenderer_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.AndroidStudioEvent.TemplateRenderer.UNKNOWN_TEMPLATE_RENDERER;
        onChanged();
        return this;
      }

      // optional .android_studio.StudioCrash studio_crash = 19;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash studioCrash_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash, com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrashOrBuilder> studioCrashBuilder_;
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      public boolean hasStudioCrash() {
        return ((bitField0_ & 0x00040000) == 0x00040000);
      }
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash getStudioCrash() {
        if (studioCrashBuilder_ == null) {
          return studioCrash_;
        } else {
          return studioCrashBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      public Builder setStudioCrash(com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash value) {
        if (studioCrashBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          studioCrash_ = value;
          onChanged();
        } else {
          studioCrashBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      public Builder setStudioCrash(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.Builder builderForValue) {
        if (studioCrashBuilder_ == null) {
          studioCrash_ = builderForValue.build();
          onChanged();
        } else {
          studioCrashBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      public Builder mergeStudioCrash(com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash value) {
        if (studioCrashBuilder_ == null) {
          if (((bitField0_ & 0x00040000) == 0x00040000) &&
              studioCrash_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.getDefaultInstance()) {
            studioCrash_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.newBuilder(studioCrash_).mergeFrom(value).buildPartial();
          } else {
            studioCrash_ = value;
          }
          onChanged();
        } else {
          studioCrashBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      public Builder clearStudioCrash() {
        if (studioCrashBuilder_ == null) {
          studioCrash_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.getDefaultInstance();
          onChanged();
        } else {
          studioCrashBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00040000);
        return this;
      }
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.Builder getStudioCrashBuilder() {
        bitField0_ |= 0x00040000;
        onChanged();
        return getStudioCrashFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrashOrBuilder getStudioCrashOrBuilder() {
        if (studioCrashBuilder_ != null) {
          return studioCrashBuilder_.getMessageOrBuilder();
        } else {
          return studioCrash_;
        }
      }
      /**
       * <code>optional .android_studio.StudioCrash studio_crash = 19;</code>
       *
       * <pre>
       * set when kind = STUDIO_CRASH
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash, com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrashOrBuilder> 
          getStudioCrashFieldBuilder() {
        if (studioCrashBuilder_ == null) {
          studioCrashBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash, com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrashOrBuilder>(
                  studioCrash_,
                  getParentForChildren(),
                  isClean());
          studioCrash_ = null;
        }
        return studioCrashBuilder_;
      }

      // optional .android_studio.GradleBuildDetails gradle_build_details = 20;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails gradleBuildDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetailsOrBuilder> gradleBuildDetailsBuilder_;
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      public boolean hasGradleBuildDetails() {
        return ((bitField0_ & 0x00080000) == 0x00080000);
      }
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails getGradleBuildDetails() {
        if (gradleBuildDetailsBuilder_ == null) {
          return gradleBuildDetails_;
        } else {
          return gradleBuildDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      public Builder setGradleBuildDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails value) {
        if (gradleBuildDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gradleBuildDetails_ = value;
          onChanged();
        } else {
          gradleBuildDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      public Builder setGradleBuildDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.Builder builderForValue) {
        if (gradleBuildDetailsBuilder_ == null) {
          gradleBuildDetails_ = builderForValue.build();
          onChanged();
        } else {
          gradleBuildDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      public Builder mergeGradleBuildDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails value) {
        if (gradleBuildDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00080000) == 0x00080000) &&
              gradleBuildDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.getDefaultInstance()) {
            gradleBuildDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.newBuilder(gradleBuildDetails_).mergeFrom(value).buildPartial();
          } else {
            gradleBuildDetails_ = value;
          }
          onChanged();
        } else {
          gradleBuildDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      public Builder clearGradleBuildDetails() {
        if (gradleBuildDetailsBuilder_ == null) {
          gradleBuildDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.getDefaultInstance();
          onChanged();
        } else {
          gradleBuildDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00080000);
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.Builder getGradleBuildDetailsBuilder() {
        bitField0_ |= 0x00080000;
        onChanged();
        return getGradleBuildDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetailsOrBuilder getGradleBuildDetailsOrBuilder() {
        if (gradleBuildDetailsBuilder_ != null) {
          return gradleBuildDetailsBuilder_.getMessageOrBuilder();
        } else {
          return gradleBuildDetails_;
        }
      }
      /**
       * <code>optional .android_studio.GradleBuildDetails gradle_build_details = 20;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_DETAILS
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetailsOrBuilder> 
          getGradleBuildDetailsFieldBuilder() {
        if (gradleBuildDetailsBuilder_ == null) {
          gradleBuildDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetailsOrBuilder>(
                  gradleBuildDetails_,
                  getParentForChildren(),
                  isClean());
          gradleBuildDetails_ = null;
        }
        return gradleBuildDetailsBuilder_;
      }

      // optional .android_studio.InstantRun instant_run = 21;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun instantRun_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunOrBuilder> instantRunBuilder_;
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      public boolean hasInstantRun() {
        return ((bitField0_ & 0x00100000) == 0x00100000);
      }
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun getInstantRun() {
        if (instantRunBuilder_ == null) {
          return instantRun_;
        } else {
          return instantRunBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      public Builder setInstantRun(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun value) {
        if (instantRunBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          instantRun_ = value;
          onChanged();
        } else {
          instantRunBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      public Builder setInstantRun(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.Builder builderForValue) {
        if (instantRunBuilder_ == null) {
          instantRun_ = builderForValue.build();
          onChanged();
        } else {
          instantRunBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      public Builder mergeInstantRun(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun value) {
        if (instantRunBuilder_ == null) {
          if (((bitField0_ & 0x00100000) == 0x00100000) &&
              instantRun_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDefaultInstance()) {
            instantRun_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.newBuilder(instantRun_).mergeFrom(value).buildPartial();
          } else {
            instantRun_ = value;
          }
          onChanged();
        } else {
          instantRunBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      public Builder clearInstantRun() {
        if (instantRunBuilder_ == null) {
          instantRun_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDefaultInstance();
          onChanged();
        } else {
          instantRunBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00100000);
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.Builder getInstantRunBuilder() {
        bitField0_ |= 0x00100000;
        onChanged();
        return getInstantRunFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunOrBuilder getInstantRunOrBuilder() {
        if (instantRunBuilder_ != null) {
          return instantRunBuilder_.getMessageOrBuilder();
        } else {
          return instantRun_;
        }
      }
      /**
       * <code>optional .android_studio.InstantRun instant_run = 21;</code>
       *
       * <pre>
       * set when kind = INSTANT_RUN
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunOrBuilder> 
          getInstantRunFieldBuilder() {
        if (instantRunBuilder_ == null) {
          instantRunBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunOrBuilder>(
                  instantRun_,
                  getParentForChildren(),
                  isClean());
          instantRun_ = null;
        }
        return instantRunBuilder_;
      }

      // optional .android_studio.MetaMetrics meta_metrics = 22;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics metaMetrics_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics, com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetricsOrBuilder> metaMetricsBuilder_;
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      public boolean hasMetaMetrics() {
        return ((bitField0_ & 0x00200000) == 0x00200000);
      }
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics getMetaMetrics() {
        if (metaMetricsBuilder_ == null) {
          return metaMetrics_;
        } else {
          return metaMetricsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      public Builder setMetaMetrics(com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics value) {
        if (metaMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          metaMetrics_ = value;
          onChanged();
        } else {
          metaMetricsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00200000;
        return this;
      }
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      public Builder setMetaMetrics(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.Builder builderForValue) {
        if (metaMetricsBuilder_ == null) {
          metaMetrics_ = builderForValue.build();
          onChanged();
        } else {
          metaMetricsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00200000;
        return this;
      }
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      public Builder mergeMetaMetrics(com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics value) {
        if (metaMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00200000) == 0x00200000) &&
              metaMetrics_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.getDefaultInstance()) {
            metaMetrics_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.newBuilder(metaMetrics_).mergeFrom(value).buildPartial();
          } else {
            metaMetrics_ = value;
          }
          onChanged();
        } else {
          metaMetricsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00200000;
        return this;
      }
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      public Builder clearMetaMetrics() {
        if (metaMetricsBuilder_ == null) {
          metaMetrics_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.getDefaultInstance();
          onChanged();
        } else {
          metaMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00200000);
        return this;
      }
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.Builder getMetaMetricsBuilder() {
        bitField0_ |= 0x00200000;
        onChanged();
        return getMetaMetricsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetricsOrBuilder getMetaMetricsOrBuilder() {
        if (metaMetricsBuilder_ != null) {
          return metaMetricsBuilder_.getMessageOrBuilder();
        } else {
          return metaMetrics_;
        }
      }
      /**
       * <code>optional .android_studio.MetaMetrics meta_metrics = 22;</code>
       *
       * <pre>
       * set when kind = META_METRICS
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics, com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetricsOrBuilder> 
          getMetaMetricsFieldBuilder() {
        if (metaMetricsBuilder_ == null) {
          metaMetricsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics, com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetricsOrBuilder>(
                  metaMetrics_,
                  getParentForChildren(),
                  isClean());
          metaMetrics_ = null;
        }
        return metaMetricsBuilder_;
      }

      // optional .android_studio.EmulatorDetails emulator_details = 23;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails emulatorDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetailsOrBuilder> emulatorDetailsBuilder_;
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      public boolean hasEmulatorDetails() {
        return ((bitField0_ & 0x00400000) == 0x00400000);
      }
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails getEmulatorDetails() {
        if (emulatorDetailsBuilder_ == null) {
          return emulatorDetails_;
        } else {
          return emulatorDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      public Builder setEmulatorDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails value) {
        if (emulatorDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          emulatorDetails_ = value;
          onChanged();
        } else {
          emulatorDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00400000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      public Builder setEmulatorDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.Builder builderForValue) {
        if (emulatorDetailsBuilder_ == null) {
          emulatorDetails_ = builderForValue.build();
          onChanged();
        } else {
          emulatorDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00400000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      public Builder mergeEmulatorDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails value) {
        if (emulatorDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00400000) == 0x00400000) &&
              emulatorDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDefaultInstance()) {
            emulatorDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.newBuilder(emulatorDetails_).mergeFrom(value).buildPartial();
          } else {
            emulatorDetails_ = value;
          }
          onChanged();
        } else {
          emulatorDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00400000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      public Builder clearEmulatorDetails() {
        if (emulatorDetailsBuilder_ == null) {
          emulatorDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDefaultInstance();
          onChanged();
        } else {
          emulatorDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00400000);
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.Builder getEmulatorDetailsBuilder() {
        bitField0_ |= 0x00400000;
        onChanged();
        return getEmulatorDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetailsOrBuilder getEmulatorDetailsOrBuilder() {
        if (emulatorDetailsBuilder_ != null) {
          return emulatorDetailsBuilder_.getMessageOrBuilder();
        } else {
          return emulatorDetails_;
        }
      }
      /**
       * <code>optional .android_studio.EmulatorDetails emulator_details = 23;</code>
       *
       * <pre>
       * set when kind = EMULATOR_PING
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetailsOrBuilder> 
          getEmulatorDetailsFieldBuilder() {
        if (emulatorDetailsBuilder_ == null) {
          emulatorDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetailsOrBuilder>(
                  emulatorDetails_,
                  getParentForChildren(),
                  isClean());
          emulatorDetails_ = null;
        }
        return emulatorDetailsBuilder_;
      }

      // optional .android_studio.TestRun test_run = 24;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun testRun_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRunOrBuilder> testRunBuilder_;
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      public boolean hasTestRun() {
        return ((bitField0_ & 0x00800000) == 0x00800000);
      }
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun getTestRun() {
        if (testRunBuilder_ == null) {
          return testRun_;
        } else {
          return testRunBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      public Builder setTestRun(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun value) {
        if (testRunBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          testRun_ = value;
          onChanged();
        } else {
          testRunBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00800000;
        return this;
      }
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      public Builder setTestRun(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.Builder builderForValue) {
        if (testRunBuilder_ == null) {
          testRun_ = builderForValue.build();
          onChanged();
        } else {
          testRunBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00800000;
        return this;
      }
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      public Builder mergeTestRun(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun value) {
        if (testRunBuilder_ == null) {
          if (((bitField0_ & 0x00800000) == 0x00800000) &&
              testRun_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDefaultInstance()) {
            testRun_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.newBuilder(testRun_).mergeFrom(value).buildPartial();
          } else {
            testRun_ = value;
          }
          onChanged();
        } else {
          testRunBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00800000;
        return this;
      }
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      public Builder clearTestRun() {
        if (testRunBuilder_ == null) {
          testRun_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDefaultInstance();
          onChanged();
        } else {
          testRunBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00800000);
        return this;
      }
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.Builder getTestRunBuilder() {
        bitField0_ |= 0x00800000;
        onChanged();
        return getTestRunFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRunOrBuilder getTestRunOrBuilder() {
        if (testRunBuilder_ != null) {
          return testRunBuilder_.getMessageOrBuilder();
        } else {
          return testRun_;
        }
      }
      /**
       * <code>optional .android_studio.TestRun test_run = 24;</code>
       *
       * <pre>
       * set when kind = TEST_RUN
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRunOrBuilder> 
          getTestRunFieldBuilder() {
        if (testRunBuilder_ == null) {
          testRunBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRunOrBuilder>(
                  testRun_,
                  getParentForChildren(),
                  isClean());
          testRun_ = null;
        }
        return testRunBuilder_;
      }

      // optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent emulatorUiEvent_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEventOrBuilder> emulatorUiEventBuilder_;
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      public boolean hasEmulatorUiEvent() {
        return ((bitField0_ & 0x01000000) == 0x01000000);
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent getEmulatorUiEvent() {
        if (emulatorUiEventBuilder_ == null) {
          return emulatorUiEvent_;
        } else {
          return emulatorUiEventBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      public Builder setEmulatorUiEvent(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent value) {
        if (emulatorUiEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          emulatorUiEvent_ = value;
          onChanged();
        } else {
          emulatorUiEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x01000000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      public Builder setEmulatorUiEvent(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.Builder builderForValue) {
        if (emulatorUiEventBuilder_ == null) {
          emulatorUiEvent_ = builderForValue.build();
          onChanged();
        } else {
          emulatorUiEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x01000000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      public Builder mergeEmulatorUiEvent(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent value) {
        if (emulatorUiEventBuilder_ == null) {
          if (((bitField0_ & 0x01000000) == 0x01000000) &&
              emulatorUiEvent_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDefaultInstance()) {
            emulatorUiEvent_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.newBuilder(emulatorUiEvent_).mergeFrom(value).buildPartial();
          } else {
            emulatorUiEvent_ = value;
          }
          onChanged();
        } else {
          emulatorUiEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x01000000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      public Builder clearEmulatorUiEvent() {
        if (emulatorUiEventBuilder_ == null) {
          emulatorUiEvent_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDefaultInstance();
          onChanged();
        } else {
          emulatorUiEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x01000000);
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.Builder getEmulatorUiEventBuilder() {
        bitField0_ |= 0x01000000;
        onChanged();
        return getEmulatorUiEventFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEventOrBuilder getEmulatorUiEventOrBuilder() {
        if (emulatorUiEventBuilder_ != null) {
          return emulatorUiEventBuilder_.getMessageOrBuilder();
        } else {
          return emulatorUiEvent_;
        }
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent emulator_ui_event = 25;</code>
       *
       * <pre>
       * set when kind = EMULATOR_UI_EVENT
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEventOrBuilder> 
          getEmulatorUiEventFieldBuilder() {
        if (emulatorUiEventBuilder_ == null) {
          emulatorUiEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEventOrBuilder>(
                  emulatorUiEvent_,
                  getParentForChildren(),
                  isClean());
          emulatorUiEvent_ = null;
        }
        return emulatorUiEventBuilder_;
      }

      // optional .android_studio.Hypervisor hypervisor = 26;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor hypervisor_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor, com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.HypervisorOrBuilder> hypervisorBuilder_;
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      public boolean hasHypervisor() {
        return ((bitField0_ & 0x02000000) == 0x02000000);
      }
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor getHypervisor() {
        if (hypervisorBuilder_ == null) {
          return hypervisor_;
        } else {
          return hypervisorBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      public Builder setHypervisor(com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor value) {
        if (hypervisorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          hypervisor_ = value;
          onChanged();
        } else {
          hypervisorBuilder_.setMessage(value);
        }
        bitField0_ |= 0x02000000;
        return this;
      }
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      public Builder setHypervisor(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.Builder builderForValue) {
        if (hypervisorBuilder_ == null) {
          hypervisor_ = builderForValue.build();
          onChanged();
        } else {
          hypervisorBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x02000000;
        return this;
      }
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      public Builder mergeHypervisor(com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor value) {
        if (hypervisorBuilder_ == null) {
          if (((bitField0_ & 0x02000000) == 0x02000000) &&
              hypervisor_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.getDefaultInstance()) {
            hypervisor_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.newBuilder(hypervisor_).mergeFrom(value).buildPartial();
          } else {
            hypervisor_ = value;
          }
          onChanged();
        } else {
          hypervisorBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x02000000;
        return this;
      }
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      public Builder clearHypervisor() {
        if (hypervisorBuilder_ == null) {
          hypervisor_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.getDefaultInstance();
          onChanged();
        } else {
          hypervisorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x02000000);
        return this;
      }
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.Builder getHypervisorBuilder() {
        bitField0_ |= 0x02000000;
        onChanged();
        return getHypervisorFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.HypervisorOrBuilder getHypervisorOrBuilder() {
        if (hypervisorBuilder_ != null) {
          return hypervisorBuilder_.getMessageOrBuilder();
        } else {
          return hypervisor_;
        }
      }
      /**
       * <code>optional .android_studio.Hypervisor hypervisor = 26;</code>
       *
       * <pre>
       * set when kind = HYPERVISOR
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor, com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.HypervisorOrBuilder> 
          getHypervisorFieldBuilder() {
        if (hypervisorBuilder_ == null) {
          hypervisorBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor, com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.HypervisorOrBuilder>(
                  hypervisor_,
                  getParentForChildren(),
                  isClean());
          hypervisor_ = null;
        }
        return hypervisorBuilder_;
      }

      // optional .android_studio.EmulatorHost emulator_host = 27;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost emulatorHost_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHostOrBuilder> emulatorHostBuilder_;
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      public boolean hasEmulatorHost() {
        return ((bitField0_ & 0x04000000) == 0x04000000);
      }
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost getEmulatorHost() {
        if (emulatorHostBuilder_ == null) {
          return emulatorHost_;
        } else {
          return emulatorHostBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      public Builder setEmulatorHost(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost value) {
        if (emulatorHostBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          emulatorHost_ = value;
          onChanged();
        } else {
          emulatorHostBuilder_.setMessage(value);
        }
        bitField0_ |= 0x04000000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      public Builder setEmulatorHost(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.Builder builderForValue) {
        if (emulatorHostBuilder_ == null) {
          emulatorHost_ = builderForValue.build();
          onChanged();
        } else {
          emulatorHostBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x04000000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      public Builder mergeEmulatorHost(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost value) {
        if (emulatorHostBuilder_ == null) {
          if (((bitField0_ & 0x04000000) == 0x04000000) &&
              emulatorHost_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.getDefaultInstance()) {
            emulatorHost_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.newBuilder(emulatorHost_).mergeFrom(value).buildPartial();
          } else {
            emulatorHost_ = value;
          }
          onChanged();
        } else {
          emulatorHostBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x04000000;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      public Builder clearEmulatorHost() {
        if (emulatorHostBuilder_ == null) {
          emulatorHost_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.getDefaultInstance();
          onChanged();
        } else {
          emulatorHostBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x04000000);
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.Builder getEmulatorHostBuilder() {
        bitField0_ |= 0x04000000;
        onChanged();
        return getEmulatorHostFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHostOrBuilder getEmulatorHostOrBuilder() {
        if (emulatorHostBuilder_ != null) {
          return emulatorHostBuilder_.getMessageOrBuilder();
        } else {
          return emulatorHost_;
        }
      }
      /**
       * <code>optional .android_studio.EmulatorHost emulator_host = 27;</code>
       *
       * <pre>
       * set when kind = EMULATOR_HOST
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHostOrBuilder> 
          getEmulatorHostFieldBuilder() {
        if (emulatorHostBuilder_ == null) {
          emulatorHostBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHostOrBuilder>(
                  emulatorHost_,
                  getParentForChildren(),
                  isClean());
          emulatorHost_ = null;
        }
        return emulatorHostBuilder_;
      }

      // optional .android_studio.GradleBuildProfile gradle_build_profile = 28;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile gradleBuildProfile_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileOrBuilder> gradleBuildProfileBuilder_;
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      public boolean hasGradleBuildProfile() {
        return ((bitField0_ & 0x08000000) == 0x08000000);
      }
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile getGradleBuildProfile() {
        if (gradleBuildProfileBuilder_ == null) {
          return gradleBuildProfile_;
        } else {
          return gradleBuildProfileBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      public Builder setGradleBuildProfile(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile value) {
        if (gradleBuildProfileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gradleBuildProfile_ = value;
          onChanged();
        } else {
          gradleBuildProfileBuilder_.setMessage(value);
        }
        bitField0_ |= 0x08000000;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      public Builder setGradleBuildProfile(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.Builder builderForValue) {
        if (gradleBuildProfileBuilder_ == null) {
          gradleBuildProfile_ = builderForValue.build();
          onChanged();
        } else {
          gradleBuildProfileBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x08000000;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      public Builder mergeGradleBuildProfile(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile value) {
        if (gradleBuildProfileBuilder_ == null) {
          if (((bitField0_ & 0x08000000) == 0x08000000) &&
              gradleBuildProfile_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.getDefaultInstance()) {
            gradleBuildProfile_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.newBuilder(gradleBuildProfile_).mergeFrom(value).buildPartial();
          } else {
            gradleBuildProfile_ = value;
          }
          onChanged();
        } else {
          gradleBuildProfileBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x08000000;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      public Builder clearGradleBuildProfile() {
        if (gradleBuildProfileBuilder_ == null) {
          gradleBuildProfile_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.getDefaultInstance();
          onChanged();
        } else {
          gradleBuildProfileBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x08000000);
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.Builder getGradleBuildProfileBuilder() {
        bitField0_ |= 0x08000000;
        onChanged();
        return getGradleBuildProfileFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileOrBuilder getGradleBuildProfileOrBuilder() {
        if (gradleBuildProfileBuilder_ != null) {
          return gradleBuildProfileBuilder_.getMessageOrBuilder();
        } else {
          return gradleBuildProfile_;
        }
      }
      /**
       * <code>optional .android_studio.GradleBuildProfile gradle_build_profile = 28;</code>
       *
       * <pre>
       * set when kind = GRADLE_BUILD_PROFILE
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileOrBuilder> 
          getGradleBuildProfileFieldBuilder() {
        if (gradleBuildProfileBuilder_ == null) {
          gradleBuildProfileBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileOrBuilder>(
                  gradleBuildProfile_,
                  getParentForChildren(),
                  isClean());
          gradleBuildProfile_ = null;
        }
        return gradleBuildProfileBuilder_;
      }

      // optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails lldbFrontendDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetailsOrBuilder> lldbFrontendDetailsBuilder_;
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      public boolean hasLldbFrontendDetails() {
        return ((bitField0_ & 0x10000000) == 0x10000000);
      }
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails getLldbFrontendDetails() {
        if (lldbFrontendDetailsBuilder_ == null) {
          return lldbFrontendDetails_;
        } else {
          return lldbFrontendDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      public Builder setLldbFrontendDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails value) {
        if (lldbFrontendDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          lldbFrontendDetails_ = value;
          onChanged();
        } else {
          lldbFrontendDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x10000000;
        return this;
      }
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      public Builder setLldbFrontendDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.Builder builderForValue) {
        if (lldbFrontendDetailsBuilder_ == null) {
          lldbFrontendDetails_ = builderForValue.build();
          onChanged();
        } else {
          lldbFrontendDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x10000000;
        return this;
      }
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      public Builder mergeLldbFrontendDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails value) {
        if (lldbFrontendDetailsBuilder_ == null) {
          if (((bitField0_ & 0x10000000) == 0x10000000) &&
              lldbFrontendDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.getDefaultInstance()) {
            lldbFrontendDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.newBuilder(lldbFrontendDetails_).mergeFrom(value).buildPartial();
          } else {
            lldbFrontendDetails_ = value;
          }
          onChanged();
        } else {
          lldbFrontendDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x10000000;
        return this;
      }
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      public Builder clearLldbFrontendDetails() {
        if (lldbFrontendDetailsBuilder_ == null) {
          lldbFrontendDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.getDefaultInstance();
          onChanged();
        } else {
          lldbFrontendDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x10000000);
        return this;
      }
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.Builder getLldbFrontendDetailsBuilder() {
        bitField0_ |= 0x10000000;
        onChanged();
        return getLldbFrontendDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetailsOrBuilder getLldbFrontendDetailsOrBuilder() {
        if (lldbFrontendDetailsBuilder_ != null) {
          return lldbFrontendDetailsBuilder_.getMessageOrBuilder();
        } else {
          return lldbFrontendDetails_;
        }
      }
      /**
       * <code>optional .android_studio.LLDBFrontendDetails lldb_frontend_details = 29;</code>
       *
       * <pre>
       * set when kind = LLDB_FRONTEND_EXITED
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetailsOrBuilder> 
          getLldbFrontendDetailsFieldBuilder() {
        if (lldbFrontendDetailsBuilder_ == null) {
          lldbFrontendDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetailsOrBuilder>(
                  lldbFrontendDetails_,
                  getParentForChildren(),
                  isClean());
          lldbFrontendDetails_ = null;
        }
        return lldbFrontendDetailsBuilder_;
      }

      // optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails firebaseErrorDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetailsOrBuilder> firebaseErrorDetailsBuilder_;
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      public boolean hasFirebaseErrorDetails() {
        return ((bitField0_ & 0x20000000) == 0x20000000);
      }
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails getFirebaseErrorDetails() {
        if (firebaseErrorDetailsBuilder_ == null) {
          return firebaseErrorDetails_;
        } else {
          return firebaseErrorDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      public Builder setFirebaseErrorDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails value) {
        if (firebaseErrorDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          firebaseErrorDetails_ = value;
          onChanged();
        } else {
          firebaseErrorDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x20000000;
        return this;
      }
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      public Builder setFirebaseErrorDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.Builder builderForValue) {
        if (firebaseErrorDetailsBuilder_ == null) {
          firebaseErrorDetails_ = builderForValue.build();
          onChanged();
        } else {
          firebaseErrorDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x20000000;
        return this;
      }
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      public Builder mergeFirebaseErrorDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails value) {
        if (firebaseErrorDetailsBuilder_ == null) {
          if (((bitField0_ & 0x20000000) == 0x20000000) &&
              firebaseErrorDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.getDefaultInstance()) {
            firebaseErrorDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.newBuilder(firebaseErrorDetails_).mergeFrom(value).buildPartial();
          } else {
            firebaseErrorDetails_ = value;
          }
          onChanged();
        } else {
          firebaseErrorDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x20000000;
        return this;
      }
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      public Builder clearFirebaseErrorDetails() {
        if (firebaseErrorDetailsBuilder_ == null) {
          firebaseErrorDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.getDefaultInstance();
          onChanged();
        } else {
          firebaseErrorDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x20000000);
        return this;
      }
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.Builder getFirebaseErrorDetailsBuilder() {
        bitField0_ |= 0x20000000;
        onChanged();
        return getFirebaseErrorDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetailsOrBuilder getFirebaseErrorDetailsOrBuilder() {
        if (firebaseErrorDetailsBuilder_ != null) {
          return firebaseErrorDetailsBuilder_.getMessageOrBuilder();
        } else {
          return firebaseErrorDetails_;
        }
      }
      /**
       * <code>optional .android_studio.FirebaseErrorDetails firebase_error_details = 30;</code>
       *
       * <pre>
       * set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or
       *  kind FIREBASE_ASSISTANT_SILENT_ERROR
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetailsOrBuilder> 
          getFirebaseErrorDetailsFieldBuilder() {
        if (firebaseErrorDetailsBuilder_ == null) {
          firebaseErrorDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetailsOrBuilder>(
                  firebaseErrorDetails_,
                  getParentForChildren(),
                  isClean());
          firebaseErrorDetails_ = null;
        }
        return firebaseErrorDetailsBuilder_;
      }

      // optional string project_id = 31;
      private java.lang.Object projectId_ = "";
      /**
       * <code>optional string project_id = 31;</code>
       *
       * <pre>
       * Client-side salted (rotating every 28 days), sha256 of the project id.
       *  set when kind = PROJECT_STRUCTURE_*.
       * </pre>
       */
      public boolean hasProjectId() {
        return ((bitField0_ & 0x40000000) == 0x40000000);
      }
      /**
       * <code>optional string project_id = 31;</code>
       *
       * <pre>
       * Client-side salted (rotating every 28 days), sha256 of the project id.
       *  set when kind = PROJECT_STRUCTURE_*.
       * </pre>
       */
      public java.lang.String getProjectId() {
        java.lang.Object ref = projectId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          projectId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string project_id = 31;</code>
       *
       * <pre>
       * Client-side salted (rotating every 28 days), sha256 of the project id.
       *  set when kind = PROJECT_STRUCTURE_*.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getProjectIdBytes() {
        java.lang.Object ref = projectId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          projectId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string project_id = 31;</code>
       *
       * <pre>
       * Client-side salted (rotating every 28 days), sha256 of the project id.
       *  set when kind = PROJECT_STRUCTURE_*.
       * </pre>
       */
      public Builder setProjectId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x40000000;
        projectId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string project_id = 31;</code>
       *
       * <pre>
       * Client-side salted (rotating every 28 days), sha256 of the project id.
       *  set when kind = PROJECT_STRUCTURE_*.
       * </pre>
       */
      public Builder clearProjectId() {
        bitField0_ = (bitField0_ & ~0x40000000);
        projectId_ = getDefaultInstance().getProjectId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string project_id = 31;</code>
       *
       * <pre>
       * Client-side salted (rotating every 28 days), sha256 of the project id.
       *  set when kind = PROJECT_STRUCTURE_*.
       * </pre>
       */
      public Builder setProjectIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x40000000;
        projectId_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails gfxTracingDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetailsOrBuilder> gfxTracingDetailsBuilder_;
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      public boolean hasGfxTracingDetails() {
        return ((bitField0_ & 0x80000000) == 0x80000000);
      }
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails getGfxTracingDetails() {
        if (gfxTracingDetailsBuilder_ == null) {
          return gfxTracingDetails_;
        } else {
          return gfxTracingDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      public Builder setGfxTracingDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails value) {
        if (gfxTracingDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gfxTracingDetails_ = value;
          onChanged();
        } else {
          gfxTracingDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x80000000;
        return this;
      }
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      public Builder setGfxTracingDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.Builder builderForValue) {
        if (gfxTracingDetailsBuilder_ == null) {
          gfxTracingDetails_ = builderForValue.build();
          onChanged();
        } else {
          gfxTracingDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x80000000;
        return this;
      }
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      public Builder mergeGfxTracingDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails value) {
        if (gfxTracingDetailsBuilder_ == null) {
          if (((bitField0_ & 0x80000000) == 0x80000000) &&
              gfxTracingDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.getDefaultInstance()) {
            gfxTracingDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.newBuilder(gfxTracingDetails_).mergeFrom(value).buildPartial();
          } else {
            gfxTracingDetails_ = value;
          }
          onChanged();
        } else {
          gfxTracingDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x80000000;
        return this;
      }
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      public Builder clearGfxTracingDetails() {
        if (gfxTracingDetailsBuilder_ == null) {
          gfxTracingDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.getDefaultInstance();
          onChanged();
        } else {
          gfxTracingDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x80000000);
        return this;
      }
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.Builder getGfxTracingDetailsBuilder() {
        bitField0_ |= 0x80000000;
        onChanged();
        return getGfxTracingDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetailsOrBuilder getGfxTracingDetailsOrBuilder() {
        if (gfxTracingDetailsBuilder_ != null) {
          return gfxTracingDetailsBuilder_.getMessageOrBuilder();
        } else {
          return gfxTracingDetails_;
        }
      }
      /**
       * <code>optional .android_studio.GfxTracingDetails gfx_tracing_details = 32;</code>
       *
       * <pre>
       * set when kind = GFX_TRACE_*
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetailsOrBuilder> 
          getGfxTracingDetailsFieldBuilder() {
        if (gfxTracingDetailsBuilder_ == null) {
          gfxTracingDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetailsOrBuilder>(
                  gfxTracingDetails_,
                  getParentForChildren(),
                  isClean());
          gfxTracingDetails_ = null;
        }
        return gfxTracingDetailsBuilder_;
      }

      // optional .android_studio.TestRecorderDetails test_recorder_details = 33;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails testRecorderDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetailsOrBuilder> testRecorderDetailsBuilder_;
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      public boolean hasTestRecorderDetails() {
        return ((bitField1_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails getTestRecorderDetails() {
        if (testRecorderDetailsBuilder_ == null) {
          return testRecorderDetails_;
        } else {
          return testRecorderDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      public Builder setTestRecorderDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails value) {
        if (testRecorderDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          testRecorderDetails_ = value;
          onChanged();
        } else {
          testRecorderDetailsBuilder_.setMessage(value);
        }
        bitField1_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      public Builder setTestRecorderDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.Builder builderForValue) {
        if (testRecorderDetailsBuilder_ == null) {
          testRecorderDetails_ = builderForValue.build();
          onChanged();
        } else {
          testRecorderDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField1_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      public Builder mergeTestRecorderDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails value) {
        if (testRecorderDetailsBuilder_ == null) {
          if (((bitField1_ & 0x00000001) == 0x00000001) &&
              testRecorderDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.getDefaultInstance()) {
            testRecorderDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.newBuilder(testRecorderDetails_).mergeFrom(value).buildPartial();
          } else {
            testRecorderDetails_ = value;
          }
          onChanged();
        } else {
          testRecorderDetailsBuilder_.mergeFrom(value);
        }
        bitField1_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      public Builder clearTestRecorderDetails() {
        if (testRecorderDetailsBuilder_ == null) {
          testRecorderDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.getDefaultInstance();
          onChanged();
        } else {
          testRecorderDetailsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.Builder getTestRecorderDetailsBuilder() {
        bitField1_ |= 0x00000001;
        onChanged();
        return getTestRecorderDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetailsOrBuilder getTestRecorderDetailsOrBuilder() {
        if (testRecorderDetailsBuilder_ != null) {
          return testRecorderDetailsBuilder_.getMessageOrBuilder();
        } else {
          return testRecorderDetails_;
        }
      }
      /**
       * <code>optional .android_studio.TestRecorderDetails test_recorder_details = 33;</code>
       *
       * <pre>
       * set when kind = TEST_RECORDER_GENERATE_TEST_CLASS
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetailsOrBuilder> 
          getTestRecorderDetailsFieldBuilder() {
        if (testRecorderDetailsBuilder_ == null) {
          testRecorderDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetailsOrBuilder>(
                  testRecorderDetails_,
                  getParentForChildren(),
                  isClean());
          testRecorderDetails_ = null;
        }
        return testRecorderDetailsBuilder_;
      }

      // optional .android_studio.UIActionStats ui_action_stats = 34;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats uiActionStats_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStatsOrBuilder> uiActionStatsBuilder_;
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      public boolean hasUiActionStats() {
        return ((bitField1_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats getUiActionStats() {
        if (uiActionStatsBuilder_ == null) {
          return uiActionStats_;
        } else {
          return uiActionStatsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      public Builder setUiActionStats(com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats value) {
        if (uiActionStatsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          uiActionStats_ = value;
          onChanged();
        } else {
          uiActionStatsBuilder_.setMessage(value);
        }
        bitField1_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      public Builder setUiActionStats(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.Builder builderForValue) {
        if (uiActionStatsBuilder_ == null) {
          uiActionStats_ = builderForValue.build();
          onChanged();
        } else {
          uiActionStatsBuilder_.setMessage(builderForValue.build());
        }
        bitField1_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      public Builder mergeUiActionStats(com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats value) {
        if (uiActionStatsBuilder_ == null) {
          if (((bitField1_ & 0x00000002) == 0x00000002) &&
              uiActionStats_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.getDefaultInstance()) {
            uiActionStats_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.newBuilder(uiActionStats_).mergeFrom(value).buildPartial();
          } else {
            uiActionStats_ = value;
          }
          onChanged();
        } else {
          uiActionStatsBuilder_.mergeFrom(value);
        }
        bitField1_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      public Builder clearUiActionStats() {
        if (uiActionStatsBuilder_ == null) {
          uiActionStats_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.getDefaultInstance();
          onChanged();
        } else {
          uiActionStatsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.Builder getUiActionStatsBuilder() {
        bitField1_ |= 0x00000002;
        onChanged();
        return getUiActionStatsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStatsOrBuilder getUiActionStatsOrBuilder() {
        if (uiActionStatsBuilder_ != null) {
          return uiActionStatsBuilder_.getMessageOrBuilder();
        } else {
          return uiActionStats_;
        }
      }
      /**
       * <code>optional .android_studio.UIActionStats ui_action_stats = 34;</code>
       *
       * <pre>
       * set when kind = STUDIO_UI_ACTION_STATS
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStatsOrBuilder> 
          getUiActionStatsFieldBuilder() {
        if (uiActionStatsBuilder_ == null) {
          uiActionStatsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStatsOrBuilder>(
                  uiActionStats_,
                  getParentForChildren(),
                  isClean());
          uiActionStats_ = null;
        }
        return uiActionStatsBuilder_;
      }

      // optional .android_studio.MachineDetails machine_details = 35;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails machineDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetailsOrBuilder> machineDetailsBuilder_;
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public boolean hasMachineDetails() {
        return ((bitField1_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails getMachineDetails() {
        if (machineDetailsBuilder_ == null) {
          return machineDetails_;
        } else {
          return machineDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public Builder setMachineDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails value) {
        if (machineDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          machineDetails_ = value;
          onChanged();
        } else {
          machineDetailsBuilder_.setMessage(value);
        }
        bitField1_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public Builder setMachineDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.Builder builderForValue) {
        if (machineDetailsBuilder_ == null) {
          machineDetails_ = builderForValue.build();
          onChanged();
        } else {
          machineDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField1_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public Builder mergeMachineDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails value) {
        if (machineDetailsBuilder_ == null) {
          if (((bitField1_ & 0x00000004) == 0x00000004) &&
              machineDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.getDefaultInstance()) {
            machineDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.newBuilder(machineDetails_).mergeFrom(value).buildPartial();
          } else {
            machineDetails_ = value;
          }
          onChanged();
        } else {
          machineDetailsBuilder_.mergeFrom(value);
        }
        bitField1_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public Builder clearMachineDetails() {
        if (machineDetailsBuilder_ == null) {
          machineDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.getDefaultInstance();
          onChanged();
        } else {
          machineDetailsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.Builder getMachineDetailsBuilder() {
        bitField1_ |= 0x00000004;
        onChanged();
        return getMachineDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetailsOrBuilder getMachineDetailsOrBuilder() {
        if (machineDetailsBuilder_ != null) {
          return machineDetailsBuilder_.getMessageOrBuilder();
        } else {
          return machineDetails_;
        }
      }
      /**
       * <code>optional .android_studio.MachineDetails machine_details = 35;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetailsOrBuilder> 
          getMachineDetailsFieldBuilder() {
        if (machineDetailsBuilder_ == null) {
          machineDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetailsOrBuilder>(
                  machineDetails_,
                  getParentForChildren(),
                  isClean());
          machineDetails_ = null;
        }
        return machineDetailsBuilder_;
      }

      // optional .android_studio.JvmDetails jvm_details = 36;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails jvmDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetailsOrBuilder> jvmDetailsBuilder_;
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public boolean hasJvmDetails() {
        return ((bitField1_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails getJvmDetails() {
        if (jvmDetailsBuilder_ == null) {
          return jvmDetails_;
        } else {
          return jvmDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public Builder setJvmDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails value) {
        if (jvmDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          jvmDetails_ = value;
          onChanged();
        } else {
          jvmDetailsBuilder_.setMessage(value);
        }
        bitField1_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public Builder setJvmDetails(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.Builder builderForValue) {
        if (jvmDetailsBuilder_ == null) {
          jvmDetails_ = builderForValue.build();
          onChanged();
        } else {
          jvmDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField1_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public Builder mergeJvmDetails(com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails value) {
        if (jvmDetailsBuilder_ == null) {
          if (((bitField1_ & 0x00000008) == 0x00000008) &&
              jvmDetails_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.getDefaultInstance()) {
            jvmDetails_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.newBuilder(jvmDetails_).mergeFrom(value).buildPartial();
          } else {
            jvmDetails_ = value;
          }
          onChanged();
        } else {
          jvmDetailsBuilder_.mergeFrom(value);
        }
        bitField1_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public Builder clearJvmDetails() {
        if (jvmDetailsBuilder_ == null) {
          jvmDetails_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.getDefaultInstance();
          onChanged();
        } else {
          jvmDetailsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.Builder getJvmDetailsBuilder() {
        bitField1_ |= 0x00000008;
        onChanged();
        return getJvmDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetailsOrBuilder getJvmDetailsOrBuilder() {
        if (jvmDetailsBuilder_ != null) {
          return jvmDetailsBuilder_.getMessageOrBuilder();
        } else {
          return jvmDetails_;
        }
      }
      /**
       * <code>optional .android_studio.JvmDetails jvm_details = 36;</code>
       *
       * <pre>
       * set when kind = STUDIO_PING
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetailsOrBuilder> 
          getJvmDetailsFieldBuilder() {
        if (jvmDetailsBuilder_ == null) {
          jvmDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetailsOrBuilder>(
                  jvmDetails_,
                  getParentForChildren(),
                  isClean());
          jvmDetails_ = null;
        }
        return jvmDetailsBuilder_;
      }

      // optional .android_studio.JavaProcessStats java_process_stats = 37;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats javaProcessStats_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStatsOrBuilder> javaProcessStatsBuilder_;
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      public boolean hasJavaProcessStats() {
        return ((bitField1_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats getJavaProcessStats() {
        if (javaProcessStatsBuilder_ == null) {
          return javaProcessStats_;
        } else {
          return javaProcessStatsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      public Builder setJavaProcessStats(com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats value) {
        if (javaProcessStatsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          javaProcessStats_ = value;
          onChanged();
        } else {
          javaProcessStatsBuilder_.setMessage(value);
        }
        bitField1_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      public Builder setJavaProcessStats(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.Builder builderForValue) {
        if (javaProcessStatsBuilder_ == null) {
          javaProcessStats_ = builderForValue.build();
          onChanged();
        } else {
          javaProcessStatsBuilder_.setMessage(builderForValue.build());
        }
        bitField1_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      public Builder mergeJavaProcessStats(com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats value) {
        if (javaProcessStatsBuilder_ == null) {
          if (((bitField1_ & 0x00000010) == 0x00000010) &&
              javaProcessStats_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.getDefaultInstance()) {
            javaProcessStats_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.newBuilder(javaProcessStats_).mergeFrom(value).buildPartial();
          } else {
            javaProcessStats_ = value;
          }
          onChanged();
        } else {
          javaProcessStatsBuilder_.mergeFrom(value);
        }
        bitField1_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      public Builder clearJavaProcessStats() {
        if (javaProcessStatsBuilder_ == null) {
          javaProcessStats_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.getDefaultInstance();
          onChanged();
        } else {
          javaProcessStatsBuilder_.clear();
        }
        bitField1_ = (bitField1_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.Builder getJavaProcessStatsBuilder() {
        bitField1_ |= 0x00000010;
        onChanged();
        return getJavaProcessStatsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStatsOrBuilder getJavaProcessStatsOrBuilder() {
        if (javaProcessStatsBuilder_ != null) {
          return javaProcessStatsBuilder_.getMessageOrBuilder();
        } else {
          return javaProcessStats_;
        }
      }
      /**
       * <code>optional .android_studio.JavaProcessStats java_process_stats = 37;</code>
       *
       * <pre>
       * set when kind = STUDIO_PROCESS_STATS
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStatsOrBuilder> 
          getJavaProcessStatsFieldBuilder() {
        if (javaProcessStatsBuilder_ == null) {
          javaProcessStatsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStatsOrBuilder>(
                  javaProcessStats_,
                  getParentForChildren(),
                  isClean());
          javaProcessStats_ = null;
        }
        return javaProcessStatsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.AndroidStudioEvent)
    }

    static {
      defaultInstance = new AndroidStudioEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.AndroidStudioEvent)
  }

  public interface ProductDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.ProductDetails.ProductKind product = 1;
    /**
     * <code>optional .android_studio.ProductDetails.ProductKind product = 1;</code>
     *
     * <pre>
     * The product this event relates to.
     * </pre>
     */
    boolean hasProduct();
    /**
     * <code>optional .android_studio.ProductDetails.ProductKind product = 1;</code>
     *
     * <pre>
     * The product this event relates to.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind getProduct();

    // optional string build = 2;
    /**
     * <code>optional string build = 2;</code>
     *
     * <pre>
     * The build ID of Android Studio.
     * </pre>
     */
    boolean hasBuild();
    /**
     * <code>optional string build = 2;</code>
     *
     * <pre>
     * The build ID of Android Studio.
     * </pre>
     */
    java.lang.String getBuild();
    /**
     * <code>optional string build = 2;</code>
     *
     * <pre>
     * The build ID of Android Studio.
     * </pre>
     */
    com.google.protobuf.ByteString
        getBuildBytes();

    // optional string version = 3;
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * e.g. AI-141.2178183
     * The version of the product.
     * </pre>
     */
    boolean hasVersion();
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * e.g. AI-141.2178183
     * The version of the product.
     * </pre>
     */
    java.lang.String getVersion();
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * e.g. AI-141.2178183
     * The version of the product.
     * </pre>
     */
    com.google.protobuf.ByteString
        getVersionBytes();

    // optional bool preview = 4;
    /**
     * <code>optional bool preview = 4;</code>
     *
     * <pre>
     * e.g. 2.0.0.11
     * Historical: never used as it was not providing enough info. Use channel
     *  instead as it distinguishes between different kinds of preview releases.
     * </pre>
     */
    boolean hasPreview();
    /**
     * <code>optional bool preview = 4;</code>
     *
     * <pre>
     * e.g. 2.0.0.11
     * Historical: never used as it was not providing enough info. Use channel
     *  instead as it distinguishes between different kinds of preview releases.
     * </pre>
     */
    boolean getPreview();

    // optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;
    /**
     * <code>optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;</code>
     *
     * <pre>
     * The CPU archtecture the product is running on.
     * </pre>
     */
    boolean hasOsArchitecture();
    /**
     * <code>optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;</code>
     *
     * <pre>
     * The CPU archtecture the product is running on.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture getOsArchitecture();

    // optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;
    /**
     * <code>optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;</code>
     *
     * <pre>
     * The state in the software lifecycle of this product.
     * </pre>
     */
    boolean hasChannel();
    /**
     * <code>optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;</code>
     *
     * <pre>
     * The state in the software lifecycle of this product.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel getChannel();
  }
  /**
   * Protobuf type {@code android_studio.ProductDetails}
   *
   * <pre>
   * Describes a product, e.g. Android Studio or Emulator.
   * </pre>
   */
  public static final class ProductDetails extends
      com.google.protobuf.GeneratedMessage
      implements ProductDetailsOrBuilder {
    // Use ProductDetails.newBuilder() to construct.
    private ProductDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ProductDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ProductDetails defaultInstance;
    public static ProductDetails getDefaultInstance() {
      return defaultInstance;
    }

    public ProductDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ProductDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind value = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                product_ = value;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              build_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              version_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              preview_ = input.readBool();
              break;
            }
            case 40: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture value = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(5, rawValue);
              } else {
                bitField0_ |= 0x00000010;
                osArchitecture_ = value;
              }
              break;
            }
            case 48: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel value = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(6, rawValue);
              } else {
                bitField0_ |= 0x00000020;
                channel_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_ProductDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_ProductDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<ProductDetails> PARSER =
        new com.google.protobuf.AbstractParser<ProductDetails>() {
      public ProductDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ProductDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ProductDetails> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.ProductDetails.SoftwareLifeCycleChannel}
     *
     * <pre>
     * Various states in the software life cycle this software could be in.
     * </pre>
     */
    public enum SoftwareLifeCycleChannel
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_LIFE_CYCLE_CHANNEL = 0;</code>
       */
      UNKNOWN_LIFE_CYCLE_CHANNEL(0, 0),
      /**
       * <code>CANARY = 1;</code>
       */
      CANARY(1, 1),
      /**
       * <code>DEV = 2;</code>
       */
      DEV(2, 2),
      /**
       * <code>BETA = 3;</code>
       */
      BETA(3, 3),
      /**
       * <code>STABLE = 4;</code>
       */
      STABLE(4, 4),
      ;

      /**
       * <code>UNKNOWN_LIFE_CYCLE_CHANNEL = 0;</code>
       */
      public static final int UNKNOWN_LIFE_CYCLE_CHANNEL_VALUE = 0;
      /**
       * <code>CANARY = 1;</code>
       */
      public static final int CANARY_VALUE = 1;
      /**
       * <code>DEV = 2;</code>
       */
      public static final int DEV_VALUE = 2;
      /**
       * <code>BETA = 3;</code>
       */
      public static final int BETA_VALUE = 3;
      /**
       * <code>STABLE = 4;</code>
       */
      public static final int STABLE_VALUE = 4;


      public final int getNumber() { return value; }

      public static SoftwareLifeCycleChannel valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_LIFE_CYCLE_CHANNEL;
          case 1: return CANARY;
          case 2: return DEV;
          case 3: return BETA;
          case 4: return STABLE;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<SoftwareLifeCycleChannel>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<SoftwareLifeCycleChannel>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<SoftwareLifeCycleChannel>() {
              public SoftwareLifeCycleChannel findValueByNumber(int number) {
                return SoftwareLifeCycleChannel.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDescriptor().getEnumTypes().get(0);
      }

      private static final SoftwareLifeCycleChannel[] VALUES = values();

      public static SoftwareLifeCycleChannel valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private SoftwareLifeCycleChannel(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.ProductDetails.SoftwareLifeCycleChannel)
    }

    /**
     * Protobuf enum {@code android_studio.ProductDetails.ProductKind}
     *
     * <pre>
     * Describes the various Products related to Android Studio.
     * </pre>
     */
    public enum ProductKind
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_PRODUCT = 0;</code>
       */
      UNKNOWN_PRODUCT(0, 0),
      /**
       * <code>STUDIO = 1;</code>
       */
      STUDIO(1, 1),
      /**
       * <code>EMULATOR = 2;</code>
       */
      EMULATOR(2, 2),
      /**
       * <code>GRADLE = 3;</code>
       */
      GRADLE(3, 3),
      /**
       * <code>DDMS = 4;</code>
       */
      DDMS(4, 4),
      ;

      /**
       * <code>UNKNOWN_PRODUCT = 0;</code>
       */
      public static final int UNKNOWN_PRODUCT_VALUE = 0;
      /**
       * <code>STUDIO = 1;</code>
       */
      public static final int STUDIO_VALUE = 1;
      /**
       * <code>EMULATOR = 2;</code>
       */
      public static final int EMULATOR_VALUE = 2;
      /**
       * <code>GRADLE = 3;</code>
       */
      public static final int GRADLE_VALUE = 3;
      /**
       * <code>DDMS = 4;</code>
       */
      public static final int DDMS_VALUE = 4;


      public final int getNumber() { return value; }

      public static ProductKind valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_PRODUCT;
          case 1: return STUDIO;
          case 2: return EMULATOR;
          case 3: return GRADLE;
          case 4: return DDMS;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<ProductKind>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<ProductKind>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<ProductKind>() {
              public ProductKind findValueByNumber(int number) {
                return ProductKind.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDescriptor().getEnumTypes().get(1);
      }

      private static final ProductKind[] VALUES = values();

      public static ProductKind valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private ProductKind(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.ProductDetails.ProductKind)
    }

    /**
     * Protobuf enum {@code android_studio.ProductDetails.OSKind}
     *
     * <pre>
     * Describes the various OS platforms our products run on.
     * </pre>
     */
    public enum OSKind
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_OS_KIND = 0;</code>
       */
      UNKNOWN_OS_KIND(0, 0),
      /**
       * <code>OTHER_OS = 1;</code>
       */
      OTHER_OS(1, 1),
      /**
       * <code>WINDOWS = 2;</code>
       *
       * <pre>
       * Known but not in our list.
       * </pre>
       */
      WINDOWS(2, 2),
      /**
       * <code>MAC_OSX = 3;</code>
       */
      MAC_OSX(3, 3),
      /**
       * <code>LINUX = 4;</code>
       */
      LINUX(4, 4),
      /**
       * <code>FREE_BSD = 5;</code>
       */
      FREE_BSD(5, 5),
      ;

      /**
       * <code>UNKNOWN_OS_KIND = 0;</code>
       */
      public static final int UNKNOWN_OS_KIND_VALUE = 0;
      /**
       * <code>OTHER_OS = 1;</code>
       */
      public static final int OTHER_OS_VALUE = 1;
      /**
       * <code>WINDOWS = 2;</code>
       *
       * <pre>
       * Known but not in our list.
       * </pre>
       */
      public static final int WINDOWS_VALUE = 2;
      /**
       * <code>MAC_OSX = 3;</code>
       */
      public static final int MAC_OSX_VALUE = 3;
      /**
       * <code>LINUX = 4;</code>
       */
      public static final int LINUX_VALUE = 4;
      /**
       * <code>FREE_BSD = 5;</code>
       */
      public static final int FREE_BSD_VALUE = 5;


      public final int getNumber() { return value; }

      public static OSKind valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_OS_KIND;
          case 1: return OTHER_OS;
          case 2: return WINDOWS;
          case 3: return MAC_OSX;
          case 4: return LINUX;
          case 5: return FREE_BSD;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<OSKind>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<OSKind>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<OSKind>() {
              public OSKind findValueByNumber(int number) {
                return OSKind.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDescriptor().getEnumTypes().get(2);
      }

      private static final OSKind[] VALUES = values();

      public static OSKind valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private OSKind(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.ProductDetails.OSKind)
    }

    /**
     * Protobuf enum {@code android_studio.ProductDetails.CpuArchitecture}
     *
     * <pre>
     * Chip the software is running on.
     * </pre>
     */
    public enum CpuArchitecture
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_CPU_ARCHITECTURE = 0;</code>
       */
      UNKNOWN_CPU_ARCHITECTURE(0, 0),
      /**
       * <code>X86 = 1;</code>
       */
      X86(1, 1),
      /**
       * <code>X86_64 = 2;</code>
       */
      X86_64(2, 2),
      ;

      /**
       * <code>UNKNOWN_CPU_ARCHITECTURE = 0;</code>
       */
      public static final int UNKNOWN_CPU_ARCHITECTURE_VALUE = 0;
      /**
       * <code>X86 = 1;</code>
       */
      public static final int X86_VALUE = 1;
      /**
       * <code>X86_64 = 2;</code>
       */
      public static final int X86_64_VALUE = 2;


      public final int getNumber() { return value; }

      public static CpuArchitecture valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_CPU_ARCHITECTURE;
          case 1: return X86;
          case 2: return X86_64;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<CpuArchitecture>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<CpuArchitecture>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<CpuArchitecture>() {
              public CpuArchitecture findValueByNumber(int number) {
                return CpuArchitecture.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDescriptor().getEnumTypes().get(3);
      }

      private static final CpuArchitecture[] VALUES = values();

      public static CpuArchitecture valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private CpuArchitecture(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.ProductDetails.CpuArchitecture)
    }

    private int bitField0_;
    // optional .android_studio.ProductDetails.ProductKind product = 1;
    public static final int PRODUCT_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind product_;
    /**
     * <code>optional .android_studio.ProductDetails.ProductKind product = 1;</code>
     *
     * <pre>
     * The product this event relates to.
     * </pre>
     */
    public boolean hasProduct() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.ProductDetails.ProductKind product = 1;</code>
     *
     * <pre>
     * The product this event relates to.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind getProduct() {
      return product_;
    }

    // optional string build = 2;
    public static final int BUILD_FIELD_NUMBER = 2;
    private java.lang.Object build_;
    /**
     * <code>optional string build = 2;</code>
     *
     * <pre>
     * The build ID of Android Studio.
     * </pre>
     */
    public boolean hasBuild() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string build = 2;</code>
     *
     * <pre>
     * The build ID of Android Studio.
     * </pre>
     */
    public java.lang.String getBuild() {
      java.lang.Object ref = build_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          build_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string build = 2;</code>
     *
     * <pre>
     * The build ID of Android Studio.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getBuildBytes() {
      java.lang.Object ref = build_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        build_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string version = 3;
    public static final int VERSION_FIELD_NUMBER = 3;
    private java.lang.Object version_;
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * e.g. AI-141.2178183
     * The version of the product.
     * </pre>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * e.g. AI-141.2178183
     * The version of the product.
     * </pre>
     */
    public java.lang.String getVersion() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * e.g. AI-141.2178183
     * The version of the product.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool preview = 4;
    public static final int PREVIEW_FIELD_NUMBER = 4;
    private boolean preview_;
    /**
     * <code>optional bool preview = 4;</code>
     *
     * <pre>
     * e.g. 2.0.0.11
     * Historical: never used as it was not providing enough info. Use channel
     *  instead as it distinguishes between different kinds of preview releases.
     * </pre>
     */
    public boolean hasPreview() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool preview = 4;</code>
     *
     * <pre>
     * e.g. 2.0.0.11
     * Historical: never used as it was not providing enough info. Use channel
     *  instead as it distinguishes between different kinds of preview releases.
     * </pre>
     */
    public boolean getPreview() {
      return preview_;
    }

    // optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;
    public static final int OS_ARCHITECTURE_FIELD_NUMBER = 5;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture osArchitecture_;
    /**
     * <code>optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;</code>
     *
     * <pre>
     * The CPU archtecture the product is running on.
     * </pre>
     */
    public boolean hasOsArchitecture() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;</code>
     *
     * <pre>
     * The CPU archtecture the product is running on.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture getOsArchitecture() {
      return osArchitecture_;
    }

    // optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;
    public static final int CHANNEL_FIELD_NUMBER = 6;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel channel_;
    /**
     * <code>optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;</code>
     *
     * <pre>
     * The state in the software lifecycle of this product.
     * </pre>
     */
    public boolean hasChannel() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;</code>
     *
     * <pre>
     * The state in the software lifecycle of this product.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel getChannel() {
      return channel_;
    }

    private void initFields() {
      product_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind.UNKNOWN_PRODUCT;
      build_ = "";
      version_ = "";
      preview_ = false;
      osArchitecture_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture.UNKNOWN_CPU_ARCHITECTURE;
      channel_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel.UNKNOWN_LIFE_CYCLE_CHANNEL;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, product_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getBuildBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getVersionBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, preview_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeEnum(5, osArchitecture_.getNumber());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeEnum(6, channel_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, product_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getBuildBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getVersionBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, preview_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, osArchitecture_.getNumber());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(6, channel_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.ProductDetails}
     *
     * <pre>
     * Describes a product, e.g. Android Studio or Emulator.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_ProductDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_ProductDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        product_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind.UNKNOWN_PRODUCT;
        bitField0_ = (bitField0_ & ~0x00000001);
        build_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        version_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        preview_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        osArchitecture_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture.UNKNOWN_CPU_ARCHITECTURE;
        bitField0_ = (bitField0_ & ~0x00000010);
        channel_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel.UNKNOWN_LIFE_CYCLE_CHANNEL;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_ProductDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.product_ = product_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.build_ = build_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.preview_ = preview_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.osArchitecture_ = osArchitecture_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.channel_ = channel_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.getDefaultInstance()) return this;
        if (other.hasProduct()) {
          setProduct(other.getProduct());
        }
        if (other.hasBuild()) {
          bitField0_ |= 0x00000002;
          build_ = other.build_;
          onChanged();
        }
        if (other.hasVersion()) {
          bitField0_ |= 0x00000004;
          version_ = other.version_;
          onChanged();
        }
        if (other.hasPreview()) {
          setPreview(other.getPreview());
        }
        if (other.hasOsArchitecture()) {
          setOsArchitecture(other.getOsArchitecture());
        }
        if (other.hasChannel()) {
          setChannel(other.getChannel());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.ProductDetails.ProductKind product = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind product_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind.UNKNOWN_PRODUCT;
      /**
       * <code>optional .android_studio.ProductDetails.ProductKind product = 1;</code>
       *
       * <pre>
       * The product this event relates to.
       * </pre>
       */
      public boolean hasProduct() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.ProductDetails.ProductKind product = 1;</code>
       *
       * <pre>
       * The product this event relates to.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind getProduct() {
        return product_;
      }
      /**
       * <code>optional .android_studio.ProductDetails.ProductKind product = 1;</code>
       *
       * <pre>
       * The product this event relates to.
       * </pre>
       */
      public Builder setProduct(com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        product_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.ProductDetails.ProductKind product = 1;</code>
       *
       * <pre>
       * The product this event relates to.
       * </pre>
       */
      public Builder clearProduct() {
        bitField0_ = (bitField0_ & ~0x00000001);
        product_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.ProductKind.UNKNOWN_PRODUCT;
        onChanged();
        return this;
      }

      // optional string build = 2;
      private java.lang.Object build_ = "";
      /**
       * <code>optional string build = 2;</code>
       *
       * <pre>
       * The build ID of Android Studio.
       * </pre>
       */
      public boolean hasBuild() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string build = 2;</code>
       *
       * <pre>
       * The build ID of Android Studio.
       * </pre>
       */
      public java.lang.String getBuild() {
        java.lang.Object ref = build_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          build_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string build = 2;</code>
       *
       * <pre>
       * The build ID of Android Studio.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getBuildBytes() {
        java.lang.Object ref = build_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          build_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string build = 2;</code>
       *
       * <pre>
       * The build ID of Android Studio.
       * </pre>
       */
      public Builder setBuild(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        build_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string build = 2;</code>
       *
       * <pre>
       * The build ID of Android Studio.
       * </pre>
       */
      public Builder clearBuild() {
        bitField0_ = (bitField0_ & ~0x00000002);
        build_ = getDefaultInstance().getBuild();
        onChanged();
        return this;
      }
      /**
       * <code>optional string build = 2;</code>
       *
       * <pre>
       * The build ID of Android Studio.
       * </pre>
       */
      public Builder setBuildBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        build_ = value;
        onChanged();
        return this;
      }

      // optional string version = 3;
      private java.lang.Object version_ = "";
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * e.g. AI-141.2178183
       * The version of the product.
       * </pre>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * e.g. AI-141.2178183
       * The version of the product.
       * </pre>
       */
      public java.lang.String getVersion() {
        java.lang.Object ref = version_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          version_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * e.g. AI-141.2178183
       * The version of the product.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        java.lang.Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * e.g. AI-141.2178183
       * The version of the product.
       * </pre>
       */
      public Builder setVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * e.g. AI-141.2178183
       * The version of the product.
       * </pre>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000004);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * e.g. AI-141.2178183
       * The version of the product.
       * </pre>
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        version_ = value;
        onChanged();
        return this;
      }

      // optional bool preview = 4;
      private boolean preview_ ;
      /**
       * <code>optional bool preview = 4;</code>
       *
       * <pre>
       * e.g. 2.0.0.11
       * Historical: never used as it was not providing enough info. Use channel
       *  instead as it distinguishes between different kinds of preview releases.
       * </pre>
       */
      public boolean hasPreview() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool preview = 4;</code>
       *
       * <pre>
       * e.g. 2.0.0.11
       * Historical: never used as it was not providing enough info. Use channel
       *  instead as it distinguishes between different kinds of preview releases.
       * </pre>
       */
      public boolean getPreview() {
        return preview_;
      }
      /**
       * <code>optional bool preview = 4;</code>
       *
       * <pre>
       * e.g. 2.0.0.11
       * Historical: never used as it was not providing enough info. Use channel
       *  instead as it distinguishes between different kinds of preview releases.
       * </pre>
       */
      public Builder setPreview(boolean value) {
        bitField0_ |= 0x00000008;
        preview_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool preview = 4;</code>
       *
       * <pre>
       * e.g. 2.0.0.11
       * Historical: never used as it was not providing enough info. Use channel
       *  instead as it distinguishes between different kinds of preview releases.
       * </pre>
       */
      public Builder clearPreview() {
        bitField0_ = (bitField0_ & ~0x00000008);
        preview_ = false;
        onChanged();
        return this;
      }

      // optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture osArchitecture_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture.UNKNOWN_CPU_ARCHITECTURE;
      /**
       * <code>optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;</code>
       *
       * <pre>
       * The CPU archtecture the product is running on.
       * </pre>
       */
      public boolean hasOsArchitecture() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;</code>
       *
       * <pre>
       * The CPU archtecture the product is running on.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture getOsArchitecture() {
        return osArchitecture_;
      }
      /**
       * <code>optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;</code>
       *
       * <pre>
       * The CPU archtecture the product is running on.
       * </pre>
       */
      public Builder setOsArchitecture(com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000010;
        osArchitecture_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.ProductDetails.CpuArchitecture os_architecture = 5;</code>
       *
       * <pre>
       * The CPU archtecture the product is running on.
       * </pre>
       */
      public Builder clearOsArchitecture() {
        bitField0_ = (bitField0_ & ~0x00000010);
        osArchitecture_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.CpuArchitecture.UNKNOWN_CPU_ARCHITECTURE;
        onChanged();
        return this;
      }

      // optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel channel_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel.UNKNOWN_LIFE_CYCLE_CHANNEL;
      /**
       * <code>optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;</code>
       *
       * <pre>
       * The state in the software lifecycle of this product.
       * </pre>
       */
      public boolean hasChannel() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;</code>
       *
       * <pre>
       * The state in the software lifecycle of this product.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel getChannel() {
        return channel_;
      }
      /**
       * <code>optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;</code>
       *
       * <pre>
       * The state in the software lifecycle of this product.
       * </pre>
       */
      public Builder setChannel(com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000020;
        channel_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.ProductDetails.SoftwareLifeCycleChannel channel = 6;</code>
       *
       * <pre>
       * The state in the software lifecycle of this product.
       * </pre>
       */
      public Builder clearChannel() {
        bitField0_ = (bitField0_ & ~0x00000020);
        channel_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.ProductDetails.SoftwareLifeCycleChannel.UNKNOWN_LIFE_CYCLE_CHANNEL;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.ProductDetails)
    }

    static {
      defaultInstance = new ProductDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.ProductDetails)
  }

  public interface DeviceInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string anonymized_serial_number = 1;
    /**
     * <code>optional string anonymized_serial_number = 1;</code>
     *
     * <pre>
     * serial number of the device, salted &amp; sha256ed on the client.
     * </pre>
     */
    boolean hasAnonymizedSerialNumber();
    /**
     * <code>optional string anonymized_serial_number = 1;</code>
     *
     * <pre>
     * serial number of the device, salted &amp; sha256ed on the client.
     * </pre>
     */
    java.lang.String getAnonymizedSerialNumber();
    /**
     * <code>optional string anonymized_serial_number = 1;</code>
     *
     * <pre>
     * serial number of the device, salted &amp; sha256ed on the client.
     * </pre>
     */
    com.google.protobuf.ByteString
        getAnonymizedSerialNumberBytes();

    // optional string build_tags = 2;
    /**
     * <code>optional string build_tags = 2;</code>
     *
     * <pre>
     * Tags used to build the android version on this device.
     *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    boolean hasBuildTags();
    /**
     * <code>optional string build_tags = 2;</code>
     *
     * <pre>
     * Tags used to build the android version on this device.
     *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    java.lang.String getBuildTags();
    /**
     * <code>optional string build_tags = 2;</code>
     *
     * <pre>
     * Tags used to build the android version on this device.
     *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    com.google.protobuf.ByteString
        getBuildTagsBytes();

    // optional string build_type = 3;
    /**
     * <code>optional string build_type = 3;</code>
     *
     * <pre>
     * Type of build this device is running.
     *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    boolean hasBuildType();
    /**
     * <code>optional string build_type = 3;</code>
     *
     * <pre>
     * Type of build this device is running.
     *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    java.lang.String getBuildType();
    /**
     * <code>optional string build_type = 3;</code>
     *
     * <pre>
     * Type of build this device is running.
     *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    com.google.protobuf.ByteString
        getBuildTypeBytes();

    // optional string build_version_release = 4;
    /**
     * <code>optional string build_version_release = 4;</code>
     *
     * <pre>
     * Android version e.g. '5.1.1'
     * </pre>
     */
    boolean hasBuildVersionRelease();
    /**
     * <code>optional string build_version_release = 4;</code>
     *
     * <pre>
     * Android version e.g. '5.1.1'
     * </pre>
     */
    java.lang.String getBuildVersionRelease();
    /**
     * <code>optional string build_version_release = 4;</code>
     *
     * <pre>
     * Android version e.g. '5.1.1'
     * </pre>
     */
    com.google.protobuf.ByteString
        getBuildVersionReleaseBytes();

    // optional int32 build_api_level = 5;
    /**
     * <code>optional int32 build_api_level = 5;</code>
     *
     * <pre>
     * Historic: doesn't support api levels for code names such as 'N'.
     * </pre>
     */
    boolean hasBuildApiLevel();
    /**
     * <code>optional int32 build_api_level = 5;</code>
     *
     * <pre>
     * Historic: doesn't support api levels for code names such as 'N'.
     * </pre>
     */
    int getBuildApiLevel();

    // optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;
    /**
     * <code>optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;</code>
     *
     * <pre>
     * ABI of the device, e.g. 'armeabi-v7a' or 'x86'
     * </pre>
     */
    boolean hasCpuAbi();
    /**
     * <code>optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;</code>
     *
     * <pre>
     * ABI of the device, e.g. 'armeabi-v7a' or 'x86'
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface getCpuAbi();

    // optional string manufacturer = 7;
    /**
     * <code>optional string manufacturer = 7;</code>
     *
     * <pre>
     * Device manufacturer, e.g. 'Motorola' or 'Samsung'
     * </pre>
     */
    boolean hasManufacturer();
    /**
     * <code>optional string manufacturer = 7;</code>
     *
     * <pre>
     * Device manufacturer, e.g. 'Motorola' or 'Samsung'
     * </pre>
     */
    java.lang.String getManufacturer();
    /**
     * <code>optional string manufacturer = 7;</code>
     *
     * <pre>
     * Device manufacturer, e.g. 'Motorola' or 'Samsung'
     * </pre>
     */
    com.google.protobuf.ByteString
        getManufacturerBytes();

    // optional string model = 8;
    /**
     * <code>optional string model = 8;</code>
     *
     * <pre>
     * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
     * </pre>
     */
    boolean hasModel();
    /**
     * <code>optional string model = 8;</code>
     *
     * <pre>
     * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
     * </pre>
     */
    java.lang.String getModel();
    /**
     * <code>optional string model = 8;</code>
     *
     * <pre>
     * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
     * </pre>
     */
    com.google.protobuf.ByteString
        getModelBytes();

    // optional .android_studio.DeviceInfo.DeviceType device_type = 9;
    /**
     * <code>optional .android_studio.DeviceInfo.DeviceType device_type = 9;</code>
     *
     * <pre>
     * What kind of device is this? Physicial/Emulator/Cloud etc...
     * </pre>
     */
    boolean hasDeviceType();
    /**
     * <code>optional .android_studio.DeviceInfo.DeviceType device_type = 9;</code>
     *
     * <pre>
     * What kind of device is this? Physicial/Emulator/Cloud etc...
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType getDeviceType();

    // optional string build_api_level_full = 10;
    /**
     * <code>optional string build_api_level_full = 10;</code>
     *
     * <pre>
     * android api level  e.g. '23' or 'N'
     * </pre>
     */
    boolean hasBuildApiLevelFull();
    /**
     * <code>optional string build_api_level_full = 10;</code>
     *
     * <pre>
     * android api level  e.g. '23' or 'N'
     * </pre>
     */
    java.lang.String getBuildApiLevelFull();
    /**
     * <code>optional string build_api_level_full = 10;</code>
     *
     * <pre>
     * android api level  e.g. '23' or 'N'
     * </pre>
     */
    com.google.protobuf.ByteString
        getBuildApiLevelFullBytes();
  }
  /**
   * Protobuf type {@code android_studio.DeviceInfo}
   *
   * <pre>
   * Describes a emulator or physical Android Device.
   * </pre>
   */
  public static final class DeviceInfo extends
      com.google.protobuf.GeneratedMessage
      implements DeviceInfoOrBuilder {
    // Use DeviceInfo.newBuilder() to construct.
    private DeviceInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DeviceInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DeviceInfo defaultInstance;
    public static DeviceInfo getDefaultInstance() {
      return defaultInstance;
    }

    public DeviceInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              anonymizedSerialNumber_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              buildTags_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              buildType_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              buildVersionRelease_ = input.readBytes();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              buildApiLevel_ = input.readInt32();
              break;
            }
            case 48: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface value = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(6, rawValue);
              } else {
                bitField0_ |= 0x00000020;
                cpuAbi_ = value;
              }
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              manufacturer_ = input.readBytes();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000080;
              model_ = input.readBytes();
              break;
            }
            case 72: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(9, rawValue);
              } else {
                bitField0_ |= 0x00000100;
                deviceType_ = value;
              }
              break;
            }
            case 82: {
              bitField0_ |= 0x00000200;
              buildApiLevelFull_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DeviceInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DeviceInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<DeviceInfo> PARSER =
        new com.google.protobuf.AbstractParser<DeviceInfo>() {
      public DeviceInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DeviceInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DeviceInfo> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.DeviceInfo.ApplicationBinaryInterface}
     *
     * <pre>
     * Describes tthe ABI of the device/emulator.
     * </pre>
     */
    public enum ApplicationBinaryInterface
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_ABI = 0;</code>
       */
      UNKNOWN_ABI(0, 0),
      /**
       * <code>ARME_ABI_V7A = 1;</code>
       */
      ARME_ABI_V7A(1, 1),
      /**
       * <code>X86_ABI = 2;</code>
       */
      X86_ABI(2, 2),
      /**
       * <code>ARM64_V8A_ABI = 3;</code>
       */
      ARM64_V8A_ABI(3, 3),
      /**
       * <code>X86_64_ABI = 4;</code>
       */
      X86_64_ABI(4, 4),
      /**
       * <code>ARME_ABI = 5;</code>
       */
      ARME_ABI(5, 5),
      /**
       * <code>MIPS_ABI = 6;</code>
       */
      MIPS_ABI(6, 6),
      /**
       * <code>MIPS_R2_ABI = 7;</code>
       */
      MIPS_R2_ABI(7, 7),
      /**
       * <code>ARME_ABI_V6L = 8;</code>
       */
      ARME_ABI_V6L(8, 8),
      /**
       * <code>ARME_ABI_V6J = 9;</code>
       */
      ARME_ABI_V6J(9, 9),
      ;

      /**
       * <code>UNKNOWN_ABI = 0;</code>
       */
      public static final int UNKNOWN_ABI_VALUE = 0;
      /**
       * <code>ARME_ABI_V7A = 1;</code>
       */
      public static final int ARME_ABI_V7A_VALUE = 1;
      /**
       * <code>X86_ABI = 2;</code>
       */
      public static final int X86_ABI_VALUE = 2;
      /**
       * <code>ARM64_V8A_ABI = 3;</code>
       */
      public static final int ARM64_V8A_ABI_VALUE = 3;
      /**
       * <code>X86_64_ABI = 4;</code>
       */
      public static final int X86_64_ABI_VALUE = 4;
      /**
       * <code>ARME_ABI = 5;</code>
       */
      public static final int ARME_ABI_VALUE = 5;
      /**
       * <code>MIPS_ABI = 6;</code>
       */
      public static final int MIPS_ABI_VALUE = 6;
      /**
       * <code>MIPS_R2_ABI = 7;</code>
       */
      public static final int MIPS_R2_ABI_VALUE = 7;
      /**
       * <code>ARME_ABI_V6L = 8;</code>
       */
      public static final int ARME_ABI_V6L_VALUE = 8;
      /**
       * <code>ARME_ABI_V6J = 9;</code>
       */
      public static final int ARME_ABI_V6J_VALUE = 9;


      public final int getNumber() { return value; }

      public static ApplicationBinaryInterface valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_ABI;
          case 1: return ARME_ABI_V7A;
          case 2: return X86_ABI;
          case 3: return ARM64_V8A_ABI;
          case 4: return X86_64_ABI;
          case 5: return ARME_ABI;
          case 6: return MIPS_ABI;
          case 7: return MIPS_R2_ABI;
          case 8: return ARME_ABI_V6L;
          case 9: return ARME_ABI_V6J;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<ApplicationBinaryInterface>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<ApplicationBinaryInterface>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<ApplicationBinaryInterface>() {
              public ApplicationBinaryInterface findValueByNumber(int number) {
                return ApplicationBinaryInterface.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDescriptor().getEnumTypes().get(0);
      }

      private static final ApplicationBinaryInterface[] VALUES = values();

      public static ApplicationBinaryInterface valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private ApplicationBinaryInterface(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.DeviceInfo.ApplicationBinaryInterface)
    }

    /**
     * Protobuf enum {@code android_studio.DeviceInfo.DeviceType}
     *
     * <pre>
     * Describes the kind of device being deployed/tested on.
     * </pre>
     */
    public enum DeviceType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_DEVICE_TYPE = 0;</code>
       */
      UNKNOWN_DEVICE_TYPE(0, 0),
      /**
       * <code>LOCAL_PHYSICAL = 1;</code>
       */
      LOCAL_PHYSICAL(1, 1),
      /**
       * <code>LOCAL_EMULATOR = 2;</code>
       */
      LOCAL_EMULATOR(2, 2),
      /**
       * <code>CLOUD_EMULATOR = 3;</code>
       */
      CLOUD_EMULATOR(3, 3),
      /**
       * <code>CLOUD_PHYSICAL = 4;</code>
       */
      CLOUD_PHYSICAL(4, 4),
      ;

      /**
       * <code>UNKNOWN_DEVICE_TYPE = 0;</code>
       */
      public static final int UNKNOWN_DEVICE_TYPE_VALUE = 0;
      /**
       * <code>LOCAL_PHYSICAL = 1;</code>
       */
      public static final int LOCAL_PHYSICAL_VALUE = 1;
      /**
       * <code>LOCAL_EMULATOR = 2;</code>
       */
      public static final int LOCAL_EMULATOR_VALUE = 2;
      /**
       * <code>CLOUD_EMULATOR = 3;</code>
       */
      public static final int CLOUD_EMULATOR_VALUE = 3;
      /**
       * <code>CLOUD_PHYSICAL = 4;</code>
       */
      public static final int CLOUD_PHYSICAL_VALUE = 4;


      public final int getNumber() { return value; }

      public static DeviceType valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_DEVICE_TYPE;
          case 1: return LOCAL_PHYSICAL;
          case 2: return LOCAL_EMULATOR;
          case 3: return CLOUD_EMULATOR;
          case 4: return CLOUD_PHYSICAL;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<DeviceType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<DeviceType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<DeviceType>() {
              public DeviceType findValueByNumber(int number) {
                return DeviceType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDescriptor().getEnumTypes().get(1);
      }

      private static final DeviceType[] VALUES = values();

      public static DeviceType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private DeviceType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.DeviceInfo.DeviceType)
    }

    private int bitField0_;
    // optional string anonymized_serial_number = 1;
    public static final int ANONYMIZED_SERIAL_NUMBER_FIELD_NUMBER = 1;
    private java.lang.Object anonymizedSerialNumber_;
    /**
     * <code>optional string anonymized_serial_number = 1;</code>
     *
     * <pre>
     * serial number of the device, salted &amp; sha256ed on the client.
     * </pre>
     */
    public boolean hasAnonymizedSerialNumber() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string anonymized_serial_number = 1;</code>
     *
     * <pre>
     * serial number of the device, salted &amp; sha256ed on the client.
     * </pre>
     */
    public java.lang.String getAnonymizedSerialNumber() {
      java.lang.Object ref = anonymizedSerialNumber_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          anonymizedSerialNumber_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string anonymized_serial_number = 1;</code>
     *
     * <pre>
     * serial number of the device, salted &amp; sha256ed on the client.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getAnonymizedSerialNumberBytes() {
      java.lang.Object ref = anonymizedSerialNumber_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        anonymizedSerialNumber_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string build_tags = 2;
    public static final int BUILD_TAGS_FIELD_NUMBER = 2;
    private java.lang.Object buildTags_;
    /**
     * <code>optional string build_tags = 2;</code>
     *
     * <pre>
     * Tags used to build the android version on this device.
     *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    public boolean hasBuildTags() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string build_tags = 2;</code>
     *
     * <pre>
     * Tags used to build the android version on this device.
     *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    public java.lang.String getBuildTags() {
      java.lang.Object ref = buildTags_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          buildTags_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string build_tags = 2;</code>
     *
     * <pre>
     * Tags used to build the android version on this device.
     *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    public com.google.protobuf.ByteString
        getBuildTagsBytes() {
      java.lang.Object ref = buildTags_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        buildTags_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string build_type = 3;
    public static final int BUILD_TYPE_FIELD_NUMBER = 3;
    private java.lang.Object buildType_;
    /**
     * <code>optional string build_type = 3;</code>
     *
     * <pre>
     * Type of build this device is running.
     *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    public boolean hasBuildType() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string build_type = 3;</code>
     *
     * <pre>
     * Type of build this device is running.
     *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    public java.lang.String getBuildType() {
      java.lang.Object ref = buildType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          buildType_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string build_type = 3;</code>
     *
     * <pre>
     * Type of build this device is running.
     *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
     *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
     * </pre>
     */
    public com.google.protobuf.ByteString
        getBuildTypeBytes() {
      java.lang.Object ref = buildType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        buildType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string build_version_release = 4;
    public static final int BUILD_VERSION_RELEASE_FIELD_NUMBER = 4;
    private java.lang.Object buildVersionRelease_;
    /**
     * <code>optional string build_version_release = 4;</code>
     *
     * <pre>
     * Android version e.g. '5.1.1'
     * </pre>
     */
    public boolean hasBuildVersionRelease() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string build_version_release = 4;</code>
     *
     * <pre>
     * Android version e.g. '5.1.1'
     * </pre>
     */
    public java.lang.String getBuildVersionRelease() {
      java.lang.Object ref = buildVersionRelease_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          buildVersionRelease_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string build_version_release = 4;</code>
     *
     * <pre>
     * Android version e.g. '5.1.1'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getBuildVersionReleaseBytes() {
      java.lang.Object ref = buildVersionRelease_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        buildVersionRelease_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 build_api_level = 5;
    public static final int BUILD_API_LEVEL_FIELD_NUMBER = 5;
    private int buildApiLevel_;
    /**
     * <code>optional int32 build_api_level = 5;</code>
     *
     * <pre>
     * Historic: doesn't support api levels for code names such as 'N'.
     * </pre>
     */
    public boolean hasBuildApiLevel() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int32 build_api_level = 5;</code>
     *
     * <pre>
     * Historic: doesn't support api levels for code names such as 'N'.
     * </pre>
     */
    public int getBuildApiLevel() {
      return buildApiLevel_;
    }

    // optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;
    public static final int CPU_ABI_FIELD_NUMBER = 6;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface cpuAbi_;
    /**
     * <code>optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;</code>
     *
     * <pre>
     * ABI of the device, e.g. 'armeabi-v7a' or 'x86'
     * </pre>
     */
    public boolean hasCpuAbi() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;</code>
     *
     * <pre>
     * ABI of the device, e.g. 'armeabi-v7a' or 'x86'
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface getCpuAbi() {
      return cpuAbi_;
    }

    // optional string manufacturer = 7;
    public static final int MANUFACTURER_FIELD_NUMBER = 7;
    private java.lang.Object manufacturer_;
    /**
     * <code>optional string manufacturer = 7;</code>
     *
     * <pre>
     * Device manufacturer, e.g. 'Motorola' or 'Samsung'
     * </pre>
     */
    public boolean hasManufacturer() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string manufacturer = 7;</code>
     *
     * <pre>
     * Device manufacturer, e.g. 'Motorola' or 'Samsung'
     * </pre>
     */
    public java.lang.String getManufacturer() {
      java.lang.Object ref = manufacturer_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          manufacturer_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string manufacturer = 7;</code>
     *
     * <pre>
     * Device manufacturer, e.g. 'Motorola' or 'Samsung'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getManufacturerBytes() {
      java.lang.Object ref = manufacturer_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        manufacturer_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string model = 8;
    public static final int MODEL_FIELD_NUMBER = 8;
    private java.lang.Object model_;
    /**
     * <code>optional string model = 8;</code>
     *
     * <pre>
     * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
     * </pre>
     */
    public boolean hasModel() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string model = 8;</code>
     *
     * <pre>
     * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
     * </pre>
     */
    public java.lang.String getModel() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          model_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string model = 8;</code>
     *
     * <pre>
     * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getModelBytes() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        model_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.DeviceInfo.DeviceType device_type = 9;
    public static final int DEVICE_TYPE_FIELD_NUMBER = 9;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType deviceType_;
    /**
     * <code>optional .android_studio.DeviceInfo.DeviceType device_type = 9;</code>
     *
     * <pre>
     * What kind of device is this? Physicial/Emulator/Cloud etc...
     * </pre>
     */
    public boolean hasDeviceType() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .android_studio.DeviceInfo.DeviceType device_type = 9;</code>
     *
     * <pre>
     * What kind of device is this? Physicial/Emulator/Cloud etc...
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType getDeviceType() {
      return deviceType_;
    }

    // optional string build_api_level_full = 10;
    public static final int BUILD_API_LEVEL_FULL_FIELD_NUMBER = 10;
    private java.lang.Object buildApiLevelFull_;
    /**
     * <code>optional string build_api_level_full = 10;</code>
     *
     * <pre>
     * android api level  e.g. '23' or 'N'
     * </pre>
     */
    public boolean hasBuildApiLevelFull() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string build_api_level_full = 10;</code>
     *
     * <pre>
     * android api level  e.g. '23' or 'N'
     * </pre>
     */
    public java.lang.String getBuildApiLevelFull() {
      java.lang.Object ref = buildApiLevelFull_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          buildApiLevelFull_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string build_api_level_full = 10;</code>
     *
     * <pre>
     * android api level  e.g. '23' or 'N'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getBuildApiLevelFullBytes() {
      java.lang.Object ref = buildApiLevelFull_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        buildApiLevelFull_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      anonymizedSerialNumber_ = "";
      buildTags_ = "";
      buildType_ = "";
      buildVersionRelease_ = "";
      buildApiLevel_ = 0;
      cpuAbi_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface.UNKNOWN_ABI;
      manufacturer_ = "";
      model_ = "";
      deviceType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType.UNKNOWN_DEVICE_TYPE;
      buildApiLevelFull_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getAnonymizedSerialNumberBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getBuildTagsBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getBuildTypeBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getBuildVersionReleaseBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(5, buildApiLevel_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeEnum(6, cpuAbi_.getNumber());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, getManufacturerBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getModelBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeEnum(9, deviceType_.getNumber());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(10, getBuildApiLevelFullBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getAnonymizedSerialNumberBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getBuildTagsBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getBuildTypeBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getBuildVersionReleaseBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, buildApiLevel_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(6, cpuAbi_.getNumber());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getManufacturerBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getModelBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(9, deviceType_.getNumber());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, getBuildApiLevelFullBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.DeviceInfo}
     *
     * <pre>
     * Describes a emulator or physical Android Device.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DeviceInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DeviceInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        anonymizedSerialNumber_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        buildTags_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        buildType_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        buildVersionRelease_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        buildApiLevel_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        cpuAbi_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface.UNKNOWN_ABI;
        bitField0_ = (bitField0_ & ~0x00000020);
        manufacturer_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        model_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        deviceType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType.UNKNOWN_DEVICE_TYPE;
        bitField0_ = (bitField0_ & ~0x00000100);
        buildApiLevelFull_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DeviceInfo_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.anonymizedSerialNumber_ = anonymizedSerialNumber_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.buildTags_ = buildTags_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.buildType_ = buildType_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.buildVersionRelease_ = buildVersionRelease_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.buildApiLevel_ = buildApiLevel_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.cpuAbi_ = cpuAbi_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.manufacturer_ = manufacturer_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.model_ = model_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.deviceType_ = deviceType_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.buildApiLevelFull_ = buildApiLevelFull_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.getDefaultInstance()) return this;
        if (other.hasAnonymizedSerialNumber()) {
          bitField0_ |= 0x00000001;
          anonymizedSerialNumber_ = other.anonymizedSerialNumber_;
          onChanged();
        }
        if (other.hasBuildTags()) {
          bitField0_ |= 0x00000002;
          buildTags_ = other.buildTags_;
          onChanged();
        }
        if (other.hasBuildType()) {
          bitField0_ |= 0x00000004;
          buildType_ = other.buildType_;
          onChanged();
        }
        if (other.hasBuildVersionRelease()) {
          bitField0_ |= 0x00000008;
          buildVersionRelease_ = other.buildVersionRelease_;
          onChanged();
        }
        if (other.hasBuildApiLevel()) {
          setBuildApiLevel(other.getBuildApiLevel());
        }
        if (other.hasCpuAbi()) {
          setCpuAbi(other.getCpuAbi());
        }
        if (other.hasManufacturer()) {
          bitField0_ |= 0x00000040;
          manufacturer_ = other.manufacturer_;
          onChanged();
        }
        if (other.hasModel()) {
          bitField0_ |= 0x00000080;
          model_ = other.model_;
          onChanged();
        }
        if (other.hasDeviceType()) {
          setDeviceType(other.getDeviceType());
        }
        if (other.hasBuildApiLevelFull()) {
          bitField0_ |= 0x00000200;
          buildApiLevelFull_ = other.buildApiLevelFull_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string anonymized_serial_number = 1;
      private java.lang.Object anonymizedSerialNumber_ = "";
      /**
       * <code>optional string anonymized_serial_number = 1;</code>
       *
       * <pre>
       * serial number of the device, salted &amp; sha256ed on the client.
       * </pre>
       */
      public boolean hasAnonymizedSerialNumber() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string anonymized_serial_number = 1;</code>
       *
       * <pre>
       * serial number of the device, salted &amp; sha256ed on the client.
       * </pre>
       */
      public java.lang.String getAnonymizedSerialNumber() {
        java.lang.Object ref = anonymizedSerialNumber_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          anonymizedSerialNumber_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string anonymized_serial_number = 1;</code>
       *
       * <pre>
       * serial number of the device, salted &amp; sha256ed on the client.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getAnonymizedSerialNumberBytes() {
        java.lang.Object ref = anonymizedSerialNumber_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          anonymizedSerialNumber_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string anonymized_serial_number = 1;</code>
       *
       * <pre>
       * serial number of the device, salted &amp; sha256ed on the client.
       * </pre>
       */
      public Builder setAnonymizedSerialNumber(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        anonymizedSerialNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string anonymized_serial_number = 1;</code>
       *
       * <pre>
       * serial number of the device, salted &amp; sha256ed on the client.
       * </pre>
       */
      public Builder clearAnonymizedSerialNumber() {
        bitField0_ = (bitField0_ & ~0x00000001);
        anonymizedSerialNumber_ = getDefaultInstance().getAnonymizedSerialNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional string anonymized_serial_number = 1;</code>
       *
       * <pre>
       * serial number of the device, salted &amp; sha256ed on the client.
       * </pre>
       */
      public Builder setAnonymizedSerialNumberBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        anonymizedSerialNumber_ = value;
        onChanged();
        return this;
      }

      // optional string build_tags = 2;
      private java.lang.Object buildTags_ = "";
      /**
       * <code>optional string build_tags = 2;</code>
       *
       * <pre>
       * Tags used to build the android version on this device.
       *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public boolean hasBuildTags() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string build_tags = 2;</code>
       *
       * <pre>
       * Tags used to build the android version on this device.
       *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public java.lang.String getBuildTags() {
        java.lang.Object ref = buildTags_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          buildTags_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string build_tags = 2;</code>
       *
       * <pre>
       * Tags used to build the android version on this device.
       *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public com.google.protobuf.ByteString
          getBuildTagsBytes() {
        java.lang.Object ref = buildTags_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          buildTags_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string build_tags = 2;</code>
       *
       * <pre>
       * Tags used to build the android version on this device.
       *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public Builder setBuildTags(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        buildTags_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_tags = 2;</code>
       *
       * <pre>
       * Tags used to build the android version on this device.
       *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public Builder clearBuildTags() {
        bitField0_ = (bitField0_ & ~0x00000002);
        buildTags_ = getDefaultInstance().getBuildTags();
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_tags = 2;</code>
       *
       * <pre>
       * Tags used to build the android version on this device.
       *  e.g. 'release-keys' or 'test-keys' or 'A100_V001'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public Builder setBuildTagsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        buildTags_ = value;
        onChanged();
        return this;
      }

      // optional string build_type = 3;
      private java.lang.Object buildType_ = "";
      /**
       * <code>optional string build_type = 3;</code>
       *
       * <pre>
       * Type of build this device is running.
       *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public boolean hasBuildType() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string build_type = 3;</code>
       *
       * <pre>
       * Type of build this device is running.
       *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public java.lang.String getBuildType() {
        java.lang.Object ref = buildType_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          buildType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string build_type = 3;</code>
       *
       * <pre>
       * Type of build this device is running.
       *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public com.google.protobuf.ByteString
          getBuildTypeBytes() {
        java.lang.Object ref = buildType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          buildType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string build_type = 3;</code>
       *
       * <pre>
       * Type of build this device is running.
       *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public Builder setBuildType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        buildType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_type = 3;</code>
       *
       * <pre>
       * Type of build this device is running.
       *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public Builder clearBuildType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        buildType_ = getDefaultInstance().getBuildType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_type = 3;</code>
       *
       * <pre>
       * Type of build this device is running.
       *  e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild'
       *  TODO(jvg): ask loglaunch folks: ST_SOFTWARE_ID datapol?
       * </pre>
       */
      public Builder setBuildTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        buildType_ = value;
        onChanged();
        return this;
      }

      // optional string build_version_release = 4;
      private java.lang.Object buildVersionRelease_ = "";
      /**
       * <code>optional string build_version_release = 4;</code>
       *
       * <pre>
       * Android version e.g. '5.1.1'
       * </pre>
       */
      public boolean hasBuildVersionRelease() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string build_version_release = 4;</code>
       *
       * <pre>
       * Android version e.g. '5.1.1'
       * </pre>
       */
      public java.lang.String getBuildVersionRelease() {
        java.lang.Object ref = buildVersionRelease_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          buildVersionRelease_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string build_version_release = 4;</code>
       *
       * <pre>
       * Android version e.g. '5.1.1'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getBuildVersionReleaseBytes() {
        java.lang.Object ref = buildVersionRelease_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          buildVersionRelease_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string build_version_release = 4;</code>
       *
       * <pre>
       * Android version e.g. '5.1.1'
       * </pre>
       */
      public Builder setBuildVersionRelease(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        buildVersionRelease_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_version_release = 4;</code>
       *
       * <pre>
       * Android version e.g. '5.1.1'
       * </pre>
       */
      public Builder clearBuildVersionRelease() {
        bitField0_ = (bitField0_ & ~0x00000008);
        buildVersionRelease_ = getDefaultInstance().getBuildVersionRelease();
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_version_release = 4;</code>
       *
       * <pre>
       * Android version e.g. '5.1.1'
       * </pre>
       */
      public Builder setBuildVersionReleaseBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        buildVersionRelease_ = value;
        onChanged();
        return this;
      }

      // optional int32 build_api_level = 5;
      private int buildApiLevel_ ;
      /**
       * <code>optional int32 build_api_level = 5;</code>
       *
       * <pre>
       * Historic: doesn't support api levels for code names such as 'N'.
       * </pre>
       */
      public boolean hasBuildApiLevel() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int32 build_api_level = 5;</code>
       *
       * <pre>
       * Historic: doesn't support api levels for code names such as 'N'.
       * </pre>
       */
      public int getBuildApiLevel() {
        return buildApiLevel_;
      }
      /**
       * <code>optional int32 build_api_level = 5;</code>
       *
       * <pre>
       * Historic: doesn't support api levels for code names such as 'N'.
       * </pre>
       */
      public Builder setBuildApiLevel(int value) {
        bitField0_ |= 0x00000010;
        buildApiLevel_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 build_api_level = 5;</code>
       *
       * <pre>
       * Historic: doesn't support api levels for code names such as 'N'.
       * </pre>
       */
      public Builder clearBuildApiLevel() {
        bitField0_ = (bitField0_ & ~0x00000010);
        buildApiLevel_ = 0;
        onChanged();
        return this;
      }

      // optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface cpuAbi_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface.UNKNOWN_ABI;
      /**
       * <code>optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;</code>
       *
       * <pre>
       * ABI of the device, e.g. 'armeabi-v7a' or 'x86'
       * </pre>
       */
      public boolean hasCpuAbi() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;</code>
       *
       * <pre>
       * ABI of the device, e.g. 'armeabi-v7a' or 'x86'
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface getCpuAbi() {
        return cpuAbi_;
      }
      /**
       * <code>optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;</code>
       *
       * <pre>
       * ABI of the device, e.g. 'armeabi-v7a' or 'x86'
       * </pre>
       */
      public Builder setCpuAbi(com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000020;
        cpuAbi_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.DeviceInfo.ApplicationBinaryInterface cpu_abi = 6;</code>
       *
       * <pre>
       * ABI of the device, e.g. 'armeabi-v7a' or 'x86'
       * </pre>
       */
      public Builder clearCpuAbi() {
        bitField0_ = (bitField0_ & ~0x00000020);
        cpuAbi_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.ApplicationBinaryInterface.UNKNOWN_ABI;
        onChanged();
        return this;
      }

      // optional string manufacturer = 7;
      private java.lang.Object manufacturer_ = "";
      /**
       * <code>optional string manufacturer = 7;</code>
       *
       * <pre>
       * Device manufacturer, e.g. 'Motorola' or 'Samsung'
       * </pre>
       */
      public boolean hasManufacturer() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string manufacturer = 7;</code>
       *
       * <pre>
       * Device manufacturer, e.g. 'Motorola' or 'Samsung'
       * </pre>
       */
      public java.lang.String getManufacturer() {
        java.lang.Object ref = manufacturer_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          manufacturer_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string manufacturer = 7;</code>
       *
       * <pre>
       * Device manufacturer, e.g. 'Motorola' or 'Samsung'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getManufacturerBytes() {
        java.lang.Object ref = manufacturer_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          manufacturer_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string manufacturer = 7;</code>
       *
       * <pre>
       * Device manufacturer, e.g. 'Motorola' or 'Samsung'
       * </pre>
       */
      public Builder setManufacturer(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        manufacturer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string manufacturer = 7;</code>
       *
       * <pre>
       * Device manufacturer, e.g. 'Motorola' or 'Samsung'
       * </pre>
       */
      public Builder clearManufacturer() {
        bitField0_ = (bitField0_ & ~0x00000040);
        manufacturer_ = getDefaultInstance().getManufacturer();
        onChanged();
        return this;
      }
      /**
       * <code>optional string manufacturer = 7;</code>
       *
       * <pre>
       * Device manufacturer, e.g. 'Motorola' or 'Samsung'
       * </pre>
       */
      public Builder setManufacturerBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        manufacturer_ = value;
        onChanged();
        return this;
      }

      // optional string model = 8;
      private java.lang.Object model_ = "";
      /**
       * <code>optional string model = 8;</code>
       *
       * <pre>
       * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
       * </pre>
       */
      public boolean hasModel() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string model = 8;</code>
       *
       * <pre>
       * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
       * </pre>
       */
      public java.lang.String getModel() {
        java.lang.Object ref = model_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          model_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string model = 8;</code>
       *
       * <pre>
       * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getModelBytes() {
        java.lang.Object ref = model_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          model_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string model = 8;</code>
       *
       * <pre>
       * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
       * </pre>
       */
      public Builder setModel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        model_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 8;</code>
       *
       * <pre>
       * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
       * </pre>
       */
      public Builder clearModel() {
        bitField0_ = (bitField0_ & ~0x00000080);
        model_ = getDefaultInstance().getModel();
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 8;</code>
       *
       * <pre>
       * Device model, e.g. 'Nexus 5' or 'GT-I9500'.
       * </pre>
       */
      public Builder setModelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        model_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.DeviceInfo.DeviceType device_type = 9;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType deviceType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType.UNKNOWN_DEVICE_TYPE;
      /**
       * <code>optional .android_studio.DeviceInfo.DeviceType device_type = 9;</code>
       *
       * <pre>
       * What kind of device is this? Physicial/Emulator/Cloud etc...
       * </pre>
       */
      public boolean hasDeviceType() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .android_studio.DeviceInfo.DeviceType device_type = 9;</code>
       *
       * <pre>
       * What kind of device is this? Physicial/Emulator/Cloud etc...
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType getDeviceType() {
        return deviceType_;
      }
      /**
       * <code>optional .android_studio.DeviceInfo.DeviceType device_type = 9;</code>
       *
       * <pre>
       * What kind of device is this? Physicial/Emulator/Cloud etc...
       * </pre>
       */
      public Builder setDeviceType(com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000100;
        deviceType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.DeviceInfo.DeviceType device_type = 9;</code>
       *
       * <pre>
       * What kind of device is this? Physicial/Emulator/Cloud etc...
       * </pre>
       */
      public Builder clearDeviceType() {
        bitField0_ = (bitField0_ & ~0x00000100);
        deviceType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.DeviceInfo.DeviceType.UNKNOWN_DEVICE_TYPE;
        onChanged();
        return this;
      }

      // optional string build_api_level_full = 10;
      private java.lang.Object buildApiLevelFull_ = "";
      /**
       * <code>optional string build_api_level_full = 10;</code>
       *
       * <pre>
       * android api level  e.g. '23' or 'N'
       * </pre>
       */
      public boolean hasBuildApiLevelFull() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string build_api_level_full = 10;</code>
       *
       * <pre>
       * android api level  e.g. '23' or 'N'
       * </pre>
       */
      public java.lang.String getBuildApiLevelFull() {
        java.lang.Object ref = buildApiLevelFull_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          buildApiLevelFull_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string build_api_level_full = 10;</code>
       *
       * <pre>
       * android api level  e.g. '23' or 'N'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getBuildApiLevelFullBytes() {
        java.lang.Object ref = buildApiLevelFull_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          buildApiLevelFull_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string build_api_level_full = 10;</code>
       *
       * <pre>
       * android api level  e.g. '23' or 'N'
       * </pre>
       */
      public Builder setBuildApiLevelFull(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        buildApiLevelFull_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_api_level_full = 10;</code>
       *
       * <pre>
       * android api level  e.g. '23' or 'N'
       * </pre>
       */
      public Builder clearBuildApiLevelFull() {
        bitField0_ = (bitField0_ & ~0x00000200);
        buildApiLevelFull_ = getDefaultInstance().getBuildApiLevelFull();
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_api_level_full = 10;</code>
       *
       * <pre>
       * android api level  e.g. '23' or 'N'
       * </pre>
       */
      public Builder setBuildApiLevelFullBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        buildApiLevelFull_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.DeviceInfo)
    }

    static {
      defaultInstance = new DeviceInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.DeviceInfo)
  }

  public interface StudioCrashOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 actions = 1;
    /**
     * <code>optional int64 actions = 1;</code>
     *
     * <pre>
     * number of actions since last crash report.
     * </pre>
     */
    boolean hasActions();
    /**
     * <code>optional int64 actions = 1;</code>
     *
     * <pre>
     * number of actions since last crash report.
     * </pre>
     */
    long getActions();

    // optional int64 exceptions = 2;
    /**
     * <code>optional int64 exceptions = 2;</code>
     *
     * <pre>
     * number of exceptions since last crash report.
     * </pre>
     */
    boolean hasExceptions();
    /**
     * <code>optional int64 exceptions = 2;</code>
     *
     * <pre>
     * number of exceptions since last crash report.
     * </pre>
     */
    long getExceptions();

    // optional int64 crashes = 3;
    /**
     * <code>optional int64 crashes = 3;</code>
     *
     * <pre>
     * number of crashes since last crash report.
     * </pre>
     */
    boolean hasCrashes();
    /**
     * <code>optional int64 crashes = 3;</code>
     *
     * <pre>
     * number of crashes since last crash report.
     * </pre>
     */
    long getCrashes();

    // optional int64 bundled_plugin_exceptions = 4;
    /**
     * <code>optional int64 bundled_plugin_exceptions = 4;</code>
     *
     * <pre>
     * number of exceptions from plugins bundled with Android Studio.
     * </pre>
     */
    boolean hasBundledPluginExceptions();
    /**
     * <code>optional int64 bundled_plugin_exceptions = 4;</code>
     *
     * <pre>
     * number of exceptions from plugins bundled with Android Studio.
     * </pre>
     */
    long getBundledPluginExceptions();

    // optional int64 non_bundled_plugin_exceptions = 5;
    /**
     * <code>optional int64 non_bundled_plugin_exceptions = 5;</code>
     *
     * <pre>
     * number of exceptions from plugins not bundled with Android Studio.
     * </pre>
     */
    boolean hasNonBundledPluginExceptions();
    /**
     * <code>optional int64 non_bundled_plugin_exceptions = 5;</code>
     *
     * <pre>
     * number of exceptions from plugins not bundled with Android Studio.
     * </pre>
     */
    long getNonBundledPluginExceptions();
  }
  /**
   * Protobuf type {@code android_studio.StudioCrash}
   *
   * <pre>
   * Metrics on crashes in Android Studio.
   * </pre>
   */
  public static final class StudioCrash extends
      com.google.protobuf.GeneratedMessage
      implements StudioCrashOrBuilder {
    // Use StudioCrash.newBuilder() to construct.
    private StudioCrash(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StudioCrash(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StudioCrash defaultInstance;
    public static StudioCrash getDefaultInstance() {
      return defaultInstance;
    }

    public StudioCrash getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StudioCrash(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              actions_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              exceptions_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              crashes_ = input.readInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              bundledPluginExceptions_ = input.readInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              nonBundledPluginExceptions_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_StudioCrash_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_StudioCrash_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.Builder.class);
    }

    public static com.google.protobuf.Parser<StudioCrash> PARSER =
        new com.google.protobuf.AbstractParser<StudioCrash>() {
      public StudioCrash parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StudioCrash(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StudioCrash> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 actions = 1;
    public static final int ACTIONS_FIELD_NUMBER = 1;
    private long actions_;
    /**
     * <code>optional int64 actions = 1;</code>
     *
     * <pre>
     * number of actions since last crash report.
     * </pre>
     */
    public boolean hasActions() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 actions = 1;</code>
     *
     * <pre>
     * number of actions since last crash report.
     * </pre>
     */
    public long getActions() {
      return actions_;
    }

    // optional int64 exceptions = 2;
    public static final int EXCEPTIONS_FIELD_NUMBER = 2;
    private long exceptions_;
    /**
     * <code>optional int64 exceptions = 2;</code>
     *
     * <pre>
     * number of exceptions since last crash report.
     * </pre>
     */
    public boolean hasExceptions() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 exceptions = 2;</code>
     *
     * <pre>
     * number of exceptions since last crash report.
     * </pre>
     */
    public long getExceptions() {
      return exceptions_;
    }

    // optional int64 crashes = 3;
    public static final int CRASHES_FIELD_NUMBER = 3;
    private long crashes_;
    /**
     * <code>optional int64 crashes = 3;</code>
     *
     * <pre>
     * number of crashes since last crash report.
     * </pre>
     */
    public boolean hasCrashes() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 crashes = 3;</code>
     *
     * <pre>
     * number of crashes since last crash report.
     * </pre>
     */
    public long getCrashes() {
      return crashes_;
    }

    // optional int64 bundled_plugin_exceptions = 4;
    public static final int BUNDLED_PLUGIN_EXCEPTIONS_FIELD_NUMBER = 4;
    private long bundledPluginExceptions_;
    /**
     * <code>optional int64 bundled_plugin_exceptions = 4;</code>
     *
     * <pre>
     * number of exceptions from plugins bundled with Android Studio.
     * </pre>
     */
    public boolean hasBundledPluginExceptions() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 bundled_plugin_exceptions = 4;</code>
     *
     * <pre>
     * number of exceptions from plugins bundled with Android Studio.
     * </pre>
     */
    public long getBundledPluginExceptions() {
      return bundledPluginExceptions_;
    }

    // optional int64 non_bundled_plugin_exceptions = 5;
    public static final int NON_BUNDLED_PLUGIN_EXCEPTIONS_FIELD_NUMBER = 5;
    private long nonBundledPluginExceptions_;
    /**
     * <code>optional int64 non_bundled_plugin_exceptions = 5;</code>
     *
     * <pre>
     * number of exceptions from plugins not bundled with Android Studio.
     * </pre>
     */
    public boolean hasNonBundledPluginExceptions() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 non_bundled_plugin_exceptions = 5;</code>
     *
     * <pre>
     * number of exceptions from plugins not bundled with Android Studio.
     * </pre>
     */
    public long getNonBundledPluginExceptions() {
      return nonBundledPluginExceptions_;
    }

    private void initFields() {
      actions_ = 0L;
      exceptions_ = 0L;
      crashes_ = 0L;
      bundledPluginExceptions_ = 0L;
      nonBundledPluginExceptions_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, actions_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, exceptions_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, crashes_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, bundledPluginExceptions_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, nonBundledPluginExceptions_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, actions_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, exceptions_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, crashes_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, bundledPluginExceptions_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, nonBundledPluginExceptions_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.StudioCrash}
     *
     * <pre>
     * Metrics on crashes in Android Studio.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrashOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_StudioCrash_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_StudioCrash_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        actions_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        exceptions_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        crashes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        bundledPluginExceptions_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        nonBundledPluginExceptions_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_StudioCrash_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.actions_ = actions_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.exceptions_ = exceptions_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.crashes_ = crashes_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.bundledPluginExceptions_ = bundledPluginExceptions_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.nonBundledPluginExceptions_ = nonBundledPluginExceptions_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash.getDefaultInstance()) return this;
        if (other.hasActions()) {
          setActions(other.getActions());
        }
        if (other.hasExceptions()) {
          setExceptions(other.getExceptions());
        }
        if (other.hasCrashes()) {
          setCrashes(other.getCrashes());
        }
        if (other.hasBundledPluginExceptions()) {
          setBundledPluginExceptions(other.getBundledPluginExceptions());
        }
        if (other.hasNonBundledPluginExceptions()) {
          setNonBundledPluginExceptions(other.getNonBundledPluginExceptions());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.StudioCrash) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 actions = 1;
      private long actions_ ;
      /**
       * <code>optional int64 actions = 1;</code>
       *
       * <pre>
       * number of actions since last crash report.
       * </pre>
       */
      public boolean hasActions() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 actions = 1;</code>
       *
       * <pre>
       * number of actions since last crash report.
       * </pre>
       */
      public long getActions() {
        return actions_;
      }
      /**
       * <code>optional int64 actions = 1;</code>
       *
       * <pre>
       * number of actions since last crash report.
       * </pre>
       */
      public Builder setActions(long value) {
        bitField0_ |= 0x00000001;
        actions_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 actions = 1;</code>
       *
       * <pre>
       * number of actions since last crash report.
       * </pre>
       */
      public Builder clearActions() {
        bitField0_ = (bitField0_ & ~0x00000001);
        actions_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 exceptions = 2;
      private long exceptions_ ;
      /**
       * <code>optional int64 exceptions = 2;</code>
       *
       * <pre>
       * number of exceptions since last crash report.
       * </pre>
       */
      public boolean hasExceptions() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 exceptions = 2;</code>
       *
       * <pre>
       * number of exceptions since last crash report.
       * </pre>
       */
      public long getExceptions() {
        return exceptions_;
      }
      /**
       * <code>optional int64 exceptions = 2;</code>
       *
       * <pre>
       * number of exceptions since last crash report.
       * </pre>
       */
      public Builder setExceptions(long value) {
        bitField0_ |= 0x00000002;
        exceptions_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 exceptions = 2;</code>
       *
       * <pre>
       * number of exceptions since last crash report.
       * </pre>
       */
      public Builder clearExceptions() {
        bitField0_ = (bitField0_ & ~0x00000002);
        exceptions_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 crashes = 3;
      private long crashes_ ;
      /**
       * <code>optional int64 crashes = 3;</code>
       *
       * <pre>
       * number of crashes since last crash report.
       * </pre>
       */
      public boolean hasCrashes() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 crashes = 3;</code>
       *
       * <pre>
       * number of crashes since last crash report.
       * </pre>
       */
      public long getCrashes() {
        return crashes_;
      }
      /**
       * <code>optional int64 crashes = 3;</code>
       *
       * <pre>
       * number of crashes since last crash report.
       * </pre>
       */
      public Builder setCrashes(long value) {
        bitField0_ |= 0x00000004;
        crashes_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 crashes = 3;</code>
       *
       * <pre>
       * number of crashes since last crash report.
       * </pre>
       */
      public Builder clearCrashes() {
        bitField0_ = (bitField0_ & ~0x00000004);
        crashes_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 bundled_plugin_exceptions = 4;
      private long bundledPluginExceptions_ ;
      /**
       * <code>optional int64 bundled_plugin_exceptions = 4;</code>
       *
       * <pre>
       * number of exceptions from plugins bundled with Android Studio.
       * </pre>
       */
      public boolean hasBundledPluginExceptions() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 bundled_plugin_exceptions = 4;</code>
       *
       * <pre>
       * number of exceptions from plugins bundled with Android Studio.
       * </pre>
       */
      public long getBundledPluginExceptions() {
        return bundledPluginExceptions_;
      }
      /**
       * <code>optional int64 bundled_plugin_exceptions = 4;</code>
       *
       * <pre>
       * number of exceptions from plugins bundled with Android Studio.
       * </pre>
       */
      public Builder setBundledPluginExceptions(long value) {
        bitField0_ |= 0x00000008;
        bundledPluginExceptions_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 bundled_plugin_exceptions = 4;</code>
       *
       * <pre>
       * number of exceptions from plugins bundled with Android Studio.
       * </pre>
       */
      public Builder clearBundledPluginExceptions() {
        bitField0_ = (bitField0_ & ~0x00000008);
        bundledPluginExceptions_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 non_bundled_plugin_exceptions = 5;
      private long nonBundledPluginExceptions_ ;
      /**
       * <code>optional int64 non_bundled_plugin_exceptions = 5;</code>
       *
       * <pre>
       * number of exceptions from plugins not bundled with Android Studio.
       * </pre>
       */
      public boolean hasNonBundledPluginExceptions() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 non_bundled_plugin_exceptions = 5;</code>
       *
       * <pre>
       * number of exceptions from plugins not bundled with Android Studio.
       * </pre>
       */
      public long getNonBundledPluginExceptions() {
        return nonBundledPluginExceptions_;
      }
      /**
       * <code>optional int64 non_bundled_plugin_exceptions = 5;</code>
       *
       * <pre>
       * number of exceptions from plugins not bundled with Android Studio.
       * </pre>
       */
      public Builder setNonBundledPluginExceptions(long value) {
        bitField0_ |= 0x00000010;
        nonBundledPluginExceptions_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 non_bundled_plugin_exceptions = 5;</code>
       *
       * <pre>
       * number of exceptions from plugins not bundled with Android Studio.
       * </pre>
       */
      public Builder clearNonBundledPluginExceptions() {
        bitField0_ = (bitField0_ & ~0x00000010);
        nonBundledPluginExceptions_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.StudioCrash)
    }

    static {
      defaultInstance = new StudioCrash(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.StudioCrash)
  }

  public interface EmulatorGuestGlInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string vendor = 1;
    /**
     * <code>optional string vendor = 1;</code>
     *
     * <pre>
     * GL Driver vendor.
     * </pre>
     */
    boolean hasVendor();
    /**
     * <code>optional string vendor = 1;</code>
     *
     * <pre>
     * GL Driver vendor.
     * </pre>
     */
    java.lang.String getVendor();
    /**
     * <code>optional string vendor = 1;</code>
     *
     * <pre>
     * GL Driver vendor.
     * </pre>
     */
    com.google.protobuf.ByteString
        getVendorBytes();

    // optional string renderer = 2;
    /**
     * <code>optional string renderer = 2;</code>
     *
     * <pre>
     * GL Driver name.
     * </pre>
     */
    boolean hasRenderer();
    /**
     * <code>optional string renderer = 2;</code>
     *
     * <pre>
     * GL Driver name.
     * </pre>
     */
    java.lang.String getRenderer();
    /**
     * <code>optional string renderer = 2;</code>
     *
     * <pre>
     * GL Driver name.
     * </pre>
     */
    com.google.protobuf.ByteString
        getRendererBytes();

    // optional string version = 3;
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * GL Driver version number.
     * </pre>
     */
    boolean hasVersion();
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * GL Driver version number.
     * </pre>
     */
    java.lang.String getVersion();
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * GL Driver version number.
     * </pre>
     */
    com.google.protobuf.ByteString
        getVersionBytes();
  }
  /**
   * Protobuf type {@code android_studio.EmulatorGuestGlInfo}
   *
   * <pre>
   * Emulator guest image's GL info.
   * </pre>
   */
  public static final class EmulatorGuestGlInfo extends
      com.google.protobuf.GeneratedMessage
      implements EmulatorGuestGlInfoOrBuilder {
    // Use EmulatorGuestGlInfo.newBuilder() to construct.
    private EmulatorGuestGlInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EmulatorGuestGlInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EmulatorGuestGlInfo defaultInstance;
    public static EmulatorGuestGlInfo getDefaultInstance() {
      return defaultInstance;
    }

    public EmulatorGuestGlInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EmulatorGuestGlInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              vendor_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              renderer_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              version_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGuestGlInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGuestGlInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<EmulatorGuestGlInfo> PARSER =
        new com.google.protobuf.AbstractParser<EmulatorGuestGlInfo>() {
      public EmulatorGuestGlInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EmulatorGuestGlInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EmulatorGuestGlInfo> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string vendor = 1;
    public static final int VENDOR_FIELD_NUMBER = 1;
    private java.lang.Object vendor_;
    /**
     * <code>optional string vendor = 1;</code>
     *
     * <pre>
     * GL Driver vendor.
     * </pre>
     */
    public boolean hasVendor() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string vendor = 1;</code>
     *
     * <pre>
     * GL Driver vendor.
     * </pre>
     */
    public java.lang.String getVendor() {
      java.lang.Object ref = vendor_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          vendor_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string vendor = 1;</code>
     *
     * <pre>
     * GL Driver vendor.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getVendorBytes() {
      java.lang.Object ref = vendor_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        vendor_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string renderer = 2;
    public static final int RENDERER_FIELD_NUMBER = 2;
    private java.lang.Object renderer_;
    /**
     * <code>optional string renderer = 2;</code>
     *
     * <pre>
     * GL Driver name.
     * </pre>
     */
    public boolean hasRenderer() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string renderer = 2;</code>
     *
     * <pre>
     * GL Driver name.
     * </pre>
     */
    public java.lang.String getRenderer() {
      java.lang.Object ref = renderer_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          renderer_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string renderer = 2;</code>
     *
     * <pre>
     * GL Driver name.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getRendererBytes() {
      java.lang.Object ref = renderer_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        renderer_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string version = 3;
    public static final int VERSION_FIELD_NUMBER = 3;
    private java.lang.Object version_;
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * GL Driver version number.
     * </pre>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * GL Driver version number.
     * </pre>
     */
    public java.lang.String getVersion() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version = 3;</code>
     *
     * <pre>
     * GL Driver version number.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      vendor_ = "";
      renderer_ = "";
      version_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getVendorBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getRendererBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getVersionBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getVendorBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getRendererBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getVersionBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.EmulatorGuestGlInfo}
     *
     * <pre>
     * Emulator guest image's GL info.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGuestGlInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGuestGlInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        vendor_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        renderer_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        version_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGuestGlInfo_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.vendor_ = vendor_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.renderer_ = renderer_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.version_ = version_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.getDefaultInstance()) return this;
        if (other.hasVendor()) {
          bitField0_ |= 0x00000001;
          vendor_ = other.vendor_;
          onChanged();
        }
        if (other.hasRenderer()) {
          bitField0_ |= 0x00000002;
          renderer_ = other.renderer_;
          onChanged();
        }
        if (other.hasVersion()) {
          bitField0_ |= 0x00000004;
          version_ = other.version_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string vendor = 1;
      private java.lang.Object vendor_ = "";
      /**
       * <code>optional string vendor = 1;</code>
       *
       * <pre>
       * GL Driver vendor.
       * </pre>
       */
      public boolean hasVendor() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string vendor = 1;</code>
       *
       * <pre>
       * GL Driver vendor.
       * </pre>
       */
      public java.lang.String getVendor() {
        java.lang.Object ref = vendor_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          vendor_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string vendor = 1;</code>
       *
       * <pre>
       * GL Driver vendor.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getVendorBytes() {
        java.lang.Object ref = vendor_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          vendor_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string vendor = 1;</code>
       *
       * <pre>
       * GL Driver vendor.
       * </pre>
       */
      public Builder setVendor(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        vendor_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string vendor = 1;</code>
       *
       * <pre>
       * GL Driver vendor.
       * </pre>
       */
      public Builder clearVendor() {
        bitField0_ = (bitField0_ & ~0x00000001);
        vendor_ = getDefaultInstance().getVendor();
        onChanged();
        return this;
      }
      /**
       * <code>optional string vendor = 1;</code>
       *
       * <pre>
       * GL Driver vendor.
       * </pre>
       */
      public Builder setVendorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        vendor_ = value;
        onChanged();
        return this;
      }

      // optional string renderer = 2;
      private java.lang.Object renderer_ = "";
      /**
       * <code>optional string renderer = 2;</code>
       *
       * <pre>
       * GL Driver name.
       * </pre>
       */
      public boolean hasRenderer() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string renderer = 2;</code>
       *
       * <pre>
       * GL Driver name.
       * </pre>
       */
      public java.lang.String getRenderer() {
        java.lang.Object ref = renderer_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          renderer_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string renderer = 2;</code>
       *
       * <pre>
       * GL Driver name.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getRendererBytes() {
        java.lang.Object ref = renderer_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          renderer_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string renderer = 2;</code>
       *
       * <pre>
       * GL Driver name.
       * </pre>
       */
      public Builder setRenderer(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        renderer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string renderer = 2;</code>
       *
       * <pre>
       * GL Driver name.
       * </pre>
       */
      public Builder clearRenderer() {
        bitField0_ = (bitField0_ & ~0x00000002);
        renderer_ = getDefaultInstance().getRenderer();
        onChanged();
        return this;
      }
      /**
       * <code>optional string renderer = 2;</code>
       *
       * <pre>
       * GL Driver name.
       * </pre>
       */
      public Builder setRendererBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        renderer_ = value;
        onChanged();
        return this;
      }

      // optional string version = 3;
      private java.lang.Object version_ = "";
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * GL Driver version number.
       * </pre>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * GL Driver version number.
       * </pre>
       */
      public java.lang.String getVersion() {
        java.lang.Object ref = version_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          version_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * GL Driver version number.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        java.lang.Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * GL Driver version number.
       * </pre>
       */
      public Builder setVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * GL Driver version number.
       * </pre>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000004);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 3;</code>
       *
       * <pre>
       * GL Driver version number.
       * </pre>
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        version_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.EmulatorGuestGlInfo)
    }

    static {
      defaultInstance = new EmulatorGuestGlInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.EmulatorGuestGlInfo)
  }

  public interface EmulatorGpuInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string make = 1;
    /**
     * <code>optional string make = 1;</code>
     *
     * <pre>
     * Make of the Graphics card.
     * </pre>
     */
    boolean hasMake();
    /**
     * <code>optional string make = 1;</code>
     *
     * <pre>
     * Make of the Graphics card.
     * </pre>
     */
    java.lang.String getMake();
    /**
     * <code>optional string make = 1;</code>
     *
     * <pre>
     * Make of the Graphics card.
     * </pre>
     */
    com.google.protobuf.ByteString
        getMakeBytes();

    // optional string model = 2;
    /**
     * <code>optional string model = 2;</code>
     *
     * <pre>
     * Model of the Graphics card.
     * </pre>
     */
    boolean hasModel();
    /**
     * <code>optional string model = 2;</code>
     *
     * <pre>
     * Model of the Graphics card.
     * </pre>
     */
    java.lang.String getModel();
    /**
     * <code>optional string model = 2;</code>
     *
     * <pre>
     * Model of the Graphics card.
     * </pre>
     */
    com.google.protobuf.ByteString
        getModelBytes();

    // optional string device_id = 3;
    /**
     * <code>optional string device_id = 3;</code>
     *
     * <pre>
     * Device id of the Graphics card.
     * </pre>
     */
    boolean hasDeviceId();
    /**
     * <code>optional string device_id = 3;</code>
     *
     * <pre>
     * Device id of the Graphics card.
     * </pre>
     */
    java.lang.String getDeviceId();
    /**
     * <code>optional string device_id = 3;</code>
     *
     * <pre>
     * Device id of the Graphics card.
     * </pre>
     */
    com.google.protobuf.ByteString
        getDeviceIdBytes();

    // optional string revision_id = 4;
    /**
     * <code>optional string revision_id = 4;</code>
     *
     * <pre>
     * Revision of the graphics card.
     * </pre>
     */
    boolean hasRevisionId();
    /**
     * <code>optional string revision_id = 4;</code>
     *
     * <pre>
     * Revision of the graphics card.
     * </pre>
     */
    java.lang.String getRevisionId();
    /**
     * <code>optional string revision_id = 4;</code>
     *
     * <pre>
     * Revision of the graphics card.
     * </pre>
     */
    com.google.protobuf.ByteString
        getRevisionIdBytes();

    // optional string version = 5;
    /**
     * <code>optional string version = 5;</code>
     *
     * <pre>
     * Version of the graphics card driver.
     * </pre>
     */
    boolean hasVersion();
    /**
     * <code>optional string version = 5;</code>
     *
     * <pre>
     * Version of the graphics card driver.
     * </pre>
     */
    java.lang.String getVersion();
    /**
     * <code>optional string version = 5;</code>
     *
     * <pre>
     * Version of the graphics card driver.
     * </pre>
     */
    com.google.protobuf.ByteString
        getVersionBytes();

    // optional string renderer = 6;
    /**
     * <code>optional string renderer = 6;</code>
     *
     * <pre>
     * Name of the graphics card driver.
     * </pre>
     */
    boolean hasRenderer();
    /**
     * <code>optional string renderer = 6;</code>
     *
     * <pre>
     * Name of the graphics card driver.
     * </pre>
     */
    java.lang.String getRenderer();
    /**
     * <code>optional string renderer = 6;</code>
     *
     * <pre>
     * Name of the graphics card driver.
     * </pre>
     */
    com.google.protobuf.ByteString
        getRendererBytes();
  }
  /**
   * Protobuf type {@code android_studio.EmulatorGpuInfo}
   *
   * <pre>
   * Emulator: Host GPU info.
   * </pre>
   */
  public static final class EmulatorGpuInfo extends
      com.google.protobuf.GeneratedMessage
      implements EmulatorGpuInfoOrBuilder {
    // Use EmulatorGpuInfo.newBuilder() to construct.
    private EmulatorGpuInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EmulatorGpuInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EmulatorGpuInfo defaultInstance;
    public static EmulatorGpuInfo getDefaultInstance() {
      return defaultInstance;
    }

    public EmulatorGpuInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EmulatorGpuInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              make_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              model_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              deviceId_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              revisionId_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              version_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              renderer_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGpuInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGpuInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<EmulatorGpuInfo> PARSER =
        new com.google.protobuf.AbstractParser<EmulatorGpuInfo>() {
      public EmulatorGpuInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EmulatorGpuInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EmulatorGpuInfo> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string make = 1;
    public static final int MAKE_FIELD_NUMBER = 1;
    private java.lang.Object make_;
    /**
     * <code>optional string make = 1;</code>
     *
     * <pre>
     * Make of the Graphics card.
     * </pre>
     */
    public boolean hasMake() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string make = 1;</code>
     *
     * <pre>
     * Make of the Graphics card.
     * </pre>
     */
    public java.lang.String getMake() {
      java.lang.Object ref = make_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          make_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string make = 1;</code>
     *
     * <pre>
     * Make of the Graphics card.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getMakeBytes() {
      java.lang.Object ref = make_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        make_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string model = 2;
    public static final int MODEL_FIELD_NUMBER = 2;
    private java.lang.Object model_;
    /**
     * <code>optional string model = 2;</code>
     *
     * <pre>
     * Model of the Graphics card.
     * </pre>
     */
    public boolean hasModel() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string model = 2;</code>
     *
     * <pre>
     * Model of the Graphics card.
     * </pre>
     */
    public java.lang.String getModel() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          model_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string model = 2;</code>
     *
     * <pre>
     * Model of the Graphics card.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getModelBytes() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        model_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string device_id = 3;
    public static final int DEVICE_ID_FIELD_NUMBER = 3;
    private java.lang.Object deviceId_;
    /**
     * <code>optional string device_id = 3;</code>
     *
     * <pre>
     * Device id of the Graphics card.
     * </pre>
     */
    public boolean hasDeviceId() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string device_id = 3;</code>
     *
     * <pre>
     * Device id of the Graphics card.
     * </pre>
     */
    public java.lang.String getDeviceId() {
      java.lang.Object ref = deviceId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          deviceId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string device_id = 3;</code>
     *
     * <pre>
     * Device id of the Graphics card.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getDeviceIdBytes() {
      java.lang.Object ref = deviceId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        deviceId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string revision_id = 4;
    public static final int REVISION_ID_FIELD_NUMBER = 4;
    private java.lang.Object revisionId_;
    /**
     * <code>optional string revision_id = 4;</code>
     *
     * <pre>
     * Revision of the graphics card.
     * </pre>
     */
    public boolean hasRevisionId() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string revision_id = 4;</code>
     *
     * <pre>
     * Revision of the graphics card.
     * </pre>
     */
    public java.lang.String getRevisionId() {
      java.lang.Object ref = revisionId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          revisionId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string revision_id = 4;</code>
     *
     * <pre>
     * Revision of the graphics card.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getRevisionIdBytes() {
      java.lang.Object ref = revisionId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        revisionId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string version = 5;
    public static final int VERSION_FIELD_NUMBER = 5;
    private java.lang.Object version_;
    /**
     * <code>optional string version = 5;</code>
     *
     * <pre>
     * Version of the graphics card driver.
     * </pre>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string version = 5;</code>
     *
     * <pre>
     * Version of the graphics card driver.
     * </pre>
     */
    public java.lang.String getVersion() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version = 5;</code>
     *
     * <pre>
     * Version of the graphics card driver.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string renderer = 6;
    public static final int RENDERER_FIELD_NUMBER = 6;
    private java.lang.Object renderer_;
    /**
     * <code>optional string renderer = 6;</code>
     *
     * <pre>
     * Name of the graphics card driver.
     * </pre>
     */
    public boolean hasRenderer() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string renderer = 6;</code>
     *
     * <pre>
     * Name of the graphics card driver.
     * </pre>
     */
    public java.lang.String getRenderer() {
      java.lang.Object ref = renderer_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          renderer_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string renderer = 6;</code>
     *
     * <pre>
     * Name of the graphics card driver.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getRendererBytes() {
      java.lang.Object ref = renderer_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        renderer_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      make_ = "";
      model_ = "";
      deviceId_ = "";
      revisionId_ = "";
      version_ = "";
      renderer_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getMakeBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getModelBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getDeviceIdBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getRevisionIdBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getVersionBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getRendererBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getMakeBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getModelBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getDeviceIdBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getRevisionIdBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getVersionBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getRendererBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.EmulatorGpuInfo}
     *
     * <pre>
     * Emulator: Host GPU info.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGpuInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGpuInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        make_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        model_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        deviceId_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        revisionId_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        version_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        renderer_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorGpuInfo_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.make_ = make_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.model_ = model_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.deviceId_ = deviceId_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.revisionId_ = revisionId_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.renderer_ = renderer_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.getDefaultInstance()) return this;
        if (other.hasMake()) {
          bitField0_ |= 0x00000001;
          make_ = other.make_;
          onChanged();
        }
        if (other.hasModel()) {
          bitField0_ |= 0x00000002;
          model_ = other.model_;
          onChanged();
        }
        if (other.hasDeviceId()) {
          bitField0_ |= 0x00000004;
          deviceId_ = other.deviceId_;
          onChanged();
        }
        if (other.hasRevisionId()) {
          bitField0_ |= 0x00000008;
          revisionId_ = other.revisionId_;
          onChanged();
        }
        if (other.hasVersion()) {
          bitField0_ |= 0x00000010;
          version_ = other.version_;
          onChanged();
        }
        if (other.hasRenderer()) {
          bitField0_ |= 0x00000020;
          renderer_ = other.renderer_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string make = 1;
      private java.lang.Object make_ = "";
      /**
       * <code>optional string make = 1;</code>
       *
       * <pre>
       * Make of the Graphics card.
       * </pre>
       */
      public boolean hasMake() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string make = 1;</code>
       *
       * <pre>
       * Make of the Graphics card.
       * </pre>
       */
      public java.lang.String getMake() {
        java.lang.Object ref = make_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          make_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string make = 1;</code>
       *
       * <pre>
       * Make of the Graphics card.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getMakeBytes() {
        java.lang.Object ref = make_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          make_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string make = 1;</code>
       *
       * <pre>
       * Make of the Graphics card.
       * </pre>
       */
      public Builder setMake(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        make_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string make = 1;</code>
       *
       * <pre>
       * Make of the Graphics card.
       * </pre>
       */
      public Builder clearMake() {
        bitField0_ = (bitField0_ & ~0x00000001);
        make_ = getDefaultInstance().getMake();
        onChanged();
        return this;
      }
      /**
       * <code>optional string make = 1;</code>
       *
       * <pre>
       * Make of the Graphics card.
       * </pre>
       */
      public Builder setMakeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        make_ = value;
        onChanged();
        return this;
      }

      // optional string model = 2;
      private java.lang.Object model_ = "";
      /**
       * <code>optional string model = 2;</code>
       *
       * <pre>
       * Model of the Graphics card.
       * </pre>
       */
      public boolean hasModel() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string model = 2;</code>
       *
       * <pre>
       * Model of the Graphics card.
       * </pre>
       */
      public java.lang.String getModel() {
        java.lang.Object ref = model_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          model_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string model = 2;</code>
       *
       * <pre>
       * Model of the Graphics card.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getModelBytes() {
        java.lang.Object ref = model_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          model_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string model = 2;</code>
       *
       * <pre>
       * Model of the Graphics card.
       * </pre>
       */
      public Builder setModel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        model_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 2;</code>
       *
       * <pre>
       * Model of the Graphics card.
       * </pre>
       */
      public Builder clearModel() {
        bitField0_ = (bitField0_ & ~0x00000002);
        model_ = getDefaultInstance().getModel();
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 2;</code>
       *
       * <pre>
       * Model of the Graphics card.
       * </pre>
       */
      public Builder setModelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        model_ = value;
        onChanged();
        return this;
      }

      // optional string device_id = 3;
      private java.lang.Object deviceId_ = "";
      /**
       * <code>optional string device_id = 3;</code>
       *
       * <pre>
       * Device id of the Graphics card.
       * </pre>
       */
      public boolean hasDeviceId() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string device_id = 3;</code>
       *
       * <pre>
       * Device id of the Graphics card.
       * </pre>
       */
      public java.lang.String getDeviceId() {
        java.lang.Object ref = deviceId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          deviceId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string device_id = 3;</code>
       *
       * <pre>
       * Device id of the Graphics card.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getDeviceIdBytes() {
        java.lang.Object ref = deviceId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deviceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string device_id = 3;</code>
       *
       * <pre>
       * Device id of the Graphics card.
       * </pre>
       */
      public Builder setDeviceId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        deviceId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string device_id = 3;</code>
       *
       * <pre>
       * Device id of the Graphics card.
       * </pre>
       */
      public Builder clearDeviceId() {
        bitField0_ = (bitField0_ & ~0x00000004);
        deviceId_ = getDefaultInstance().getDeviceId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string device_id = 3;</code>
       *
       * <pre>
       * Device id of the Graphics card.
       * </pre>
       */
      public Builder setDeviceIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        deviceId_ = value;
        onChanged();
        return this;
      }

      // optional string revision_id = 4;
      private java.lang.Object revisionId_ = "";
      /**
       * <code>optional string revision_id = 4;</code>
       *
       * <pre>
       * Revision of the graphics card.
       * </pre>
       */
      public boolean hasRevisionId() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string revision_id = 4;</code>
       *
       * <pre>
       * Revision of the graphics card.
       * </pre>
       */
      public java.lang.String getRevisionId() {
        java.lang.Object ref = revisionId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          revisionId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string revision_id = 4;</code>
       *
       * <pre>
       * Revision of the graphics card.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getRevisionIdBytes() {
        java.lang.Object ref = revisionId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          revisionId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string revision_id = 4;</code>
       *
       * <pre>
       * Revision of the graphics card.
       * </pre>
       */
      public Builder setRevisionId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        revisionId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string revision_id = 4;</code>
       *
       * <pre>
       * Revision of the graphics card.
       * </pre>
       */
      public Builder clearRevisionId() {
        bitField0_ = (bitField0_ & ~0x00000008);
        revisionId_ = getDefaultInstance().getRevisionId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string revision_id = 4;</code>
       *
       * <pre>
       * Revision of the graphics card.
       * </pre>
       */
      public Builder setRevisionIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        revisionId_ = value;
        onChanged();
        return this;
      }

      // optional string version = 5;
      private java.lang.Object version_ = "";
      /**
       * <code>optional string version = 5;</code>
       *
       * <pre>
       * Version of the graphics card driver.
       * </pre>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string version = 5;</code>
       *
       * <pre>
       * Version of the graphics card driver.
       * </pre>
       */
      public java.lang.String getVersion() {
        java.lang.Object ref = version_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          version_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string version = 5;</code>
       *
       * <pre>
       * Version of the graphics card driver.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        java.lang.Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version = 5;</code>
       *
       * <pre>
       * Version of the graphics card driver.
       * </pre>
       */
      public Builder setVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 5;</code>
       *
       * <pre>
       * Version of the graphics card driver.
       * </pre>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000010);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 5;</code>
       *
       * <pre>
       * Version of the graphics card driver.
       * </pre>
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        version_ = value;
        onChanged();
        return this;
      }

      // optional string renderer = 6;
      private java.lang.Object renderer_ = "";
      /**
       * <code>optional string renderer = 6;</code>
       *
       * <pre>
       * Name of the graphics card driver.
       * </pre>
       */
      public boolean hasRenderer() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string renderer = 6;</code>
       *
       * <pre>
       * Name of the graphics card driver.
       * </pre>
       */
      public java.lang.String getRenderer() {
        java.lang.Object ref = renderer_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          renderer_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string renderer = 6;</code>
       *
       * <pre>
       * Name of the graphics card driver.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getRendererBytes() {
        java.lang.Object ref = renderer_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          renderer_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string renderer = 6;</code>
       *
       * <pre>
       * Name of the graphics card driver.
       * </pre>
       */
      public Builder setRenderer(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        renderer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string renderer = 6;</code>
       *
       * <pre>
       * Name of the graphics card driver.
       * </pre>
       */
      public Builder clearRenderer() {
        bitField0_ = (bitField0_ & ~0x00000020);
        renderer_ = getDefaultInstance().getRenderer();
        onChanged();
        return this;
      }
      /**
       * <code>optional string renderer = 6;</code>
       *
       * <pre>
       * Name of the graphics card driver.
       * </pre>
       */
      public Builder setRendererBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        renderer_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.EmulatorGpuInfo)
    }

    static {
      defaultInstance = new EmulatorGpuInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.EmulatorGpuInfo)
  }

  public interface EmulatorDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;
    /**
     * <code>optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;</code>
     *
     * <pre>
     * Cpu architecture of the guest.
     * </pre>
     */
    boolean hasGuestArch();
    /**
     * <code>optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;</code>
     *
     * <pre>
     * Cpu architecture of the guest.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture getGuestArch();

    // optional int64 system_time = 2;
    /**
     * <code>optional int64 system_time = 2;</code>
     *
     * <pre>
     * cpu time spent in kernel mode in milliseconds since last metrics report.
     * </pre>
     */
    boolean hasSystemTime();
    /**
     * <code>optional int64 system_time = 2;</code>
     *
     * <pre>
     * cpu time spent in kernel mode in milliseconds since last metrics report.
     * </pre>
     */
    long getSystemTime();

    // optional int64 user_time = 3;
    /**
     * <code>optional int64 user_time = 3;</code>
     *
     * <pre>
     * cpu time spent in user mode in milliseconds since last metrics report.
     * </pre>
     */
    boolean hasUserTime();
    /**
     * <code>optional int64 user_time = 3;</code>
     *
     * <pre>
     * cpu time spent in user mode in milliseconds since last metrics report.
     * </pre>
     */
    long getUserTime();

    // optional int64 crashes = 4;
    /**
     * <code>optional int64 crashes = 4;</code>
     *
     * <pre>
     * number of crashes since last metrics report.
     * </pre>
     */
    boolean hasCrashes();
    /**
     * <code>optional int64 crashes = 4;</code>
     *
     * <pre>
     * number of crashes since last metrics report.
     * </pre>
     */
    long getCrashes();

    // optional int64 wall_time = 5;
    /**
     * <code>optional int64 wall_time = 5;</code>
     *
     * <pre>
     * real time in milliseconds since last metrics report.
     * </pre>
     */
    boolean hasWallTime();
    /**
     * <code>optional int64 wall_time = 5;</code>
     *
     * <pre>
     * real time in milliseconds since last metrics report.
     * </pre>
     */
    long getWallTime();

    // optional bool exit_started = 6;
    /**
     * <code>optional bool exit_started = 6;</code>
     *
     * <pre>
     * True iff a crash occurred while process started its exit routines.
     * </pre>
     */
    boolean hasExitStarted();
    /**
     * <code>optional bool exit_started = 6;</code>
     *
     * <pre>
     * True iff a crash occurred while process started its exit routines.
     * </pre>
     */
    boolean getExitStarted();

    // optional int64 guest_api_level = 7;
    /**
     * <code>optional int64 guest_api_level = 7;</code>
     *
     * <pre>
     * The API level of the running guest image.
     * </pre>
     */
    boolean hasGuestApiLevel();
    /**
     * <code>optional int64 guest_api_level = 7;</code>
     *
     * <pre>
     * The API level of the running guest image.
     * </pre>
     */
    long getGuestApiLevel();

    // optional bool guest_gpu_enabled = 8;
    /**
     * <code>optional bool guest_gpu_enabled = 8;</code>
     *
     * <pre>
     * The value of guest gpu option (ro.kernel.qemu.gles)
     * </pre>
     */
    boolean hasGuestGpuEnabled();
    /**
     * <code>optional bool guest_gpu_enabled = 8;</code>
     *
     * <pre>
     * The value of guest gpu option (ro.kernel.qemu.gles)
     * </pre>
     */
    boolean getGuestGpuEnabled();

    // optional bool is_opengl_alive = 10;
    /**
     * <code>optional bool is_opengl_alive = 10;</code>
     *
     * <pre>
     * True if we were able to correctly initialize opengl on the host.
     * </pre>
     */
    boolean hasIsOpenglAlive();
    /**
     * <code>optional bool is_opengl_alive = 10;</code>
     *
     * <pre>
     * True if we were able to correctly initialize opengl on the host.
     * </pre>
     */
    boolean getIsOpenglAlive();

    // optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;
    /**
     * <code>optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;</code>
     *
     * <pre>
     * Connectivity from adb of the running emulator instance.
     * </pre>
     */
    boolean hasAdbLiveness();
    /**
     * <code>optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;</code>
     *
     * <pre>
     * Connectivity from adb of the running emulator instance.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness getAdbLiveness();

    // optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;
    /**
     * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
     *
     * <pre>
     * Information about the gl implementation in the guest image.
     * </pre>
     */
    boolean hasGuestGl();
    /**
     * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
     *
     * <pre>
     * Information about the gl implementation in the guest image.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo getGuestGl();
    /**
     * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
     *
     * <pre>
     * Information about the gl implementation in the guest image.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfoOrBuilder getGuestGlOrBuilder();

    // repeated .android_studio.EmulatorGpuInfo host_gpu = 13;
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo> 
        getHostGpuList();
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo getHostGpu(int index);
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    int getHostGpuCount();
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder> 
        getHostGpuOrBuilderList();
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder getHostGpuOrBuilder(
        int index);

    // optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;
    /**
     * <code>optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;</code>
     *
     * <pre>
     * The "phase" of an emulator session where crash happened.
     * </pre>
     */
    boolean hasSessionPhase();
    /**
     * <code>optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;</code>
     *
     * <pre>
     * The "phase" of an emulator session where crash happened.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase getSessionPhase();
  }
  /**
   * Protobuf type {@code android_studio.EmulatorDetails}
   *
   * <pre>
   * Metrics related to the Emulator.
   * </pre>
   */
  public static final class EmulatorDetails extends
      com.google.protobuf.GeneratedMessage
      implements EmulatorDetailsOrBuilder {
    // Use EmulatorDetails.newBuilder() to construct.
    private EmulatorDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EmulatorDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EmulatorDetails defaultInstance;
    public static EmulatorDetails getDefaultInstance() {
      return defaultInstance;
    }

    public EmulatorDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EmulatorDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture value = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                guestArch_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              systemTime_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              userTime_ = input.readInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              crashes_ = input.readInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              wallTime_ = input.readInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              exitStarted_ = input.readBool();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              guestApiLevel_ = input.readInt64();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              guestGpuEnabled_ = input.readBool();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000100;
              isOpenglAlive_ = input.readBool();
              break;
            }
            case 88: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness value = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(11, rawValue);
              } else {
                bitField0_ |= 0x00000200;
                adbLiveness_ = value;
              }
              break;
            }
            case 98: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = guestGl_.toBuilder();
              }
              guestGl_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(guestGl_);
                guestGl_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
            case 106: {
              if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                hostGpu_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo>();
                mutable_bitField0_ |= 0x00000800;
              }
              hostGpu_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.PARSER, extensionRegistry));
              break;
            }
            case 112: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase value = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(14, rawValue);
              } else {
                bitField0_ |= 0x00000800;
                sessionPhase_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
          hostGpu_ = java.util.Collections.unmodifiableList(hostGpu_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<EmulatorDetails> PARSER =
        new com.google.protobuf.AbstractParser<EmulatorDetails>() {
      public EmulatorDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EmulatorDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EmulatorDetails> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.EmulatorDetails.EmulatorAdbLiveness}
     *
     * <pre>
     * Emulator instance liveness as determined via adb connectivity.
     * </pre>
     */
    public enum EmulatorAdbLiveness
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_EMULATOR_ADB_LIVENESS = 0;</code>
       */
      UNKNOWN_EMULATOR_ADB_LIVENESS(0, 0),
      /**
       * <code>FAILURE_NO_ADB = 1;</code>
       */
      FAILURE_NO_ADB(1, 1),
      /**
       * <code>ADB_ONLINE = 2;</code>
       */
      ADB_ONLINE(2, 2),
      /**
       * <code>FAILURE_ADB_SERVER_DEAD = 3;</code>
       */
      FAILURE_ADB_SERVER_DEAD(3, 3),
      /**
       * <code>FAILURE_EMULATOR_DEAD = 4;</code>
       */
      FAILURE_EMULATOR_DEAD(4, 4),
      ;

      /**
       * <code>UNKNOWN_EMULATOR_ADB_LIVENESS = 0;</code>
       */
      public static final int UNKNOWN_EMULATOR_ADB_LIVENESS_VALUE = 0;
      /**
       * <code>FAILURE_NO_ADB = 1;</code>
       */
      public static final int FAILURE_NO_ADB_VALUE = 1;
      /**
       * <code>ADB_ONLINE = 2;</code>
       */
      public static final int ADB_ONLINE_VALUE = 2;
      /**
       * <code>FAILURE_ADB_SERVER_DEAD = 3;</code>
       */
      public static final int FAILURE_ADB_SERVER_DEAD_VALUE = 3;
      /**
       * <code>FAILURE_EMULATOR_DEAD = 4;</code>
       */
      public static final int FAILURE_EMULATOR_DEAD_VALUE = 4;


      public final int getNumber() { return value; }

      public static EmulatorAdbLiveness valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_EMULATOR_ADB_LIVENESS;
          case 1: return FAILURE_NO_ADB;
          case 2: return ADB_ONLINE;
          case 3: return FAILURE_ADB_SERVER_DEAD;
          case 4: return FAILURE_EMULATOR_DEAD;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<EmulatorAdbLiveness>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<EmulatorAdbLiveness>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<EmulatorAdbLiveness>() {
              public EmulatorAdbLiveness findValueByNumber(int number) {
                return EmulatorAdbLiveness.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDescriptor().getEnumTypes().get(0);
      }

      private static final EmulatorAdbLiveness[] VALUES = values();

      public static EmulatorAdbLiveness valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private EmulatorAdbLiveness(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.EmulatorDetails.EmulatorAdbLiveness)
    }

    /**
     * Protobuf enum {@code android_studio.EmulatorDetails.EmulatorSessionPhase}
     *
     * <pre>
     * In What phase of the lifetime of the Emulator were the metrics reported.
     * </pre>
     */
    public enum EmulatorSessionPhase
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_EMULATOR_SESSION_PHASE = 0;</code>
       */
      UNKNOWN_EMULATOR_SESSION_PHASE(0, 0),
      /**
       * <code>LAUNCHER = 1;</code>
       *
       * <pre>
       * The custom emulator launcher is running.
       * </pre>
       */
      LAUNCHER(1, 1),
      /**
       * <code>PARSE_OPTIONS = 2;</code>
       *
       * <pre>
       * Final emulator target is parsing command line arguments.
       * </pre>
       */
      PARSE_OPTIONS(2, 2),
      /**
       * <code>INIT_GENERAL = 3;</code>
       *
       * <pre>
       * Initialization - general.
       * </pre>
       */
      INIT_GENERAL(3, 3),
      /**
       * <code>INIT_GPU = 4;</code>
       *
       * <pre>
       * Initializing GPU
       * </pre>
       */
      INIT_GPU(4, 4),
      /**
       * <code>INIT_ACCEL = 5;</code>
       *
       * <pre>
       * Initializing hardware acceleration.
       * </pre>
       */
      INIT_ACCEL(5, 5),
      /**
       * <code>RUNNING_GENERAL = 6;</code>
       *
       * <pre>
       * Main use case -- init done, emulator is up.
       * </pre>
       */
      RUNNING_GENERAL(6, 6),
      /**
       * <code>EXIT_GENERAL = 7;</code>
       *
       * <pre>
       * Exiting
       * </pre>
       */
      EXIT_GENERAL(7, 7),
      ;

      /**
       * <code>UNKNOWN_EMULATOR_SESSION_PHASE = 0;</code>
       */
      public static final int UNKNOWN_EMULATOR_SESSION_PHASE_VALUE = 0;
      /**
       * <code>LAUNCHER = 1;</code>
       *
       * <pre>
       * The custom emulator launcher is running.
       * </pre>
       */
      public static final int LAUNCHER_VALUE = 1;
      /**
       * <code>PARSE_OPTIONS = 2;</code>
       *
       * <pre>
       * Final emulator target is parsing command line arguments.
       * </pre>
       */
      public static final int PARSE_OPTIONS_VALUE = 2;
      /**
       * <code>INIT_GENERAL = 3;</code>
       *
       * <pre>
       * Initialization - general.
       * </pre>
       */
      public static final int INIT_GENERAL_VALUE = 3;
      /**
       * <code>INIT_GPU = 4;</code>
       *
       * <pre>
       * Initializing GPU
       * </pre>
       */
      public static final int INIT_GPU_VALUE = 4;
      /**
       * <code>INIT_ACCEL = 5;</code>
       *
       * <pre>
       * Initializing hardware acceleration.
       * </pre>
       */
      public static final int INIT_ACCEL_VALUE = 5;
      /**
       * <code>RUNNING_GENERAL = 6;</code>
       *
       * <pre>
       * Main use case -- init done, emulator is up.
       * </pre>
       */
      public static final int RUNNING_GENERAL_VALUE = 6;
      /**
       * <code>EXIT_GENERAL = 7;</code>
       *
       * <pre>
       * Exiting
       * </pre>
       */
      public static final int EXIT_GENERAL_VALUE = 7;


      public final int getNumber() { return value; }

      public static EmulatorSessionPhase valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_EMULATOR_SESSION_PHASE;
          case 1: return LAUNCHER;
          case 2: return PARSE_OPTIONS;
          case 3: return INIT_GENERAL;
          case 4: return INIT_GPU;
          case 5: return INIT_ACCEL;
          case 6: return RUNNING_GENERAL;
          case 7: return EXIT_GENERAL;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<EmulatorSessionPhase>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<EmulatorSessionPhase>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<EmulatorSessionPhase>() {
              public EmulatorSessionPhase findValueByNumber(int number) {
                return EmulatorSessionPhase.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDescriptor().getEnumTypes().get(1);
      }

      private static final EmulatorSessionPhase[] VALUES = values();

      public static EmulatorSessionPhase valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private EmulatorSessionPhase(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.EmulatorDetails.EmulatorSessionPhase)
    }

    /**
     * Protobuf enum {@code android_studio.EmulatorDetails.GuestCpuArchitecture}
     *
     * <pre>
     * Chip the emulator is emulating for.
     * </pre>
     */
    public enum GuestCpuArchitecture
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_GUEST_CPU_ARCHITECTURE = 0;</code>
       */
      UNKNOWN_GUEST_CPU_ARCHITECTURE(0, 0),
      /**
       * <code>X86 = 1;</code>
       */
      X86(1, 1),
      /**
       * <code>X86_64 = 2;</code>
       */
      X86_64(2, 2),
      /**
       * <code>ARM = 3;</code>
       */
      ARM(3, 3),
      /**
       * <code>ARM_64 = 4;</code>
       */
      ARM_64(4, 4),
      /**
       * <code>MIPS = 5;</code>
       */
      MIPS(5, 5),
      /**
       * <code>MIPS_64 = 6;</code>
       */
      MIPS_64(6, 6),
      ;

      /**
       * <code>UNKNOWN_GUEST_CPU_ARCHITECTURE = 0;</code>
       */
      public static final int UNKNOWN_GUEST_CPU_ARCHITECTURE_VALUE = 0;
      /**
       * <code>X86 = 1;</code>
       */
      public static final int X86_VALUE = 1;
      /**
       * <code>X86_64 = 2;</code>
       */
      public static final int X86_64_VALUE = 2;
      /**
       * <code>ARM = 3;</code>
       */
      public static final int ARM_VALUE = 3;
      /**
       * <code>ARM_64 = 4;</code>
       */
      public static final int ARM_64_VALUE = 4;
      /**
       * <code>MIPS = 5;</code>
       */
      public static final int MIPS_VALUE = 5;
      /**
       * <code>MIPS_64 = 6;</code>
       */
      public static final int MIPS_64_VALUE = 6;


      public final int getNumber() { return value; }

      public static GuestCpuArchitecture valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_GUEST_CPU_ARCHITECTURE;
          case 1: return X86;
          case 2: return X86_64;
          case 3: return ARM;
          case 4: return ARM_64;
          case 5: return MIPS;
          case 6: return MIPS_64;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<GuestCpuArchitecture>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<GuestCpuArchitecture>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<GuestCpuArchitecture>() {
              public GuestCpuArchitecture findValueByNumber(int number) {
                return GuestCpuArchitecture.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDescriptor().getEnumTypes().get(2);
      }

      private static final GuestCpuArchitecture[] VALUES = values();

      public static GuestCpuArchitecture valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private GuestCpuArchitecture(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.EmulatorDetails.GuestCpuArchitecture)
    }

    private int bitField0_;
    // optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;
    public static final int GUEST_ARCH_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture guestArch_;
    /**
     * <code>optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;</code>
     *
     * <pre>
     * Cpu architecture of the guest.
     * </pre>
     */
    public boolean hasGuestArch() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;</code>
     *
     * <pre>
     * Cpu architecture of the guest.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture getGuestArch() {
      return guestArch_;
    }

    // optional int64 system_time = 2;
    public static final int SYSTEM_TIME_FIELD_NUMBER = 2;
    private long systemTime_;
    /**
     * <code>optional int64 system_time = 2;</code>
     *
     * <pre>
     * cpu time spent in kernel mode in milliseconds since last metrics report.
     * </pre>
     */
    public boolean hasSystemTime() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 system_time = 2;</code>
     *
     * <pre>
     * cpu time spent in kernel mode in milliseconds since last metrics report.
     * </pre>
     */
    public long getSystemTime() {
      return systemTime_;
    }

    // optional int64 user_time = 3;
    public static final int USER_TIME_FIELD_NUMBER = 3;
    private long userTime_;
    /**
     * <code>optional int64 user_time = 3;</code>
     *
     * <pre>
     * cpu time spent in user mode in milliseconds since last metrics report.
     * </pre>
     */
    public boolean hasUserTime() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 user_time = 3;</code>
     *
     * <pre>
     * cpu time spent in user mode in milliseconds since last metrics report.
     * </pre>
     */
    public long getUserTime() {
      return userTime_;
    }

    // optional int64 crashes = 4;
    public static final int CRASHES_FIELD_NUMBER = 4;
    private long crashes_;
    /**
     * <code>optional int64 crashes = 4;</code>
     *
     * <pre>
     * number of crashes since last metrics report.
     * </pre>
     */
    public boolean hasCrashes() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 crashes = 4;</code>
     *
     * <pre>
     * number of crashes since last metrics report.
     * </pre>
     */
    public long getCrashes() {
      return crashes_;
    }

    // optional int64 wall_time = 5;
    public static final int WALL_TIME_FIELD_NUMBER = 5;
    private long wallTime_;
    /**
     * <code>optional int64 wall_time = 5;</code>
     *
     * <pre>
     * real time in milliseconds since last metrics report.
     * </pre>
     */
    public boolean hasWallTime() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 wall_time = 5;</code>
     *
     * <pre>
     * real time in milliseconds since last metrics report.
     * </pre>
     */
    public long getWallTime() {
      return wallTime_;
    }

    // optional bool exit_started = 6;
    public static final int EXIT_STARTED_FIELD_NUMBER = 6;
    private boolean exitStarted_;
    /**
     * <code>optional bool exit_started = 6;</code>
     *
     * <pre>
     * True iff a crash occurred while process started its exit routines.
     * </pre>
     */
    public boolean hasExitStarted() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool exit_started = 6;</code>
     *
     * <pre>
     * True iff a crash occurred while process started its exit routines.
     * </pre>
     */
    public boolean getExitStarted() {
      return exitStarted_;
    }

    // optional int64 guest_api_level = 7;
    public static final int GUEST_API_LEVEL_FIELD_NUMBER = 7;
    private long guestApiLevel_;
    /**
     * <code>optional int64 guest_api_level = 7;</code>
     *
     * <pre>
     * The API level of the running guest image.
     * </pre>
     */
    public boolean hasGuestApiLevel() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 guest_api_level = 7;</code>
     *
     * <pre>
     * The API level of the running guest image.
     * </pre>
     */
    public long getGuestApiLevel() {
      return guestApiLevel_;
    }

    // optional bool guest_gpu_enabled = 8;
    public static final int GUEST_GPU_ENABLED_FIELD_NUMBER = 8;
    private boolean guestGpuEnabled_;
    /**
     * <code>optional bool guest_gpu_enabled = 8;</code>
     *
     * <pre>
     * The value of guest gpu option (ro.kernel.qemu.gles)
     * </pre>
     */
    public boolean hasGuestGpuEnabled() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional bool guest_gpu_enabled = 8;</code>
     *
     * <pre>
     * The value of guest gpu option (ro.kernel.qemu.gles)
     * </pre>
     */
    public boolean getGuestGpuEnabled() {
      return guestGpuEnabled_;
    }

    // optional bool is_opengl_alive = 10;
    public static final int IS_OPENGL_ALIVE_FIELD_NUMBER = 10;
    private boolean isOpenglAlive_;
    /**
     * <code>optional bool is_opengl_alive = 10;</code>
     *
     * <pre>
     * True if we were able to correctly initialize opengl on the host.
     * </pre>
     */
    public boolean hasIsOpenglAlive() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional bool is_opengl_alive = 10;</code>
     *
     * <pre>
     * True if we were able to correctly initialize opengl on the host.
     * </pre>
     */
    public boolean getIsOpenglAlive() {
      return isOpenglAlive_;
    }

    // optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;
    public static final int ADB_LIVENESS_FIELD_NUMBER = 11;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness adbLiveness_;
    /**
     * <code>optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;</code>
     *
     * <pre>
     * Connectivity from adb of the running emulator instance.
     * </pre>
     */
    public boolean hasAdbLiveness() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;</code>
     *
     * <pre>
     * Connectivity from adb of the running emulator instance.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness getAdbLiveness() {
      return adbLiveness_;
    }

    // optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;
    public static final int GUEST_GL_FIELD_NUMBER = 12;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo guestGl_;
    /**
     * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
     *
     * <pre>
     * Information about the gl implementation in the guest image.
     * </pre>
     */
    public boolean hasGuestGl() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
     *
     * <pre>
     * Information about the gl implementation in the guest image.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo getGuestGl() {
      return guestGl_;
    }
    /**
     * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
     *
     * <pre>
     * Information about the gl implementation in the guest image.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfoOrBuilder getGuestGlOrBuilder() {
      return guestGl_;
    }

    // repeated .android_studio.EmulatorGpuInfo host_gpu = 13;
    public static final int HOST_GPU_FIELD_NUMBER = 13;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo> hostGpu_;
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo> getHostGpuList() {
      return hostGpu_;
    }
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder> 
        getHostGpuOrBuilderList() {
      return hostGpu_;
    }
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    public int getHostGpuCount() {
      return hostGpu_.size();
    }
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo getHostGpu(int index) {
      return hostGpu_.get(index);
    }
    /**
     * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
     *
     * <pre>
     * Information about the host GPUs (one per GPU).
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder getHostGpuOrBuilder(
        int index) {
      return hostGpu_.get(index);
    }

    // optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;
    public static final int SESSION_PHASE_FIELD_NUMBER = 14;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase sessionPhase_;
    /**
     * <code>optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;</code>
     *
     * <pre>
     * The "phase" of an emulator session where crash happened.
     * </pre>
     */
    public boolean hasSessionPhase() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;</code>
     *
     * <pre>
     * The "phase" of an emulator session where crash happened.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase getSessionPhase() {
      return sessionPhase_;
    }

    private void initFields() {
      guestArch_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture.UNKNOWN_GUEST_CPU_ARCHITECTURE;
      systemTime_ = 0L;
      userTime_ = 0L;
      crashes_ = 0L;
      wallTime_ = 0L;
      exitStarted_ = false;
      guestApiLevel_ = 0L;
      guestGpuEnabled_ = false;
      isOpenglAlive_ = false;
      adbLiveness_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness.UNKNOWN_EMULATOR_ADB_LIVENESS;
      guestGl_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.getDefaultInstance();
      hostGpu_ = java.util.Collections.emptyList();
      sessionPhase_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase.UNKNOWN_EMULATOR_SESSION_PHASE;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, guestArch_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, systemTime_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, userTime_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, crashes_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, wallTime_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, exitStarted_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(7, guestApiLevel_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBool(8, guestGpuEnabled_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBool(10, isOpenglAlive_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeEnum(11, adbLiveness_.getNumber());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(12, guestGl_);
      }
      for (int i = 0; i < hostGpu_.size(); i++) {
        output.writeMessage(13, hostGpu_.get(i));
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeEnum(14, sessionPhase_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, guestArch_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, systemTime_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, userTime_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, crashes_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, wallTime_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, exitStarted_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, guestApiLevel_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, guestGpuEnabled_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, isOpenglAlive_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(11, adbLiveness_.getNumber());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, guestGl_);
      }
      for (int i = 0; i < hostGpu_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, hostGpu_.get(i));
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(14, sessionPhase_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.EmulatorDetails}
     *
     * <pre>
     * Metrics related to the Emulator.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getGuestGlFieldBuilder();
          getHostGpuFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        guestArch_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture.UNKNOWN_GUEST_CPU_ARCHITECTURE;
        bitField0_ = (bitField0_ & ~0x00000001);
        systemTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        userTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        crashes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        wallTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        exitStarted_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        guestApiLevel_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        guestGpuEnabled_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        isOpenglAlive_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        adbLiveness_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness.UNKNOWN_EMULATOR_ADB_LIVENESS;
        bitField0_ = (bitField0_ & ~0x00000200);
        if (guestGlBuilder_ == null) {
          guestGl_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.getDefaultInstance();
        } else {
          guestGlBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        if (hostGpuBuilder_ == null) {
          hostGpu_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          hostGpuBuilder_.clear();
        }
        sessionPhase_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase.UNKNOWN_EMULATOR_SESSION_PHASE;
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.guestArch_ = guestArch_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.systemTime_ = systemTime_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.userTime_ = userTime_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.crashes_ = crashes_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.wallTime_ = wallTime_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.exitStarted_ = exitStarted_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.guestApiLevel_ = guestApiLevel_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.guestGpuEnabled_ = guestGpuEnabled_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.isOpenglAlive_ = isOpenglAlive_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.adbLiveness_ = adbLiveness_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        if (guestGlBuilder_ == null) {
          result.guestGl_ = guestGl_;
        } else {
          result.guestGl_ = guestGlBuilder_.build();
        }
        if (hostGpuBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800)) {
            hostGpu_ = java.util.Collections.unmodifiableList(hostGpu_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.hostGpu_ = hostGpu_;
        } else {
          result.hostGpu_ = hostGpuBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.sessionPhase_ = sessionPhase_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.getDefaultInstance()) return this;
        if (other.hasGuestArch()) {
          setGuestArch(other.getGuestArch());
        }
        if (other.hasSystemTime()) {
          setSystemTime(other.getSystemTime());
        }
        if (other.hasUserTime()) {
          setUserTime(other.getUserTime());
        }
        if (other.hasCrashes()) {
          setCrashes(other.getCrashes());
        }
        if (other.hasWallTime()) {
          setWallTime(other.getWallTime());
        }
        if (other.hasExitStarted()) {
          setExitStarted(other.getExitStarted());
        }
        if (other.hasGuestApiLevel()) {
          setGuestApiLevel(other.getGuestApiLevel());
        }
        if (other.hasGuestGpuEnabled()) {
          setGuestGpuEnabled(other.getGuestGpuEnabled());
        }
        if (other.hasIsOpenglAlive()) {
          setIsOpenglAlive(other.getIsOpenglAlive());
        }
        if (other.hasAdbLiveness()) {
          setAdbLiveness(other.getAdbLiveness());
        }
        if (other.hasGuestGl()) {
          mergeGuestGl(other.getGuestGl());
        }
        if (hostGpuBuilder_ == null) {
          if (!other.hostGpu_.isEmpty()) {
            if (hostGpu_.isEmpty()) {
              hostGpu_ = other.hostGpu_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensureHostGpuIsMutable();
              hostGpu_.addAll(other.hostGpu_);
            }
            onChanged();
          }
        } else {
          if (!other.hostGpu_.isEmpty()) {
            if (hostGpuBuilder_.isEmpty()) {
              hostGpuBuilder_.dispose();
              hostGpuBuilder_ = null;
              hostGpu_ = other.hostGpu_;
              bitField0_ = (bitField0_ & ~0x00000800);
              hostGpuBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getHostGpuFieldBuilder() : null;
            } else {
              hostGpuBuilder_.addAllMessages(other.hostGpu_);
            }
          }
        }
        if (other.hasSessionPhase()) {
          setSessionPhase(other.getSessionPhase());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture guestArch_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture.UNKNOWN_GUEST_CPU_ARCHITECTURE;
      /**
       * <code>optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;</code>
       *
       * <pre>
       * Cpu architecture of the guest.
       * </pre>
       */
      public boolean hasGuestArch() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;</code>
       *
       * <pre>
       * Cpu architecture of the guest.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture getGuestArch() {
        return guestArch_;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;</code>
       *
       * <pre>
       * Cpu architecture of the guest.
       * </pre>
       */
      public Builder setGuestArch(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        guestArch_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.GuestCpuArchitecture guest_arch = 1;</code>
       *
       * <pre>
       * Cpu architecture of the guest.
       * </pre>
       */
      public Builder clearGuestArch() {
        bitField0_ = (bitField0_ & ~0x00000001);
        guestArch_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.GuestCpuArchitecture.UNKNOWN_GUEST_CPU_ARCHITECTURE;
        onChanged();
        return this;
      }

      // optional int64 system_time = 2;
      private long systemTime_ ;
      /**
       * <code>optional int64 system_time = 2;</code>
       *
       * <pre>
       * cpu time spent in kernel mode in milliseconds since last metrics report.
       * </pre>
       */
      public boolean hasSystemTime() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 system_time = 2;</code>
       *
       * <pre>
       * cpu time spent in kernel mode in milliseconds since last metrics report.
       * </pre>
       */
      public long getSystemTime() {
        return systemTime_;
      }
      /**
       * <code>optional int64 system_time = 2;</code>
       *
       * <pre>
       * cpu time spent in kernel mode in milliseconds since last metrics report.
       * </pre>
       */
      public Builder setSystemTime(long value) {
        bitField0_ |= 0x00000002;
        systemTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 system_time = 2;</code>
       *
       * <pre>
       * cpu time spent in kernel mode in milliseconds since last metrics report.
       * </pre>
       */
      public Builder clearSystemTime() {
        bitField0_ = (bitField0_ & ~0x00000002);
        systemTime_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 user_time = 3;
      private long userTime_ ;
      /**
       * <code>optional int64 user_time = 3;</code>
       *
       * <pre>
       * cpu time spent in user mode in milliseconds since last metrics report.
       * </pre>
       */
      public boolean hasUserTime() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 user_time = 3;</code>
       *
       * <pre>
       * cpu time spent in user mode in milliseconds since last metrics report.
       * </pre>
       */
      public long getUserTime() {
        return userTime_;
      }
      /**
       * <code>optional int64 user_time = 3;</code>
       *
       * <pre>
       * cpu time spent in user mode in milliseconds since last metrics report.
       * </pre>
       */
      public Builder setUserTime(long value) {
        bitField0_ |= 0x00000004;
        userTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 user_time = 3;</code>
       *
       * <pre>
       * cpu time spent in user mode in milliseconds since last metrics report.
       * </pre>
       */
      public Builder clearUserTime() {
        bitField0_ = (bitField0_ & ~0x00000004);
        userTime_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 crashes = 4;
      private long crashes_ ;
      /**
       * <code>optional int64 crashes = 4;</code>
       *
       * <pre>
       * number of crashes since last metrics report.
       * </pre>
       */
      public boolean hasCrashes() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 crashes = 4;</code>
       *
       * <pre>
       * number of crashes since last metrics report.
       * </pre>
       */
      public long getCrashes() {
        return crashes_;
      }
      /**
       * <code>optional int64 crashes = 4;</code>
       *
       * <pre>
       * number of crashes since last metrics report.
       * </pre>
       */
      public Builder setCrashes(long value) {
        bitField0_ |= 0x00000008;
        crashes_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 crashes = 4;</code>
       *
       * <pre>
       * number of crashes since last metrics report.
       * </pre>
       */
      public Builder clearCrashes() {
        bitField0_ = (bitField0_ & ~0x00000008);
        crashes_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 wall_time = 5;
      private long wallTime_ ;
      /**
       * <code>optional int64 wall_time = 5;</code>
       *
       * <pre>
       * real time in milliseconds since last metrics report.
       * </pre>
       */
      public boolean hasWallTime() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 wall_time = 5;</code>
       *
       * <pre>
       * real time in milliseconds since last metrics report.
       * </pre>
       */
      public long getWallTime() {
        return wallTime_;
      }
      /**
       * <code>optional int64 wall_time = 5;</code>
       *
       * <pre>
       * real time in milliseconds since last metrics report.
       * </pre>
       */
      public Builder setWallTime(long value) {
        bitField0_ |= 0x00000010;
        wallTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 wall_time = 5;</code>
       *
       * <pre>
       * real time in milliseconds since last metrics report.
       * </pre>
       */
      public Builder clearWallTime() {
        bitField0_ = (bitField0_ & ~0x00000010);
        wallTime_ = 0L;
        onChanged();
        return this;
      }

      // optional bool exit_started = 6;
      private boolean exitStarted_ ;
      /**
       * <code>optional bool exit_started = 6;</code>
       *
       * <pre>
       * True iff a crash occurred while process started its exit routines.
       * </pre>
       */
      public boolean hasExitStarted() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool exit_started = 6;</code>
       *
       * <pre>
       * True iff a crash occurred while process started its exit routines.
       * </pre>
       */
      public boolean getExitStarted() {
        return exitStarted_;
      }
      /**
       * <code>optional bool exit_started = 6;</code>
       *
       * <pre>
       * True iff a crash occurred while process started its exit routines.
       * </pre>
       */
      public Builder setExitStarted(boolean value) {
        bitField0_ |= 0x00000020;
        exitStarted_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool exit_started = 6;</code>
       *
       * <pre>
       * True iff a crash occurred while process started its exit routines.
       * </pre>
       */
      public Builder clearExitStarted() {
        bitField0_ = (bitField0_ & ~0x00000020);
        exitStarted_ = false;
        onChanged();
        return this;
      }

      // optional int64 guest_api_level = 7;
      private long guestApiLevel_ ;
      /**
       * <code>optional int64 guest_api_level = 7;</code>
       *
       * <pre>
       * The API level of the running guest image.
       * </pre>
       */
      public boolean hasGuestApiLevel() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 guest_api_level = 7;</code>
       *
       * <pre>
       * The API level of the running guest image.
       * </pre>
       */
      public long getGuestApiLevel() {
        return guestApiLevel_;
      }
      /**
       * <code>optional int64 guest_api_level = 7;</code>
       *
       * <pre>
       * The API level of the running guest image.
       * </pre>
       */
      public Builder setGuestApiLevel(long value) {
        bitField0_ |= 0x00000040;
        guestApiLevel_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 guest_api_level = 7;</code>
       *
       * <pre>
       * The API level of the running guest image.
       * </pre>
       */
      public Builder clearGuestApiLevel() {
        bitField0_ = (bitField0_ & ~0x00000040);
        guestApiLevel_ = 0L;
        onChanged();
        return this;
      }

      // optional bool guest_gpu_enabled = 8;
      private boolean guestGpuEnabled_ ;
      /**
       * <code>optional bool guest_gpu_enabled = 8;</code>
       *
       * <pre>
       * The value of guest gpu option (ro.kernel.qemu.gles)
       * </pre>
       */
      public boolean hasGuestGpuEnabled() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional bool guest_gpu_enabled = 8;</code>
       *
       * <pre>
       * The value of guest gpu option (ro.kernel.qemu.gles)
       * </pre>
       */
      public boolean getGuestGpuEnabled() {
        return guestGpuEnabled_;
      }
      /**
       * <code>optional bool guest_gpu_enabled = 8;</code>
       *
       * <pre>
       * The value of guest gpu option (ro.kernel.qemu.gles)
       * </pre>
       */
      public Builder setGuestGpuEnabled(boolean value) {
        bitField0_ |= 0x00000080;
        guestGpuEnabled_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool guest_gpu_enabled = 8;</code>
       *
       * <pre>
       * The value of guest gpu option (ro.kernel.qemu.gles)
       * </pre>
       */
      public Builder clearGuestGpuEnabled() {
        bitField0_ = (bitField0_ & ~0x00000080);
        guestGpuEnabled_ = false;
        onChanged();
        return this;
      }

      // optional bool is_opengl_alive = 10;
      private boolean isOpenglAlive_ ;
      /**
       * <code>optional bool is_opengl_alive = 10;</code>
       *
       * <pre>
       * True if we were able to correctly initialize opengl on the host.
       * </pre>
       */
      public boolean hasIsOpenglAlive() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional bool is_opengl_alive = 10;</code>
       *
       * <pre>
       * True if we were able to correctly initialize opengl on the host.
       * </pre>
       */
      public boolean getIsOpenglAlive() {
        return isOpenglAlive_;
      }
      /**
       * <code>optional bool is_opengl_alive = 10;</code>
       *
       * <pre>
       * True if we were able to correctly initialize opengl on the host.
       * </pre>
       */
      public Builder setIsOpenglAlive(boolean value) {
        bitField0_ |= 0x00000100;
        isOpenglAlive_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool is_opengl_alive = 10;</code>
       *
       * <pre>
       * True if we were able to correctly initialize opengl on the host.
       * </pre>
       */
      public Builder clearIsOpenglAlive() {
        bitField0_ = (bitField0_ & ~0x00000100);
        isOpenglAlive_ = false;
        onChanged();
        return this;
      }

      // optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness adbLiveness_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness.UNKNOWN_EMULATOR_ADB_LIVENESS;
      /**
       * <code>optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;</code>
       *
       * <pre>
       * Connectivity from adb of the running emulator instance.
       * </pre>
       */
      public boolean hasAdbLiveness() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;</code>
       *
       * <pre>
       * Connectivity from adb of the running emulator instance.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness getAdbLiveness() {
        return adbLiveness_;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;</code>
       *
       * <pre>
       * Connectivity from adb of the running emulator instance.
       * </pre>
       */
      public Builder setAdbLiveness(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000200;
        adbLiveness_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.EmulatorAdbLiveness adb_liveness = 11;</code>
       *
       * <pre>
       * Connectivity from adb of the running emulator instance.
       * </pre>
       */
      public Builder clearAdbLiveness() {
        bitField0_ = (bitField0_ & ~0x00000200);
        adbLiveness_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorAdbLiveness.UNKNOWN_EMULATOR_ADB_LIVENESS;
        onChanged();
        return this;
      }

      // optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo guestGl_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfoOrBuilder> guestGlBuilder_;
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      public boolean hasGuestGl() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo getGuestGl() {
        if (guestGlBuilder_ == null) {
          return guestGl_;
        } else {
          return guestGlBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      public Builder setGuestGl(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo value) {
        if (guestGlBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          guestGl_ = value;
          onChanged();
        } else {
          guestGlBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      public Builder setGuestGl(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.Builder builderForValue) {
        if (guestGlBuilder_ == null) {
          guestGl_ = builderForValue.build();
          onChanged();
        } else {
          guestGlBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      public Builder mergeGuestGl(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo value) {
        if (guestGlBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              guestGl_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.getDefaultInstance()) {
            guestGl_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.newBuilder(guestGl_).mergeFrom(value).buildPartial();
          } else {
            guestGl_ = value;
          }
          onChanged();
        } else {
          guestGlBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      public Builder clearGuestGl() {
        if (guestGlBuilder_ == null) {
          guestGl_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.getDefaultInstance();
          onChanged();
        } else {
          guestGlBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.Builder getGuestGlBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getGuestGlFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfoOrBuilder getGuestGlOrBuilder() {
        if (guestGlBuilder_ != null) {
          return guestGlBuilder_.getMessageOrBuilder();
        } else {
          return guestGl_;
        }
      }
      /**
       * <code>optional .android_studio.EmulatorGuestGlInfo guest_gl = 12;</code>
       *
       * <pre>
       * Information about the gl implementation in the guest image.
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfoOrBuilder> 
          getGuestGlFieldBuilder() {
        if (guestGlBuilder_ == null) {
          guestGlBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGuestGlInfoOrBuilder>(
                  guestGl_,
                  getParentForChildren(),
                  isClean());
          guestGl_ = null;
        }
        return guestGlBuilder_;
      }

      // repeated .android_studio.EmulatorGpuInfo host_gpu = 13;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo> hostGpu_ =
        java.util.Collections.emptyList();
      private void ensureHostGpuIsMutable() {
        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
          hostGpu_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo>(hostGpu_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder> hostGpuBuilder_;

      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo> getHostGpuList() {
        if (hostGpuBuilder_ == null) {
          return java.util.Collections.unmodifiableList(hostGpu_);
        } else {
          return hostGpuBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public int getHostGpuCount() {
        if (hostGpuBuilder_ == null) {
          return hostGpu_.size();
        } else {
          return hostGpuBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo getHostGpu(int index) {
        if (hostGpuBuilder_ == null) {
          return hostGpu_.get(index);
        } else {
          return hostGpuBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder setHostGpu(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo value) {
        if (hostGpuBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostGpuIsMutable();
          hostGpu_.set(index, value);
          onChanged();
        } else {
          hostGpuBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder setHostGpu(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder builderForValue) {
        if (hostGpuBuilder_ == null) {
          ensureHostGpuIsMutable();
          hostGpu_.set(index, builderForValue.build());
          onChanged();
        } else {
          hostGpuBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder addHostGpu(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo value) {
        if (hostGpuBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostGpuIsMutable();
          hostGpu_.add(value);
          onChanged();
        } else {
          hostGpuBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder addHostGpu(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo value) {
        if (hostGpuBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostGpuIsMutable();
          hostGpu_.add(index, value);
          onChanged();
        } else {
          hostGpuBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder addHostGpu(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder builderForValue) {
        if (hostGpuBuilder_ == null) {
          ensureHostGpuIsMutable();
          hostGpu_.add(builderForValue.build());
          onChanged();
        } else {
          hostGpuBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder addHostGpu(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder builderForValue) {
        if (hostGpuBuilder_ == null) {
          ensureHostGpuIsMutable();
          hostGpu_.add(index, builderForValue.build());
          onChanged();
        } else {
          hostGpuBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder addAllHostGpu(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo> values) {
        if (hostGpuBuilder_ == null) {
          ensureHostGpuIsMutable();
          super.addAll(values, hostGpu_);
          onChanged();
        } else {
          hostGpuBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder clearHostGpu() {
        if (hostGpuBuilder_ == null) {
          hostGpu_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          hostGpuBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public Builder removeHostGpu(int index) {
        if (hostGpuBuilder_ == null) {
          ensureHostGpuIsMutable();
          hostGpu_.remove(index);
          onChanged();
        } else {
          hostGpuBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder getHostGpuBuilder(
          int index) {
        return getHostGpuFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder getHostGpuOrBuilder(
          int index) {
        if (hostGpuBuilder_ == null) {
          return hostGpu_.get(index);  } else {
          return hostGpuBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder> 
           getHostGpuOrBuilderList() {
        if (hostGpuBuilder_ != null) {
          return hostGpuBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(hostGpu_);
        }
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder addHostGpuBuilder() {
        return getHostGpuFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder addHostGpuBuilder(
          int index) {
        return getHostGpuFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.EmulatorGpuInfo host_gpu = 13;</code>
       *
       * <pre>
       * Information about the host GPUs (one per GPU).
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder> 
           getHostGpuBuilderList() {
        return getHostGpuFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder> 
          getHostGpuFieldBuilder() {
        if (hostGpuBuilder_ == null) {
          hostGpuBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfo.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorGpuInfoOrBuilder>(
                  hostGpu_,
                  ((bitField0_ & 0x00000800) == 0x00000800),
                  getParentForChildren(),
                  isClean());
          hostGpu_ = null;
        }
        return hostGpuBuilder_;
      }

      // optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase sessionPhase_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase.UNKNOWN_EMULATOR_SESSION_PHASE;
      /**
       * <code>optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;</code>
       *
       * <pre>
       * The "phase" of an emulator session where crash happened.
       * </pre>
       */
      public boolean hasSessionPhase() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;</code>
       *
       * <pre>
       * The "phase" of an emulator session where crash happened.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase getSessionPhase() {
        return sessionPhase_;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;</code>
       *
       * <pre>
       * The "phase" of an emulator session where crash happened.
       * </pre>
       */
      public Builder setSessionPhase(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00001000;
        sessionPhase_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorDetails.EmulatorSessionPhase session_phase = 14;</code>
       *
       * <pre>
       * The "phase" of an emulator session where crash happened.
       * </pre>
       */
      public Builder clearSessionPhase() {
        bitField0_ = (bitField0_ & ~0x00001000);
        sessionPhase_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorDetails.EmulatorSessionPhase.UNKNOWN_EMULATOR_SESSION_PHASE;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.EmulatorDetails)
    }

    static {
      defaultInstance = new EmulatorDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.EmulatorDetails)
  }

  public interface EmulatorUiEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string element_id = 1;
    /**
     * <code>optional string element_id = 1;</code>
     *
     * <pre>
     * Id of the UI element, baked in the emulator binary.
     *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
     *  it is not freeform, but we cannot make this an enum
     * </pre>
     */
    boolean hasElementId();
    /**
     * <code>optional string element_id = 1;</code>
     *
     * <pre>
     * Id of the UI element, baked in the emulator binary.
     *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
     *  it is not freeform, but we cannot make this an enum
     * </pre>
     */
    java.lang.String getElementId();
    /**
     * <code>optional string element_id = 1;</code>
     *
     * <pre>
     * Id of the UI element, baked in the emulator binary.
     *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
     *  it is not freeform, but we cannot make this an enum
     * </pre>
     */
    com.google.protobuf.ByteString
        getElementIdBytes();

    // optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;
    /**
     * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;</code>
     *
     * <pre>
     * The type of UI event
     * </pre>
     */
    boolean hasType();
    /**
     * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;</code>
     *
     * <pre>
     * The type of UI event
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType getType();

    // optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;
    /**
     * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;</code>
     *
     * <pre>
     * The current context of the event.
     * </pre>
     */
    boolean hasContext();
    /**
     * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;</code>
     *
     * <pre>
     * The current context of the event.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext getContext();

    // optional int64 value = 4;
    /**
     * <code>optional int64 value = 4;</code>
     *
     * <pre>
     * This value is an opaque numeric type. The exact schema of the UI metrics
     *  is not specific here. e.g., |value| may represent a boolean, a "count", or
     *  an index into the list of items in a drop down menu.
     * </pre>
     */
    boolean hasValue();
    /**
     * <code>optional int64 value = 4;</code>
     *
     * <pre>
     * This value is an opaque numeric type. The exact schema of the UI metrics
     *  is not specific here. e.g., |value| may represent a boolean, a "count", or
     *  an index into the list of items in a drop down menu.
     * </pre>
     */
    long getValue();
  }
  /**
   * Protobuf type {@code android_studio.EmulatorUiEvent}
   *
   * <pre>
   * Describes a user clicking on some part of the Emulator UI.
   * </pre>
   */
  public static final class EmulatorUiEvent extends
      com.google.protobuf.GeneratedMessage
      implements EmulatorUiEventOrBuilder {
    // Use EmulatorUiEvent.newBuilder() to construct.
    private EmulatorUiEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EmulatorUiEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EmulatorUiEvent defaultInstance;
    public static EmulatorUiEvent getDefaultInstance() {
      return defaultInstance;
    }

    public EmulatorUiEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EmulatorUiEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              elementId_ = input.readBytes();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                type_ = value;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext value = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                context_ = value;
              }
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              value_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorUiEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorUiEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<EmulatorUiEvent> PARSER =
        new com.google.protobuf.AbstractParser<EmulatorUiEvent>() {
      public EmulatorUiEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EmulatorUiEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EmulatorUiEvent> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.EmulatorUiEvent.EmulatorUiEventType}
     *
     * <pre>
     * Tracks the type of the emulator UI Event.
     * </pre>
     */
    public enum EmulatorUiEventType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKONWN_EMULATOR_UI_EVENT_TYPE = 0;</code>
       */
      UNKONWN_EMULATOR_UI_EVENT_TYPE(0, 0),
      /**
       * <code>BUTTON_PRESS = 1;</code>
       */
      BUTTON_PRESS(1, 1),
      /**
       * <code>OPTION_SET_TO_NON_DEFAULT = 2;</code>
       *
       * <pre>
       * Generated when a user action changes the value of certain field from
       *  its default value.
       * </pre>
       */
      OPTION_SET_TO_NON_DEFAULT(2, 2),
      /**
       * <code>OPTION_SELECTED = 3;</code>
       *
       * <pre>
       * Generated to report the index of an option selected by the user in a
       *  drop-down menu / radio button etc.
       * </pre>
       */
      OPTION_SELECTED(3, 3),
      ;

      /**
       * <code>UNKONWN_EMULATOR_UI_EVENT_TYPE = 0;</code>
       */
      public static final int UNKONWN_EMULATOR_UI_EVENT_TYPE_VALUE = 0;
      /**
       * <code>BUTTON_PRESS = 1;</code>
       */
      public static final int BUTTON_PRESS_VALUE = 1;
      /**
       * <code>OPTION_SET_TO_NON_DEFAULT = 2;</code>
       *
       * <pre>
       * Generated when a user action changes the value of certain field from
       *  its default value.
       * </pre>
       */
      public static final int OPTION_SET_TO_NON_DEFAULT_VALUE = 2;
      /**
       * <code>OPTION_SELECTED = 3;</code>
       *
       * <pre>
       * Generated to report the index of an option selected by the user in a
       *  drop-down menu / radio button etc.
       * </pre>
       */
      public static final int OPTION_SELECTED_VALUE = 3;


      public final int getNumber() { return value; }

      public static EmulatorUiEventType valueOf(int value) {
        switch (value) {
          case 0: return UNKONWN_EMULATOR_UI_EVENT_TYPE;
          case 1: return BUTTON_PRESS;
          case 2: return OPTION_SET_TO_NON_DEFAULT;
          case 3: return OPTION_SELECTED;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<EmulatorUiEventType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<EmulatorUiEventType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<EmulatorUiEventType>() {
              public EmulatorUiEventType findValueByNumber(int number) {
                return EmulatorUiEventType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDescriptor().getEnumTypes().get(0);
      }

      private static final EmulatorUiEventType[] VALUES = values();

      public static EmulatorUiEventType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private EmulatorUiEventType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.EmulatorUiEvent.EmulatorUiEventType)
    }

    /**
     * Protobuf enum {@code android_studio.EmulatorUiEvent.EmulatorUiEventContext}
     *
     * <pre>
     * Tracks the context of the Emulator UI.
     * </pre>
     */
    public enum EmulatorUiEventContext
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_EMULATOR_UI_EVENT_CONTEXT = 0;</code>
       */
      UNKNOWN_EMULATOR_UI_EVENT_CONTEXT(0, 0),
      /**
       * <code>EXTENDED_WINDOW_OPEN = 1;</code>
       */
      EXTENDED_WINDOW_OPEN(1, 1),
      ;

      /**
       * <code>UNKNOWN_EMULATOR_UI_EVENT_CONTEXT = 0;</code>
       */
      public static final int UNKNOWN_EMULATOR_UI_EVENT_CONTEXT_VALUE = 0;
      /**
       * <code>EXTENDED_WINDOW_OPEN = 1;</code>
       */
      public static final int EXTENDED_WINDOW_OPEN_VALUE = 1;


      public final int getNumber() { return value; }

      public static EmulatorUiEventContext valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_EMULATOR_UI_EVENT_CONTEXT;
          case 1: return EXTENDED_WINDOW_OPEN;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<EmulatorUiEventContext>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<EmulatorUiEventContext>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<EmulatorUiEventContext>() {
              public EmulatorUiEventContext findValueByNumber(int number) {
                return EmulatorUiEventContext.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDescriptor().getEnumTypes().get(1);
      }

      private static final EmulatorUiEventContext[] VALUES = values();

      public static EmulatorUiEventContext valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private EmulatorUiEventContext(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.EmulatorUiEvent.EmulatorUiEventContext)
    }

    private int bitField0_;
    // optional string element_id = 1;
    public static final int ELEMENT_ID_FIELD_NUMBER = 1;
    private java.lang.Object elementId_;
    /**
     * <code>optional string element_id = 1;</code>
     *
     * <pre>
     * Id of the UI element, baked in the emulator binary.
     *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
     *  it is not freeform, but we cannot make this an enum
     * </pre>
     */
    public boolean hasElementId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string element_id = 1;</code>
     *
     * <pre>
     * Id of the UI element, baked in the emulator binary.
     *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
     *  it is not freeform, but we cannot make this an enum
     * </pre>
     */
    public java.lang.String getElementId() {
      java.lang.Object ref = elementId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          elementId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string element_id = 1;</code>
     *
     * <pre>
     * Id of the UI element, baked in the emulator binary.
     *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
     *  it is not freeform, but we cannot make this an enum
     * </pre>
     */
    public com.google.protobuf.ByteString
        getElementIdBytes() {
      java.lang.Object ref = elementId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        elementId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;
    public static final int TYPE_FIELD_NUMBER = 2;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType type_;
    /**
     * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;</code>
     *
     * <pre>
     * The type of UI event
     * </pre>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;</code>
     *
     * <pre>
     * The type of UI event
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType getType() {
      return type_;
    }

    // optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;
    public static final int CONTEXT_FIELD_NUMBER = 3;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext context_;
    /**
     * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;</code>
     *
     * <pre>
     * The current context of the event.
     * </pre>
     */
    public boolean hasContext() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;</code>
     *
     * <pre>
     * The current context of the event.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext getContext() {
      return context_;
    }

    // optional int64 value = 4;
    public static final int VALUE_FIELD_NUMBER = 4;
    private long value_;
    /**
     * <code>optional int64 value = 4;</code>
     *
     * <pre>
     * This value is an opaque numeric type. The exact schema of the UI metrics
     *  is not specific here. e.g., |value| may represent a boolean, a "count", or
     *  an index into the list of items in a drop down menu.
     * </pre>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 value = 4;</code>
     *
     * <pre>
     * This value is an opaque numeric type. The exact schema of the UI metrics
     *  is not specific here. e.g., |value| may represent a boolean, a "count", or
     *  an index into the list of items in a drop down menu.
     * </pre>
     */
    public long getValue() {
      return value_;
    }

    private void initFields() {
      elementId_ = "";
      type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType.UNKONWN_EMULATOR_UI_EVENT_TYPE;
      context_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext.UNKNOWN_EMULATOR_UI_EVENT_CONTEXT;
      value_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getElementIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, type_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, context_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, value_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getElementIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, type_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, context_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, value_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.EmulatorUiEvent}
     *
     * <pre>
     * Describes a user clicking on some part of the Emulator UI.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorUiEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorUiEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        elementId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType.UNKONWN_EMULATOR_UI_EVENT_TYPE;
        bitField0_ = (bitField0_ & ~0x00000002);
        context_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext.UNKNOWN_EMULATOR_UI_EVENT_CONTEXT;
        bitField0_ = (bitField0_ & ~0x00000004);
        value_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorUiEvent_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.elementId_ = elementId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.context_ = context_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.getDefaultInstance()) return this;
        if (other.hasElementId()) {
          bitField0_ |= 0x00000001;
          elementId_ = other.elementId_;
          onChanged();
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasContext()) {
          setContext(other.getContext());
        }
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string element_id = 1;
      private java.lang.Object elementId_ = "";
      /**
       * <code>optional string element_id = 1;</code>
       *
       * <pre>
       * Id of the UI element, baked in the emulator binary.
       *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
       *  it is not freeform, but we cannot make this an enum
       * </pre>
       */
      public boolean hasElementId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string element_id = 1;</code>
       *
       * <pre>
       * Id of the UI element, baked in the emulator binary.
       *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
       *  it is not freeform, but we cannot make this an enum
       * </pre>
       */
      public java.lang.String getElementId() {
        java.lang.Object ref = elementId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          elementId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string element_id = 1;</code>
       *
       * <pre>
       * Id of the UI element, baked in the emulator binary.
       *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
       *  it is not freeform, but we cannot make this an enum
       * </pre>
       */
      public com.google.protobuf.ByteString
          getElementIdBytes() {
        java.lang.Object ref = elementId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          elementId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string element_id = 1;</code>
       *
       * <pre>
       * Id of the UI element, baked in the emulator binary.
       *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
       *  it is not freeform, but we cannot make this an enum
       * </pre>
       */
      public Builder setElementId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        elementId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string element_id = 1;</code>
       *
       * <pre>
       * Id of the UI element, baked in the emulator binary.
       *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
       *  it is not freeform, but we cannot make this an enum
       * </pre>
       */
      public Builder clearElementId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        elementId_ = getDefaultInstance().getElementId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string element_id = 1;</code>
       *
       * <pre>
       * Id of the UI element, baked in the emulator binary.
       *  TODO(jvg): ask logs ticket folks what kind of datapol annotation
       *  it is not freeform, but we cannot make this an enum
       * </pre>
       */
      public Builder setElementIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        elementId_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType.UNKONWN_EMULATOR_UI_EVENT_TYPE;
      /**
       * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;</code>
       *
       * <pre>
       * The type of UI event
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;</code>
       *
       * <pre>
       * The type of UI event
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType getType() {
        return type_;
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;</code>
       *
       * <pre>
       * The type of UI event
       * </pre>
       */
      public Builder setType(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventType type = 2;</code>
       *
       * <pre>
       * The type of UI event
       * </pre>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventType.UNKONWN_EMULATOR_UI_EVENT_TYPE;
        onChanged();
        return this;
      }

      // optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext context_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext.UNKNOWN_EMULATOR_UI_EVENT_CONTEXT;
      /**
       * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;</code>
       *
       * <pre>
       * The current context of the event.
       * </pre>
       */
      public boolean hasContext() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;</code>
       *
       * <pre>
       * The current context of the event.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext getContext() {
        return context_;
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;</code>
       *
       * <pre>
       * The current context of the event.
       * </pre>
       */
      public Builder setContext(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        context_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.EmulatorUiEvent.EmulatorUiEventContext context = 3;</code>
       *
       * <pre>
       * The current context of the event.
       * </pre>
       */
      public Builder clearContext() {
        bitField0_ = (bitField0_ & ~0x00000004);
        context_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorUiEvent.EmulatorUiEventContext.UNKNOWN_EMULATOR_UI_EVENT_CONTEXT;
        onChanged();
        return this;
      }

      // optional int64 value = 4;
      private long value_ ;
      /**
       * <code>optional int64 value = 4;</code>
       *
       * <pre>
       * This value is an opaque numeric type. The exact schema of the UI metrics
       *  is not specific here. e.g., |value| may represent a boolean, a "count", or
       *  an index into the list of items in a drop down menu.
       * </pre>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 value = 4;</code>
       *
       * <pre>
       * This value is an opaque numeric type. The exact schema of the UI metrics
       *  is not specific here. e.g., |value| may represent a boolean, a "count", or
       *  an index into the list of items in a drop down menu.
       * </pre>
       */
      public long getValue() {
        return value_;
      }
      /**
       * <code>optional int64 value = 4;</code>
       *
       * <pre>
       * This value is an opaque numeric type. The exact schema of the UI metrics
       *  is not specific here. e.g., |value| may represent a boolean, a "count", or
       *  an index into the list of items in a drop down menu.
       * </pre>
       */
      public Builder setValue(long value) {
        bitField0_ |= 0x00000008;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 value = 4;</code>
       *
       * <pre>
       * This value is an opaque numeric type. The exact schema of the UI metrics
       *  is not specific here. e.g., |value| may represent a boolean, a "count", or
       *  an index into the list of items in a drop down menu.
       * </pre>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000008);
        value_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.EmulatorUiEvent)
    }

    static {
      defaultInstance = new EmulatorUiEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.EmulatorUiEvent)
  }

  public interface GradleBuildDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string android_plugin_version = 1;
    /**
     * <code>optional string android_plugin_version = 1;</code>
     *
     * <pre>
     * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
     * </pre>
     */
    boolean hasAndroidPluginVersion();
    /**
     * <code>optional string android_plugin_version = 1;</code>
     *
     * <pre>
     * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
     * </pre>
     */
    java.lang.String getAndroidPluginVersion();
    /**
     * <code>optional string android_plugin_version = 1;</code>
     *
     * <pre>
     * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
     * </pre>
     */
    com.google.protobuf.ByteString
        getAndroidPluginVersionBytes();

    // optional string gradle_version = 2;
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     * </pre>
     */
    boolean hasGradleVersion();
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     * </pre>
     */
    java.lang.String getGradleVersion();
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     * </pre>
     */
    com.google.protobuf.ByteString
        getGradleVersionBytes();

    // optional bool user_enabled_ir = 3;
    /**
     * <code>optional bool user_enabled_ir = 3;</code>
     *
     * <pre>
     * indicates whether the user has instant run enabled in settings
     * </pre>
     */
    boolean hasUserEnabledIr();
    /**
     * <code>optional bool user_enabled_ir = 3;</code>
     *
     * <pre>
     * indicates whether the user has instant run enabled in settings
     * </pre>
     */
    boolean getUserEnabledIr();

    // optional bool model_supports_ir = 4;
    /**
     * <code>optional bool model_supports_ir = 4;</code>
     *
     * <pre>
     * indicates whether the IDE thinks whether this plugin version supports IR
     * </pre>
     */
    boolean hasModelSupportsIr();
    /**
     * <code>optional bool model_supports_ir = 4;</code>
     *
     * <pre>
     * indicates whether the IDE thinks whether this plugin version supports IR
     * </pre>
     */
    boolean getModelSupportsIr();

    // optional bool variant_supports_ir = 5;
    /**
     * <code>optional bool variant_supports_ir = 5;</code>
     *
     * <pre>
     * indicates whether the current variant supports IR, but this can be changed
     *  without a notification
     * </pre>
     */
    boolean hasVariantSupportsIr();
    /**
     * <code>optional bool variant_supports_ir = 5;</code>
     *
     * <pre>
     * indicates whether the current variant supports IR, but this can be changed
     *  without a notification
     * </pre>
     */
    boolean getVariantSupportsIr();

    // repeated .android_studio.GradleLibrary libraries = 6;
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary> 
        getLibrariesList();
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary getLibraries(int index);
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    int getLibrariesCount();
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder> 
        getLibrariesOrBuilderList();
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder getLibrariesOrBuilder(
        int index);

    // repeated .android_studio.GradleModule modules = 7;
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule> 
        getModulesList();
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule getModules(int index);
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    int getModulesCount();
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder> 
        getModulesOrBuilderList();
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder getModulesOrBuilder(
        int index);

    // repeated .android_studio.GradleAndroidModule android_modules = 8;
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule> 
        getAndroidModulesList();
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule getAndroidModules(int index);
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    int getAndroidModulesCount();
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder> 
        getAndroidModulesOrBuilderList();
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder getAndroidModulesOrBuilder(
        int index);

    // repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule> 
        getNativeAndroidModulesList();
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule getNativeAndroidModules(int index);
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    int getNativeAndroidModulesCount();
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder> 
        getNativeAndroidModulesOrBuilderList();
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder getNativeAndroidModulesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code android_studio.GradleBuildDetails}
   *
   * <pre>
   * Details about a single Gradle run.
   * </pre>
   */
  public static final class GradleBuildDetails extends
      com.google.protobuf.GeneratedMessage
      implements GradleBuildDetailsOrBuilder {
    // Use GradleBuildDetails.newBuilder() to construct.
    private GradleBuildDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleBuildDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleBuildDetails defaultInstance;
    public static GradleBuildDetails getDefaultInstance() {
      return defaultInstance;
    }

    public GradleBuildDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleBuildDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              androidPluginVersion_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              gradleVersion_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              userEnabledIr_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              modelSupportsIr_ = input.readBool();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              variantSupportsIr_ = input.readBool();
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                libraries_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary>();
                mutable_bitField0_ |= 0x00000020;
              }
              libraries_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.PARSER, extensionRegistry));
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                modules_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule>();
                mutable_bitField0_ |= 0x00000040;
              }
              modules_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.PARSER, extensionRegistry));
              break;
            }
            case 66: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                androidModules_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule>();
                mutable_bitField0_ |= 0x00000080;
              }
              androidModules_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.PARSER, extensionRegistry));
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                nativeAndroidModules_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule>();
                mutable_bitField0_ |= 0x00000100;
              }
              nativeAndroidModules_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          libraries_ = java.util.Collections.unmodifiableList(libraries_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          modules_ = java.util.Collections.unmodifiableList(modules_);
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          androidModules_ = java.util.Collections.unmodifiableList(androidModules_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          nativeAndroidModules_ = java.util.Collections.unmodifiableList(nativeAndroidModules_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleBuildDetails> PARSER =
        new com.google.protobuf.AbstractParser<GradleBuildDetails>() {
      public GradleBuildDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleBuildDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleBuildDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string android_plugin_version = 1;
    public static final int ANDROID_PLUGIN_VERSION_FIELD_NUMBER = 1;
    private java.lang.Object androidPluginVersion_;
    /**
     * <code>optional string android_plugin_version = 1;</code>
     *
     * <pre>
     * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
     * </pre>
     */
    public boolean hasAndroidPluginVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string android_plugin_version = 1;</code>
     *
     * <pre>
     * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
     * </pre>
     */
    public java.lang.String getAndroidPluginVersion() {
      java.lang.Object ref = androidPluginVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          androidPluginVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string android_plugin_version = 1;</code>
     *
     * <pre>
     * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getAndroidPluginVersionBytes() {
      java.lang.Object ref = androidPluginVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        androidPluginVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string gradle_version = 2;
    public static final int GRADLE_VERSION_FIELD_NUMBER = 2;
    private java.lang.Object gradleVersion_;
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     * </pre>
     */
    public boolean hasGradleVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     * </pre>
     */
    public java.lang.String getGradleVersion() {
      java.lang.Object ref = gradleVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gradleVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getGradleVersionBytes() {
      java.lang.Object ref = gradleVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gradleVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool user_enabled_ir = 3;
    public static final int USER_ENABLED_IR_FIELD_NUMBER = 3;
    private boolean userEnabledIr_;
    /**
     * <code>optional bool user_enabled_ir = 3;</code>
     *
     * <pre>
     * indicates whether the user has instant run enabled in settings
     * </pre>
     */
    public boolean hasUserEnabledIr() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool user_enabled_ir = 3;</code>
     *
     * <pre>
     * indicates whether the user has instant run enabled in settings
     * </pre>
     */
    public boolean getUserEnabledIr() {
      return userEnabledIr_;
    }

    // optional bool model_supports_ir = 4;
    public static final int MODEL_SUPPORTS_IR_FIELD_NUMBER = 4;
    private boolean modelSupportsIr_;
    /**
     * <code>optional bool model_supports_ir = 4;</code>
     *
     * <pre>
     * indicates whether the IDE thinks whether this plugin version supports IR
     * </pre>
     */
    public boolean hasModelSupportsIr() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool model_supports_ir = 4;</code>
     *
     * <pre>
     * indicates whether the IDE thinks whether this plugin version supports IR
     * </pre>
     */
    public boolean getModelSupportsIr() {
      return modelSupportsIr_;
    }

    // optional bool variant_supports_ir = 5;
    public static final int VARIANT_SUPPORTS_IR_FIELD_NUMBER = 5;
    private boolean variantSupportsIr_;
    /**
     * <code>optional bool variant_supports_ir = 5;</code>
     *
     * <pre>
     * indicates whether the current variant supports IR, but this can be changed
     *  without a notification
     * </pre>
     */
    public boolean hasVariantSupportsIr() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bool variant_supports_ir = 5;</code>
     *
     * <pre>
     * indicates whether the current variant supports IR, but this can be changed
     *  without a notification
     * </pre>
     */
    public boolean getVariantSupportsIr() {
      return variantSupportsIr_;
    }

    // repeated .android_studio.GradleLibrary libraries = 6;
    public static final int LIBRARIES_FIELD_NUMBER = 6;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary> libraries_;
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary> getLibrariesList() {
      return libraries_;
    }
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder> 
        getLibrariesOrBuilderList() {
      return libraries_;
    }
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    public int getLibrariesCount() {
      return libraries_.size();
    }
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary getLibraries(int index) {
      return libraries_.get(index);
    }
    /**
     * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
     *
     * <pre>
     * per library metrics.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder getLibrariesOrBuilder(
        int index) {
      return libraries_.get(index);
    }

    // repeated .android_studio.GradleModule modules = 7;
    public static final int MODULES_FIELD_NUMBER = 7;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule> modules_;
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule> getModulesList() {
      return modules_;
    }
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder> 
        getModulesOrBuilderList() {
      return modules_;
    }
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    public int getModulesCount() {
      return modules_.size();
    }
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule getModules(int index) {
      return modules_.get(index);
    }
    /**
     * <code>repeated .android_studio.GradleModule modules = 7;</code>
     *
     * <pre>
     * per module metrics.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder getModulesOrBuilder(
        int index) {
      return modules_.get(index);
    }

    // repeated .android_studio.GradleAndroidModule android_modules = 8;
    public static final int ANDROID_MODULES_FIELD_NUMBER = 8;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule> androidModules_;
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule> getAndroidModulesList() {
      return androidModules_;
    }
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder> 
        getAndroidModulesOrBuilderList() {
      return androidModules_;
    }
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    public int getAndroidModulesCount() {
      return androidModules_.size();
    }
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule getAndroidModules(int index) {
      return androidModules_.get(index);
    }
    /**
     * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
     *
     * <pre>
     * per android module metrics.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder getAndroidModulesOrBuilder(
        int index) {
      return androidModules_.get(index);
    }

    // repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;
    public static final int NATIVE_ANDROID_MODULES_FIELD_NUMBER = 9;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule> nativeAndroidModules_;
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule> getNativeAndroidModulesList() {
      return nativeAndroidModules_;
    }
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder> 
        getNativeAndroidModulesOrBuilderList() {
      return nativeAndroidModules_;
    }
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    public int getNativeAndroidModulesCount() {
      return nativeAndroidModules_.size();
    }
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule getNativeAndroidModules(int index) {
      return nativeAndroidModules_.get(index);
    }
    /**
     * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
     *
     * <pre>
     * per native android module metrics
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder getNativeAndroidModulesOrBuilder(
        int index) {
      return nativeAndroidModules_.get(index);
    }

    private void initFields() {
      androidPluginVersion_ = "";
      gradleVersion_ = "";
      userEnabledIr_ = false;
      modelSupportsIr_ = false;
      variantSupportsIr_ = false;
      libraries_ = java.util.Collections.emptyList();
      modules_ = java.util.Collections.emptyList();
      androidModules_ = java.util.Collections.emptyList();
      nativeAndroidModules_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getAndroidPluginVersionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getGradleVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, userEnabledIr_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, modelSupportsIr_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(5, variantSupportsIr_);
      }
      for (int i = 0; i < libraries_.size(); i++) {
        output.writeMessage(6, libraries_.get(i));
      }
      for (int i = 0; i < modules_.size(); i++) {
        output.writeMessage(7, modules_.get(i));
      }
      for (int i = 0; i < androidModules_.size(); i++) {
        output.writeMessage(8, androidModules_.get(i));
      }
      for (int i = 0; i < nativeAndroidModules_.size(); i++) {
        output.writeMessage(9, nativeAndroidModules_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getAndroidPluginVersionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getGradleVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, userEnabledIr_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, modelSupportsIr_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, variantSupportsIr_);
      }
      for (int i = 0; i < libraries_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, libraries_.get(i));
      }
      for (int i = 0; i < modules_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, modules_.get(i));
      }
      for (int i = 0; i < androidModules_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, androidModules_.get(i));
      }
      for (int i = 0; i < nativeAndroidModules_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, nativeAndroidModules_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleBuildDetails}
     *
     * <pre>
     * Details about a single Gradle run.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getLibrariesFieldBuilder();
          getModulesFieldBuilder();
          getAndroidModulesFieldBuilder();
          getNativeAndroidModulesFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        androidPluginVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        gradleVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        userEnabledIr_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        modelSupportsIr_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        variantSupportsIr_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (librariesBuilder_ == null) {
          libraries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          librariesBuilder_.clear();
        }
        if (modulesBuilder_ == null) {
          modules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          modulesBuilder_.clear();
        }
        if (androidModulesBuilder_ == null) {
          androidModules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          androidModulesBuilder_.clear();
        }
        if (nativeAndroidModulesBuilder_ == null) {
          nativeAndroidModules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          nativeAndroidModulesBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.androidPluginVersion_ = androidPluginVersion_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.gradleVersion_ = gradleVersion_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.userEnabledIr_ = userEnabledIr_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.modelSupportsIr_ = modelSupportsIr_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.variantSupportsIr_ = variantSupportsIr_;
        if (librariesBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            libraries_ = java.util.Collections.unmodifiableList(libraries_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.libraries_ = libraries_;
        } else {
          result.libraries_ = librariesBuilder_.build();
        }
        if (modulesBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            modules_ = java.util.Collections.unmodifiableList(modules_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.modules_ = modules_;
        } else {
          result.modules_ = modulesBuilder_.build();
        }
        if (androidModulesBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            androidModules_ = java.util.Collections.unmodifiableList(androidModules_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.androidModules_ = androidModules_;
        } else {
          result.androidModules_ = androidModulesBuilder_.build();
        }
        if (nativeAndroidModulesBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            nativeAndroidModules_ = java.util.Collections.unmodifiableList(nativeAndroidModules_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.nativeAndroidModules_ = nativeAndroidModules_;
        } else {
          result.nativeAndroidModules_ = nativeAndroidModulesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails.getDefaultInstance()) return this;
        if (other.hasAndroidPluginVersion()) {
          bitField0_ |= 0x00000001;
          androidPluginVersion_ = other.androidPluginVersion_;
          onChanged();
        }
        if (other.hasGradleVersion()) {
          bitField0_ |= 0x00000002;
          gradleVersion_ = other.gradleVersion_;
          onChanged();
        }
        if (other.hasUserEnabledIr()) {
          setUserEnabledIr(other.getUserEnabledIr());
        }
        if (other.hasModelSupportsIr()) {
          setModelSupportsIr(other.getModelSupportsIr());
        }
        if (other.hasVariantSupportsIr()) {
          setVariantSupportsIr(other.getVariantSupportsIr());
        }
        if (librariesBuilder_ == null) {
          if (!other.libraries_.isEmpty()) {
            if (libraries_.isEmpty()) {
              libraries_ = other.libraries_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureLibrariesIsMutable();
              libraries_.addAll(other.libraries_);
            }
            onChanged();
          }
        } else {
          if (!other.libraries_.isEmpty()) {
            if (librariesBuilder_.isEmpty()) {
              librariesBuilder_.dispose();
              librariesBuilder_ = null;
              libraries_ = other.libraries_;
              bitField0_ = (bitField0_ & ~0x00000020);
              librariesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getLibrariesFieldBuilder() : null;
            } else {
              librariesBuilder_.addAllMessages(other.libraries_);
            }
          }
        }
        if (modulesBuilder_ == null) {
          if (!other.modules_.isEmpty()) {
            if (modules_.isEmpty()) {
              modules_ = other.modules_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureModulesIsMutable();
              modules_.addAll(other.modules_);
            }
            onChanged();
          }
        } else {
          if (!other.modules_.isEmpty()) {
            if (modulesBuilder_.isEmpty()) {
              modulesBuilder_.dispose();
              modulesBuilder_ = null;
              modules_ = other.modules_;
              bitField0_ = (bitField0_ & ~0x00000040);
              modulesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getModulesFieldBuilder() : null;
            } else {
              modulesBuilder_.addAllMessages(other.modules_);
            }
          }
        }
        if (androidModulesBuilder_ == null) {
          if (!other.androidModules_.isEmpty()) {
            if (androidModules_.isEmpty()) {
              androidModules_ = other.androidModules_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureAndroidModulesIsMutable();
              androidModules_.addAll(other.androidModules_);
            }
            onChanged();
          }
        } else {
          if (!other.androidModules_.isEmpty()) {
            if (androidModulesBuilder_.isEmpty()) {
              androidModulesBuilder_.dispose();
              androidModulesBuilder_ = null;
              androidModules_ = other.androidModules_;
              bitField0_ = (bitField0_ & ~0x00000080);
              androidModulesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAndroidModulesFieldBuilder() : null;
            } else {
              androidModulesBuilder_.addAllMessages(other.androidModules_);
            }
          }
        }
        if (nativeAndroidModulesBuilder_ == null) {
          if (!other.nativeAndroidModules_.isEmpty()) {
            if (nativeAndroidModules_.isEmpty()) {
              nativeAndroidModules_ = other.nativeAndroidModules_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureNativeAndroidModulesIsMutable();
              nativeAndroidModules_.addAll(other.nativeAndroidModules_);
            }
            onChanged();
          }
        } else {
          if (!other.nativeAndroidModules_.isEmpty()) {
            if (nativeAndroidModulesBuilder_.isEmpty()) {
              nativeAndroidModulesBuilder_.dispose();
              nativeAndroidModulesBuilder_ = null;
              nativeAndroidModules_ = other.nativeAndroidModules_;
              bitField0_ = (bitField0_ & ~0x00000100);
              nativeAndroidModulesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getNativeAndroidModulesFieldBuilder() : null;
            } else {
              nativeAndroidModulesBuilder_.addAllMessages(other.nativeAndroidModules_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string android_plugin_version = 1;
      private java.lang.Object androidPluginVersion_ = "";
      /**
       * <code>optional string android_plugin_version = 1;</code>
       *
       * <pre>
       * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
       * </pre>
       */
      public boolean hasAndroidPluginVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string android_plugin_version = 1;</code>
       *
       * <pre>
       * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
       * </pre>
       */
      public java.lang.String getAndroidPluginVersion() {
        java.lang.Object ref = androidPluginVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          androidPluginVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string android_plugin_version = 1;</code>
       *
       * <pre>
       * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getAndroidPluginVersionBytes() {
        java.lang.Object ref = androidPluginVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          androidPluginVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string android_plugin_version = 1;</code>
       *
       * <pre>
       * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
       * </pre>
       */
      public Builder setAndroidPluginVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        androidPluginVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string android_plugin_version = 1;</code>
       *
       * <pre>
       * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
       * </pre>
       */
      public Builder clearAndroidPluginVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        androidPluginVersion_ = getDefaultInstance().getAndroidPluginVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string android_plugin_version = 1;</code>
       *
       * <pre>
       * Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1'
       * </pre>
       */
      public Builder setAndroidPluginVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        androidPluginVersion_ = value;
        onChanged();
        return this;
      }

      // optional string gradle_version = 2;
      private java.lang.Object gradleVersion_ = "";
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       * </pre>
       */
      public boolean hasGradleVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       * </pre>
       */
      public java.lang.String getGradleVersion() {
        java.lang.Object ref = gradleVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          gradleVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getGradleVersionBytes() {
        java.lang.Object ref = gradleVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gradleVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       * </pre>
       */
      public Builder setGradleVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        gradleVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       * </pre>
       */
      public Builder clearGradleVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gradleVersion_ = getDefaultInstance().getGradleVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       * </pre>
       */
      public Builder setGradleVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        gradleVersion_ = value;
        onChanged();
        return this;
      }

      // optional bool user_enabled_ir = 3;
      private boolean userEnabledIr_ ;
      /**
       * <code>optional bool user_enabled_ir = 3;</code>
       *
       * <pre>
       * indicates whether the user has instant run enabled in settings
       * </pre>
       */
      public boolean hasUserEnabledIr() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool user_enabled_ir = 3;</code>
       *
       * <pre>
       * indicates whether the user has instant run enabled in settings
       * </pre>
       */
      public boolean getUserEnabledIr() {
        return userEnabledIr_;
      }
      /**
       * <code>optional bool user_enabled_ir = 3;</code>
       *
       * <pre>
       * indicates whether the user has instant run enabled in settings
       * </pre>
       */
      public Builder setUserEnabledIr(boolean value) {
        bitField0_ |= 0x00000004;
        userEnabledIr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool user_enabled_ir = 3;</code>
       *
       * <pre>
       * indicates whether the user has instant run enabled in settings
       * </pre>
       */
      public Builder clearUserEnabledIr() {
        bitField0_ = (bitField0_ & ~0x00000004);
        userEnabledIr_ = false;
        onChanged();
        return this;
      }

      // optional bool model_supports_ir = 4;
      private boolean modelSupportsIr_ ;
      /**
       * <code>optional bool model_supports_ir = 4;</code>
       *
       * <pre>
       * indicates whether the IDE thinks whether this plugin version supports IR
       * </pre>
       */
      public boolean hasModelSupportsIr() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool model_supports_ir = 4;</code>
       *
       * <pre>
       * indicates whether the IDE thinks whether this plugin version supports IR
       * </pre>
       */
      public boolean getModelSupportsIr() {
        return modelSupportsIr_;
      }
      /**
       * <code>optional bool model_supports_ir = 4;</code>
       *
       * <pre>
       * indicates whether the IDE thinks whether this plugin version supports IR
       * </pre>
       */
      public Builder setModelSupportsIr(boolean value) {
        bitField0_ |= 0x00000008;
        modelSupportsIr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool model_supports_ir = 4;</code>
       *
       * <pre>
       * indicates whether the IDE thinks whether this plugin version supports IR
       * </pre>
       */
      public Builder clearModelSupportsIr() {
        bitField0_ = (bitField0_ & ~0x00000008);
        modelSupportsIr_ = false;
        onChanged();
        return this;
      }

      // optional bool variant_supports_ir = 5;
      private boolean variantSupportsIr_ ;
      /**
       * <code>optional bool variant_supports_ir = 5;</code>
       *
       * <pre>
       * indicates whether the current variant supports IR, but this can be changed
       *  without a notification
       * </pre>
       */
      public boolean hasVariantSupportsIr() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool variant_supports_ir = 5;</code>
       *
       * <pre>
       * indicates whether the current variant supports IR, but this can be changed
       *  without a notification
       * </pre>
       */
      public boolean getVariantSupportsIr() {
        return variantSupportsIr_;
      }
      /**
       * <code>optional bool variant_supports_ir = 5;</code>
       *
       * <pre>
       * indicates whether the current variant supports IR, but this can be changed
       *  without a notification
       * </pre>
       */
      public Builder setVariantSupportsIr(boolean value) {
        bitField0_ |= 0x00000010;
        variantSupportsIr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool variant_supports_ir = 5;</code>
       *
       * <pre>
       * indicates whether the current variant supports IR, but this can be changed
       *  without a notification
       * </pre>
       */
      public Builder clearVariantSupportsIr() {
        bitField0_ = (bitField0_ & ~0x00000010);
        variantSupportsIr_ = false;
        onChanged();
        return this;
      }

      // repeated .android_studio.GradleLibrary libraries = 6;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary> libraries_ =
        java.util.Collections.emptyList();
      private void ensureLibrariesIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          libraries_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary>(libraries_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder> librariesBuilder_;

      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary> getLibrariesList() {
        if (librariesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(libraries_);
        } else {
          return librariesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public int getLibrariesCount() {
        if (librariesBuilder_ == null) {
          return libraries_.size();
        } else {
          return librariesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary getLibraries(int index) {
        if (librariesBuilder_ == null) {
          return libraries_.get(index);
        } else {
          return librariesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder setLibraries(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary value) {
        if (librariesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLibrariesIsMutable();
          libraries_.set(index, value);
          onChanged();
        } else {
          librariesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder setLibraries(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder builderForValue) {
        if (librariesBuilder_ == null) {
          ensureLibrariesIsMutable();
          libraries_.set(index, builderForValue.build());
          onChanged();
        } else {
          librariesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder addLibraries(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary value) {
        if (librariesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLibrariesIsMutable();
          libraries_.add(value);
          onChanged();
        } else {
          librariesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder addLibraries(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary value) {
        if (librariesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLibrariesIsMutable();
          libraries_.add(index, value);
          onChanged();
        } else {
          librariesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder addLibraries(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder builderForValue) {
        if (librariesBuilder_ == null) {
          ensureLibrariesIsMutable();
          libraries_.add(builderForValue.build());
          onChanged();
        } else {
          librariesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder addLibraries(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder builderForValue) {
        if (librariesBuilder_ == null) {
          ensureLibrariesIsMutable();
          libraries_.add(index, builderForValue.build());
          onChanged();
        } else {
          librariesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder addAllLibraries(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary> values) {
        if (librariesBuilder_ == null) {
          ensureLibrariesIsMutable();
          super.addAll(values, libraries_);
          onChanged();
        } else {
          librariesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder clearLibraries() {
        if (librariesBuilder_ == null) {
          libraries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          librariesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public Builder removeLibraries(int index) {
        if (librariesBuilder_ == null) {
          ensureLibrariesIsMutable();
          libraries_.remove(index);
          onChanged();
        } else {
          librariesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder getLibrariesBuilder(
          int index) {
        return getLibrariesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder getLibrariesOrBuilder(
          int index) {
        if (librariesBuilder_ == null) {
          return libraries_.get(index);  } else {
          return librariesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder> 
           getLibrariesOrBuilderList() {
        if (librariesBuilder_ != null) {
          return librariesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(libraries_);
        }
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder addLibrariesBuilder() {
        return getLibrariesFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder addLibrariesBuilder(
          int index) {
        return getLibrariesFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleLibrary libraries = 6;</code>
       *
       * <pre>
       * per library metrics.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder> 
           getLibrariesBuilderList() {
        return getLibrariesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder> 
          getLibrariesFieldBuilder() {
        if (librariesBuilder_ == null) {
          librariesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder>(
                  libraries_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          libraries_ = null;
        }
        return librariesBuilder_;
      }

      // repeated .android_studio.GradleModule modules = 7;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule> modules_ =
        java.util.Collections.emptyList();
      private void ensureModulesIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          modules_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule>(modules_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder> modulesBuilder_;

      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule> getModulesList() {
        if (modulesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(modules_);
        } else {
          return modulesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public int getModulesCount() {
        if (modulesBuilder_ == null) {
          return modules_.size();
        } else {
          return modulesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule getModules(int index) {
        if (modulesBuilder_ == null) {
          return modules_.get(index);
        } else {
          return modulesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder setModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule value) {
        if (modulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModulesIsMutable();
          modules_.set(index, value);
          onChanged();
        } else {
          modulesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder setModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder builderForValue) {
        if (modulesBuilder_ == null) {
          ensureModulesIsMutable();
          modules_.set(index, builderForValue.build());
          onChanged();
        } else {
          modulesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder addModules(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule value) {
        if (modulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModulesIsMutable();
          modules_.add(value);
          onChanged();
        } else {
          modulesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder addModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule value) {
        if (modulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModulesIsMutable();
          modules_.add(index, value);
          onChanged();
        } else {
          modulesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder addModules(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder builderForValue) {
        if (modulesBuilder_ == null) {
          ensureModulesIsMutable();
          modules_.add(builderForValue.build());
          onChanged();
        } else {
          modulesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder addModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder builderForValue) {
        if (modulesBuilder_ == null) {
          ensureModulesIsMutable();
          modules_.add(index, builderForValue.build());
          onChanged();
        } else {
          modulesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder addAllModules(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule> values) {
        if (modulesBuilder_ == null) {
          ensureModulesIsMutable();
          super.addAll(values, modules_);
          onChanged();
        } else {
          modulesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder clearModules() {
        if (modulesBuilder_ == null) {
          modules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          modulesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public Builder removeModules(int index) {
        if (modulesBuilder_ == null) {
          ensureModulesIsMutable();
          modules_.remove(index);
          onChanged();
        } else {
          modulesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder getModulesBuilder(
          int index) {
        return getModulesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder getModulesOrBuilder(
          int index) {
        if (modulesBuilder_ == null) {
          return modules_.get(index);  } else {
          return modulesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder> 
           getModulesOrBuilderList() {
        if (modulesBuilder_ != null) {
          return modulesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(modules_);
        }
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder addModulesBuilder() {
        return getModulesFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder addModulesBuilder(
          int index) {
        return getModulesFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleModule modules = 7;</code>
       *
       * <pre>
       * per module metrics.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder> 
           getModulesBuilderList() {
        return getModulesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder> 
          getModulesFieldBuilder() {
        if (modulesBuilder_ == null) {
          modulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder>(
                  modules_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          modules_ = null;
        }
        return modulesBuilder_;
      }

      // repeated .android_studio.GradleAndroidModule android_modules = 8;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule> androidModules_ =
        java.util.Collections.emptyList();
      private void ensureAndroidModulesIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          androidModules_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule>(androidModules_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder> androidModulesBuilder_;

      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule> getAndroidModulesList() {
        if (androidModulesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(androidModules_);
        } else {
          return androidModulesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public int getAndroidModulesCount() {
        if (androidModulesBuilder_ == null) {
          return androidModules_.size();
        } else {
          return androidModulesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule getAndroidModules(int index) {
        if (androidModulesBuilder_ == null) {
          return androidModules_.get(index);
        } else {
          return androidModulesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder setAndroidModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule value) {
        if (androidModulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndroidModulesIsMutable();
          androidModules_.set(index, value);
          onChanged();
        } else {
          androidModulesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder setAndroidModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder builderForValue) {
        if (androidModulesBuilder_ == null) {
          ensureAndroidModulesIsMutable();
          androidModules_.set(index, builderForValue.build());
          onChanged();
        } else {
          androidModulesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder addAndroidModules(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule value) {
        if (androidModulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndroidModulesIsMutable();
          androidModules_.add(value);
          onChanged();
        } else {
          androidModulesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder addAndroidModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule value) {
        if (androidModulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndroidModulesIsMutable();
          androidModules_.add(index, value);
          onChanged();
        } else {
          androidModulesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder addAndroidModules(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder builderForValue) {
        if (androidModulesBuilder_ == null) {
          ensureAndroidModulesIsMutable();
          androidModules_.add(builderForValue.build());
          onChanged();
        } else {
          androidModulesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder addAndroidModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder builderForValue) {
        if (androidModulesBuilder_ == null) {
          ensureAndroidModulesIsMutable();
          androidModules_.add(index, builderForValue.build());
          onChanged();
        } else {
          androidModulesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder addAllAndroidModules(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule> values) {
        if (androidModulesBuilder_ == null) {
          ensureAndroidModulesIsMutable();
          super.addAll(values, androidModules_);
          onChanged();
        } else {
          androidModulesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder clearAndroidModules() {
        if (androidModulesBuilder_ == null) {
          androidModules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          androidModulesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public Builder removeAndroidModules(int index) {
        if (androidModulesBuilder_ == null) {
          ensureAndroidModulesIsMutable();
          androidModules_.remove(index);
          onChanged();
        } else {
          androidModulesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder getAndroidModulesBuilder(
          int index) {
        return getAndroidModulesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder getAndroidModulesOrBuilder(
          int index) {
        if (androidModulesBuilder_ == null) {
          return androidModules_.get(index);  } else {
          return androidModulesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder> 
           getAndroidModulesOrBuilderList() {
        if (androidModulesBuilder_ != null) {
          return androidModulesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(androidModules_);
        }
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder addAndroidModulesBuilder() {
        return getAndroidModulesFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder addAndroidModulesBuilder(
          int index) {
        return getAndroidModulesFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleAndroidModule android_modules = 8;</code>
       *
       * <pre>
       * per android module metrics.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder> 
           getAndroidModulesBuilderList() {
        return getAndroidModulesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder> 
          getAndroidModulesFieldBuilder() {
        if (androidModulesBuilder_ == null) {
          androidModulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder>(
                  androidModules_,
                  ((bitField0_ & 0x00000080) == 0x00000080),
                  getParentForChildren(),
                  isClean());
          androidModules_ = null;
        }
        return androidModulesBuilder_;
      }

      // repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule> nativeAndroidModules_ =
        java.util.Collections.emptyList();
      private void ensureNativeAndroidModulesIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          nativeAndroidModules_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule>(nativeAndroidModules_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder> nativeAndroidModulesBuilder_;

      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule> getNativeAndroidModulesList() {
        if (nativeAndroidModulesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(nativeAndroidModules_);
        } else {
          return nativeAndroidModulesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public int getNativeAndroidModulesCount() {
        if (nativeAndroidModulesBuilder_ == null) {
          return nativeAndroidModules_.size();
        } else {
          return nativeAndroidModulesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule getNativeAndroidModules(int index) {
        if (nativeAndroidModulesBuilder_ == null) {
          return nativeAndroidModules_.get(index);
        } else {
          return nativeAndroidModulesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder setNativeAndroidModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule value) {
        if (nativeAndroidModulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNativeAndroidModulesIsMutable();
          nativeAndroidModules_.set(index, value);
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder setNativeAndroidModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder builderForValue) {
        if (nativeAndroidModulesBuilder_ == null) {
          ensureNativeAndroidModulesIsMutable();
          nativeAndroidModules_.set(index, builderForValue.build());
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder addNativeAndroidModules(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule value) {
        if (nativeAndroidModulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNativeAndroidModulesIsMutable();
          nativeAndroidModules_.add(value);
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder addNativeAndroidModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule value) {
        if (nativeAndroidModulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNativeAndroidModulesIsMutable();
          nativeAndroidModules_.add(index, value);
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder addNativeAndroidModules(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder builderForValue) {
        if (nativeAndroidModulesBuilder_ == null) {
          ensureNativeAndroidModulesIsMutable();
          nativeAndroidModules_.add(builderForValue.build());
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder addNativeAndroidModules(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder builderForValue) {
        if (nativeAndroidModulesBuilder_ == null) {
          ensureNativeAndroidModulesIsMutable();
          nativeAndroidModules_.add(index, builderForValue.build());
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder addAllNativeAndroidModules(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule> values) {
        if (nativeAndroidModulesBuilder_ == null) {
          ensureNativeAndroidModulesIsMutable();
          super.addAll(values, nativeAndroidModules_);
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder clearNativeAndroidModules() {
        if (nativeAndroidModulesBuilder_ == null) {
          nativeAndroidModules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public Builder removeNativeAndroidModules(int index) {
        if (nativeAndroidModulesBuilder_ == null) {
          ensureNativeAndroidModulesIsMutable();
          nativeAndroidModules_.remove(index);
          onChanged();
        } else {
          nativeAndroidModulesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder getNativeAndroidModulesBuilder(
          int index) {
        return getNativeAndroidModulesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder getNativeAndroidModulesOrBuilder(
          int index) {
        if (nativeAndroidModulesBuilder_ == null) {
          return nativeAndroidModules_.get(index);  } else {
          return nativeAndroidModulesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder> 
           getNativeAndroidModulesOrBuilderList() {
        if (nativeAndroidModulesBuilder_ != null) {
          return nativeAndroidModulesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(nativeAndroidModules_);
        }
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder addNativeAndroidModulesBuilder() {
        return getNativeAndroidModulesFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder addNativeAndroidModulesBuilder(
          int index) {
        return getNativeAndroidModulesFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleNativeAndroidModule native_android_modules = 9;</code>
       *
       * <pre>
       * per native android module metrics
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder> 
           getNativeAndroidModulesBuilderList() {
        return getNativeAndroidModulesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder> 
          getNativeAndroidModulesFieldBuilder() {
        if (nativeAndroidModulesBuilder_ == null) {
          nativeAndroidModulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder>(
                  nativeAndroidModules_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          nativeAndroidModules_ = null;
        }
        return nativeAndroidModulesBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleBuildDetails)
    }

    static {
      defaultInstance = new GradleBuildDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleBuildDetails)
  }

  public interface GradleLibraryOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 jar_dependency_count = 1;
    /**
     * <code>optional int64 jar_dependency_count = 1;</code>
     *
     * <pre>
     * Number of jar dependencies in this library.
     * </pre>
     */
    boolean hasJarDependencyCount();
    /**
     * <code>optional int64 jar_dependency_count = 1;</code>
     *
     * <pre>
     * Number of jar dependencies in this library.
     * </pre>
     */
    long getJarDependencyCount();

    // optional int64 aar_dependency_count = 2;
    /**
     * <code>optional int64 aar_dependency_count = 2;</code>
     *
     * <pre>
     * Number of aar dependencies in this library.
     * </pre>
     */
    boolean hasAarDependencyCount();
    /**
     * <code>optional int64 aar_dependency_count = 2;</code>
     *
     * <pre>
     * Number of aar dependencies in this library.
     * </pre>
     */
    long getAarDependencyCount();
  }
  /**
   * Protobuf type {@code android_studio.GradleLibrary}
   *
   * <pre>
   * Per library Gradle metrics.
   * </pre>
   */
  public static final class GradleLibrary extends
      com.google.protobuf.GeneratedMessage
      implements GradleLibraryOrBuilder {
    // Use GradleLibrary.newBuilder() to construct.
    private GradleLibrary(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleLibrary(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleLibrary defaultInstance;
    public static GradleLibrary getDefaultInstance() {
      return defaultInstance;
    }

    public GradleLibrary getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleLibrary(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              jarDependencyCount_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              aarDependencyCount_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleLibrary_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleLibrary_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleLibrary> PARSER =
        new com.google.protobuf.AbstractParser<GradleLibrary>() {
      public GradleLibrary parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleLibrary(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleLibrary> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 jar_dependency_count = 1;
    public static final int JAR_DEPENDENCY_COUNT_FIELD_NUMBER = 1;
    private long jarDependencyCount_;
    /**
     * <code>optional int64 jar_dependency_count = 1;</code>
     *
     * <pre>
     * Number of jar dependencies in this library.
     * </pre>
     */
    public boolean hasJarDependencyCount() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 jar_dependency_count = 1;</code>
     *
     * <pre>
     * Number of jar dependencies in this library.
     * </pre>
     */
    public long getJarDependencyCount() {
      return jarDependencyCount_;
    }

    // optional int64 aar_dependency_count = 2;
    public static final int AAR_DEPENDENCY_COUNT_FIELD_NUMBER = 2;
    private long aarDependencyCount_;
    /**
     * <code>optional int64 aar_dependency_count = 2;</code>
     *
     * <pre>
     * Number of aar dependencies in this library.
     * </pre>
     */
    public boolean hasAarDependencyCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 aar_dependency_count = 2;</code>
     *
     * <pre>
     * Number of aar dependencies in this library.
     * </pre>
     */
    public long getAarDependencyCount() {
      return aarDependencyCount_;
    }

    private void initFields() {
      jarDependencyCount_ = 0L;
      aarDependencyCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, jarDependencyCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, aarDependencyCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, jarDependencyCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, aarDependencyCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleLibrary}
     *
     * <pre>
     * Per library Gradle metrics.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibraryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleLibrary_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleLibrary_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        jarDependencyCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        aarDependencyCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleLibrary_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.jarDependencyCount_ = jarDependencyCount_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.aarDependencyCount_ = aarDependencyCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary.getDefaultInstance()) return this;
        if (other.hasJarDependencyCount()) {
          setJarDependencyCount(other.getJarDependencyCount());
        }
        if (other.hasAarDependencyCount()) {
          setAarDependencyCount(other.getAarDependencyCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleLibrary) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 jar_dependency_count = 1;
      private long jarDependencyCount_ ;
      /**
       * <code>optional int64 jar_dependency_count = 1;</code>
       *
       * <pre>
       * Number of jar dependencies in this library.
       * </pre>
       */
      public boolean hasJarDependencyCount() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 jar_dependency_count = 1;</code>
       *
       * <pre>
       * Number of jar dependencies in this library.
       * </pre>
       */
      public long getJarDependencyCount() {
        return jarDependencyCount_;
      }
      /**
       * <code>optional int64 jar_dependency_count = 1;</code>
       *
       * <pre>
       * Number of jar dependencies in this library.
       * </pre>
       */
      public Builder setJarDependencyCount(long value) {
        bitField0_ |= 0x00000001;
        jarDependencyCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 jar_dependency_count = 1;</code>
       *
       * <pre>
       * Number of jar dependencies in this library.
       * </pre>
       */
      public Builder clearJarDependencyCount() {
        bitField0_ = (bitField0_ & ~0x00000001);
        jarDependencyCount_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 aar_dependency_count = 2;
      private long aarDependencyCount_ ;
      /**
       * <code>optional int64 aar_dependency_count = 2;</code>
       *
       * <pre>
       * Number of aar dependencies in this library.
       * </pre>
       */
      public boolean hasAarDependencyCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 aar_dependency_count = 2;</code>
       *
       * <pre>
       * Number of aar dependencies in this library.
       * </pre>
       */
      public long getAarDependencyCount() {
        return aarDependencyCount_;
      }
      /**
       * <code>optional int64 aar_dependency_count = 2;</code>
       *
       * <pre>
       * Number of aar dependencies in this library.
       * </pre>
       */
      public Builder setAarDependencyCount(long value) {
        bitField0_ |= 0x00000002;
        aarDependencyCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 aar_dependency_count = 2;</code>
       *
       * <pre>
       * Number of aar dependencies in this library.
       * </pre>
       */
      public Builder clearAarDependencyCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        aarDependencyCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleLibrary)
    }

    static {
      defaultInstance = new GradleLibrary(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleLibrary)
  }

  public interface GradleModuleOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 total_module_count = 1;
    /**
     * <code>optional int64 total_module_count = 1;</code>
     *
     * <pre>
     * Total number of modules in this app.
     * </pre>
     */
    boolean hasTotalModuleCount();
    /**
     * <code>optional int64 total_module_count = 1;</code>
     *
     * <pre>
     * Total number of modules in this app.
     * </pre>
     */
    long getTotalModuleCount();

    // optional int64 app_module_count = 2;
    /**
     * <code>optional int64 app_module_count = 2;</code>
     *
     * <pre>
     * Number of aar modules in  this app.
     * </pre>
     */
    boolean hasAppModuleCount();
    /**
     * <code>optional int64 app_module_count = 2;</code>
     *
     * <pre>
     * Number of aar modules in  this app.
     * </pre>
     */
    long getAppModuleCount();

    // optional int64 lib_module_count = 3;
    /**
     * <code>optional int64 lib_module_count = 3;</code>
     *
     * <pre>
     * Number of library modules in this app..
     * </pre>
     */
    boolean hasLibModuleCount();
    /**
     * <code>optional int64 lib_module_count = 3;</code>
     *
     * <pre>
     * Number of library modules in this app..
     * </pre>
     */
    long getLibModuleCount();
  }
  /**
   * Protobuf type {@code android_studio.GradleModule}
   *
   * <pre>
   * Per module Gradle metrics.
   * </pre>
   */
  public static final class GradleModule extends
      com.google.protobuf.GeneratedMessage
      implements GradleModuleOrBuilder {
    // Use GradleModule.newBuilder() to construct.
    private GradleModule(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleModule(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleModule defaultInstance;
    public static GradleModule getDefaultInstance() {
      return defaultInstance;
    }

    public GradleModule getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleModule(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              totalModuleCount_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              appModuleCount_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              libModuleCount_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleModule_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleModule_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleModule> PARSER =
        new com.google.protobuf.AbstractParser<GradleModule>() {
      public GradleModule parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleModule(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleModule> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 total_module_count = 1;
    public static final int TOTAL_MODULE_COUNT_FIELD_NUMBER = 1;
    private long totalModuleCount_;
    /**
     * <code>optional int64 total_module_count = 1;</code>
     *
     * <pre>
     * Total number of modules in this app.
     * </pre>
     */
    public boolean hasTotalModuleCount() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 total_module_count = 1;</code>
     *
     * <pre>
     * Total number of modules in this app.
     * </pre>
     */
    public long getTotalModuleCount() {
      return totalModuleCount_;
    }

    // optional int64 app_module_count = 2;
    public static final int APP_MODULE_COUNT_FIELD_NUMBER = 2;
    private long appModuleCount_;
    /**
     * <code>optional int64 app_module_count = 2;</code>
     *
     * <pre>
     * Number of aar modules in  this app.
     * </pre>
     */
    public boolean hasAppModuleCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 app_module_count = 2;</code>
     *
     * <pre>
     * Number of aar modules in  this app.
     * </pre>
     */
    public long getAppModuleCount() {
      return appModuleCount_;
    }

    // optional int64 lib_module_count = 3;
    public static final int LIB_MODULE_COUNT_FIELD_NUMBER = 3;
    private long libModuleCount_;
    /**
     * <code>optional int64 lib_module_count = 3;</code>
     *
     * <pre>
     * Number of library modules in this app..
     * </pre>
     */
    public boolean hasLibModuleCount() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 lib_module_count = 3;</code>
     *
     * <pre>
     * Number of library modules in this app..
     * </pre>
     */
    public long getLibModuleCount() {
      return libModuleCount_;
    }

    private void initFields() {
      totalModuleCount_ = 0L;
      appModuleCount_ = 0L;
      libModuleCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, totalModuleCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, appModuleCount_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, libModuleCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, totalModuleCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, appModuleCount_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, libModuleCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleModule}
     *
     * <pre>
     * Per module Gradle metrics.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModuleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleModule_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleModule_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        totalModuleCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        appModuleCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        libModuleCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleModule_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.totalModuleCount_ = totalModuleCount_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.appModuleCount_ = appModuleCount_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.libModuleCount_ = libModuleCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule.getDefaultInstance()) return this;
        if (other.hasTotalModuleCount()) {
          setTotalModuleCount(other.getTotalModuleCount());
        }
        if (other.hasAppModuleCount()) {
          setAppModuleCount(other.getAppModuleCount());
        }
        if (other.hasLibModuleCount()) {
          setLibModuleCount(other.getLibModuleCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleModule) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 total_module_count = 1;
      private long totalModuleCount_ ;
      /**
       * <code>optional int64 total_module_count = 1;</code>
       *
       * <pre>
       * Total number of modules in this app.
       * </pre>
       */
      public boolean hasTotalModuleCount() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 total_module_count = 1;</code>
       *
       * <pre>
       * Total number of modules in this app.
       * </pre>
       */
      public long getTotalModuleCount() {
        return totalModuleCount_;
      }
      /**
       * <code>optional int64 total_module_count = 1;</code>
       *
       * <pre>
       * Total number of modules in this app.
       * </pre>
       */
      public Builder setTotalModuleCount(long value) {
        bitField0_ |= 0x00000001;
        totalModuleCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 total_module_count = 1;</code>
       *
       * <pre>
       * Total number of modules in this app.
       * </pre>
       */
      public Builder clearTotalModuleCount() {
        bitField0_ = (bitField0_ & ~0x00000001);
        totalModuleCount_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 app_module_count = 2;
      private long appModuleCount_ ;
      /**
       * <code>optional int64 app_module_count = 2;</code>
       *
       * <pre>
       * Number of aar modules in  this app.
       * </pre>
       */
      public boolean hasAppModuleCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 app_module_count = 2;</code>
       *
       * <pre>
       * Number of aar modules in  this app.
       * </pre>
       */
      public long getAppModuleCount() {
        return appModuleCount_;
      }
      /**
       * <code>optional int64 app_module_count = 2;</code>
       *
       * <pre>
       * Number of aar modules in  this app.
       * </pre>
       */
      public Builder setAppModuleCount(long value) {
        bitField0_ |= 0x00000002;
        appModuleCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 app_module_count = 2;</code>
       *
       * <pre>
       * Number of aar modules in  this app.
       * </pre>
       */
      public Builder clearAppModuleCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        appModuleCount_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 lib_module_count = 3;
      private long libModuleCount_ ;
      /**
       * <code>optional int64 lib_module_count = 3;</code>
       *
       * <pre>
       * Number of library modules in this app..
       * </pre>
       */
      public boolean hasLibModuleCount() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 lib_module_count = 3;</code>
       *
       * <pre>
       * Number of library modules in this app..
       * </pre>
       */
      public long getLibModuleCount() {
        return libModuleCount_;
      }
      /**
       * <code>optional int64 lib_module_count = 3;</code>
       *
       * <pre>
       * Number of library modules in this app..
       * </pre>
       */
      public Builder setLibModuleCount(long value) {
        bitField0_ |= 0x00000004;
        libModuleCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 lib_module_count = 3;</code>
       *
       * <pre>
       * Number of library modules in this app..
       * </pre>
       */
      public Builder clearLibModuleCount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        libModuleCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleModule)
    }

    static {
      defaultInstance = new GradleModule(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleModule)
  }

  public interface GradleAndroidModuleOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string app_id = 1;
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    boolean hasAppId();
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    java.lang.String getAppId();
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    com.google.protobuf.ByteString
        getAppIdBytes();

    // optional string module_name = 2;
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    boolean hasModuleName();
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    java.lang.String getModuleName();
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    com.google.protobuf.ByteString
        getModuleNameBytes();

    // optional bool is_library = 3;
    /**
     * <code>optional bool is_library = 3;</code>
     *
     * <pre>
     * True if this module is a library.
     * </pre>
     */
    boolean hasIsLibrary();
    /**
     * <code>optional bool is_library = 3;</code>
     *
     * <pre>
     * True if this module is a library.
     * </pre>
     */
    boolean getIsLibrary();

    // optional int64 build_type_count = 4;
    /**
     * <code>optional int64 build_type_count = 4;</code>
     *
     * <pre>
     * Number of different build types for this module.
     * </pre>
     */
    boolean hasBuildTypeCount();
    /**
     * <code>optional int64 build_type_count = 4;</code>
     *
     * <pre>
     * Number of different build types for this module.
     * </pre>
     */
    long getBuildTypeCount();

    // optional int64 flavor_count = 5;
    /**
     * <code>optional int64 flavor_count = 5;</code>
     *
     * <pre>
     * Number of different flavor types for this module.
     * </pre>
     */
    boolean hasFlavorCount();
    /**
     * <code>optional int64 flavor_count = 5;</code>
     *
     * <pre>
     * Number of different flavor types for this module.
     * </pre>
     */
    long getFlavorCount();

    // optional int64 flavor_dimension = 6;
    /**
     * <code>optional int64 flavor_dimension = 6;</code>
     *
     * <pre>
     * Number of different flavor dimensions for this module.
     * </pre>
     */
    boolean hasFlavorDimension();
    /**
     * <code>optional int64 flavor_dimension = 6;</code>
     *
     * <pre>
     * Number of different flavor dimensions for this module.
     * </pre>
     */
    long getFlavorDimension();

    // optional int64 signing_config_count = 7;
    /**
     * <code>optional int64 signing_config_count = 7;</code>
     *
     * <pre>
     * Number of signing configurations for this module.
     * </pre>
     */
    boolean hasSigningConfigCount();
    /**
     * <code>optional int64 signing_config_count = 7;</code>
     *
     * <pre>
     * Number of signing configurations for this module.
     * </pre>
     */
    long getSigningConfigCount();
  }
  /**
   * Protobuf type {@code android_studio.GradleAndroidModule}
   *
   * <pre>
   * Per Android module Gradle metrics.
   * </pre>
   */
  public static final class GradleAndroidModule extends
      com.google.protobuf.GeneratedMessage
      implements GradleAndroidModuleOrBuilder {
    // Use GradleAndroidModule.newBuilder() to construct.
    private GradleAndroidModule(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleAndroidModule(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleAndroidModule defaultInstance;
    public static GradleAndroidModule getDefaultInstance() {
      return defaultInstance;
    }

    public GradleAndroidModule getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleAndroidModule(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              appId_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              moduleName_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              isLibrary_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              buildTypeCount_ = input.readInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              flavorCount_ = input.readInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              flavorDimension_ = input.readInt64();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              signingConfigCount_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleAndroidModule_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleAndroidModule_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleAndroidModule> PARSER =
        new com.google.protobuf.AbstractParser<GradleAndroidModule>() {
      public GradleAndroidModule parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleAndroidModule(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleAndroidModule> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string app_id = 1;
    public static final int APP_ID_FIELD_NUMBER = 1;
    private java.lang.Object appId_;
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    public boolean hasAppId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    public java.lang.String getAppId() {
      java.lang.Object ref = appId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          appId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getAppIdBytes() {
      java.lang.Object ref = appId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        appId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string module_name = 2;
    public static final int MODULE_NAME_FIELD_NUMBER = 2;
    private java.lang.Object moduleName_;
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    public boolean hasModuleName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    public java.lang.String getModuleName() {
      java.lang.Object ref = moduleName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          moduleName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getModuleNameBytes() {
      java.lang.Object ref = moduleName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        moduleName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool is_library = 3;
    public static final int IS_LIBRARY_FIELD_NUMBER = 3;
    private boolean isLibrary_;
    /**
     * <code>optional bool is_library = 3;</code>
     *
     * <pre>
     * True if this module is a library.
     * </pre>
     */
    public boolean hasIsLibrary() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool is_library = 3;</code>
     *
     * <pre>
     * True if this module is a library.
     * </pre>
     */
    public boolean getIsLibrary() {
      return isLibrary_;
    }

    // optional int64 build_type_count = 4;
    public static final int BUILD_TYPE_COUNT_FIELD_NUMBER = 4;
    private long buildTypeCount_;
    /**
     * <code>optional int64 build_type_count = 4;</code>
     *
     * <pre>
     * Number of different build types for this module.
     * </pre>
     */
    public boolean hasBuildTypeCount() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 build_type_count = 4;</code>
     *
     * <pre>
     * Number of different build types for this module.
     * </pre>
     */
    public long getBuildTypeCount() {
      return buildTypeCount_;
    }

    // optional int64 flavor_count = 5;
    public static final int FLAVOR_COUNT_FIELD_NUMBER = 5;
    private long flavorCount_;
    /**
     * <code>optional int64 flavor_count = 5;</code>
     *
     * <pre>
     * Number of different flavor types for this module.
     * </pre>
     */
    public boolean hasFlavorCount() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 flavor_count = 5;</code>
     *
     * <pre>
     * Number of different flavor types for this module.
     * </pre>
     */
    public long getFlavorCount() {
      return flavorCount_;
    }

    // optional int64 flavor_dimension = 6;
    public static final int FLAVOR_DIMENSION_FIELD_NUMBER = 6;
    private long flavorDimension_;
    /**
     * <code>optional int64 flavor_dimension = 6;</code>
     *
     * <pre>
     * Number of different flavor dimensions for this module.
     * </pre>
     */
    public boolean hasFlavorDimension() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int64 flavor_dimension = 6;</code>
     *
     * <pre>
     * Number of different flavor dimensions for this module.
     * </pre>
     */
    public long getFlavorDimension() {
      return flavorDimension_;
    }

    // optional int64 signing_config_count = 7;
    public static final int SIGNING_CONFIG_COUNT_FIELD_NUMBER = 7;
    private long signingConfigCount_;
    /**
     * <code>optional int64 signing_config_count = 7;</code>
     *
     * <pre>
     * Number of signing configurations for this module.
     * </pre>
     */
    public boolean hasSigningConfigCount() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 signing_config_count = 7;</code>
     *
     * <pre>
     * Number of signing configurations for this module.
     * </pre>
     */
    public long getSigningConfigCount() {
      return signingConfigCount_;
    }

    private void initFields() {
      appId_ = "";
      moduleName_ = "";
      isLibrary_ = false;
      buildTypeCount_ = 0L;
      flavorCount_ = 0L;
      flavorDimension_ = 0L;
      signingConfigCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getAppIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getModuleNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, isLibrary_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, buildTypeCount_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, flavorCount_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt64(6, flavorDimension_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(7, signingConfigCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getAppIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getModuleNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, isLibrary_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, buildTypeCount_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, flavorCount_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, flavorDimension_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, signingConfigCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleAndroidModule}
     *
     * <pre>
     * Per Android module Gradle metrics.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModuleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleAndroidModule_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleAndroidModule_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        appId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        moduleName_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        isLibrary_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        buildTypeCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        flavorCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        flavorDimension_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        signingConfigCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleAndroidModule_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.appId_ = appId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.moduleName_ = moduleName_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.isLibrary_ = isLibrary_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.buildTypeCount_ = buildTypeCount_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.flavorCount_ = flavorCount_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.flavorDimension_ = flavorDimension_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.signingConfigCount_ = signingConfigCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule.getDefaultInstance()) return this;
        if (other.hasAppId()) {
          bitField0_ |= 0x00000001;
          appId_ = other.appId_;
          onChanged();
        }
        if (other.hasModuleName()) {
          bitField0_ |= 0x00000002;
          moduleName_ = other.moduleName_;
          onChanged();
        }
        if (other.hasIsLibrary()) {
          setIsLibrary(other.getIsLibrary());
        }
        if (other.hasBuildTypeCount()) {
          setBuildTypeCount(other.getBuildTypeCount());
        }
        if (other.hasFlavorCount()) {
          setFlavorCount(other.getFlavorCount());
        }
        if (other.hasFlavorDimension()) {
          setFlavorDimension(other.getFlavorDimension());
        }
        if (other.hasSigningConfigCount()) {
          setSigningConfigCount(other.getSigningConfigCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleAndroidModule) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string app_id = 1;
      private java.lang.Object appId_ = "";
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public boolean hasAppId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public java.lang.String getAppId() {
        java.lang.Object ref = appId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          appId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getAppIdBytes() {
        java.lang.Object ref = appId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          appId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public Builder setAppId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        appId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public Builder clearAppId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        appId_ = getDefaultInstance().getAppId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public Builder setAppIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        appId_ = value;
        onChanged();
        return this;
      }

      // optional string module_name = 2;
      private java.lang.Object moduleName_ = "";
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public boolean hasModuleName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public java.lang.String getModuleName() {
        java.lang.Object ref = moduleName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          moduleName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getModuleNameBytes() {
        java.lang.Object ref = moduleName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          moduleName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public Builder setModuleName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        moduleName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public Builder clearModuleName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        moduleName_ = getDefaultInstance().getModuleName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public Builder setModuleNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        moduleName_ = value;
        onChanged();
        return this;
      }

      // optional bool is_library = 3;
      private boolean isLibrary_ ;
      /**
       * <code>optional bool is_library = 3;</code>
       *
       * <pre>
       * True if this module is a library.
       * </pre>
       */
      public boolean hasIsLibrary() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool is_library = 3;</code>
       *
       * <pre>
       * True if this module is a library.
       * </pre>
       */
      public boolean getIsLibrary() {
        return isLibrary_;
      }
      /**
       * <code>optional bool is_library = 3;</code>
       *
       * <pre>
       * True if this module is a library.
       * </pre>
       */
      public Builder setIsLibrary(boolean value) {
        bitField0_ |= 0x00000004;
        isLibrary_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool is_library = 3;</code>
       *
       * <pre>
       * True if this module is a library.
       * </pre>
       */
      public Builder clearIsLibrary() {
        bitField0_ = (bitField0_ & ~0x00000004);
        isLibrary_ = false;
        onChanged();
        return this;
      }

      // optional int64 build_type_count = 4;
      private long buildTypeCount_ ;
      /**
       * <code>optional int64 build_type_count = 4;</code>
       *
       * <pre>
       * Number of different build types for this module.
       * </pre>
       */
      public boolean hasBuildTypeCount() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 build_type_count = 4;</code>
       *
       * <pre>
       * Number of different build types for this module.
       * </pre>
       */
      public long getBuildTypeCount() {
        return buildTypeCount_;
      }
      /**
       * <code>optional int64 build_type_count = 4;</code>
       *
       * <pre>
       * Number of different build types for this module.
       * </pre>
       */
      public Builder setBuildTypeCount(long value) {
        bitField0_ |= 0x00000008;
        buildTypeCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 build_type_count = 4;</code>
       *
       * <pre>
       * Number of different build types for this module.
       * </pre>
       */
      public Builder clearBuildTypeCount() {
        bitField0_ = (bitField0_ & ~0x00000008);
        buildTypeCount_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 flavor_count = 5;
      private long flavorCount_ ;
      /**
       * <code>optional int64 flavor_count = 5;</code>
       *
       * <pre>
       * Number of different flavor types for this module.
       * </pre>
       */
      public boolean hasFlavorCount() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 flavor_count = 5;</code>
       *
       * <pre>
       * Number of different flavor types for this module.
       * </pre>
       */
      public long getFlavorCount() {
        return flavorCount_;
      }
      /**
       * <code>optional int64 flavor_count = 5;</code>
       *
       * <pre>
       * Number of different flavor types for this module.
       * </pre>
       */
      public Builder setFlavorCount(long value) {
        bitField0_ |= 0x00000010;
        flavorCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 flavor_count = 5;</code>
       *
       * <pre>
       * Number of different flavor types for this module.
       * </pre>
       */
      public Builder clearFlavorCount() {
        bitField0_ = (bitField0_ & ~0x00000010);
        flavorCount_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 flavor_dimension = 6;
      private long flavorDimension_ ;
      /**
       * <code>optional int64 flavor_dimension = 6;</code>
       *
       * <pre>
       * Number of different flavor dimensions for this module.
       * </pre>
       */
      public boolean hasFlavorDimension() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int64 flavor_dimension = 6;</code>
       *
       * <pre>
       * Number of different flavor dimensions for this module.
       * </pre>
       */
      public long getFlavorDimension() {
        return flavorDimension_;
      }
      /**
       * <code>optional int64 flavor_dimension = 6;</code>
       *
       * <pre>
       * Number of different flavor dimensions for this module.
       * </pre>
       */
      public Builder setFlavorDimension(long value) {
        bitField0_ |= 0x00000020;
        flavorDimension_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 flavor_dimension = 6;</code>
       *
       * <pre>
       * Number of different flavor dimensions for this module.
       * </pre>
       */
      public Builder clearFlavorDimension() {
        bitField0_ = (bitField0_ & ~0x00000020);
        flavorDimension_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 signing_config_count = 7;
      private long signingConfigCount_ ;
      /**
       * <code>optional int64 signing_config_count = 7;</code>
       *
       * <pre>
       * Number of signing configurations for this module.
       * </pre>
       */
      public boolean hasSigningConfigCount() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 signing_config_count = 7;</code>
       *
       * <pre>
       * Number of signing configurations for this module.
       * </pre>
       */
      public long getSigningConfigCount() {
        return signingConfigCount_;
      }
      /**
       * <code>optional int64 signing_config_count = 7;</code>
       *
       * <pre>
       * Number of signing configurations for this module.
       * </pre>
       */
      public Builder setSigningConfigCount(long value) {
        bitField0_ |= 0x00000040;
        signingConfigCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 signing_config_count = 7;</code>
       *
       * <pre>
       * Number of signing configurations for this module.
       * </pre>
       */
      public Builder clearSigningConfigCount() {
        bitField0_ = (bitField0_ & ~0x00000040);
        signingConfigCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleAndroidModule)
    }

    static {
      defaultInstance = new GradleAndroidModule(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleAndroidModule)
  }

  public interface GradleNativeAndroidModuleOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string app_id = 1;
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    boolean hasAppId();
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    java.lang.String getAppId();
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    com.google.protobuf.ByteString
        getAppIdBytes();

    // optional string module_name = 2;
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    boolean hasModuleName();
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    java.lang.String getModuleName();
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    com.google.protobuf.ByteString
        getModuleNameBytes();

    // optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;
    /**
     * <code>optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;</code>
     *
     * <pre>
     * True if this module is a library.
     * </pre>
     */
    boolean hasBuildSystemType();
    /**
     * <code>optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;</code>
     *
     * <pre>
     * True if this module is a library.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType getBuildSystemType();
  }
  /**
   * Protobuf type {@code android_studio.GradleNativeAndroidModule}
   *
   * <pre>
   * per "native" (C++) android module Gradle metrics.
   * </pre>
   */
  public static final class GradleNativeAndroidModule extends
      com.google.protobuf.GeneratedMessage
      implements GradleNativeAndroidModuleOrBuilder {
    // Use GradleNativeAndroidModule.newBuilder() to construct.
    private GradleNativeAndroidModule(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleNativeAndroidModule(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleNativeAndroidModule defaultInstance;
    public static GradleNativeAndroidModule getDefaultInstance() {
      return defaultInstance;
    }

    public GradleNativeAndroidModule getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleNativeAndroidModule(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              appId_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              moduleName_ = input.readBytes();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                buildSystemType_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleNativeAndroidModule_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleNativeAndroidModule_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleNativeAndroidModule> PARSER =
        new com.google.protobuf.AbstractParser<GradleNativeAndroidModule>() {
      public GradleNativeAndroidModule parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleNativeAndroidModule(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleNativeAndroidModule> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.GradleNativeAndroidModule.NativeBuildSystemType}
     *
     * <pre>
     * The various native build systems we support to be used from Gradle.
     * </pre>
     */
    public enum NativeBuildSystemType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE = 0;</code>
       */
      UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE(0, 0),
      /**
       * <code>GRADLE_EXPERIMENTAL = 1;</code>
       *
       * <pre>
       * The Gradle epxerimental plugin
       * </pre>
       */
      GRADLE_EXPERIMENTAL(1, 1),
      /**
       * <code>NDK_COMPILE = 2;</code>
       *
       * <pre>
       * The compilation part of NDK builds (Android's native build system).
       * </pre>
       */
      NDK_COMPILE(2, 2),
      /**
       * <code>NDK_BUILD = 3;</code>
       *
       * <pre>
       * full NDK builds (Android's native build system).
       * </pre>
       */
      NDK_BUILD(3, 3),
      /**
       * <code>CMAKE = 4;</code>
       *
       * <pre>
       * CMake is a very common C++ build system.
       * </pre>
       */
      CMAKE(4, 4),
      ;

      /**
       * <code>UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE = 0;</code>
       */
      public static final int UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE_VALUE = 0;
      /**
       * <code>GRADLE_EXPERIMENTAL = 1;</code>
       *
       * <pre>
       * The Gradle epxerimental plugin
       * </pre>
       */
      public static final int GRADLE_EXPERIMENTAL_VALUE = 1;
      /**
       * <code>NDK_COMPILE = 2;</code>
       *
       * <pre>
       * The compilation part of NDK builds (Android's native build system).
       * </pre>
       */
      public static final int NDK_COMPILE_VALUE = 2;
      /**
       * <code>NDK_BUILD = 3;</code>
       *
       * <pre>
       * full NDK builds (Android's native build system).
       * </pre>
       */
      public static final int NDK_BUILD_VALUE = 3;
      /**
       * <code>CMAKE = 4;</code>
       *
       * <pre>
       * CMake is a very common C++ build system.
       * </pre>
       */
      public static final int CMAKE_VALUE = 4;


      public final int getNumber() { return value; }

      public static NativeBuildSystemType valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE;
          case 1: return GRADLE_EXPERIMENTAL;
          case 2: return NDK_COMPILE;
          case 3: return NDK_BUILD;
          case 4: return CMAKE;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<NativeBuildSystemType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<NativeBuildSystemType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<NativeBuildSystemType>() {
              public NativeBuildSystemType findValueByNumber(int number) {
                return NativeBuildSystemType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.getDescriptor().getEnumTypes().get(0);
      }

      private static final NativeBuildSystemType[] VALUES = values();

      public static NativeBuildSystemType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private NativeBuildSystemType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.GradleNativeAndroidModule.NativeBuildSystemType)
    }

    private int bitField0_;
    // optional string app_id = 1;
    public static final int APP_ID_FIELD_NUMBER = 1;
    private java.lang.Object appId_;
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    public boolean hasAppId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    public java.lang.String getAppId() {
      java.lang.Object ref = appId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          appId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string app_id = 1;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the application id
     *  the app_id is the id for the user's android app
     *  which we salt with a client unique salt and then sha256
     *  so it is anonymized and is unique per user, but has a 1-N relation.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getAppIdBytes() {
      java.lang.Object ref = appId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        appId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string module_name = 2;
    public static final int MODULE_NAME_FIELD_NUMBER = 2;
    private java.lang.Object moduleName_;
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    public boolean hasModuleName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    public java.lang.String getModuleName() {
      java.lang.Object ref = moduleName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          moduleName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string module_name = 2;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the module name.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getModuleNameBytes() {
      java.lang.Object ref = moduleName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        moduleName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;
    public static final int BUILD_SYSTEM_TYPE_FIELD_NUMBER = 3;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType buildSystemType_;
    /**
     * <code>optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;</code>
     *
     * <pre>
     * True if this module is a library.
     * </pre>
     */
    public boolean hasBuildSystemType() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;</code>
     *
     * <pre>
     * True if this module is a library.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType getBuildSystemType() {
      return buildSystemType_;
    }

    private void initFields() {
      appId_ = "";
      moduleName_ = "";
      buildSystemType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType.UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getAppIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getModuleNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, buildSystemType_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getAppIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getModuleNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, buildSystemType_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleNativeAndroidModule}
     *
     * <pre>
     * per "native" (C++) android module Gradle metrics.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModuleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleNativeAndroidModule_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleNativeAndroidModule_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        appId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        moduleName_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        buildSystemType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType.UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleNativeAndroidModule_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.appId_ = appId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.moduleName_ = moduleName_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.buildSystemType_ = buildSystemType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.getDefaultInstance()) return this;
        if (other.hasAppId()) {
          bitField0_ |= 0x00000001;
          appId_ = other.appId_;
          onChanged();
        }
        if (other.hasModuleName()) {
          bitField0_ |= 0x00000002;
          moduleName_ = other.moduleName_;
          onChanged();
        }
        if (other.hasBuildSystemType()) {
          setBuildSystemType(other.getBuildSystemType());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string app_id = 1;
      private java.lang.Object appId_ = "";
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public boolean hasAppId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public java.lang.String getAppId() {
        java.lang.Object ref = appId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          appId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getAppIdBytes() {
        java.lang.Object ref = appId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          appId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public Builder setAppId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        appId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public Builder clearAppId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        appId_ = getDefaultInstance().getAppId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string app_id = 1;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the application id
       *  the app_id is the id for the user's android app
       *  which we salt with a client unique salt and then sha256
       *  so it is anonymized and is unique per user, but has a 1-N relation.
       * </pre>
       */
      public Builder setAppIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        appId_ = value;
        onChanged();
        return this;
      }

      // optional string module_name = 2;
      private java.lang.Object moduleName_ = "";
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public boolean hasModuleName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public java.lang.String getModuleName() {
        java.lang.Object ref = moduleName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          moduleName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getModuleNameBytes() {
        java.lang.Object ref = moduleName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          moduleName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public Builder setModuleName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        moduleName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public Builder clearModuleName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        moduleName_ = getDefaultInstance().getModuleName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string module_name = 2;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the module name.
       * </pre>
       */
      public Builder setModuleNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        moduleName_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType buildSystemType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType.UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE;
      /**
       * <code>optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;</code>
       *
       * <pre>
       * True if this module is a library.
       * </pre>
       */
      public boolean hasBuildSystemType() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;</code>
       *
       * <pre>
       * True if this module is a library.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType getBuildSystemType() {
        return buildSystemType_;
      }
      /**
       * <code>optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;</code>
       *
       * <pre>
       * True if this module is a library.
       * </pre>
       */
      public Builder setBuildSystemType(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        buildSystemType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.GradleNativeAndroidModule.NativeBuildSystemType build_system_type = 3;</code>
       *
       * <pre>
       * True if this module is a library.
       * </pre>
       */
      public Builder clearBuildSystemType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        buildSystemType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleNativeAndroidModule.NativeBuildSystemType.UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleNativeAndroidModule)
    }

    static {
      defaultInstance = new GradleNativeAndroidModule(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleNativeAndroidModule)
  }

  public interface InstantRunOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;
    /**
     * <code>optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;</code>
     *
     * <pre>
     * What kind of Instant Run deployment was chosen.
     * </pre>
     */
    boolean hasDeploymentKind();
    /**
     * <code>optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;</code>
     *
     * <pre>
     * What kind of Instant Run deployment was chosen.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind getDeploymentKind();

    // optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;
    /**
     * <code>optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;</code>
     *
     * <pre>
     * what was the reason for chosing that kind of deployment from the gradle
     *  side.
     * </pre>
     */
    boolean hasInstantRunBuildCause();
    /**
     * <code>optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;</code>
     *
     * <pre>
     * what was the reason for chosing that kind of deployment from the gradle
     *  side.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause getInstantRunBuildCause();

    // optional int64 build_time = 4;
    /**
     * <code>optional int64 build_time = 4;</code>
     *
     * <pre>
     * time the InstantRun enabled took in seconds.
     * </pre>
     */
    boolean hasBuildTime();
    /**
     * <code>optional int64 build_time = 4;</code>
     *
     * <pre>
     * time the InstantRun enabled took in seconds.
     * </pre>
     */
    long getBuildTime();

    // optional string session_id = 5;
    /**
     * <code>optional string session_id = 5;</code>
     *
     * <pre>
     * The session id is a UUID within a single run of Android Studio
     *  tracking multiple HOT_SWAP &amp; DEX builds in the same
     *  IR session (starting at FULL_APK and ending before FULL_APK).
     * </pre>
     */
    boolean hasSessionId();
    /**
     * <code>optional string session_id = 5;</code>
     *
     * <pre>
     * The session id is a UUID within a single run of Android Studio
     *  tracking multiple HOT_SWAP &amp; DEX builds in the same
     *  IR session (starting at FULL_APK and ending before FULL_APK).
     * </pre>
     */
    java.lang.String getSessionId();
    /**
     * <code>optional string session_id = 5;</code>
     *
     * <pre>
     * The session id is a UUID within a single run of Android Studio
     *  tracking multiple HOT_SWAP &amp; DEX builds in the same
     *  IR session (starting at FULL_APK and ending before FULL_APK).
     * </pre>
     */
    com.google.protobuf.ByteString
        getSessionIdBytes();

    // optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;
    /**
     * <code>optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;</code>
     *
     * <pre>
     * what was the reason for chosing that kind of deployment from the IDE
     *  side.
     * </pre>
     */
    boolean hasIdeBuildCause();
    /**
     * <code>optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;</code>
     *
     * <pre>
     * what was the reason for chosing that kind of deployment from the IDE
     *  side.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause getIdeBuildCause();
  }
  /**
   * Protobuf type {@code android_studio.InstantRun}
   *
   * <pre>
   * Metrics on InstantRun usage.
   * </pre>
   */
  public static final class InstantRun extends
      com.google.protobuf.GeneratedMessage
      implements InstantRunOrBuilder {
    // Use InstantRun.newBuilder() to construct.
    private InstantRun(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private InstantRun(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final InstantRun defaultInstance;
    public static InstantRun getDefaultInstance() {
      return defaultInstance;
    }

    public InstantRun getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private InstantRun(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind value = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                deploymentKind_ = value;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause value = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                instantRunBuildCause_ = value;
              }
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              buildTime_ = input.readInt64();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000008;
              sessionId_ = input.readBytes();
              break;
            }
            case 48: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause value = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(6, rawValue);
              } else {
                bitField0_ |= 0x00000010;
                ideBuildCause_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRun_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRun_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.Builder.class);
    }

    public static com.google.protobuf.Parser<InstantRun> PARSER =
        new com.google.protobuf.AbstractParser<InstantRun>() {
      public InstantRun parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new InstantRun(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<InstantRun> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.InstantRun.InstantRunDeploymentKind}
     *
     * <pre>
     * What Instant Run Deployment was used
     * </pre>
     */
    public enum InstantRunDeploymentKind
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND = 0;</code>
       */
      UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND(0, 0),
      /**
       * <code>LEGACY = 1;</code>
       */
      LEGACY(1, 1),
      /**
       * <code>FULL_APK = 2;</code>
       */
      FULL_APK(2, 2),
      /**
       * <code>SPLIT_APK = 3;</code>
       */
      SPLIT_APK(3, 3),
      /**
       * <code>DEX = 4;</code>
       */
      DEX(4, 4),
      /**
       * <code>HOT_SWAP = 5;</code>
       */
      HOT_SWAP(5, 5),
      /**
       * <code>WARM_SWAP = 6;</code>
       */
      WARM_SWAP(6, 6),
      /**
       * <code>NO_CHANGES = 7;</code>
       */
      NO_CHANGES(7, 7),
      ;

      /**
       * <code>UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND = 0;</code>
       */
      public static final int UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND_VALUE = 0;
      /**
       * <code>LEGACY = 1;</code>
       */
      public static final int LEGACY_VALUE = 1;
      /**
       * <code>FULL_APK = 2;</code>
       */
      public static final int FULL_APK_VALUE = 2;
      /**
       * <code>SPLIT_APK = 3;</code>
       */
      public static final int SPLIT_APK_VALUE = 3;
      /**
       * <code>DEX = 4;</code>
       */
      public static final int DEX_VALUE = 4;
      /**
       * <code>HOT_SWAP = 5;</code>
       */
      public static final int HOT_SWAP_VALUE = 5;
      /**
       * <code>WARM_SWAP = 6;</code>
       */
      public static final int WARM_SWAP_VALUE = 6;
      /**
       * <code>NO_CHANGES = 7;</code>
       */
      public static final int NO_CHANGES_VALUE = 7;


      public final int getNumber() { return value; }

      public static InstantRunDeploymentKind valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND;
          case 1: return LEGACY;
          case 2: return FULL_APK;
          case 3: return SPLIT_APK;
          case 4: return DEX;
          case 5: return HOT_SWAP;
          case 6: return WARM_SWAP;
          case 7: return NO_CHANGES;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<InstantRunDeploymentKind>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<InstantRunDeploymentKind>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<InstantRunDeploymentKind>() {
              public InstantRunDeploymentKind findValueByNumber(int number) {
                return InstantRunDeploymentKind.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDescriptor().getEnumTypes().get(0);
      }

      private static final InstantRunDeploymentKind[] VALUES = values();

      public static InstantRunDeploymentKind valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private InstantRunDeploymentKind(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.InstantRun.InstantRunDeploymentKind)
    }

    /**
     * Protobuf enum {@code android_studio.InstantRun.InstantRunBuildCause}
     *
     * <pre>
     * The different reasons Instant Run had to do a full build.
     * </pre>
     */
    public enum InstantRunBuildCause
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_INSTANT_RUN_BUILD_CAUSE = 0;</code>
       */
      UNKNOWN_INSTANT_RUN_BUILD_CAUSE(0, 0),
      /**
       * <code>COMPATIBLE = 1;</code>
       */
      COMPATIBLE(1, 1),
      /**
       * <code>MANIFEST_CHANGE = 2;</code>
       */
      MANIFEST_CHANGE(2, 2),
      /**
       * <code>FIELD_TYPE_CHANGE = 3;</code>
       */
      FIELD_TYPE_CHANGE(3, 3),
      /**
       * <code>FIELD_REMOVED = 4;</code>
       */
      FIELD_REMOVED(4, 4),
      /**
       * <code>FIELD_ADDED = 5;</code>
       */
      FIELD_ADDED(5, 5),
      /**
       * <code>METHOD_DELETED = 6;</code>
       */
      METHOD_DELETED(6, 6),
      /**
       * <code>METHOD_ADDED = 7;</code>
       */
      METHOD_ADDED(7, 7),
      /**
       * <code>CLASS_ADDED = 8;</code>
       */
      CLASS_ADDED(8, 8),
      /**
       * <code>STATIC_INITIALIZER_CHANGE = 9;</code>
       */
      STATIC_INITIALIZER_CHANGE(9, 9),
      /**
       * <code>CLASS_ANNOTATION_CHANGE = 10;</code>
       */
      CLASS_ANNOTATION_CHANGE(10, 10),
      /**
       * <code>RESOURCE_CHANGE = 11;</code>
       */
      RESOURCE_CHANGE(11, 11),
      /**
       * <code>IMPLEMENTS_INTERFACE_CHANGE = 12;</code>
       */
      IMPLEMENTS_INTERFACE_CHANGE(12, 12),
      /**
       * <code>R_CLASS_CHANGE = 13;</code>
       */
      R_CLASS_CHANGE(13, 13),
      /**
       * <code>PARENT_CLASS_CHANGE = 14;</code>
       */
      PARENT_CLASS_CHANGE(14, 14),
      /**
       * <code>METHOD_ANNOTATION_CHANGE = 15;</code>
       */
      METHOD_ANNOTATION_CHANGE(15, 15),
      /**
       * <code>API_LEVEL_UNSUPPORTED = 16;</code>
       */
      API_LEVEL_UNSUPPORTED(16, 16),
      /**
       * <code>REFLECTION_USED = 17;</code>
       */
      REFLECTION_USED(17, 17),
      ;

      /**
       * <code>UNKNOWN_INSTANT_RUN_BUILD_CAUSE = 0;</code>
       */
      public static final int UNKNOWN_INSTANT_RUN_BUILD_CAUSE_VALUE = 0;
      /**
       * <code>COMPATIBLE = 1;</code>
       */
      public static final int COMPATIBLE_VALUE = 1;
      /**
       * <code>MANIFEST_CHANGE = 2;</code>
       */
      public static final int MANIFEST_CHANGE_VALUE = 2;
      /**
       * <code>FIELD_TYPE_CHANGE = 3;</code>
       */
      public static final int FIELD_TYPE_CHANGE_VALUE = 3;
      /**
       * <code>FIELD_REMOVED = 4;</code>
       */
      public static final int FIELD_REMOVED_VALUE = 4;
      /**
       * <code>FIELD_ADDED = 5;</code>
       */
      public static final int FIELD_ADDED_VALUE = 5;
      /**
       * <code>METHOD_DELETED = 6;</code>
       */
      public static final int METHOD_DELETED_VALUE = 6;
      /**
       * <code>METHOD_ADDED = 7;</code>
       */
      public static final int METHOD_ADDED_VALUE = 7;
      /**
       * <code>CLASS_ADDED = 8;</code>
       */
      public static final int CLASS_ADDED_VALUE = 8;
      /**
       * <code>STATIC_INITIALIZER_CHANGE = 9;</code>
       */
      public static final int STATIC_INITIALIZER_CHANGE_VALUE = 9;
      /**
       * <code>CLASS_ANNOTATION_CHANGE = 10;</code>
       */
      public static final int CLASS_ANNOTATION_CHANGE_VALUE = 10;
      /**
       * <code>RESOURCE_CHANGE = 11;</code>
       */
      public static final int RESOURCE_CHANGE_VALUE = 11;
      /**
       * <code>IMPLEMENTS_INTERFACE_CHANGE = 12;</code>
       */
      public static final int IMPLEMENTS_INTERFACE_CHANGE_VALUE = 12;
      /**
       * <code>R_CLASS_CHANGE = 13;</code>
       */
      public static final int R_CLASS_CHANGE_VALUE = 13;
      /**
       * <code>PARENT_CLASS_CHANGE = 14;</code>
       */
      public static final int PARENT_CLASS_CHANGE_VALUE = 14;
      /**
       * <code>METHOD_ANNOTATION_CHANGE = 15;</code>
       */
      public static final int METHOD_ANNOTATION_CHANGE_VALUE = 15;
      /**
       * <code>API_LEVEL_UNSUPPORTED = 16;</code>
       */
      public static final int API_LEVEL_UNSUPPORTED_VALUE = 16;
      /**
       * <code>REFLECTION_USED = 17;</code>
       */
      public static final int REFLECTION_USED_VALUE = 17;


      public final int getNumber() { return value; }

      public static InstantRunBuildCause valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_INSTANT_RUN_BUILD_CAUSE;
          case 1: return COMPATIBLE;
          case 2: return MANIFEST_CHANGE;
          case 3: return FIELD_TYPE_CHANGE;
          case 4: return FIELD_REMOVED;
          case 5: return FIELD_ADDED;
          case 6: return METHOD_DELETED;
          case 7: return METHOD_ADDED;
          case 8: return CLASS_ADDED;
          case 9: return STATIC_INITIALIZER_CHANGE;
          case 10: return CLASS_ANNOTATION_CHANGE;
          case 11: return RESOURCE_CHANGE;
          case 12: return IMPLEMENTS_INTERFACE_CHANGE;
          case 13: return R_CLASS_CHANGE;
          case 14: return PARENT_CLASS_CHANGE;
          case 15: return METHOD_ANNOTATION_CHANGE;
          case 16: return API_LEVEL_UNSUPPORTED;
          case 17: return REFLECTION_USED;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<InstantRunBuildCause>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<InstantRunBuildCause>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<InstantRunBuildCause>() {
              public InstantRunBuildCause findValueByNumber(int number) {
                return InstantRunBuildCause.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDescriptor().getEnumTypes().get(1);
      }

      private static final InstantRunBuildCause[] VALUES = values();

      public static InstantRunBuildCause valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private InstantRunBuildCause(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.InstantRun.InstantRunBuildCause)
    }

    /**
     * Protobuf enum {@code android_studio.InstantRun.InstantRunIdeBuildCause}
     *
     * <pre>
     * The different reasons InstantRun chose the build mode it did from the IDE's
     *  perspective.
     * </pre>
     */
    public enum InstantRunIdeBuildCause
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE = 0;</code>
       *
       * <pre>
       * reasons for clean build
       * </pre>
       */
      UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE(0, 0),
      /**
       * <code>NO_DEVICE = 1;</code>
       */
      NO_DEVICE(1, 1),
      /**
       * <code>APP_NOT_INSTALLED = 2;</code>
       */
      APP_NOT_INSTALLED(2, 2),
      /**
       * <code>MISMATCHING_TIMESTAMPS = 3;</code>
       */
      MISMATCHING_TIMESTAMPS(3, 3),
      /**
       * <code>USER_REQUESTED_CLEAN_BUILD = 4;</code>
       */
      USER_REQUESTED_CLEAN_BUILD(4, 4),
      /**
       * <code>API_TOO_LOW_FOR_INSTANT_RUN = 5;</code>
       *
       * <pre>
       * reasons for full build
       * </pre>
       */
      API_TOO_LOW_FOR_INSTANT_RUN(5, 5),
      /**
       * <code>FIRST_INSTALLATION_TO_DEVICE = 6;</code>
       *
       * <pre>
       * first installation in this Android Studio session
       * </pre>
       */
      FIRST_INSTALLATION_TO_DEVICE(6, 6),
      /**
       * <code>MANIFEST_RESOURCE_CHANGED = 7;</code>
       */
      MANIFEST_RESOURCE_CHANGED(7, 7),
      /**
       * <code>FREEZE_SWAP_REQUIRES_API21 = 8;</code>
       */
      FREEZE_SWAP_REQUIRES_API21(8, 8),
      /**
       * <code>FREEZE_SWAP_REQUIRES_WORKING_RUN_AS = 9;</code>
       */
      FREEZE_SWAP_REQUIRES_WORKING_RUN_AS(9, 9),
      /**
       * <code>APP_NOT_RUNNING = 10;</code>
       *
       * <pre>
       * reasons for forced cold swap build
       * </pre>
       */
      APP_NOT_RUNNING(10, 10),
      /**
       * <code>APP_USES_MULTIPLE_PROCESSES = 11;</code>
       */
      APP_USES_MULTIPLE_PROCESSES(11, 11),
      /**
       * <code>INCREMENTAL_BUILD = 12;</code>
       */
      INCREMENTAL_BUILD(12, 12),
      /**
       * <code>NO_INSTANT_RUN = 13;</code>
       */
      NO_INSTANT_RUN(13, 13),
      ;

      /**
       * <code>UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE = 0;</code>
       *
       * <pre>
       * reasons for clean build
       * </pre>
       */
      public static final int UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE_VALUE = 0;
      /**
       * <code>NO_DEVICE = 1;</code>
       */
      public static final int NO_DEVICE_VALUE = 1;
      /**
       * <code>APP_NOT_INSTALLED = 2;</code>
       */
      public static final int APP_NOT_INSTALLED_VALUE = 2;
      /**
       * <code>MISMATCHING_TIMESTAMPS = 3;</code>
       */
      public static final int MISMATCHING_TIMESTAMPS_VALUE = 3;
      /**
       * <code>USER_REQUESTED_CLEAN_BUILD = 4;</code>
       */
      public static final int USER_REQUESTED_CLEAN_BUILD_VALUE = 4;
      /**
       * <code>API_TOO_LOW_FOR_INSTANT_RUN = 5;</code>
       *
       * <pre>
       * reasons for full build
       * </pre>
       */
      public static final int API_TOO_LOW_FOR_INSTANT_RUN_VALUE = 5;
      /**
       * <code>FIRST_INSTALLATION_TO_DEVICE = 6;</code>
       *
       * <pre>
       * first installation in this Android Studio session
       * </pre>
       */
      public static final int FIRST_INSTALLATION_TO_DEVICE_VALUE = 6;
      /**
       * <code>MANIFEST_RESOURCE_CHANGED = 7;</code>
       */
      public static final int MANIFEST_RESOURCE_CHANGED_VALUE = 7;
      /**
       * <code>FREEZE_SWAP_REQUIRES_API21 = 8;</code>
       */
      public static final int FREEZE_SWAP_REQUIRES_API21_VALUE = 8;
      /**
       * <code>FREEZE_SWAP_REQUIRES_WORKING_RUN_AS = 9;</code>
       */
      public static final int FREEZE_SWAP_REQUIRES_WORKING_RUN_AS_VALUE = 9;
      /**
       * <code>APP_NOT_RUNNING = 10;</code>
       *
       * <pre>
       * reasons for forced cold swap build
       * </pre>
       */
      public static final int APP_NOT_RUNNING_VALUE = 10;
      /**
       * <code>APP_USES_MULTIPLE_PROCESSES = 11;</code>
       */
      public static final int APP_USES_MULTIPLE_PROCESSES_VALUE = 11;
      /**
       * <code>INCREMENTAL_BUILD = 12;</code>
       */
      public static final int INCREMENTAL_BUILD_VALUE = 12;
      /**
       * <code>NO_INSTANT_RUN = 13;</code>
       */
      public static final int NO_INSTANT_RUN_VALUE = 13;


      public final int getNumber() { return value; }

      public static InstantRunIdeBuildCause valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE;
          case 1: return NO_DEVICE;
          case 2: return APP_NOT_INSTALLED;
          case 3: return MISMATCHING_TIMESTAMPS;
          case 4: return USER_REQUESTED_CLEAN_BUILD;
          case 5: return API_TOO_LOW_FOR_INSTANT_RUN;
          case 6: return FIRST_INSTALLATION_TO_DEVICE;
          case 7: return MANIFEST_RESOURCE_CHANGED;
          case 8: return FREEZE_SWAP_REQUIRES_API21;
          case 9: return FREEZE_SWAP_REQUIRES_WORKING_RUN_AS;
          case 10: return APP_NOT_RUNNING;
          case 11: return APP_USES_MULTIPLE_PROCESSES;
          case 12: return INCREMENTAL_BUILD;
          case 13: return NO_INSTANT_RUN;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<InstantRunIdeBuildCause>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<InstantRunIdeBuildCause>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<InstantRunIdeBuildCause>() {
              public InstantRunIdeBuildCause findValueByNumber(int number) {
                return InstantRunIdeBuildCause.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDescriptor().getEnumTypes().get(2);
      }

      private static final InstantRunIdeBuildCause[] VALUES = values();

      public static InstantRunIdeBuildCause valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private InstantRunIdeBuildCause(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.InstantRun.InstantRunIdeBuildCause)
    }

    private int bitField0_;
    // optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;
    public static final int DEPLOYMENT_KIND_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind deploymentKind_;
    /**
     * <code>optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;</code>
     *
     * <pre>
     * What kind of Instant Run deployment was chosen.
     * </pre>
     */
    public boolean hasDeploymentKind() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;</code>
     *
     * <pre>
     * What kind of Instant Run deployment was chosen.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind getDeploymentKind() {
      return deploymentKind_;
    }

    // optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;
    public static final int INSTANT_RUN_BUILD_CAUSE_FIELD_NUMBER = 3;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause instantRunBuildCause_;
    /**
     * <code>optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;</code>
     *
     * <pre>
     * what was the reason for chosing that kind of deployment from the gradle
     *  side.
     * </pre>
     */
    public boolean hasInstantRunBuildCause() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;</code>
     *
     * <pre>
     * what was the reason for chosing that kind of deployment from the gradle
     *  side.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause getInstantRunBuildCause() {
      return instantRunBuildCause_;
    }

    // optional int64 build_time = 4;
    public static final int BUILD_TIME_FIELD_NUMBER = 4;
    private long buildTime_;
    /**
     * <code>optional int64 build_time = 4;</code>
     *
     * <pre>
     * time the InstantRun enabled took in seconds.
     * </pre>
     */
    public boolean hasBuildTime() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 build_time = 4;</code>
     *
     * <pre>
     * time the InstantRun enabled took in seconds.
     * </pre>
     */
    public long getBuildTime() {
      return buildTime_;
    }

    // optional string session_id = 5;
    public static final int SESSION_ID_FIELD_NUMBER = 5;
    private java.lang.Object sessionId_;
    /**
     * <code>optional string session_id = 5;</code>
     *
     * <pre>
     * The session id is a UUID within a single run of Android Studio
     *  tracking multiple HOT_SWAP &amp; DEX builds in the same
     *  IR session (starting at FULL_APK and ending before FULL_APK).
     * </pre>
     */
    public boolean hasSessionId() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string session_id = 5;</code>
     *
     * <pre>
     * The session id is a UUID within a single run of Android Studio
     *  tracking multiple HOT_SWAP &amp; DEX builds in the same
     *  IR session (starting at FULL_APK and ending before FULL_APK).
     * </pre>
     */
    public java.lang.String getSessionId() {
      java.lang.Object ref = sessionId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          sessionId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string session_id = 5;</code>
     *
     * <pre>
     * The session id is a UUID within a single run of Android Studio
     *  tracking multiple HOT_SWAP &amp; DEX builds in the same
     *  IR session (starting at FULL_APK and ending before FULL_APK).
     * </pre>
     */
    public com.google.protobuf.ByteString
        getSessionIdBytes() {
      java.lang.Object ref = sessionId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sessionId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;
    public static final int IDE_BUILD_CAUSE_FIELD_NUMBER = 6;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause ideBuildCause_;
    /**
     * <code>optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;</code>
     *
     * <pre>
     * what was the reason for chosing that kind of deployment from the IDE
     *  side.
     * </pre>
     */
    public boolean hasIdeBuildCause() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;</code>
     *
     * <pre>
     * what was the reason for chosing that kind of deployment from the IDE
     *  side.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause getIdeBuildCause() {
      return ideBuildCause_;
    }

    private void initFields() {
      deploymentKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind.UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND;
      instantRunBuildCause_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause.UNKNOWN_INSTANT_RUN_BUILD_CAUSE;
      buildTime_ = 0L;
      sessionId_ = "";
      ideBuildCause_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause.UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, deploymentKind_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(3, instantRunBuildCause_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(4, buildTime_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(5, getSessionIdBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeEnum(6, ideBuildCause_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, deploymentKind_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, instantRunBuildCause_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, buildTime_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getSessionIdBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(6, ideBuildCause_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.InstantRun}
     *
     * <pre>
     * Metrics on InstantRun usage.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRun_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRun_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        deploymentKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind.UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND;
        bitField0_ = (bitField0_ & ~0x00000001);
        instantRunBuildCause_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause.UNKNOWN_INSTANT_RUN_BUILD_CAUSE;
        bitField0_ = (bitField0_ & ~0x00000002);
        buildTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        sessionId_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        ideBuildCause_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause.UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRun_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.deploymentKind_ = deploymentKind_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.instantRunBuildCause_ = instantRunBuildCause_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.buildTime_ = buildTime_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.sessionId_ = sessionId_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.ideBuildCause_ = ideBuildCause_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.getDefaultInstance()) return this;
        if (other.hasDeploymentKind()) {
          setDeploymentKind(other.getDeploymentKind());
        }
        if (other.hasInstantRunBuildCause()) {
          setInstantRunBuildCause(other.getInstantRunBuildCause());
        }
        if (other.hasBuildTime()) {
          setBuildTime(other.getBuildTime());
        }
        if (other.hasSessionId()) {
          bitField0_ |= 0x00000008;
          sessionId_ = other.sessionId_;
          onChanged();
        }
        if (other.hasIdeBuildCause()) {
          setIdeBuildCause(other.getIdeBuildCause());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind deploymentKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind.UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND;
      /**
       * <code>optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;</code>
       *
       * <pre>
       * What kind of Instant Run deployment was chosen.
       * </pre>
       */
      public boolean hasDeploymentKind() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;</code>
       *
       * <pre>
       * What kind of Instant Run deployment was chosen.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind getDeploymentKind() {
        return deploymentKind_;
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;</code>
       *
       * <pre>
       * What kind of Instant Run deployment was chosen.
       * </pre>
       */
      public Builder setDeploymentKind(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        deploymentKind_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunDeploymentKind deployment_kind = 1;</code>
       *
       * <pre>
       * What kind of Instant Run deployment was chosen.
       * </pre>
       */
      public Builder clearDeploymentKind() {
        bitField0_ = (bitField0_ & ~0x00000001);
        deploymentKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunDeploymentKind.UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND;
        onChanged();
        return this;
      }

      // optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause instantRunBuildCause_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause.UNKNOWN_INSTANT_RUN_BUILD_CAUSE;
      /**
       * <code>optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;</code>
       *
       * <pre>
       * what was the reason for chosing that kind of deployment from the gradle
       *  side.
       * </pre>
       */
      public boolean hasInstantRunBuildCause() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;</code>
       *
       * <pre>
       * what was the reason for chosing that kind of deployment from the gradle
       *  side.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause getInstantRunBuildCause() {
        return instantRunBuildCause_;
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;</code>
       *
       * <pre>
       * what was the reason for chosing that kind of deployment from the gradle
       *  side.
       * </pre>
       */
      public Builder setInstantRunBuildCause(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        instantRunBuildCause_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunBuildCause instant_run_build_cause = 3;</code>
       *
       * <pre>
       * what was the reason for chosing that kind of deployment from the gradle
       *  side.
       * </pre>
       */
      public Builder clearInstantRunBuildCause() {
        bitField0_ = (bitField0_ & ~0x00000002);
        instantRunBuildCause_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunBuildCause.UNKNOWN_INSTANT_RUN_BUILD_CAUSE;
        onChanged();
        return this;
      }

      // optional int64 build_time = 4;
      private long buildTime_ ;
      /**
       * <code>optional int64 build_time = 4;</code>
       *
       * <pre>
       * time the InstantRun enabled took in seconds.
       * </pre>
       */
      public boolean hasBuildTime() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 build_time = 4;</code>
       *
       * <pre>
       * time the InstantRun enabled took in seconds.
       * </pre>
       */
      public long getBuildTime() {
        return buildTime_;
      }
      /**
       * <code>optional int64 build_time = 4;</code>
       *
       * <pre>
       * time the InstantRun enabled took in seconds.
       * </pre>
       */
      public Builder setBuildTime(long value) {
        bitField0_ |= 0x00000004;
        buildTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 build_time = 4;</code>
       *
       * <pre>
       * time the InstantRun enabled took in seconds.
       * </pre>
       */
      public Builder clearBuildTime() {
        bitField0_ = (bitField0_ & ~0x00000004);
        buildTime_ = 0L;
        onChanged();
        return this;
      }

      // optional string session_id = 5;
      private java.lang.Object sessionId_ = "";
      /**
       * <code>optional string session_id = 5;</code>
       *
       * <pre>
       * The session id is a UUID within a single run of Android Studio
       *  tracking multiple HOT_SWAP &amp; DEX builds in the same
       *  IR session (starting at FULL_APK and ending before FULL_APK).
       * </pre>
       */
      public boolean hasSessionId() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string session_id = 5;</code>
       *
       * <pre>
       * The session id is a UUID within a single run of Android Studio
       *  tracking multiple HOT_SWAP &amp; DEX builds in the same
       *  IR session (starting at FULL_APK and ending before FULL_APK).
       * </pre>
       */
      public java.lang.String getSessionId() {
        java.lang.Object ref = sessionId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          sessionId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string session_id = 5;</code>
       *
       * <pre>
       * The session id is a UUID within a single run of Android Studio
       *  tracking multiple HOT_SWAP &amp; DEX builds in the same
       *  IR session (starting at FULL_APK and ending before FULL_APK).
       * </pre>
       */
      public com.google.protobuf.ByteString
          getSessionIdBytes() {
        java.lang.Object ref = sessionId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sessionId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string session_id = 5;</code>
       *
       * <pre>
       * The session id is a UUID within a single run of Android Studio
       *  tracking multiple HOT_SWAP &amp; DEX builds in the same
       *  IR session (starting at FULL_APK and ending before FULL_APK).
       * </pre>
       */
      public Builder setSessionId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        sessionId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string session_id = 5;</code>
       *
       * <pre>
       * The session id is a UUID within a single run of Android Studio
       *  tracking multiple HOT_SWAP &amp; DEX builds in the same
       *  IR session (starting at FULL_APK and ending before FULL_APK).
       * </pre>
       */
      public Builder clearSessionId() {
        bitField0_ = (bitField0_ & ~0x00000008);
        sessionId_ = getDefaultInstance().getSessionId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string session_id = 5;</code>
       *
       * <pre>
       * The session id is a UUID within a single run of Android Studio
       *  tracking multiple HOT_SWAP &amp; DEX builds in the same
       *  IR session (starting at FULL_APK and ending before FULL_APK).
       * </pre>
       */
      public Builder setSessionIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        sessionId_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause ideBuildCause_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause.UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE;
      /**
       * <code>optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;</code>
       *
       * <pre>
       * what was the reason for chosing that kind of deployment from the IDE
       *  side.
       * </pre>
       */
      public boolean hasIdeBuildCause() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;</code>
       *
       * <pre>
       * what was the reason for chosing that kind of deployment from the IDE
       *  side.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause getIdeBuildCause() {
        return ideBuildCause_;
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;</code>
       *
       * <pre>
       * what was the reason for chosing that kind of deployment from the IDE
       *  side.
       * </pre>
       */
      public Builder setIdeBuildCause(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000010;
        ideBuildCause_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRun.InstantRunIdeBuildCause ide_build_cause = 6;</code>
       *
       * <pre>
       * what was the reason for chosing that kind of deployment from the IDE
       *  side.
       * </pre>
       */
      public Builder clearIdeBuildCause() {
        bitField0_ = (bitField0_ & ~0x00000010);
        ideBuildCause_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRun.InstantRunIdeBuildCause.UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.InstantRun)
    }

    static {
      defaultInstance = new InstantRun(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.InstantRun)
  }

  public interface MetaMetricsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 failed_connections = 1;
    /**
     * <code>optional int32 failed_connections = 1;</code>
     *
     * <pre>
     * number of times connecting to the clearcut server failed since
     *  the last successful upload.
     * </pre>
     */
    boolean hasFailedConnections();
    /**
     * <code>optional int32 failed_connections = 1;</code>
     *
     * <pre>
     * number of times connecting to the clearcut server failed since
     *  the last successful upload.
     * </pre>
     */
    int getFailedConnections();

    // optional int64 bytes_sent_in_last_upload = 2;
    /**
     * <code>optional int64 bytes_sent_in_last_upload = 2;</code>
     *
     * <pre>
     * number of bytes used to send metrics in the last upload.
     * </pre>
     */
    boolean hasBytesSentInLastUpload();
    /**
     * <code>optional int64 bytes_sent_in_last_upload = 2;</code>
     *
     * <pre>
     * number of bytes used to send metrics in the last upload.
     * </pre>
     */
    long getBytesSentInLastUpload();

    // optional int32 failed_server_replies = 3;
    /**
     * <code>optional int32 failed_server_replies = 3;</code>
     *
     * <pre>
     * number of times the clearcut server failed with an http error since
     *  the last successful upload.
     * </pre>
     */
    boolean hasFailedServerReplies();
    /**
     * <code>optional int32 failed_server_replies = 3;</code>
     *
     * <pre>
     * number of times the clearcut server failed with an http error since
     *  the last successful upload.
     * </pre>
     */
    int getFailedServerReplies();
  }
  /**
   * Protobuf type {@code android_studio.MetaMetrics}
   *
   * <pre>
   * describes Metrics on Metrics.
   * </pre>
   */
  public static final class MetaMetrics extends
      com.google.protobuf.GeneratedMessage
      implements MetaMetricsOrBuilder {
    // Use MetaMetrics.newBuilder() to construct.
    private MetaMetrics(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MetaMetrics(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MetaMetrics defaultInstance;
    public static MetaMetrics getDefaultInstance() {
      return defaultInstance;
    }

    public MetaMetrics getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MetaMetrics(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              failedConnections_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              bytesSentInLastUpload_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              failedServerReplies_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MetaMetrics_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MetaMetrics_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.Builder.class);
    }

    public static com.google.protobuf.Parser<MetaMetrics> PARSER =
        new com.google.protobuf.AbstractParser<MetaMetrics>() {
      public MetaMetrics parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MetaMetrics(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MetaMetrics> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 failed_connections = 1;
    public static final int FAILED_CONNECTIONS_FIELD_NUMBER = 1;
    private int failedConnections_;
    /**
     * <code>optional int32 failed_connections = 1;</code>
     *
     * <pre>
     * number of times connecting to the clearcut server failed since
     *  the last successful upload.
     * </pre>
     */
    public boolean hasFailedConnections() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 failed_connections = 1;</code>
     *
     * <pre>
     * number of times connecting to the clearcut server failed since
     *  the last successful upload.
     * </pre>
     */
    public int getFailedConnections() {
      return failedConnections_;
    }

    // optional int64 bytes_sent_in_last_upload = 2;
    public static final int BYTES_SENT_IN_LAST_UPLOAD_FIELD_NUMBER = 2;
    private long bytesSentInLastUpload_;
    /**
     * <code>optional int64 bytes_sent_in_last_upload = 2;</code>
     *
     * <pre>
     * number of bytes used to send metrics in the last upload.
     * </pre>
     */
    public boolean hasBytesSentInLastUpload() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 bytes_sent_in_last_upload = 2;</code>
     *
     * <pre>
     * number of bytes used to send metrics in the last upload.
     * </pre>
     */
    public long getBytesSentInLastUpload() {
      return bytesSentInLastUpload_;
    }

    // optional int32 failed_server_replies = 3;
    public static final int FAILED_SERVER_REPLIES_FIELD_NUMBER = 3;
    private int failedServerReplies_;
    /**
     * <code>optional int32 failed_server_replies = 3;</code>
     *
     * <pre>
     * number of times the clearcut server failed with an http error since
     *  the last successful upload.
     * </pre>
     */
    public boolean hasFailedServerReplies() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 failed_server_replies = 3;</code>
     *
     * <pre>
     * number of times the clearcut server failed with an http error since
     *  the last successful upload.
     * </pre>
     */
    public int getFailedServerReplies() {
      return failedServerReplies_;
    }

    private void initFields() {
      failedConnections_ = 0;
      bytesSentInLastUpload_ = 0L;
      failedServerReplies_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, failedConnections_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, bytesSentInLastUpload_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, failedServerReplies_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, failedConnections_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, bytesSentInLastUpload_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, failedServerReplies_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.MetaMetrics}
     *
     * <pre>
     * describes Metrics on Metrics.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetricsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MetaMetrics_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MetaMetrics_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        failedConnections_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        bytesSentInLastUpload_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        failedServerReplies_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MetaMetrics_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.failedConnections_ = failedConnections_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.bytesSentInLastUpload_ = bytesSentInLastUpload_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.failedServerReplies_ = failedServerReplies_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics.getDefaultInstance()) return this;
        if (other.hasFailedConnections()) {
          setFailedConnections(other.getFailedConnections());
        }
        if (other.hasBytesSentInLastUpload()) {
          setBytesSentInLastUpload(other.getBytesSentInLastUpload());
        }
        if (other.hasFailedServerReplies()) {
          setFailedServerReplies(other.getFailedServerReplies());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.MetaMetrics) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 failed_connections = 1;
      private int failedConnections_ ;
      /**
       * <code>optional int32 failed_connections = 1;</code>
       *
       * <pre>
       * number of times connecting to the clearcut server failed since
       *  the last successful upload.
       * </pre>
       */
      public boolean hasFailedConnections() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 failed_connections = 1;</code>
       *
       * <pre>
       * number of times connecting to the clearcut server failed since
       *  the last successful upload.
       * </pre>
       */
      public int getFailedConnections() {
        return failedConnections_;
      }
      /**
       * <code>optional int32 failed_connections = 1;</code>
       *
       * <pre>
       * number of times connecting to the clearcut server failed since
       *  the last successful upload.
       * </pre>
       */
      public Builder setFailedConnections(int value) {
        bitField0_ |= 0x00000001;
        failedConnections_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 failed_connections = 1;</code>
       *
       * <pre>
       * number of times connecting to the clearcut server failed since
       *  the last successful upload.
       * </pre>
       */
      public Builder clearFailedConnections() {
        bitField0_ = (bitField0_ & ~0x00000001);
        failedConnections_ = 0;
        onChanged();
        return this;
      }

      // optional int64 bytes_sent_in_last_upload = 2;
      private long bytesSentInLastUpload_ ;
      /**
       * <code>optional int64 bytes_sent_in_last_upload = 2;</code>
       *
       * <pre>
       * number of bytes used to send metrics in the last upload.
       * </pre>
       */
      public boolean hasBytesSentInLastUpload() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 bytes_sent_in_last_upload = 2;</code>
       *
       * <pre>
       * number of bytes used to send metrics in the last upload.
       * </pre>
       */
      public long getBytesSentInLastUpload() {
        return bytesSentInLastUpload_;
      }
      /**
       * <code>optional int64 bytes_sent_in_last_upload = 2;</code>
       *
       * <pre>
       * number of bytes used to send metrics in the last upload.
       * </pre>
       */
      public Builder setBytesSentInLastUpload(long value) {
        bitField0_ |= 0x00000002;
        bytesSentInLastUpload_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 bytes_sent_in_last_upload = 2;</code>
       *
       * <pre>
       * number of bytes used to send metrics in the last upload.
       * </pre>
       */
      public Builder clearBytesSentInLastUpload() {
        bitField0_ = (bitField0_ & ~0x00000002);
        bytesSentInLastUpload_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 failed_server_replies = 3;
      private int failedServerReplies_ ;
      /**
       * <code>optional int32 failed_server_replies = 3;</code>
       *
       * <pre>
       * number of times the clearcut server failed with an http error since
       *  the last successful upload.
       * </pre>
       */
      public boolean hasFailedServerReplies() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 failed_server_replies = 3;</code>
       *
       * <pre>
       * number of times the clearcut server failed with an http error since
       *  the last successful upload.
       * </pre>
       */
      public int getFailedServerReplies() {
        return failedServerReplies_;
      }
      /**
       * <code>optional int32 failed_server_replies = 3;</code>
       *
       * <pre>
       * number of times the clearcut server failed with an http error since
       *  the last successful upload.
       * </pre>
       */
      public Builder setFailedServerReplies(int value) {
        bitField0_ |= 0x00000004;
        failedServerReplies_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 failed_server_replies = 3;</code>
       *
       * <pre>
       * number of times the clearcut server failed with an http error since
       *  the last successful upload.
       * </pre>
       */
      public Builder clearFailedServerReplies() {
        bitField0_ = (bitField0_ & ~0x00000004);
        failedServerReplies_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.MetaMetrics)
    }

    static {
      defaultInstance = new MetaMetrics(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.MetaMetrics)
  }

  public interface TestRunOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;
    /**
     * <code>optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;</code>
     *
     * <pre>
     * Describes how tests where invoked.
     * </pre>
     */
    boolean hasTestInvocationType();
    /**
     * <code>optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;</code>
     *
     * <pre>
     * Describes how tests where invoked.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType getTestInvocationType();

    // optional int32 number_of_tests_executed = 2;
    /**
     * <code>optional int32 number_of_tests_executed = 2;</code>
     *
     * <pre>
     * Total number of tests that ran.
     * </pre>
     */
    boolean hasNumberOfTestsExecuted();
    /**
     * <code>optional int32 number_of_tests_executed = 2;</code>
     *
     * <pre>
     * Total number of tests that ran.
     * </pre>
     */
    int getNumberOfTestsExecuted();

    // optional .android_studio.TestRun.TestKind test_kind = 3;
    /**
     * <code>optional .android_studio.TestRun.TestKind test_kind = 3;</code>
     *
     * <pre>
     * What kind of test is run.
     * </pre>
     */
    boolean hasTestKind();
    /**
     * <code>optional .android_studio.TestRun.TestKind test_kind = 3;</code>
     *
     * <pre>
     * What kind of test is run.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind getTestKind();

    // optional bool crashed = 4;
    /**
     * <code>optional bool crashed = 4;</code>
     *
     * <pre>
     * Whether the test run finished successfully (regardless of results) or
     *  tooling error happened.
     * </pre>
     */
    boolean hasCrashed();
    /**
     * <code>optional bool crashed = 4;</code>
     *
     * <pre>
     * Whether the test run finished successfully (regardless of results) or
     *  tooling error happened.
     * </pre>
     */
    boolean getCrashed();

    // optional string gradle_version = 5;
    /**
     * <code>optional string gradle_version = 5;</code>
     *
     * <pre>
     * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    boolean hasGradleVersion();
    /**
     * <code>optional string gradle_version = 5;</code>
     *
     * <pre>
     * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    java.lang.String getGradleVersion();
    /**
     * <code>optional string gradle_version = 5;</code>
     *
     * <pre>
     * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    com.google.protobuf.ByteString
        getGradleVersionBytes();

    // optional bool code_coverage_enabled = 6;
    /**
     * <code>optional bool code_coverage_enabled = 6;</code>
     *
     * <pre>
     * e.g. '2.10'
     * Did the user/project enable code coverage on this test run?
     * </pre>
     */
    boolean hasCodeCoverageEnabled();
    /**
     * <code>optional bool code_coverage_enabled = 6;</code>
     *
     * <pre>
     * e.g. '2.10'
     * Did the user/project enable code coverage on this test run?
     * </pre>
     */
    boolean getCodeCoverageEnabled();

    // optional .android_studio.TestLibraries test_libraries = 7;
    /**
     * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
     *
     * <pre>
     * Provides details on commonly used test libraries.
     * </pre>
     */
    boolean hasTestLibraries();
    /**
     * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
     *
     * <pre>
     * Provides details on commonly used test libraries.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries getTestLibraries();
    /**
     * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
     *
     * <pre>
     * Provides details on commonly used test libraries.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibrariesOrBuilder getTestLibrariesOrBuilder();
  }
  /**
   * Protobuf type {@code android_studio.TestRun}
   *
   * <pre>
   * Describes a set of tests run.
   * </pre>
   */
  public static final class TestRun extends
      com.google.protobuf.GeneratedMessage
      implements TestRunOrBuilder {
    // Use TestRun.newBuilder() to construct.
    private TestRun(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TestRun(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TestRun defaultInstance;
    public static TestRun getDefaultInstance() {
      return defaultInstance;
    }

    public TestRun getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TestRun(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                testInvocationType_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              numberOfTestsExecuted_ = input.readInt32();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind value = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                testKind_ = value;
              }
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              crashed_ = input.readBool();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              gradleVersion_ = input.readBytes();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              codeCoverageEnabled_ = input.readBool();
              break;
            }
            case 58: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = testLibraries_.toBuilder();
              }
              testLibraries_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(testLibraries_);
                testLibraries_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRun_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRun_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.Builder.class);
    }

    public static com.google.protobuf.Parser<TestRun> PARSER =
        new com.google.protobuf.AbstractParser<TestRun>() {
      public TestRun parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TestRun(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TestRun> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.TestRun.TestInvocationType}
     *
     * <pre>
     * Describes how tests where invoked.
     * </pre>
     */
    public enum TestInvocationType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_TEST_INVOCATION_TYPE = 0;</code>
       */
      UNKNOWN_TEST_INVOCATION_TYPE(0, 0),
      /**
       * <code>GRADLE_TEST = 1;</code>
       *
       * <pre>
       * Tests were run from the command-line.
       * </pre>
       */
      GRADLE_TEST(1, 1),
      /**
       * <code>ANDROID_STUDIO_TEST = 2;</code>
       *
       * <pre>
       * Tests were run by Android Studio run configurations logic.
       * </pre>
       */
      ANDROID_STUDIO_TEST(2, 2),
      /**
       * <code>ANDROID_STUDIO_THROUGH_GRADLE_TEST = 3;</code>
       *
       * <pre>
       * Tests were run by Gradle, but invoked through AS UI.
       * </pre>
       */
      ANDROID_STUDIO_THROUGH_GRADLE_TEST(3, 3),
      ;

      /**
       * <code>UNKNOWN_TEST_INVOCATION_TYPE = 0;</code>
       */
      public static final int UNKNOWN_TEST_INVOCATION_TYPE_VALUE = 0;
      /**
       * <code>GRADLE_TEST = 1;</code>
       *
       * <pre>
       * Tests were run from the command-line.
       * </pre>
       */
      public static final int GRADLE_TEST_VALUE = 1;
      /**
       * <code>ANDROID_STUDIO_TEST = 2;</code>
       *
       * <pre>
       * Tests were run by Android Studio run configurations logic.
       * </pre>
       */
      public static final int ANDROID_STUDIO_TEST_VALUE = 2;
      /**
       * <code>ANDROID_STUDIO_THROUGH_GRADLE_TEST = 3;</code>
       *
       * <pre>
       * Tests were run by Gradle, but invoked through AS UI.
       * </pre>
       */
      public static final int ANDROID_STUDIO_THROUGH_GRADLE_TEST_VALUE = 3;


      public final int getNumber() { return value; }

      public static TestInvocationType valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_TEST_INVOCATION_TYPE;
          case 1: return GRADLE_TEST;
          case 2: return ANDROID_STUDIO_TEST;
          case 3: return ANDROID_STUDIO_THROUGH_GRADLE_TEST;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<TestInvocationType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<TestInvocationType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<TestInvocationType>() {
              public TestInvocationType findValueByNumber(int number) {
                return TestInvocationType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDescriptor().getEnumTypes().get(0);
      }

      private static final TestInvocationType[] VALUES = values();

      public static TestInvocationType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private TestInvocationType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.TestRun.TestInvocationType)
    }

    /**
     * Protobuf enum {@code android_studio.TestRun.TestKind}
     *
     * <pre>
     * What kind of test is run.
     * </pre>
     */
    public enum TestKind
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_TEST_KIND = 0;</code>
       */
      UNKNOWN_TEST_KIND(0, 0),
      /**
       * <code>UNIT_TEST = 1;</code>
       */
      UNIT_TEST(1, 1),
      /**
       * <code>INSTRUMENTATION_TEST = 2;</code>
       */
      INSTRUMENTATION_TEST(2, 2),
      ;

      /**
       * <code>UNKNOWN_TEST_KIND = 0;</code>
       */
      public static final int UNKNOWN_TEST_KIND_VALUE = 0;
      /**
       * <code>UNIT_TEST = 1;</code>
       */
      public static final int UNIT_TEST_VALUE = 1;
      /**
       * <code>INSTRUMENTATION_TEST = 2;</code>
       */
      public static final int INSTRUMENTATION_TEST_VALUE = 2;


      public final int getNumber() { return value; }

      public static TestKind valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_TEST_KIND;
          case 1: return UNIT_TEST;
          case 2: return INSTRUMENTATION_TEST;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<TestKind>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<TestKind>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<TestKind>() {
              public TestKind findValueByNumber(int number) {
                return TestKind.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDescriptor().getEnumTypes().get(1);
      }

      private static final TestKind[] VALUES = values();

      public static TestKind valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private TestKind(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.TestRun.TestKind)
    }

    private int bitField0_;
    // optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;
    public static final int TEST_INVOCATION_TYPE_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType testInvocationType_;
    /**
     * <code>optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;</code>
     *
     * <pre>
     * Describes how tests where invoked.
     * </pre>
     */
    public boolean hasTestInvocationType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;</code>
     *
     * <pre>
     * Describes how tests where invoked.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType getTestInvocationType() {
      return testInvocationType_;
    }

    // optional int32 number_of_tests_executed = 2;
    public static final int NUMBER_OF_TESTS_EXECUTED_FIELD_NUMBER = 2;
    private int numberOfTestsExecuted_;
    /**
     * <code>optional int32 number_of_tests_executed = 2;</code>
     *
     * <pre>
     * Total number of tests that ran.
     * </pre>
     */
    public boolean hasNumberOfTestsExecuted() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 number_of_tests_executed = 2;</code>
     *
     * <pre>
     * Total number of tests that ran.
     * </pre>
     */
    public int getNumberOfTestsExecuted() {
      return numberOfTestsExecuted_;
    }

    // optional .android_studio.TestRun.TestKind test_kind = 3;
    public static final int TEST_KIND_FIELD_NUMBER = 3;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind testKind_;
    /**
     * <code>optional .android_studio.TestRun.TestKind test_kind = 3;</code>
     *
     * <pre>
     * What kind of test is run.
     * </pre>
     */
    public boolean hasTestKind() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .android_studio.TestRun.TestKind test_kind = 3;</code>
     *
     * <pre>
     * What kind of test is run.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind getTestKind() {
      return testKind_;
    }

    // optional bool crashed = 4;
    public static final int CRASHED_FIELD_NUMBER = 4;
    private boolean crashed_;
    /**
     * <code>optional bool crashed = 4;</code>
     *
     * <pre>
     * Whether the test run finished successfully (regardless of results) or
     *  tooling error happened.
     * </pre>
     */
    public boolean hasCrashed() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool crashed = 4;</code>
     *
     * <pre>
     * Whether the test run finished successfully (regardless of results) or
     *  tooling error happened.
     * </pre>
     */
    public boolean getCrashed() {
      return crashed_;
    }

    // optional string gradle_version = 5;
    public static final int GRADLE_VERSION_FIELD_NUMBER = 5;
    private java.lang.Object gradleVersion_;
    /**
     * <code>optional string gradle_version = 5;</code>
     *
     * <pre>
     * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    public boolean hasGradleVersion() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string gradle_version = 5;</code>
     *
     * <pre>
     * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    public java.lang.String getGradleVersion() {
      java.lang.Object ref = gradleVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gradleVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gradle_version = 5;</code>
     *
     * <pre>
     * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
     * </pre>
     */
    public com.google.protobuf.ByteString
        getGradleVersionBytes() {
      java.lang.Object ref = gradleVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gradleVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool code_coverage_enabled = 6;
    public static final int CODE_COVERAGE_ENABLED_FIELD_NUMBER = 6;
    private boolean codeCoverageEnabled_;
    /**
     * <code>optional bool code_coverage_enabled = 6;</code>
     *
     * <pre>
     * e.g. '2.10'
     * Did the user/project enable code coverage on this test run?
     * </pre>
     */
    public boolean hasCodeCoverageEnabled() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool code_coverage_enabled = 6;</code>
     *
     * <pre>
     * e.g. '2.10'
     * Did the user/project enable code coverage on this test run?
     * </pre>
     */
    public boolean getCodeCoverageEnabled() {
      return codeCoverageEnabled_;
    }

    // optional .android_studio.TestLibraries test_libraries = 7;
    public static final int TEST_LIBRARIES_FIELD_NUMBER = 7;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries testLibraries_;
    /**
     * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
     *
     * <pre>
     * Provides details on commonly used test libraries.
     * </pre>
     */
    public boolean hasTestLibraries() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
     *
     * <pre>
     * Provides details on commonly used test libraries.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries getTestLibraries() {
      return testLibraries_;
    }
    /**
     * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
     *
     * <pre>
     * Provides details on commonly used test libraries.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibrariesOrBuilder getTestLibrariesOrBuilder() {
      return testLibraries_;
    }

    private void initFields() {
      testInvocationType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType.UNKNOWN_TEST_INVOCATION_TYPE;
      numberOfTestsExecuted_ = 0;
      testKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind.UNKNOWN_TEST_KIND;
      crashed_ = false;
      gradleVersion_ = "";
      codeCoverageEnabled_ = false;
      testLibraries_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, testInvocationType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, numberOfTestsExecuted_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, testKind_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, crashed_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getGradleVersionBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, codeCoverageEnabled_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, testLibraries_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, testInvocationType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, numberOfTestsExecuted_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, testKind_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, crashed_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getGradleVersionBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, codeCoverageEnabled_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, testLibraries_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.TestRun}
     *
     * <pre>
     * Describes a set of tests run.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRunOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRun_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRun_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTestLibrariesFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        testInvocationType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType.UNKNOWN_TEST_INVOCATION_TYPE;
        bitField0_ = (bitField0_ & ~0x00000001);
        numberOfTestsExecuted_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        testKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind.UNKNOWN_TEST_KIND;
        bitField0_ = (bitField0_ & ~0x00000004);
        crashed_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        gradleVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        codeCoverageEnabled_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (testLibrariesBuilder_ == null) {
          testLibraries_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.getDefaultInstance();
        } else {
          testLibrariesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRun_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.testInvocationType_ = testInvocationType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.numberOfTestsExecuted_ = numberOfTestsExecuted_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.testKind_ = testKind_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.crashed_ = crashed_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.gradleVersion_ = gradleVersion_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.codeCoverageEnabled_ = codeCoverageEnabled_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (testLibrariesBuilder_ == null) {
          result.testLibraries_ = testLibraries_;
        } else {
          result.testLibraries_ = testLibrariesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.getDefaultInstance()) return this;
        if (other.hasTestInvocationType()) {
          setTestInvocationType(other.getTestInvocationType());
        }
        if (other.hasNumberOfTestsExecuted()) {
          setNumberOfTestsExecuted(other.getNumberOfTestsExecuted());
        }
        if (other.hasTestKind()) {
          setTestKind(other.getTestKind());
        }
        if (other.hasCrashed()) {
          setCrashed(other.getCrashed());
        }
        if (other.hasGradleVersion()) {
          bitField0_ |= 0x00000010;
          gradleVersion_ = other.gradleVersion_;
          onChanged();
        }
        if (other.hasCodeCoverageEnabled()) {
          setCodeCoverageEnabled(other.getCodeCoverageEnabled());
        }
        if (other.hasTestLibraries()) {
          mergeTestLibraries(other.getTestLibraries());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType testInvocationType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType.UNKNOWN_TEST_INVOCATION_TYPE;
      /**
       * <code>optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;</code>
       *
       * <pre>
       * Describes how tests where invoked.
       * </pre>
       */
      public boolean hasTestInvocationType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;</code>
       *
       * <pre>
       * Describes how tests where invoked.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType getTestInvocationType() {
        return testInvocationType_;
      }
      /**
       * <code>optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;</code>
       *
       * <pre>
       * Describes how tests where invoked.
       * </pre>
       */
      public Builder setTestInvocationType(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        testInvocationType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.TestRun.TestInvocationType test_invocation_type = 1;</code>
       *
       * <pre>
       * Describes how tests where invoked.
       * </pre>
       */
      public Builder clearTestInvocationType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        testInvocationType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestInvocationType.UNKNOWN_TEST_INVOCATION_TYPE;
        onChanged();
        return this;
      }

      // optional int32 number_of_tests_executed = 2;
      private int numberOfTestsExecuted_ ;
      /**
       * <code>optional int32 number_of_tests_executed = 2;</code>
       *
       * <pre>
       * Total number of tests that ran.
       * </pre>
       */
      public boolean hasNumberOfTestsExecuted() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 number_of_tests_executed = 2;</code>
       *
       * <pre>
       * Total number of tests that ran.
       * </pre>
       */
      public int getNumberOfTestsExecuted() {
        return numberOfTestsExecuted_;
      }
      /**
       * <code>optional int32 number_of_tests_executed = 2;</code>
       *
       * <pre>
       * Total number of tests that ran.
       * </pre>
       */
      public Builder setNumberOfTestsExecuted(int value) {
        bitField0_ |= 0x00000002;
        numberOfTestsExecuted_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 number_of_tests_executed = 2;</code>
       *
       * <pre>
       * Total number of tests that ran.
       * </pre>
       */
      public Builder clearNumberOfTestsExecuted() {
        bitField0_ = (bitField0_ & ~0x00000002);
        numberOfTestsExecuted_ = 0;
        onChanged();
        return this;
      }

      // optional .android_studio.TestRun.TestKind test_kind = 3;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind testKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind.UNKNOWN_TEST_KIND;
      /**
       * <code>optional .android_studio.TestRun.TestKind test_kind = 3;</code>
       *
       * <pre>
       * What kind of test is run.
       * </pre>
       */
      public boolean hasTestKind() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .android_studio.TestRun.TestKind test_kind = 3;</code>
       *
       * <pre>
       * What kind of test is run.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind getTestKind() {
        return testKind_;
      }
      /**
       * <code>optional .android_studio.TestRun.TestKind test_kind = 3;</code>
       *
       * <pre>
       * What kind of test is run.
       * </pre>
       */
      public Builder setTestKind(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        testKind_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.TestRun.TestKind test_kind = 3;</code>
       *
       * <pre>
       * What kind of test is run.
       * </pre>
       */
      public Builder clearTestKind() {
        bitField0_ = (bitField0_ & ~0x00000004);
        testKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRun.TestKind.UNKNOWN_TEST_KIND;
        onChanged();
        return this;
      }

      // optional bool crashed = 4;
      private boolean crashed_ ;
      /**
       * <code>optional bool crashed = 4;</code>
       *
       * <pre>
       * Whether the test run finished successfully (regardless of results) or
       *  tooling error happened.
       * </pre>
       */
      public boolean hasCrashed() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool crashed = 4;</code>
       *
       * <pre>
       * Whether the test run finished successfully (regardless of results) or
       *  tooling error happened.
       * </pre>
       */
      public boolean getCrashed() {
        return crashed_;
      }
      /**
       * <code>optional bool crashed = 4;</code>
       *
       * <pre>
       * Whether the test run finished successfully (regardless of results) or
       *  tooling error happened.
       * </pre>
       */
      public Builder setCrashed(boolean value) {
        bitField0_ |= 0x00000008;
        crashed_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool crashed = 4;</code>
       *
       * <pre>
       * Whether the test run finished successfully (regardless of results) or
       *  tooling error happened.
       * </pre>
       */
      public Builder clearCrashed() {
        bitField0_ = (bitField0_ & ~0x00000008);
        crashed_ = false;
        onChanged();
        return this;
      }

      // optional string gradle_version = 5;
      private java.lang.Object gradleVersion_ = "";
      /**
       * <code>optional string gradle_version = 5;</code>
       *
       * <pre>
       * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public boolean hasGradleVersion() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string gradle_version = 5;</code>
       *
       * <pre>
       * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public java.lang.String getGradleVersion() {
        java.lang.Object ref = gradleVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          gradleVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string gradle_version = 5;</code>
       *
       * <pre>
       * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public com.google.protobuf.ByteString
          getGradleVersionBytes() {
        java.lang.Object ref = gradleVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gradleVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gradle_version = 5;</code>
       *
       * <pre>
       * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public Builder setGradleVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        gradleVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_version = 5;</code>
       *
       * <pre>
       * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public Builder clearGradleVersion() {
        bitField0_ = (bitField0_ & ~0x00000010);
        gradleVersion_ = getDefaultInstance().getGradleVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_version = 5;</code>
       *
       * <pre>
       * Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE
       * </pre>
       */
      public Builder setGradleVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        gradleVersion_ = value;
        onChanged();
        return this;
      }

      // optional bool code_coverage_enabled = 6;
      private boolean codeCoverageEnabled_ ;
      /**
       * <code>optional bool code_coverage_enabled = 6;</code>
       *
       * <pre>
       * e.g. '2.10'
       * Did the user/project enable code coverage on this test run?
       * </pre>
       */
      public boolean hasCodeCoverageEnabled() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool code_coverage_enabled = 6;</code>
       *
       * <pre>
       * e.g. '2.10'
       * Did the user/project enable code coverage on this test run?
       * </pre>
       */
      public boolean getCodeCoverageEnabled() {
        return codeCoverageEnabled_;
      }
      /**
       * <code>optional bool code_coverage_enabled = 6;</code>
       *
       * <pre>
       * e.g. '2.10'
       * Did the user/project enable code coverage on this test run?
       * </pre>
       */
      public Builder setCodeCoverageEnabled(boolean value) {
        bitField0_ |= 0x00000020;
        codeCoverageEnabled_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool code_coverage_enabled = 6;</code>
       *
       * <pre>
       * e.g. '2.10'
       * Did the user/project enable code coverage on this test run?
       * </pre>
       */
      public Builder clearCodeCoverageEnabled() {
        bitField0_ = (bitField0_ & ~0x00000020);
        codeCoverageEnabled_ = false;
        onChanged();
        return this;
      }

      // optional .android_studio.TestLibraries test_libraries = 7;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries testLibraries_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibrariesOrBuilder> testLibrariesBuilder_;
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      public boolean hasTestLibraries() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries getTestLibraries() {
        if (testLibrariesBuilder_ == null) {
          return testLibraries_;
        } else {
          return testLibrariesBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      public Builder setTestLibraries(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries value) {
        if (testLibrariesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          testLibraries_ = value;
          onChanged();
        } else {
          testLibrariesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      public Builder setTestLibraries(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.Builder builderForValue) {
        if (testLibrariesBuilder_ == null) {
          testLibraries_ = builderForValue.build();
          onChanged();
        } else {
          testLibrariesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      public Builder mergeTestLibraries(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries value) {
        if (testLibrariesBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              testLibraries_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.getDefaultInstance()) {
            testLibraries_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.newBuilder(testLibraries_).mergeFrom(value).buildPartial();
          } else {
            testLibraries_ = value;
          }
          onChanged();
        } else {
          testLibrariesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      public Builder clearTestLibraries() {
        if (testLibrariesBuilder_ == null) {
          testLibraries_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.getDefaultInstance();
          onChanged();
        } else {
          testLibrariesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.Builder getTestLibrariesBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getTestLibrariesFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibrariesOrBuilder getTestLibrariesOrBuilder() {
        if (testLibrariesBuilder_ != null) {
          return testLibrariesBuilder_.getMessageOrBuilder();
        } else {
          return testLibraries_;
        }
      }
      /**
       * <code>optional .android_studio.TestLibraries test_libraries = 7;</code>
       *
       * <pre>
       * Provides details on commonly used test libraries.
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibrariesOrBuilder> 
          getTestLibrariesFieldBuilder() {
        if (testLibrariesBuilder_ == null) {
          testLibrariesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibrariesOrBuilder>(
                  testLibraries_,
                  getParentForChildren(),
                  isClean());
          testLibraries_ = null;
        }
        return testLibrariesBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.TestRun)
    }

    static {
      defaultInstance = new TestRun(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.TestRun)
  }

  public interface TestLibrariesOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string test_support_library_version = 1;
    /**
     * <code>optional string test_support_library_version = 1;</code>
     *
     * <pre>
     * The exact version of the given library that this project uses.
     *  Not present if project doesn't use a given library.
     * </pre>
     */
    boolean hasTestSupportLibraryVersion();
    /**
     * <code>optional string test_support_library_version = 1;</code>
     *
     * <pre>
     * The exact version of the given library that this project uses.
     *  Not present if project doesn't use a given library.
     * </pre>
     */
    java.lang.String getTestSupportLibraryVersion();
    /**
     * <code>optional string test_support_library_version = 1;</code>
     *
     * <pre>
     * The exact version of the given library that this project uses.
     *  Not present if project doesn't use a given library.
     * </pre>
     */
    com.google.protobuf.ByteString
        getTestSupportLibraryVersionBytes();

    // optional string espresso_version = 2;
    /**
     * <code>optional string espresso_version = 2;</code>
     *
     * <pre>
     * e.g. '0.5'
     * </pre>
     */
    boolean hasEspressoVersion();
    /**
     * <code>optional string espresso_version = 2;</code>
     *
     * <pre>
     * e.g. '0.5'
     * </pre>
     */
    java.lang.String getEspressoVersion();
    /**
     * <code>optional string espresso_version = 2;</code>
     *
     * <pre>
     * e.g. '0.5'
     * </pre>
     */
    com.google.protobuf.ByteString
        getEspressoVersionBytes();

    // optional string robolectric_version = 3;
    /**
     * <code>optional string robolectric_version = 3;</code>
     *
     * <pre>
     * e.g. '2.2.2'
     * </pre>
     */
    boolean hasRobolectricVersion();
    /**
     * <code>optional string robolectric_version = 3;</code>
     *
     * <pre>
     * e.g. '2.2.2'
     * </pre>
     */
    java.lang.String getRobolectricVersion();
    /**
     * <code>optional string robolectric_version = 3;</code>
     *
     * <pre>
     * e.g. '2.2.2'
     * </pre>
     */
    com.google.protobuf.ByteString
        getRobolectricVersionBytes();

    // optional string mockito_version = 4;
    /**
     * <code>optional string mockito_version = 4;</code>
     *
     * <pre>
     * e.g. '3.0'
     * </pre>
     */
    boolean hasMockitoVersion();
    /**
     * <code>optional string mockito_version = 4;</code>
     *
     * <pre>
     * e.g. '3.0'
     * </pre>
     */
    java.lang.String getMockitoVersion();
    /**
     * <code>optional string mockito_version = 4;</code>
     *
     * <pre>
     * e.g. '3.0'
     * </pre>
     */
    com.google.protobuf.ByteString
        getMockitoVersionBytes();
  }
  /**
   * Protobuf type {@code android_studio.TestLibraries}
   *
   * <pre>
   * Provides details on commonly used test libraries.
   * </pre>
   */
  public static final class TestLibraries extends
      com.google.protobuf.GeneratedMessage
      implements TestLibrariesOrBuilder {
    // Use TestLibraries.newBuilder() to construct.
    private TestLibraries(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TestLibraries(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TestLibraries defaultInstance;
    public static TestLibraries getDefaultInstance() {
      return defaultInstance;
    }

    public TestLibraries getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TestLibraries(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              testSupportLibraryVersion_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              espressoVersion_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              robolectricVersion_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              mockitoVersion_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestLibraries_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestLibraries_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.Builder.class);
    }

    public static com.google.protobuf.Parser<TestLibraries> PARSER =
        new com.google.protobuf.AbstractParser<TestLibraries>() {
      public TestLibraries parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TestLibraries(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TestLibraries> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string test_support_library_version = 1;
    public static final int TEST_SUPPORT_LIBRARY_VERSION_FIELD_NUMBER = 1;
    private java.lang.Object testSupportLibraryVersion_;
    /**
     * <code>optional string test_support_library_version = 1;</code>
     *
     * <pre>
     * The exact version of the given library that this project uses.
     *  Not present if project doesn't use a given library.
     * </pre>
     */
    public boolean hasTestSupportLibraryVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string test_support_library_version = 1;</code>
     *
     * <pre>
     * The exact version of the given library that this project uses.
     *  Not present if project doesn't use a given library.
     * </pre>
     */
    public java.lang.String getTestSupportLibraryVersion() {
      java.lang.Object ref = testSupportLibraryVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          testSupportLibraryVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string test_support_library_version = 1;</code>
     *
     * <pre>
     * The exact version of the given library that this project uses.
     *  Not present if project doesn't use a given library.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getTestSupportLibraryVersionBytes() {
      java.lang.Object ref = testSupportLibraryVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        testSupportLibraryVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string espresso_version = 2;
    public static final int ESPRESSO_VERSION_FIELD_NUMBER = 2;
    private java.lang.Object espressoVersion_;
    /**
     * <code>optional string espresso_version = 2;</code>
     *
     * <pre>
     * e.g. '0.5'
     * </pre>
     */
    public boolean hasEspressoVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string espresso_version = 2;</code>
     *
     * <pre>
     * e.g. '0.5'
     * </pre>
     */
    public java.lang.String getEspressoVersion() {
      java.lang.Object ref = espressoVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          espressoVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string espresso_version = 2;</code>
     *
     * <pre>
     * e.g. '0.5'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getEspressoVersionBytes() {
      java.lang.Object ref = espressoVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        espressoVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string robolectric_version = 3;
    public static final int ROBOLECTRIC_VERSION_FIELD_NUMBER = 3;
    private java.lang.Object robolectricVersion_;
    /**
     * <code>optional string robolectric_version = 3;</code>
     *
     * <pre>
     * e.g. '2.2.2'
     * </pre>
     */
    public boolean hasRobolectricVersion() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string robolectric_version = 3;</code>
     *
     * <pre>
     * e.g. '2.2.2'
     * </pre>
     */
    public java.lang.String getRobolectricVersion() {
      java.lang.Object ref = robolectricVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          robolectricVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string robolectric_version = 3;</code>
     *
     * <pre>
     * e.g. '2.2.2'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getRobolectricVersionBytes() {
      java.lang.Object ref = robolectricVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        robolectricVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string mockito_version = 4;
    public static final int MOCKITO_VERSION_FIELD_NUMBER = 4;
    private java.lang.Object mockitoVersion_;
    /**
     * <code>optional string mockito_version = 4;</code>
     *
     * <pre>
     * e.g. '3.0'
     * </pre>
     */
    public boolean hasMockitoVersion() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string mockito_version = 4;</code>
     *
     * <pre>
     * e.g. '3.0'
     * </pre>
     */
    public java.lang.String getMockitoVersion() {
      java.lang.Object ref = mockitoVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          mockitoVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string mockito_version = 4;</code>
     *
     * <pre>
     * e.g. '3.0'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getMockitoVersionBytes() {
      java.lang.Object ref = mockitoVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        mockitoVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      testSupportLibraryVersion_ = "";
      espressoVersion_ = "";
      robolectricVersion_ = "";
      mockitoVersion_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getTestSupportLibraryVersionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getEspressoVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getRobolectricVersionBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getMockitoVersionBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getTestSupportLibraryVersionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getEspressoVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getRobolectricVersionBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getMockitoVersionBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.TestLibraries}
     *
     * <pre>
     * Provides details on commonly used test libraries.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibrariesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestLibraries_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestLibraries_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        testSupportLibraryVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        espressoVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        robolectricVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        mockitoVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestLibraries_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.testSupportLibraryVersion_ = testSupportLibraryVersion_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.espressoVersion_ = espressoVersion_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.robolectricVersion_ = robolectricVersion_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.mockitoVersion_ = mockitoVersion_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries.getDefaultInstance()) return this;
        if (other.hasTestSupportLibraryVersion()) {
          bitField0_ |= 0x00000001;
          testSupportLibraryVersion_ = other.testSupportLibraryVersion_;
          onChanged();
        }
        if (other.hasEspressoVersion()) {
          bitField0_ |= 0x00000002;
          espressoVersion_ = other.espressoVersion_;
          onChanged();
        }
        if (other.hasRobolectricVersion()) {
          bitField0_ |= 0x00000004;
          robolectricVersion_ = other.robolectricVersion_;
          onChanged();
        }
        if (other.hasMockitoVersion()) {
          bitField0_ |= 0x00000008;
          mockitoVersion_ = other.mockitoVersion_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.TestLibraries) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string test_support_library_version = 1;
      private java.lang.Object testSupportLibraryVersion_ = "";
      /**
       * <code>optional string test_support_library_version = 1;</code>
       *
       * <pre>
       * The exact version of the given library that this project uses.
       *  Not present if project doesn't use a given library.
       * </pre>
       */
      public boolean hasTestSupportLibraryVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string test_support_library_version = 1;</code>
       *
       * <pre>
       * The exact version of the given library that this project uses.
       *  Not present if project doesn't use a given library.
       * </pre>
       */
      public java.lang.String getTestSupportLibraryVersion() {
        java.lang.Object ref = testSupportLibraryVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          testSupportLibraryVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string test_support_library_version = 1;</code>
       *
       * <pre>
       * The exact version of the given library that this project uses.
       *  Not present if project doesn't use a given library.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getTestSupportLibraryVersionBytes() {
        java.lang.Object ref = testSupportLibraryVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          testSupportLibraryVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string test_support_library_version = 1;</code>
       *
       * <pre>
       * The exact version of the given library that this project uses.
       *  Not present if project doesn't use a given library.
       * </pre>
       */
      public Builder setTestSupportLibraryVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        testSupportLibraryVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string test_support_library_version = 1;</code>
       *
       * <pre>
       * The exact version of the given library that this project uses.
       *  Not present if project doesn't use a given library.
       * </pre>
       */
      public Builder clearTestSupportLibraryVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        testSupportLibraryVersion_ = getDefaultInstance().getTestSupportLibraryVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string test_support_library_version = 1;</code>
       *
       * <pre>
       * The exact version of the given library that this project uses.
       *  Not present if project doesn't use a given library.
       * </pre>
       */
      public Builder setTestSupportLibraryVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        testSupportLibraryVersion_ = value;
        onChanged();
        return this;
      }

      // optional string espresso_version = 2;
      private java.lang.Object espressoVersion_ = "";
      /**
       * <code>optional string espresso_version = 2;</code>
       *
       * <pre>
       * e.g. '0.5'
       * </pre>
       */
      public boolean hasEspressoVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string espresso_version = 2;</code>
       *
       * <pre>
       * e.g. '0.5'
       * </pre>
       */
      public java.lang.String getEspressoVersion() {
        java.lang.Object ref = espressoVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          espressoVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string espresso_version = 2;</code>
       *
       * <pre>
       * e.g. '0.5'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getEspressoVersionBytes() {
        java.lang.Object ref = espressoVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          espressoVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string espresso_version = 2;</code>
       *
       * <pre>
       * e.g. '0.5'
       * </pre>
       */
      public Builder setEspressoVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        espressoVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string espresso_version = 2;</code>
       *
       * <pre>
       * e.g. '0.5'
       * </pre>
       */
      public Builder clearEspressoVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        espressoVersion_ = getDefaultInstance().getEspressoVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string espresso_version = 2;</code>
       *
       * <pre>
       * e.g. '0.5'
       * </pre>
       */
      public Builder setEspressoVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        espressoVersion_ = value;
        onChanged();
        return this;
      }

      // optional string robolectric_version = 3;
      private java.lang.Object robolectricVersion_ = "";
      /**
       * <code>optional string robolectric_version = 3;</code>
       *
       * <pre>
       * e.g. '2.2.2'
       * </pre>
       */
      public boolean hasRobolectricVersion() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string robolectric_version = 3;</code>
       *
       * <pre>
       * e.g. '2.2.2'
       * </pre>
       */
      public java.lang.String getRobolectricVersion() {
        java.lang.Object ref = robolectricVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          robolectricVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string robolectric_version = 3;</code>
       *
       * <pre>
       * e.g. '2.2.2'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getRobolectricVersionBytes() {
        java.lang.Object ref = robolectricVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          robolectricVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string robolectric_version = 3;</code>
       *
       * <pre>
       * e.g. '2.2.2'
       * </pre>
       */
      public Builder setRobolectricVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        robolectricVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string robolectric_version = 3;</code>
       *
       * <pre>
       * e.g. '2.2.2'
       * </pre>
       */
      public Builder clearRobolectricVersion() {
        bitField0_ = (bitField0_ & ~0x00000004);
        robolectricVersion_ = getDefaultInstance().getRobolectricVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string robolectric_version = 3;</code>
       *
       * <pre>
       * e.g. '2.2.2'
       * </pre>
       */
      public Builder setRobolectricVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        robolectricVersion_ = value;
        onChanged();
        return this;
      }

      // optional string mockito_version = 4;
      private java.lang.Object mockitoVersion_ = "";
      /**
       * <code>optional string mockito_version = 4;</code>
       *
       * <pre>
       * e.g. '3.0'
       * </pre>
       */
      public boolean hasMockitoVersion() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string mockito_version = 4;</code>
       *
       * <pre>
       * e.g. '3.0'
       * </pre>
       */
      public java.lang.String getMockitoVersion() {
        java.lang.Object ref = mockitoVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          mockitoVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string mockito_version = 4;</code>
       *
       * <pre>
       * e.g. '3.0'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getMockitoVersionBytes() {
        java.lang.Object ref = mockitoVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          mockitoVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string mockito_version = 4;</code>
       *
       * <pre>
       * e.g. '3.0'
       * </pre>
       */
      public Builder setMockitoVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        mockitoVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string mockito_version = 4;</code>
       *
       * <pre>
       * e.g. '3.0'
       * </pre>
       */
      public Builder clearMockitoVersion() {
        bitField0_ = (bitField0_ & ~0x00000008);
        mockitoVersion_ = getDefaultInstance().getMockitoVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string mockito_version = 4;</code>
       *
       * <pre>
       * e.g. '3.0'
       * </pre>
       */
      public Builder setMockitoVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        mockitoVersion_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.TestLibraries)
    }

    static {
      defaultInstance = new TestLibraries(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.TestLibraries)
  }

  public interface HypervisorOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;
    /**
     * <code>optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;</code>
     */
    boolean hasHyperVState();
    /**
     * <code>optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;</code>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState getHyperVState();
  }
  /**
   * Protobuf type {@code android_studio.Hypervisor}
   *
   * <pre>
   * Describes the status of various Hypervisors
   * </pre>
   */
  public static final class Hypervisor extends
      com.google.protobuf.GeneratedMessage
      implements HypervisorOrBuilder {
    // Use Hypervisor.newBuilder() to construct.
    private Hypervisor(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Hypervisor(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Hypervisor defaultInstance;
    public static Hypervisor getDefaultInstance() {
      return defaultInstance;
    }

    public Hypervisor getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Hypervisor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState value = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                hyperVState_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_Hypervisor_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_Hypervisor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.Builder.class);
    }

    public static com.google.protobuf.Parser<Hypervisor> PARSER =
        new com.google.protobuf.AbstractParser<Hypervisor>() {
      public Hypervisor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Hypervisor(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Hypervisor> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.Hypervisor.HyperVState}
     *
     * <pre>
     * Status of the Hyper-V hypervisor.
     * </pre>
     */
    public enum HyperVState
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_HYPERV_STATE = 0;</code>
       */
      UNKNOWN_HYPERV_STATE(0, 0),
      /**
       * <code>HYPERV_ABSENT = 1;</code>
       *
       * <pre>
       * Have no idea
       * </pre>
       */
      HYPERV_ABSENT(1, 1),
      /**
       * <code>HYPERV_INSTALLED = 2;</code>
       *
       * <pre>
       * No hyper-V found
       * </pre>
       */
      HYPERV_INSTALLED(2, 2),
      /**
       * <code>HYPERV_RUNNING = 3;</code>
       *
       * <pre>
       * Hyper-V is installed but not running
       * </pre>
       */
      HYPERV_RUNNING(3, 3),
      /**
       * <code>HYPERV_CHECK_ERROR = 4;</code>
       *
       * <pre>
       * Hyper-V is up and running
       * </pre>
       */
      HYPERV_CHECK_ERROR(4, 4),
      ;

      /**
       * <code>UNKNOWN_HYPERV_STATE = 0;</code>
       */
      public static final int UNKNOWN_HYPERV_STATE_VALUE = 0;
      /**
       * <code>HYPERV_ABSENT = 1;</code>
       *
       * <pre>
       * Have no idea
       * </pre>
       */
      public static final int HYPERV_ABSENT_VALUE = 1;
      /**
       * <code>HYPERV_INSTALLED = 2;</code>
       *
       * <pre>
       * No hyper-V found
       * </pre>
       */
      public static final int HYPERV_INSTALLED_VALUE = 2;
      /**
       * <code>HYPERV_RUNNING = 3;</code>
       *
       * <pre>
       * Hyper-V is installed but not running
       * </pre>
       */
      public static final int HYPERV_RUNNING_VALUE = 3;
      /**
       * <code>HYPERV_CHECK_ERROR = 4;</code>
       *
       * <pre>
       * Hyper-V is up and running
       * </pre>
       */
      public static final int HYPERV_CHECK_ERROR_VALUE = 4;


      public final int getNumber() { return value; }

      public static HyperVState valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_HYPERV_STATE;
          case 1: return HYPERV_ABSENT;
          case 2: return HYPERV_INSTALLED;
          case 3: return HYPERV_RUNNING;
          case 4: return HYPERV_CHECK_ERROR;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<HyperVState>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<HyperVState>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<HyperVState>() {
              public HyperVState findValueByNumber(int number) {
                return HyperVState.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.getDescriptor().getEnumTypes().get(0);
      }

      private static final HyperVState[] VALUES = values();

      public static HyperVState valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private HyperVState(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.Hypervisor.HyperVState)
    }

    private int bitField0_;
    // optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;
    public static final int HYPER_V_STATE_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState hyperVState_;
    /**
     * <code>optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;</code>
     */
    public boolean hasHyperVState() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;</code>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState getHyperVState() {
      return hyperVState_;
    }

    private void initFields() {
      hyperVState_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState.UNKNOWN_HYPERV_STATE;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, hyperVState_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, hyperVState_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.Hypervisor}
     *
     * <pre>
     * Describes the status of various Hypervisors
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.HypervisorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_Hypervisor_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_Hypervisor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        hyperVState_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState.UNKNOWN_HYPERV_STATE;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_Hypervisor_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.hyperVState_ = hyperVState_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.getDefaultInstance()) return this;
        if (other.hasHyperVState()) {
          setHyperVState(other.getHyperVState());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState hyperVState_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState.UNKNOWN_HYPERV_STATE;
      /**
       * <code>optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;</code>
       */
      public boolean hasHyperVState() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;</code>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState getHyperVState() {
        return hyperVState_;
      }
      /**
       * <code>optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;</code>
       */
      public Builder setHyperVState(com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        hyperVState_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.Hypervisor.HyperVState hyper_v_state = 1;</code>
       */
      public Builder clearHyperVState() {
        bitField0_ = (bitField0_ & ~0x00000001);
        hyperVState_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.Hypervisor.HyperVState.UNKNOWN_HYPERV_STATE;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.Hypervisor)
    }

    static {
      defaultInstance = new Hypervisor(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.Hypervisor)
  }

  public interface EmulatorHostOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string cpu_manufacturer = 1;
    /**
     * <code>optional string cpu_manufacturer = 1;</code>
     *
     * <pre>
     * CPU manufacturer of the host, used as certain hypervisors are limited
     *  to a certain manufacturer.
     * </pre>
     */
    boolean hasCpuManufacturer();
    /**
     * <code>optional string cpu_manufacturer = 1;</code>
     *
     * <pre>
     * CPU manufacturer of the host, used as certain hypervisors are limited
     *  to a certain manufacturer.
     * </pre>
     */
    java.lang.String getCpuManufacturer();
    /**
     * <code>optional string cpu_manufacturer = 1;</code>
     *
     * <pre>
     * CPU manufacturer of the host, used as certain hypervisors are limited
     *  to a certain manufacturer.
     * </pre>
     */
    com.google.protobuf.ByteString
        getCpuManufacturerBytes();

    // optional bool virt_support = 2;
    /**
     * <code>optional bool virt_support = 2;</code>
     *
     * <pre>
     * AMD, INTEL, ...
     * Does the host support virtualization technology
     * </pre>
     */
    boolean hasVirtSupport();
    /**
     * <code>optional bool virt_support = 2;</code>
     *
     * <pre>
     * AMD, INTEL, ...
     * Does the host support virtualization technology
     * </pre>
     */
    boolean getVirtSupport();

    // optional bool running_in_vm = 3;
    /**
     * <code>optional bool running_in_vm = 3;</code>
     *
     * <pre>
     * Is the host itself running inside a virtual machine.
     * </pre>
     */
    boolean hasRunningInVm();
    /**
     * <code>optional bool running_in_vm = 3;</code>
     *
     * <pre>
     * Is the host itself running inside a virtual machine.
     * </pre>
     */
    boolean getRunningInVm();

    // optional int64 os_bit_count = 4;
    /**
     * <code>optional int64 os_bit_count = 4;</code>
     *
     * <pre>
     * May differ from os_architecture field as it is calculated differently,
     *  trying to compensate the JVM bittness.
     * </pre>
     */
    boolean hasOsBitCount();
    /**
     * <code>optional int64 os_bit_count = 4;</code>
     *
     * <pre>
     * May differ from os_architecture field as it is calculated differently,
     *  trying to compensate the JVM bittness.
     * </pre>
     */
    long getOsBitCount();
  }
  /**
   * Protobuf type {@code android_studio.EmulatorHost}
   *
   * <pre>
   * Describes the status of the machine running the emulator.
   * </pre>
   */
  public static final class EmulatorHost extends
      com.google.protobuf.GeneratedMessage
      implements EmulatorHostOrBuilder {
    // Use EmulatorHost.newBuilder() to construct.
    private EmulatorHost(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EmulatorHost(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EmulatorHost defaultInstance;
    public static EmulatorHost getDefaultInstance() {
      return defaultInstance;
    }

    public EmulatorHost getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EmulatorHost(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              cpuManufacturer_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              virtSupport_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              runningInVm_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              osBitCount_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorHost_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorHost_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.Builder.class);
    }

    public static com.google.protobuf.Parser<EmulatorHost> PARSER =
        new com.google.protobuf.AbstractParser<EmulatorHost>() {
      public EmulatorHost parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EmulatorHost(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EmulatorHost> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string cpu_manufacturer = 1;
    public static final int CPU_MANUFACTURER_FIELD_NUMBER = 1;
    private java.lang.Object cpuManufacturer_;
    /**
     * <code>optional string cpu_manufacturer = 1;</code>
     *
     * <pre>
     * CPU manufacturer of the host, used as certain hypervisors are limited
     *  to a certain manufacturer.
     * </pre>
     */
    public boolean hasCpuManufacturer() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string cpu_manufacturer = 1;</code>
     *
     * <pre>
     * CPU manufacturer of the host, used as certain hypervisors are limited
     *  to a certain manufacturer.
     * </pre>
     */
    public java.lang.String getCpuManufacturer() {
      java.lang.Object ref = cpuManufacturer_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          cpuManufacturer_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string cpu_manufacturer = 1;</code>
     *
     * <pre>
     * CPU manufacturer of the host, used as certain hypervisors are limited
     *  to a certain manufacturer.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getCpuManufacturerBytes() {
      java.lang.Object ref = cpuManufacturer_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        cpuManufacturer_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool virt_support = 2;
    public static final int VIRT_SUPPORT_FIELD_NUMBER = 2;
    private boolean virtSupport_;
    /**
     * <code>optional bool virt_support = 2;</code>
     *
     * <pre>
     * AMD, INTEL, ...
     * Does the host support virtualization technology
     * </pre>
     */
    public boolean hasVirtSupport() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool virt_support = 2;</code>
     *
     * <pre>
     * AMD, INTEL, ...
     * Does the host support virtualization technology
     * </pre>
     */
    public boolean getVirtSupport() {
      return virtSupport_;
    }

    // optional bool running_in_vm = 3;
    public static final int RUNNING_IN_VM_FIELD_NUMBER = 3;
    private boolean runningInVm_;
    /**
     * <code>optional bool running_in_vm = 3;</code>
     *
     * <pre>
     * Is the host itself running inside a virtual machine.
     * </pre>
     */
    public boolean hasRunningInVm() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool running_in_vm = 3;</code>
     *
     * <pre>
     * Is the host itself running inside a virtual machine.
     * </pre>
     */
    public boolean getRunningInVm() {
      return runningInVm_;
    }

    // optional int64 os_bit_count = 4;
    public static final int OS_BIT_COUNT_FIELD_NUMBER = 4;
    private long osBitCount_;
    /**
     * <code>optional int64 os_bit_count = 4;</code>
     *
     * <pre>
     * May differ from os_architecture field as it is calculated differently,
     *  trying to compensate the JVM bittness.
     * </pre>
     */
    public boolean hasOsBitCount() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 os_bit_count = 4;</code>
     *
     * <pre>
     * May differ from os_architecture field as it is calculated differently,
     *  trying to compensate the JVM bittness.
     * </pre>
     */
    public long getOsBitCount() {
      return osBitCount_;
    }

    private void initFields() {
      cpuManufacturer_ = "";
      virtSupport_ = false;
      runningInVm_ = false;
      osBitCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getCpuManufacturerBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, virtSupport_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, runningInVm_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, osBitCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getCpuManufacturerBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, virtSupport_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, runningInVm_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, osBitCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.EmulatorHost}
     *
     * <pre>
     * Describes the status of the machine running the emulator.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHostOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorHost_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorHost_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        cpuManufacturer_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        virtSupport_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        runningInVm_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        osBitCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_EmulatorHost_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.cpuManufacturer_ = cpuManufacturer_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.virtSupport_ = virtSupport_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.runningInVm_ = runningInVm_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.osBitCount_ = osBitCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost.getDefaultInstance()) return this;
        if (other.hasCpuManufacturer()) {
          bitField0_ |= 0x00000001;
          cpuManufacturer_ = other.cpuManufacturer_;
          onChanged();
        }
        if (other.hasVirtSupport()) {
          setVirtSupport(other.getVirtSupport());
        }
        if (other.hasRunningInVm()) {
          setRunningInVm(other.getRunningInVm());
        }
        if (other.hasOsBitCount()) {
          setOsBitCount(other.getOsBitCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.EmulatorHost) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string cpu_manufacturer = 1;
      private java.lang.Object cpuManufacturer_ = "";
      /**
       * <code>optional string cpu_manufacturer = 1;</code>
       *
       * <pre>
       * CPU manufacturer of the host, used as certain hypervisors are limited
       *  to a certain manufacturer.
       * </pre>
       */
      public boolean hasCpuManufacturer() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string cpu_manufacturer = 1;</code>
       *
       * <pre>
       * CPU manufacturer of the host, used as certain hypervisors are limited
       *  to a certain manufacturer.
       * </pre>
       */
      public java.lang.String getCpuManufacturer() {
        java.lang.Object ref = cpuManufacturer_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          cpuManufacturer_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string cpu_manufacturer = 1;</code>
       *
       * <pre>
       * CPU manufacturer of the host, used as certain hypervisors are limited
       *  to a certain manufacturer.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getCpuManufacturerBytes() {
        java.lang.Object ref = cpuManufacturer_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          cpuManufacturer_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string cpu_manufacturer = 1;</code>
       *
       * <pre>
       * CPU manufacturer of the host, used as certain hypervisors are limited
       *  to a certain manufacturer.
       * </pre>
       */
      public Builder setCpuManufacturer(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        cpuManufacturer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string cpu_manufacturer = 1;</code>
       *
       * <pre>
       * CPU manufacturer of the host, used as certain hypervisors are limited
       *  to a certain manufacturer.
       * </pre>
       */
      public Builder clearCpuManufacturer() {
        bitField0_ = (bitField0_ & ~0x00000001);
        cpuManufacturer_ = getDefaultInstance().getCpuManufacturer();
        onChanged();
        return this;
      }
      /**
       * <code>optional string cpu_manufacturer = 1;</code>
       *
       * <pre>
       * CPU manufacturer of the host, used as certain hypervisors are limited
       *  to a certain manufacturer.
       * </pre>
       */
      public Builder setCpuManufacturerBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        cpuManufacturer_ = value;
        onChanged();
        return this;
      }

      // optional bool virt_support = 2;
      private boolean virtSupport_ ;
      /**
       * <code>optional bool virt_support = 2;</code>
       *
       * <pre>
       * AMD, INTEL, ...
       * Does the host support virtualization technology
       * </pre>
       */
      public boolean hasVirtSupport() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool virt_support = 2;</code>
       *
       * <pre>
       * AMD, INTEL, ...
       * Does the host support virtualization technology
       * </pre>
       */
      public boolean getVirtSupport() {
        return virtSupport_;
      }
      /**
       * <code>optional bool virt_support = 2;</code>
       *
       * <pre>
       * AMD, INTEL, ...
       * Does the host support virtualization technology
       * </pre>
       */
      public Builder setVirtSupport(boolean value) {
        bitField0_ |= 0x00000002;
        virtSupport_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool virt_support = 2;</code>
       *
       * <pre>
       * AMD, INTEL, ...
       * Does the host support virtualization technology
       * </pre>
       */
      public Builder clearVirtSupport() {
        bitField0_ = (bitField0_ & ~0x00000002);
        virtSupport_ = false;
        onChanged();
        return this;
      }

      // optional bool running_in_vm = 3;
      private boolean runningInVm_ ;
      /**
       * <code>optional bool running_in_vm = 3;</code>
       *
       * <pre>
       * Is the host itself running inside a virtual machine.
       * </pre>
       */
      public boolean hasRunningInVm() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool running_in_vm = 3;</code>
       *
       * <pre>
       * Is the host itself running inside a virtual machine.
       * </pre>
       */
      public boolean getRunningInVm() {
        return runningInVm_;
      }
      /**
       * <code>optional bool running_in_vm = 3;</code>
       *
       * <pre>
       * Is the host itself running inside a virtual machine.
       * </pre>
       */
      public Builder setRunningInVm(boolean value) {
        bitField0_ |= 0x00000004;
        runningInVm_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool running_in_vm = 3;</code>
       *
       * <pre>
       * Is the host itself running inside a virtual machine.
       * </pre>
       */
      public Builder clearRunningInVm() {
        bitField0_ = (bitField0_ & ~0x00000004);
        runningInVm_ = false;
        onChanged();
        return this;
      }

      // optional int64 os_bit_count = 4;
      private long osBitCount_ ;
      /**
       * <code>optional int64 os_bit_count = 4;</code>
       *
       * <pre>
       * May differ from os_architecture field as it is calculated differently,
       *  trying to compensate the JVM bittness.
       * </pre>
       */
      public boolean hasOsBitCount() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 os_bit_count = 4;</code>
       *
       * <pre>
       * May differ from os_architecture field as it is calculated differently,
       *  trying to compensate the JVM bittness.
       * </pre>
       */
      public long getOsBitCount() {
        return osBitCount_;
      }
      /**
       * <code>optional int64 os_bit_count = 4;</code>
       *
       * <pre>
       * May differ from os_architecture field as it is calculated differently,
       *  trying to compensate the JVM bittness.
       * </pre>
       */
      public Builder setOsBitCount(long value) {
        bitField0_ |= 0x00000008;
        osBitCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 os_bit_count = 4;</code>
       *
       * <pre>
       * May differ from os_architecture field as it is calculated differently,
       *  trying to compensate the JVM bittness.
       * </pre>
       */
      public Builder clearOsBitCount() {
        bitField0_ = (bitField0_ & ~0x00000008);
        osBitCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.EmulatorHost)
    }

    static {
      defaultInstance = new EmulatorHost(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.EmulatorHost)
  }

  public interface GradleBuildProfileOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string gradle_version = 2;
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     *  e.g. "2.14" or "3.0-20160617000025+0000"
     * </pre>
     */
    boolean hasGradleVersion();
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     *  e.g. "2.14" or "3.0-20160617000025+0000"
     * </pre>
     */
    java.lang.String getGradleVersion();
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     *  e.g. "2.14" or "3.0-20160617000025+0000"
     * </pre>
     */
    com.google.protobuf.ByteString
        getGradleVersionBytes();

    // optional string os_name = 6;
    /**
     * <code>optional string os_name = 6;</code>
     *
     * <pre>
     * The value of the "os.name" system property.
     *  e.g. "Linux"
     * </pre>
     */
    boolean hasOsName();
    /**
     * <code>optional string os_name = 6;</code>
     *
     * <pre>
     * The value of the "os.name" system property.
     *  e.g. "Linux"
     * </pre>
     */
    java.lang.String getOsName();
    /**
     * <code>optional string os_name = 6;</code>
     *
     * <pre>
     * The value of the "os.name" system property.
     *  e.g. "Linux"
     * </pre>
     */
    com.google.protobuf.ByteString
        getOsNameBytes();

    // optional string os_version = 7;
    /**
     * <code>optional string os_version = 7;</code>
     *
     * <pre>
     * The value of the "os.version" system property.
     *  e.g. "3.13.0-86-generic"
     * </pre>
     */
    boolean hasOsVersion();
    /**
     * <code>optional string os_version = 7;</code>
     *
     * <pre>
     * The value of the "os.version" system property.
     *  e.g. "3.13.0-86-generic"
     * </pre>
     */
    java.lang.String getOsVersion();
    /**
     * <code>optional string os_version = 7;</code>
     *
     * <pre>
     * The value of the "os.version" system property.
     *  e.g. "3.13.0-86-generic"
     * </pre>
     */
    com.google.protobuf.ByteString
        getOsVersionBytes();

    // optional string java_version = 8;
    /**
     * <code>optional string java_version = 8;</code>
     *
     * <pre>
     * The value of the "java.version" system property.
     *  e.g. "1.8.0_40-ea"
     * </pre>
     */
    boolean hasJavaVersion();
    /**
     * <code>optional string java_version = 8;</code>
     *
     * <pre>
     * The value of the "java.version" system property.
     *  e.g. "1.8.0_40-ea"
     * </pre>
     */
    java.lang.String getJavaVersion();
    /**
     * <code>optional string java_version = 8;</code>
     *
     * <pre>
     * The value of the "java.version" system property.
     *  e.g. "1.8.0_40-ea"
     * </pre>
     */
    com.google.protobuf.ByteString
        getJavaVersionBytes();

    // optional string java_vm_version = 9;
    /**
     * <code>optional string java_vm_version = 9;</code>
     *
     * <pre>
     * The value of the "java.vm.version" system property.
     *  e.g. "25.40-b25"
     * </pre>
     */
    boolean hasJavaVmVersion();
    /**
     * <code>optional string java_vm_version = 9;</code>
     *
     * <pre>
     * The value of the "java.vm.version" system property.
     *  e.g. "25.40-b25"
     * </pre>
     */
    java.lang.String getJavaVmVersion();
    /**
     * <code>optional string java_vm_version = 9;</code>
     *
     * <pre>
     * The value of the "java.vm.version" system property.
     *  e.g. "25.40-b25"
     * </pre>
     */
    com.google.protobuf.ByteString
        getJavaVmVersionBytes();

    // optional int64 max_memory = 10;
    /**
     * <code>optional int64 max_memory = 10;</code>
     *
     * <pre>
     * The value of Runtime.getRuntime().maxMemory()
     * </pre>
     */
    boolean hasMaxMemory();
    /**
     * <code>optional int64 max_memory = 10;</code>
     *
     * <pre>
     * The value of Runtime.getRuntime().maxMemory()
     * </pre>
     */
    long getMaxMemory();

    // optional int64 build_time = 11;
    /**
     * <code>optional int64 build_time = 11;</code>
     *
     * <pre>
     * The total time taken for this build.
     *  This does not include Gradle's startup (before plugin apply) or shutdown
     *  (after BuildListener#buildFinished(BuildResult) called.
     * </pre>
     */
    boolean hasBuildTime();
    /**
     * <code>optional int64 build_time = 11;</code>
     *
     * <pre>
     * The total time taken for this build.
     *  This does not include Gradle's startup (before plugin apply) or shutdown
     *  (after BuildListener#buildFinished(BuildResult) called.
     * </pre>
     */
    long getBuildTime();

    // optional int64 gc_count = 12;
    /**
     * <code>optional int64 gc_count = 12;</code>
     *
     * <pre>
     * The number of garbage collections during this build
     * </pre>
     */
    boolean hasGcCount();
    /**
     * <code>optional int64 gc_count = 12;</code>
     *
     * <pre>
     * The number of garbage collections during this build
     * </pre>
     */
    long getGcCount();

    // optional int64 gc_time = 13;
    /**
     * <code>optional int64 gc_time = 13;</code>
     *
     * <pre>
     * The time spent garbage collecting during this build.
     * </pre>
     */
    boolean hasGcTime();
    /**
     * <code>optional int64 gc_time = 13;</code>
     *
     * <pre>
     * The time spent garbage collecting during this build.
     * </pre>
     */
    long getGcTime();

    // repeated .android_studio.GradleBuildProject project = 14;
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject> 
        getProjectList();
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject getProject(int index);
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    int getProjectCount();
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder> 
        getProjectOrBuilderList();
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder getProjectOrBuilder(
        int index);

    // repeated .android_studio.GradleBuildMemorySample memory_sample = 15;
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample> 
        getMemorySampleList();
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample getMemorySample(int index);
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    int getMemorySampleCount();
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder> 
        getMemorySampleOrBuilderList();
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder getMemorySampleOrBuilder(
        int index);

    // repeated .android_studio.GradleBuildProfileSpan span = 16;
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan> 
        getSpanList();
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan getSpan(int index);
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    int getSpanCount();
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder> 
        getSpanOrBuilderList();
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder getSpanOrBuilder(
        int index);

    // optional .android_studio.InstantRunStatus instant_run_status = 17;
    /**
     * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
     *
     * <pre>
     * For instant run builds: the resulting instant run build info.
     * </pre>
     */
    boolean hasInstantRunStatus();
    /**
     * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
     *
     * <pre>
     * For instant run builds: the resulting instant run build info.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus getInstantRunStatus();
    /**
     * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
     *
     * <pre>
     * For instant run builds: the resulting instant run build info.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatusOrBuilder getInstantRunStatusOrBuilder();

    // optional string project_id = 18;
    /**
     * <code>optional string project_id = 18;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the root project path.
     *  This exists to allow multiple instant run builds in one project by one
     *  user to be correlated.
     * 
     *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
     *  identifier. It is anonymized and is unique per user, but has a 1-N
     *  relation.
     * </pre>
     */
    boolean hasProjectId();
    /**
     * <code>optional string project_id = 18;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the root project path.
     *  This exists to allow multiple instant run builds in one project by one
     *  user to be correlated.
     * 
     *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
     *  identifier. It is anonymized and is unique per user, but has a 1-N
     *  relation.
     * </pre>
     */
    java.lang.String getProjectId();
    /**
     * <code>optional string project_id = 18;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the root project path.
     *  This exists to allow multiple instant run builds in one project by one
     *  user to be correlated.
     * 
     *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
     *  identifier. It is anonymized and is unique per user, but has a 1-N
     *  relation.
     * </pre>
     */
    com.google.protobuf.ByteString
        getProjectIdBytes();
  }
  /**
   * Protobuf type {@code android_studio.GradleBuildProfile}
   *
   * <pre>
   * Detailed profiling information for the gradle build.
   * </pre>
   */
  public static final class GradleBuildProfile extends
      com.google.protobuf.GeneratedMessage
      implements GradleBuildProfileOrBuilder {
    // Use GradleBuildProfile.newBuilder() to construct.
    private GradleBuildProfile(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleBuildProfile(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleBuildProfile defaultInstance;
    public static GradleBuildProfile getDefaultInstance() {
      return defaultInstance;
    }

    public GradleBuildProfile getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleBuildProfile(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000001;
              gradleVersion_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000002;
              osName_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000004;
              osVersion_ = input.readBytes();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000008;
              javaVersion_ = input.readBytes();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000010;
              javaVmVersion_ = input.readBytes();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000020;
              maxMemory_ = input.readInt64();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000040;
              buildTime_ = input.readInt64();
              break;
            }
            case 96: {
              bitField0_ |= 0x00000080;
              gcCount_ = input.readInt64();
              break;
            }
            case 104: {
              bitField0_ |= 0x00000100;
              gcTime_ = input.readInt64();
              break;
            }
            case 114: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                project_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject>();
                mutable_bitField0_ |= 0x00000200;
              }
              project_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PARSER, extensionRegistry));
              break;
            }
            case 122: {
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                memorySample_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample>();
                mutable_bitField0_ |= 0x00000400;
              }
              memorySample_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.PARSER, extensionRegistry));
              break;
            }
            case 130: {
              if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                span_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan>();
                mutable_bitField0_ |= 0x00000800;
              }
              span_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.PARSER, extensionRegistry));
              break;
            }
            case 138: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = instantRunStatus_.toBuilder();
              }
              instantRunStatus_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(instantRunStatus_);
                instantRunStatus_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 146: {
              bitField0_ |= 0x00000400;
              projectId_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          project_ = java.util.Collections.unmodifiableList(project_);
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          memorySample_ = java.util.Collections.unmodifiableList(memorySample_);
        }
        if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
          span_ = java.util.Collections.unmodifiableList(span_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfile_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfile_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleBuildProfile> PARSER =
        new com.google.protobuf.AbstractParser<GradleBuildProfile>() {
      public GradleBuildProfile parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleBuildProfile(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleBuildProfile> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string gradle_version = 2;
    public static final int GRADLE_VERSION_FIELD_NUMBER = 2;
    private java.lang.Object gradleVersion_;
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     *  e.g. "2.14" or "3.0-20160617000025+0000"
     * </pre>
     */
    public boolean hasGradleVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     *  e.g. "2.14" or "3.0-20160617000025+0000"
     * </pre>
     */
    public java.lang.String getGradleVersion() {
      java.lang.Object ref = gradleVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gradleVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gradle_version = 2;</code>
     *
     * <pre>
     * Version of the open source Gradle application used.
     *  e.g. "2.14" or "3.0-20160617000025+0000"
     * </pre>
     */
    public com.google.protobuf.ByteString
        getGradleVersionBytes() {
      java.lang.Object ref = gradleVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gradleVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string os_name = 6;
    public static final int OS_NAME_FIELD_NUMBER = 6;
    private java.lang.Object osName_;
    /**
     * <code>optional string os_name = 6;</code>
     *
     * <pre>
     * The value of the "os.name" system property.
     *  e.g. "Linux"
     * </pre>
     */
    public boolean hasOsName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string os_name = 6;</code>
     *
     * <pre>
     * The value of the "os.name" system property.
     *  e.g. "Linux"
     * </pre>
     */
    public java.lang.String getOsName() {
      java.lang.Object ref = osName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          osName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string os_name = 6;</code>
     *
     * <pre>
     * The value of the "os.name" system property.
     *  e.g. "Linux"
     * </pre>
     */
    public com.google.protobuf.ByteString
        getOsNameBytes() {
      java.lang.Object ref = osName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        osName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string os_version = 7;
    public static final int OS_VERSION_FIELD_NUMBER = 7;
    private java.lang.Object osVersion_;
    /**
     * <code>optional string os_version = 7;</code>
     *
     * <pre>
     * The value of the "os.version" system property.
     *  e.g. "3.13.0-86-generic"
     * </pre>
     */
    public boolean hasOsVersion() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string os_version = 7;</code>
     *
     * <pre>
     * The value of the "os.version" system property.
     *  e.g. "3.13.0-86-generic"
     * </pre>
     */
    public java.lang.String getOsVersion() {
      java.lang.Object ref = osVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          osVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string os_version = 7;</code>
     *
     * <pre>
     * The value of the "os.version" system property.
     *  e.g. "3.13.0-86-generic"
     * </pre>
     */
    public com.google.protobuf.ByteString
        getOsVersionBytes() {
      java.lang.Object ref = osVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        osVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string java_version = 8;
    public static final int JAVA_VERSION_FIELD_NUMBER = 8;
    private java.lang.Object javaVersion_;
    /**
     * <code>optional string java_version = 8;</code>
     *
     * <pre>
     * The value of the "java.version" system property.
     *  e.g. "1.8.0_40-ea"
     * </pre>
     */
    public boolean hasJavaVersion() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string java_version = 8;</code>
     *
     * <pre>
     * The value of the "java.version" system property.
     *  e.g. "1.8.0_40-ea"
     * </pre>
     */
    public java.lang.String getJavaVersion() {
      java.lang.Object ref = javaVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          javaVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string java_version = 8;</code>
     *
     * <pre>
     * The value of the "java.version" system property.
     *  e.g. "1.8.0_40-ea"
     * </pre>
     */
    public com.google.protobuf.ByteString
        getJavaVersionBytes() {
      java.lang.Object ref = javaVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        javaVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string java_vm_version = 9;
    public static final int JAVA_VM_VERSION_FIELD_NUMBER = 9;
    private java.lang.Object javaVmVersion_;
    /**
     * <code>optional string java_vm_version = 9;</code>
     *
     * <pre>
     * The value of the "java.vm.version" system property.
     *  e.g. "25.40-b25"
     * </pre>
     */
    public boolean hasJavaVmVersion() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string java_vm_version = 9;</code>
     *
     * <pre>
     * The value of the "java.vm.version" system property.
     *  e.g. "25.40-b25"
     * </pre>
     */
    public java.lang.String getJavaVmVersion() {
      java.lang.Object ref = javaVmVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          javaVmVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string java_vm_version = 9;</code>
     *
     * <pre>
     * The value of the "java.vm.version" system property.
     *  e.g. "25.40-b25"
     * </pre>
     */
    public com.google.protobuf.ByteString
        getJavaVmVersionBytes() {
      java.lang.Object ref = javaVmVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        javaVmVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 max_memory = 10;
    public static final int MAX_MEMORY_FIELD_NUMBER = 10;
    private long maxMemory_;
    /**
     * <code>optional int64 max_memory = 10;</code>
     *
     * <pre>
     * The value of Runtime.getRuntime().maxMemory()
     * </pre>
     */
    public boolean hasMaxMemory() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int64 max_memory = 10;</code>
     *
     * <pre>
     * The value of Runtime.getRuntime().maxMemory()
     * </pre>
     */
    public long getMaxMemory() {
      return maxMemory_;
    }

    // optional int64 build_time = 11;
    public static final int BUILD_TIME_FIELD_NUMBER = 11;
    private long buildTime_;
    /**
     * <code>optional int64 build_time = 11;</code>
     *
     * <pre>
     * The total time taken for this build.
     *  This does not include Gradle's startup (before plugin apply) or shutdown
     *  (after BuildListener#buildFinished(BuildResult) called.
     * </pre>
     */
    public boolean hasBuildTime() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 build_time = 11;</code>
     *
     * <pre>
     * The total time taken for this build.
     *  This does not include Gradle's startup (before plugin apply) or shutdown
     *  (after BuildListener#buildFinished(BuildResult) called.
     * </pre>
     */
    public long getBuildTime() {
      return buildTime_;
    }

    // optional int64 gc_count = 12;
    public static final int GC_COUNT_FIELD_NUMBER = 12;
    private long gcCount_;
    /**
     * <code>optional int64 gc_count = 12;</code>
     *
     * <pre>
     * The number of garbage collections during this build
     * </pre>
     */
    public boolean hasGcCount() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int64 gc_count = 12;</code>
     *
     * <pre>
     * The number of garbage collections during this build
     * </pre>
     */
    public long getGcCount() {
      return gcCount_;
    }

    // optional int64 gc_time = 13;
    public static final int GC_TIME_FIELD_NUMBER = 13;
    private long gcTime_;
    /**
     * <code>optional int64 gc_time = 13;</code>
     *
     * <pre>
     * The time spent garbage collecting during this build.
     * </pre>
     */
    public boolean hasGcTime() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional int64 gc_time = 13;</code>
     *
     * <pre>
     * The time spent garbage collecting during this build.
     * </pre>
     */
    public long getGcTime() {
      return gcTime_;
    }

    // repeated .android_studio.GradleBuildProject project = 14;
    public static final int PROJECT_FIELD_NUMBER = 14;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject> project_;
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject> getProjectList() {
      return project_;
    }
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder> 
        getProjectOrBuilderList() {
      return project_;
    }
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    public int getProjectCount() {
      return project_.size();
    }
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject getProject(int index) {
      return project_.get(index);
    }
    /**
     * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
     *
     * <pre>
     * The projects that make up this multi-project build.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder getProjectOrBuilder(
        int index) {
      return project_.get(index);
    }

    // repeated .android_studio.GradleBuildMemorySample memory_sample = 15;
    public static final int MEMORY_SAMPLE_FIELD_NUMBER = 15;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample> memorySample_;
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample> getMemorySampleList() {
      return memorySample_;
    }
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder> 
        getMemorySampleOrBuilderList() {
      return memorySample_;
    }
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    public int getMemorySampleCount() {
      return memorySample_.size();
    }
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample getMemorySample(int index) {
      return memorySample_.get(index);
    }
    /**
     * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
     *
     * <pre>
     * Samples of the memory state of the daemon during the build.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder getMemorySampleOrBuilder(
        int index) {
      return memorySample_.get(index);
    }

    // repeated .android_studio.GradleBuildProfileSpan span = 16;
    public static final int SPAN_FIELD_NUMBER = 16;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan> span_;
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan> getSpanList() {
      return span_;
    }
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder> 
        getSpanOrBuilderList() {
      return span_;
    }
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    public int getSpanCount() {
      return span_.size();
    }
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan getSpan(int index) {
      return span_.get(index);
    }
    /**
     * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
     *
     * <pre>
     * The fine-grained execution spans which record granular timings.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder getSpanOrBuilder(
        int index) {
      return span_.get(index);
    }

    // optional .android_studio.InstantRunStatus instant_run_status = 17;
    public static final int INSTANT_RUN_STATUS_FIELD_NUMBER = 17;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus instantRunStatus_;
    /**
     * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
     *
     * <pre>
     * For instant run builds: the resulting instant run build info.
     * </pre>
     */
    public boolean hasInstantRunStatus() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
     *
     * <pre>
     * For instant run builds: the resulting instant run build info.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus getInstantRunStatus() {
      return instantRunStatus_;
    }
    /**
     * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
     *
     * <pre>
     * For instant run builds: the resulting instant run build info.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatusOrBuilder getInstantRunStatusOrBuilder() {
      return instantRunStatus_;
    }

    // optional string project_id = 18;
    public static final int PROJECT_ID_FIELD_NUMBER = 18;
    private java.lang.Object projectId_;
    /**
     * <code>optional string project_id = 18;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the root project path.
     *  This exists to allow multiple instant run builds in one project by one
     *  user to be correlated.
     * 
     *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
     *  identifier. It is anonymized and is unique per user, but has a 1-N
     *  relation.
     * </pre>
     */
    public boolean hasProjectId() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional string project_id = 18;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the root project path.
     *  This exists to allow multiple instant run builds in one project by one
     *  user to be correlated.
     * 
     *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
     *  identifier. It is anonymized and is unique per user, but has a 1-N
     *  relation.
     * </pre>
     */
    public java.lang.String getProjectId() {
      java.lang.Object ref = projectId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          projectId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string project_id = 18;</code>
     *
     * <pre>
     * Client-side salted, sha256 of the root project path.
     *  This exists to allow multiple instant run builds in one project by one
     *  user to be correlated.
     * 
     *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
     *  identifier. It is anonymized and is unique per user, but has a 1-N
     *  relation.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getProjectIdBytes() {
      java.lang.Object ref = projectId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        projectId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      gradleVersion_ = "";
      osName_ = "";
      osVersion_ = "";
      javaVersion_ = "";
      javaVmVersion_ = "";
      maxMemory_ = 0L;
      buildTime_ = 0L;
      gcCount_ = 0L;
      gcTime_ = 0L;
      project_ = java.util.Collections.emptyList();
      memorySample_ = java.util.Collections.emptyList();
      span_ = java.util.Collections.emptyList();
      instantRunStatus_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDefaultInstance();
      projectId_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(2, getGradleVersionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(6, getOsNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(7, getOsVersionBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(8, getJavaVersionBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(9, getJavaVmVersionBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt64(10, maxMemory_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(11, buildTime_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt64(12, gcCount_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeInt64(13, gcTime_);
      }
      for (int i = 0; i < project_.size(); i++) {
        output.writeMessage(14, project_.get(i));
      }
      for (int i = 0; i < memorySample_.size(); i++) {
        output.writeMessage(15, memorySample_.get(i));
      }
      for (int i = 0; i < span_.size(); i++) {
        output.writeMessage(16, span_.get(i));
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(17, instantRunStatus_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBytes(18, getProjectIdBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getGradleVersionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getOsNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getOsVersionBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getJavaVersionBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getJavaVmVersionBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(10, maxMemory_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(11, buildTime_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(12, gcCount_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(13, gcTime_);
      }
      for (int i = 0; i < project_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, project_.get(i));
      }
      for (int i = 0; i < memorySample_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, memorySample_.get(i));
      }
      for (int i = 0; i < span_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, span_.get(i));
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(17, instantRunStatus_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(18, getProjectIdBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleBuildProfile}
     *
     * <pre>
     * Detailed profiling information for the gradle build.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfile_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfile_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getProjectFieldBuilder();
          getMemorySampleFieldBuilder();
          getSpanFieldBuilder();
          getInstantRunStatusFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        gradleVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        osName_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        osVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        javaVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        javaVmVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        maxMemory_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        buildTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        gcCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        gcTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000100);
        if (projectBuilder_ == null) {
          project_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          projectBuilder_.clear();
        }
        if (memorySampleBuilder_ == null) {
          memorySample_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
        } else {
          memorySampleBuilder_.clear();
        }
        if (spanBuilder_ == null) {
          span_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          spanBuilder_.clear();
        }
        if (instantRunStatusBuilder_ == null) {
          instantRunStatus_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDefaultInstance();
        } else {
          instantRunStatusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        projectId_ = "";
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfile_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.gradleVersion_ = gradleVersion_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.osName_ = osName_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.osVersion_ = osVersion_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.javaVersion_ = javaVersion_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.javaVmVersion_ = javaVmVersion_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.maxMemory_ = maxMemory_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.buildTime_ = buildTime_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.gcCount_ = gcCount_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.gcTime_ = gcTime_;
        if (projectBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200)) {
            project_ = java.util.Collections.unmodifiableList(project_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.project_ = project_;
        } else {
          result.project_ = projectBuilder_.build();
        }
        if (memorySampleBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400)) {
            memorySample_ = java.util.Collections.unmodifiableList(memorySample_);
            bitField0_ = (bitField0_ & ~0x00000400);
          }
          result.memorySample_ = memorySample_;
        } else {
          result.memorySample_ = memorySampleBuilder_.build();
        }
        if (spanBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800)) {
            span_ = java.util.Collections.unmodifiableList(span_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.span_ = span_;
        } else {
          result.span_ = spanBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000200;
        }
        if (instantRunStatusBuilder_ == null) {
          result.instantRunStatus_ = instantRunStatus_;
        } else {
          result.instantRunStatus_ = instantRunStatusBuilder_.build();
        }
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.projectId_ = projectId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile.getDefaultInstance()) return this;
        if (other.hasGradleVersion()) {
          bitField0_ |= 0x00000001;
          gradleVersion_ = other.gradleVersion_;
          onChanged();
        }
        if (other.hasOsName()) {
          bitField0_ |= 0x00000002;
          osName_ = other.osName_;
          onChanged();
        }
        if (other.hasOsVersion()) {
          bitField0_ |= 0x00000004;
          osVersion_ = other.osVersion_;
          onChanged();
        }
        if (other.hasJavaVersion()) {
          bitField0_ |= 0x00000008;
          javaVersion_ = other.javaVersion_;
          onChanged();
        }
        if (other.hasJavaVmVersion()) {
          bitField0_ |= 0x00000010;
          javaVmVersion_ = other.javaVmVersion_;
          onChanged();
        }
        if (other.hasMaxMemory()) {
          setMaxMemory(other.getMaxMemory());
        }
        if (other.hasBuildTime()) {
          setBuildTime(other.getBuildTime());
        }
        if (other.hasGcCount()) {
          setGcCount(other.getGcCount());
        }
        if (other.hasGcTime()) {
          setGcTime(other.getGcTime());
        }
        if (projectBuilder_ == null) {
          if (!other.project_.isEmpty()) {
            if (project_.isEmpty()) {
              project_ = other.project_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureProjectIsMutable();
              project_.addAll(other.project_);
            }
            onChanged();
          }
        } else {
          if (!other.project_.isEmpty()) {
            if (projectBuilder_.isEmpty()) {
              projectBuilder_.dispose();
              projectBuilder_ = null;
              project_ = other.project_;
              bitField0_ = (bitField0_ & ~0x00000200);
              projectBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getProjectFieldBuilder() : null;
            } else {
              projectBuilder_.addAllMessages(other.project_);
            }
          }
        }
        if (memorySampleBuilder_ == null) {
          if (!other.memorySample_.isEmpty()) {
            if (memorySample_.isEmpty()) {
              memorySample_ = other.memorySample_;
              bitField0_ = (bitField0_ & ~0x00000400);
            } else {
              ensureMemorySampleIsMutable();
              memorySample_.addAll(other.memorySample_);
            }
            onChanged();
          }
        } else {
          if (!other.memorySample_.isEmpty()) {
            if (memorySampleBuilder_.isEmpty()) {
              memorySampleBuilder_.dispose();
              memorySampleBuilder_ = null;
              memorySample_ = other.memorySample_;
              bitField0_ = (bitField0_ & ~0x00000400);
              memorySampleBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getMemorySampleFieldBuilder() : null;
            } else {
              memorySampleBuilder_.addAllMessages(other.memorySample_);
            }
          }
        }
        if (spanBuilder_ == null) {
          if (!other.span_.isEmpty()) {
            if (span_.isEmpty()) {
              span_ = other.span_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensureSpanIsMutable();
              span_.addAll(other.span_);
            }
            onChanged();
          }
        } else {
          if (!other.span_.isEmpty()) {
            if (spanBuilder_.isEmpty()) {
              spanBuilder_.dispose();
              spanBuilder_ = null;
              span_ = other.span_;
              bitField0_ = (bitField0_ & ~0x00000800);
              spanBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getSpanFieldBuilder() : null;
            } else {
              spanBuilder_.addAllMessages(other.span_);
            }
          }
        }
        if (other.hasInstantRunStatus()) {
          mergeInstantRunStatus(other.getInstantRunStatus());
        }
        if (other.hasProjectId()) {
          bitField0_ |= 0x00002000;
          projectId_ = other.projectId_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfile) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string gradle_version = 2;
      private java.lang.Object gradleVersion_ = "";
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       *  e.g. "2.14" or "3.0-20160617000025+0000"
       * </pre>
       */
      public boolean hasGradleVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       *  e.g. "2.14" or "3.0-20160617000025+0000"
       * </pre>
       */
      public java.lang.String getGradleVersion() {
        java.lang.Object ref = gradleVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          gradleVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       *  e.g. "2.14" or "3.0-20160617000025+0000"
       * </pre>
       */
      public com.google.protobuf.ByteString
          getGradleVersionBytes() {
        java.lang.Object ref = gradleVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gradleVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       *  e.g. "2.14" or "3.0-20160617000025+0000"
       * </pre>
       */
      public Builder setGradleVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        gradleVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       *  e.g. "2.14" or "3.0-20160617000025+0000"
       * </pre>
       */
      public Builder clearGradleVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        gradleVersion_ = getDefaultInstance().getGradleVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gradle_version = 2;</code>
       *
       * <pre>
       * Version of the open source Gradle application used.
       *  e.g. "2.14" or "3.0-20160617000025+0000"
       * </pre>
       */
      public Builder setGradleVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        gradleVersion_ = value;
        onChanged();
        return this;
      }

      // optional string os_name = 6;
      private java.lang.Object osName_ = "";
      /**
       * <code>optional string os_name = 6;</code>
       *
       * <pre>
       * The value of the "os.name" system property.
       *  e.g. "Linux"
       * </pre>
       */
      public boolean hasOsName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string os_name = 6;</code>
       *
       * <pre>
       * The value of the "os.name" system property.
       *  e.g. "Linux"
       * </pre>
       */
      public java.lang.String getOsName() {
        java.lang.Object ref = osName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          osName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string os_name = 6;</code>
       *
       * <pre>
       * The value of the "os.name" system property.
       *  e.g. "Linux"
       * </pre>
       */
      public com.google.protobuf.ByteString
          getOsNameBytes() {
        java.lang.Object ref = osName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          osName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string os_name = 6;</code>
       *
       * <pre>
       * The value of the "os.name" system property.
       *  e.g. "Linux"
       * </pre>
       */
      public Builder setOsName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        osName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string os_name = 6;</code>
       *
       * <pre>
       * The value of the "os.name" system property.
       *  e.g. "Linux"
       * </pre>
       */
      public Builder clearOsName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        osName_ = getDefaultInstance().getOsName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string os_name = 6;</code>
       *
       * <pre>
       * The value of the "os.name" system property.
       *  e.g. "Linux"
       * </pre>
       */
      public Builder setOsNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        osName_ = value;
        onChanged();
        return this;
      }

      // optional string os_version = 7;
      private java.lang.Object osVersion_ = "";
      /**
       * <code>optional string os_version = 7;</code>
       *
       * <pre>
       * The value of the "os.version" system property.
       *  e.g. "3.13.0-86-generic"
       * </pre>
       */
      public boolean hasOsVersion() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string os_version = 7;</code>
       *
       * <pre>
       * The value of the "os.version" system property.
       *  e.g. "3.13.0-86-generic"
       * </pre>
       */
      public java.lang.String getOsVersion() {
        java.lang.Object ref = osVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          osVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string os_version = 7;</code>
       *
       * <pre>
       * The value of the "os.version" system property.
       *  e.g. "3.13.0-86-generic"
       * </pre>
       */
      public com.google.protobuf.ByteString
          getOsVersionBytes() {
        java.lang.Object ref = osVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          osVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string os_version = 7;</code>
       *
       * <pre>
       * The value of the "os.version" system property.
       *  e.g. "3.13.0-86-generic"
       * </pre>
       */
      public Builder setOsVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        osVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string os_version = 7;</code>
       *
       * <pre>
       * The value of the "os.version" system property.
       *  e.g. "3.13.0-86-generic"
       * </pre>
       */
      public Builder clearOsVersion() {
        bitField0_ = (bitField0_ & ~0x00000004);
        osVersion_ = getDefaultInstance().getOsVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string os_version = 7;</code>
       *
       * <pre>
       * The value of the "os.version" system property.
       *  e.g. "3.13.0-86-generic"
       * </pre>
       */
      public Builder setOsVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        osVersion_ = value;
        onChanged();
        return this;
      }

      // optional string java_version = 8;
      private java.lang.Object javaVersion_ = "";
      /**
       * <code>optional string java_version = 8;</code>
       *
       * <pre>
       * The value of the "java.version" system property.
       *  e.g. "1.8.0_40-ea"
       * </pre>
       */
      public boolean hasJavaVersion() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string java_version = 8;</code>
       *
       * <pre>
       * The value of the "java.version" system property.
       *  e.g. "1.8.0_40-ea"
       * </pre>
       */
      public java.lang.String getJavaVersion() {
        java.lang.Object ref = javaVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          javaVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string java_version = 8;</code>
       *
       * <pre>
       * The value of the "java.version" system property.
       *  e.g. "1.8.0_40-ea"
       * </pre>
       */
      public com.google.protobuf.ByteString
          getJavaVersionBytes() {
        java.lang.Object ref = javaVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          javaVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string java_version = 8;</code>
       *
       * <pre>
       * The value of the "java.version" system property.
       *  e.g. "1.8.0_40-ea"
       * </pre>
       */
      public Builder setJavaVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        javaVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string java_version = 8;</code>
       *
       * <pre>
       * The value of the "java.version" system property.
       *  e.g. "1.8.0_40-ea"
       * </pre>
       */
      public Builder clearJavaVersion() {
        bitField0_ = (bitField0_ & ~0x00000008);
        javaVersion_ = getDefaultInstance().getJavaVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string java_version = 8;</code>
       *
       * <pre>
       * The value of the "java.version" system property.
       *  e.g. "1.8.0_40-ea"
       * </pre>
       */
      public Builder setJavaVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        javaVersion_ = value;
        onChanged();
        return this;
      }

      // optional string java_vm_version = 9;
      private java.lang.Object javaVmVersion_ = "";
      /**
       * <code>optional string java_vm_version = 9;</code>
       *
       * <pre>
       * The value of the "java.vm.version" system property.
       *  e.g. "25.40-b25"
       * </pre>
       */
      public boolean hasJavaVmVersion() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string java_vm_version = 9;</code>
       *
       * <pre>
       * The value of the "java.vm.version" system property.
       *  e.g. "25.40-b25"
       * </pre>
       */
      public java.lang.String getJavaVmVersion() {
        java.lang.Object ref = javaVmVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          javaVmVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string java_vm_version = 9;</code>
       *
       * <pre>
       * The value of the "java.vm.version" system property.
       *  e.g. "25.40-b25"
       * </pre>
       */
      public com.google.protobuf.ByteString
          getJavaVmVersionBytes() {
        java.lang.Object ref = javaVmVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          javaVmVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string java_vm_version = 9;</code>
       *
       * <pre>
       * The value of the "java.vm.version" system property.
       *  e.g. "25.40-b25"
       * </pre>
       */
      public Builder setJavaVmVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        javaVmVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string java_vm_version = 9;</code>
       *
       * <pre>
       * The value of the "java.vm.version" system property.
       *  e.g. "25.40-b25"
       * </pre>
       */
      public Builder clearJavaVmVersion() {
        bitField0_ = (bitField0_ & ~0x00000010);
        javaVmVersion_ = getDefaultInstance().getJavaVmVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string java_vm_version = 9;</code>
       *
       * <pre>
       * The value of the "java.vm.version" system property.
       *  e.g. "25.40-b25"
       * </pre>
       */
      public Builder setJavaVmVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        javaVmVersion_ = value;
        onChanged();
        return this;
      }

      // optional int64 max_memory = 10;
      private long maxMemory_ ;
      /**
       * <code>optional int64 max_memory = 10;</code>
       *
       * <pre>
       * The value of Runtime.getRuntime().maxMemory()
       * </pre>
       */
      public boolean hasMaxMemory() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int64 max_memory = 10;</code>
       *
       * <pre>
       * The value of Runtime.getRuntime().maxMemory()
       * </pre>
       */
      public long getMaxMemory() {
        return maxMemory_;
      }
      /**
       * <code>optional int64 max_memory = 10;</code>
       *
       * <pre>
       * The value of Runtime.getRuntime().maxMemory()
       * </pre>
       */
      public Builder setMaxMemory(long value) {
        bitField0_ |= 0x00000020;
        maxMemory_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 max_memory = 10;</code>
       *
       * <pre>
       * The value of Runtime.getRuntime().maxMemory()
       * </pre>
       */
      public Builder clearMaxMemory() {
        bitField0_ = (bitField0_ & ~0x00000020);
        maxMemory_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 build_time = 11;
      private long buildTime_ ;
      /**
       * <code>optional int64 build_time = 11;</code>
       *
       * <pre>
       * The total time taken for this build.
       *  This does not include Gradle's startup (before plugin apply) or shutdown
       *  (after BuildListener#buildFinished(BuildResult) called.
       * </pre>
       */
      public boolean hasBuildTime() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 build_time = 11;</code>
       *
       * <pre>
       * The total time taken for this build.
       *  This does not include Gradle's startup (before plugin apply) or shutdown
       *  (after BuildListener#buildFinished(BuildResult) called.
       * </pre>
       */
      public long getBuildTime() {
        return buildTime_;
      }
      /**
       * <code>optional int64 build_time = 11;</code>
       *
       * <pre>
       * The total time taken for this build.
       *  This does not include Gradle's startup (before plugin apply) or shutdown
       *  (after BuildListener#buildFinished(BuildResult) called.
       * </pre>
       */
      public Builder setBuildTime(long value) {
        bitField0_ |= 0x00000040;
        buildTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 build_time = 11;</code>
       *
       * <pre>
       * The total time taken for this build.
       *  This does not include Gradle's startup (before plugin apply) or shutdown
       *  (after BuildListener#buildFinished(BuildResult) called.
       * </pre>
       */
      public Builder clearBuildTime() {
        bitField0_ = (bitField0_ & ~0x00000040);
        buildTime_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 gc_count = 12;
      private long gcCount_ ;
      /**
       * <code>optional int64 gc_count = 12;</code>
       *
       * <pre>
       * The number of garbage collections during this build
       * </pre>
       */
      public boolean hasGcCount() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int64 gc_count = 12;</code>
       *
       * <pre>
       * The number of garbage collections during this build
       * </pre>
       */
      public long getGcCount() {
        return gcCount_;
      }
      /**
       * <code>optional int64 gc_count = 12;</code>
       *
       * <pre>
       * The number of garbage collections during this build
       * </pre>
       */
      public Builder setGcCount(long value) {
        bitField0_ |= 0x00000080;
        gcCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 gc_count = 12;</code>
       *
       * <pre>
       * The number of garbage collections during this build
       * </pre>
       */
      public Builder clearGcCount() {
        bitField0_ = (bitField0_ & ~0x00000080);
        gcCount_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 gc_time = 13;
      private long gcTime_ ;
      /**
       * <code>optional int64 gc_time = 13;</code>
       *
       * <pre>
       * The time spent garbage collecting during this build.
       * </pre>
       */
      public boolean hasGcTime() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional int64 gc_time = 13;</code>
       *
       * <pre>
       * The time spent garbage collecting during this build.
       * </pre>
       */
      public long getGcTime() {
        return gcTime_;
      }
      /**
       * <code>optional int64 gc_time = 13;</code>
       *
       * <pre>
       * The time spent garbage collecting during this build.
       * </pre>
       */
      public Builder setGcTime(long value) {
        bitField0_ |= 0x00000100;
        gcTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 gc_time = 13;</code>
       *
       * <pre>
       * The time spent garbage collecting during this build.
       * </pre>
       */
      public Builder clearGcTime() {
        bitField0_ = (bitField0_ & ~0x00000100);
        gcTime_ = 0L;
        onChanged();
        return this;
      }

      // repeated .android_studio.GradleBuildProject project = 14;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject> project_ =
        java.util.Collections.emptyList();
      private void ensureProjectIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          project_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject>(project_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder> projectBuilder_;

      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject> getProjectList() {
        if (projectBuilder_ == null) {
          return java.util.Collections.unmodifiableList(project_);
        } else {
          return projectBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public int getProjectCount() {
        if (projectBuilder_ == null) {
          return project_.size();
        } else {
          return projectBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject getProject(int index) {
        if (projectBuilder_ == null) {
          return project_.get(index);
        } else {
          return projectBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder setProject(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject value) {
        if (projectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureProjectIsMutable();
          project_.set(index, value);
          onChanged();
        } else {
          projectBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder setProject(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder builderForValue) {
        if (projectBuilder_ == null) {
          ensureProjectIsMutable();
          project_.set(index, builderForValue.build());
          onChanged();
        } else {
          projectBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder addProject(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject value) {
        if (projectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureProjectIsMutable();
          project_.add(value);
          onChanged();
        } else {
          projectBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder addProject(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject value) {
        if (projectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureProjectIsMutable();
          project_.add(index, value);
          onChanged();
        } else {
          projectBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder addProject(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder builderForValue) {
        if (projectBuilder_ == null) {
          ensureProjectIsMutable();
          project_.add(builderForValue.build());
          onChanged();
        } else {
          projectBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder addProject(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder builderForValue) {
        if (projectBuilder_ == null) {
          ensureProjectIsMutable();
          project_.add(index, builderForValue.build());
          onChanged();
        } else {
          projectBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder addAllProject(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject> values) {
        if (projectBuilder_ == null) {
          ensureProjectIsMutable();
          super.addAll(values, project_);
          onChanged();
        } else {
          projectBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder clearProject() {
        if (projectBuilder_ == null) {
          project_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          projectBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public Builder removeProject(int index) {
        if (projectBuilder_ == null) {
          ensureProjectIsMutable();
          project_.remove(index);
          onChanged();
        } else {
          projectBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder getProjectBuilder(
          int index) {
        return getProjectFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder getProjectOrBuilder(
          int index) {
        if (projectBuilder_ == null) {
          return project_.get(index);  } else {
          return projectBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder> 
           getProjectOrBuilderList() {
        if (projectBuilder_ != null) {
          return projectBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(project_);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder addProjectBuilder() {
        return getProjectFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder addProjectBuilder(
          int index) {
        return getProjectFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleBuildProject project = 14;</code>
       *
       * <pre>
       * The projects that make up this multi-project build.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder> 
           getProjectBuilderList() {
        return getProjectFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder> 
          getProjectFieldBuilder() {
        if (projectBuilder_ == null) {
          projectBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder>(
                  project_,
                  ((bitField0_ & 0x00000200) == 0x00000200),
                  getParentForChildren(),
                  isClean());
          project_ = null;
        }
        return projectBuilder_;
      }

      // repeated .android_studio.GradleBuildMemorySample memory_sample = 15;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample> memorySample_ =
        java.util.Collections.emptyList();
      private void ensureMemorySampleIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          memorySample_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample>(memorySample_);
          bitField0_ |= 0x00000400;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder> memorySampleBuilder_;

      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample> getMemorySampleList() {
        if (memorySampleBuilder_ == null) {
          return java.util.Collections.unmodifiableList(memorySample_);
        } else {
          return memorySampleBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public int getMemorySampleCount() {
        if (memorySampleBuilder_ == null) {
          return memorySample_.size();
        } else {
          return memorySampleBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample getMemorySample(int index) {
        if (memorySampleBuilder_ == null) {
          return memorySample_.get(index);
        } else {
          return memorySampleBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder setMemorySample(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample value) {
        if (memorySampleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMemorySampleIsMutable();
          memorySample_.set(index, value);
          onChanged();
        } else {
          memorySampleBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder setMemorySample(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder builderForValue) {
        if (memorySampleBuilder_ == null) {
          ensureMemorySampleIsMutable();
          memorySample_.set(index, builderForValue.build());
          onChanged();
        } else {
          memorySampleBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder addMemorySample(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample value) {
        if (memorySampleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMemorySampleIsMutable();
          memorySample_.add(value);
          onChanged();
        } else {
          memorySampleBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder addMemorySample(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample value) {
        if (memorySampleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMemorySampleIsMutable();
          memorySample_.add(index, value);
          onChanged();
        } else {
          memorySampleBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder addMemorySample(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder builderForValue) {
        if (memorySampleBuilder_ == null) {
          ensureMemorySampleIsMutable();
          memorySample_.add(builderForValue.build());
          onChanged();
        } else {
          memorySampleBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder addMemorySample(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder builderForValue) {
        if (memorySampleBuilder_ == null) {
          ensureMemorySampleIsMutable();
          memorySample_.add(index, builderForValue.build());
          onChanged();
        } else {
          memorySampleBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder addAllMemorySample(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample> values) {
        if (memorySampleBuilder_ == null) {
          ensureMemorySampleIsMutable();
          super.addAll(values, memorySample_);
          onChanged();
        } else {
          memorySampleBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder clearMemorySample() {
        if (memorySampleBuilder_ == null) {
          memorySample_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
          onChanged();
        } else {
          memorySampleBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public Builder removeMemorySample(int index) {
        if (memorySampleBuilder_ == null) {
          ensureMemorySampleIsMutable();
          memorySample_.remove(index);
          onChanged();
        } else {
          memorySampleBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder getMemorySampleBuilder(
          int index) {
        return getMemorySampleFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder getMemorySampleOrBuilder(
          int index) {
        if (memorySampleBuilder_ == null) {
          return memorySample_.get(index);  } else {
          return memorySampleBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder> 
           getMemorySampleOrBuilderList() {
        if (memorySampleBuilder_ != null) {
          return memorySampleBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(memorySample_);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder addMemorySampleBuilder() {
        return getMemorySampleFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder addMemorySampleBuilder(
          int index) {
        return getMemorySampleFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleBuildMemorySample memory_sample = 15;</code>
       *
       * <pre>
       * Samples of the memory state of the daemon during the build.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder> 
           getMemorySampleBuilderList() {
        return getMemorySampleFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder> 
          getMemorySampleFieldBuilder() {
        if (memorySampleBuilder_ == null) {
          memorySampleBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder>(
                  memorySample_,
                  ((bitField0_ & 0x00000400) == 0x00000400),
                  getParentForChildren(),
                  isClean());
          memorySample_ = null;
        }
        return memorySampleBuilder_;
      }

      // repeated .android_studio.GradleBuildProfileSpan span = 16;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan> span_ =
        java.util.Collections.emptyList();
      private void ensureSpanIsMutable() {
        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
          span_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan>(span_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder> spanBuilder_;

      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan> getSpanList() {
        if (spanBuilder_ == null) {
          return java.util.Collections.unmodifiableList(span_);
        } else {
          return spanBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public int getSpanCount() {
        if (spanBuilder_ == null) {
          return span_.size();
        } else {
          return spanBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan getSpan(int index) {
        if (spanBuilder_ == null) {
          return span_.get(index);
        } else {
          return spanBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder setSpan(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan value) {
        if (spanBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSpanIsMutable();
          span_.set(index, value);
          onChanged();
        } else {
          spanBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder setSpan(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder builderForValue) {
        if (spanBuilder_ == null) {
          ensureSpanIsMutable();
          span_.set(index, builderForValue.build());
          onChanged();
        } else {
          spanBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder addSpan(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan value) {
        if (spanBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSpanIsMutable();
          span_.add(value);
          onChanged();
        } else {
          spanBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder addSpan(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan value) {
        if (spanBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSpanIsMutable();
          span_.add(index, value);
          onChanged();
        } else {
          spanBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder addSpan(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder builderForValue) {
        if (spanBuilder_ == null) {
          ensureSpanIsMutable();
          span_.add(builderForValue.build());
          onChanged();
        } else {
          spanBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder addSpan(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder builderForValue) {
        if (spanBuilder_ == null) {
          ensureSpanIsMutable();
          span_.add(index, builderForValue.build());
          onChanged();
        } else {
          spanBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder addAllSpan(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan> values) {
        if (spanBuilder_ == null) {
          ensureSpanIsMutable();
          super.addAll(values, span_);
          onChanged();
        } else {
          spanBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder clearSpan() {
        if (spanBuilder_ == null) {
          span_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          spanBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public Builder removeSpan(int index) {
        if (spanBuilder_ == null) {
          ensureSpanIsMutable();
          span_.remove(index);
          onChanged();
        } else {
          spanBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder getSpanBuilder(
          int index) {
        return getSpanFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder getSpanOrBuilder(
          int index) {
        if (spanBuilder_ == null) {
          return span_.get(index);  } else {
          return spanBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder> 
           getSpanOrBuilderList() {
        if (spanBuilder_ != null) {
          return spanBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(span_);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder addSpanBuilder() {
        return getSpanFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder addSpanBuilder(
          int index) {
        return getSpanFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleBuildProfileSpan span = 16;</code>
       *
       * <pre>
       * The fine-grained execution spans which record granular timings.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder> 
           getSpanBuilderList() {
        return getSpanFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder> 
          getSpanFieldBuilder() {
        if (spanBuilder_ == null) {
          spanBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder>(
                  span_,
                  ((bitField0_ & 0x00000800) == 0x00000800),
                  getParentForChildren(),
                  isClean());
          span_ = null;
        }
        return spanBuilder_;
      }

      // optional .android_studio.InstantRunStatus instant_run_status = 17;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus instantRunStatus_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatusOrBuilder> instantRunStatusBuilder_;
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      public boolean hasInstantRunStatus() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus getInstantRunStatus() {
        if (instantRunStatusBuilder_ == null) {
          return instantRunStatus_;
        } else {
          return instantRunStatusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      public Builder setInstantRunStatus(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus value) {
        if (instantRunStatusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          instantRunStatus_ = value;
          onChanged();
        } else {
          instantRunStatusBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      public Builder setInstantRunStatus(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.Builder builderForValue) {
        if (instantRunStatusBuilder_ == null) {
          instantRunStatus_ = builderForValue.build();
          onChanged();
        } else {
          instantRunStatusBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      public Builder mergeInstantRunStatus(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus value) {
        if (instantRunStatusBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000) &&
              instantRunStatus_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDefaultInstance()) {
            instantRunStatus_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.newBuilder(instantRunStatus_).mergeFrom(value).buildPartial();
          } else {
            instantRunStatus_ = value;
          }
          onChanged();
        } else {
          instantRunStatusBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      public Builder clearInstantRunStatus() {
        if (instantRunStatusBuilder_ == null) {
          instantRunStatus_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDefaultInstance();
          onChanged();
        } else {
          instantRunStatusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.Builder getInstantRunStatusBuilder() {
        bitField0_ |= 0x00001000;
        onChanged();
        return getInstantRunStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatusOrBuilder getInstantRunStatusOrBuilder() {
        if (instantRunStatusBuilder_ != null) {
          return instantRunStatusBuilder_.getMessageOrBuilder();
        } else {
          return instantRunStatus_;
        }
      }
      /**
       * <code>optional .android_studio.InstantRunStatus instant_run_status = 17;</code>
       *
       * <pre>
       * For instant run builds: the resulting instant run build info.
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatusOrBuilder> 
          getInstantRunStatusFieldBuilder() {
        if (instantRunStatusBuilder_ == null) {
          instantRunStatusBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatusOrBuilder>(
                  instantRunStatus_,
                  getParentForChildren(),
                  isClean());
          instantRunStatus_ = null;
        }
        return instantRunStatusBuilder_;
      }

      // optional string project_id = 18;
      private java.lang.Object projectId_ = "";
      /**
       * <code>optional string project_id = 18;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the root project path.
       *  This exists to allow multiple instant run builds in one project by one
       *  user to be correlated.
       * 
       *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
       *  identifier. It is anonymized and is unique per user, but has a 1-N
       *  relation.
       * </pre>
       */
      public boolean hasProjectId() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional string project_id = 18;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the root project path.
       *  This exists to allow multiple instant run builds in one project by one
       *  user to be correlated.
       * 
       *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
       *  identifier. It is anonymized and is unique per user, but has a 1-N
       *  relation.
       * </pre>
       */
      public java.lang.String getProjectId() {
        java.lang.Object ref = projectId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          projectId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string project_id = 18;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the root project path.
       *  This exists to allow multiple instant run builds in one project by one
       *  user to be correlated.
       * 
       *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
       *  identifier. It is anonymized and is unique per user, but has a 1-N
       *  relation.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getProjectIdBytes() {
        java.lang.Object ref = projectId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          projectId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string project_id = 18;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the root project path.
       *  This exists to allow multiple instant run builds in one project by one
       *  user to be correlated.
       * 
       *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
       *  identifier. It is anonymized and is unique per user, but has a 1-N
       *  relation.
       * </pre>
       */
      public Builder setProjectId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        projectId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string project_id = 18;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the root project path.
       *  This exists to allow multiple instant run builds in one project by one
       *  user to be correlated.
       * 
       *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
       *  identifier. It is anonymized and is unique per user, but has a 1-N
       *  relation.
       * </pre>
       */
      public Builder clearProjectId() {
        bitField0_ = (bitField0_ & ~0x00002000);
        projectId_ = getDefaultInstance().getProjectId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string project_id = 18;</code>
       *
       * <pre>
       * Client-side salted, sha256 of the root project path.
       *  This exists to allow multiple instant run builds in one project by one
       *  user to be correlated.
       * 
       *  The salt is rotated every 28 days, so it is not a permenant pseudonymous
       *  identifier. It is anonymized and is unique per user, but has a 1-N
       *  relation.
       * </pre>
       */
      public Builder setProjectIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        projectId_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleBuildProfile)
    }

    static {
      defaultInstance = new GradleBuildProfile(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleBuildProfile)
  }

  public interface GradleBuildProjectOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 id = 1;
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier, local to the containing AndroidStudioEvent, for the project.
     *  Can be used to correlate spans (GradleBuildProfileSpan) with this
     *  project for this build only. Is created by sequentially
     *  numbering projects as they are encountered.
     *  Is not stable across build invocations.
     * </pre>
     */
    boolean hasId();
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier, local to the containing AndroidStudioEvent, for the project.
     *  Can be used to correlate spans (GradleBuildProfileSpan) with this
     *  project for this build only. Is created by sequentially
     *  numbering projects as they are encountered.
     *  Is not stable across build invocations.
     * </pre>
     */
    long getId();

    // optional string android_plugin_version = 2;
    /**
     * <code>optional string android_plugin_version = 2;</code>
     *
     * <pre>
     * Version of our Android Gradle plugin supporting android builds.
     *  e.g. '2.0-beta1'
     *  For the experimental plugin this is the gradle-core version.
     * </pre>
     */
    boolean hasAndroidPluginVersion();
    /**
     * <code>optional string android_plugin_version = 2;</code>
     *
     * <pre>
     * Version of our Android Gradle plugin supporting android builds.
     *  e.g. '2.0-beta1'
     *  For the experimental plugin this is the gradle-core version.
     * </pre>
     */
    java.lang.String getAndroidPluginVersion();
    /**
     * <code>optional string android_plugin_version = 2;</code>
     *
     * <pre>
     * Version of our Android Gradle plugin supporting android builds.
     *  e.g. '2.0-beta1'
     *  For the experimental plugin this is the gradle-core version.
     * </pre>
     */
    com.google.protobuf.ByteString
        getAndroidPluginVersionBytes();

    // optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;
    /**
     * <code>optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;</code>
     *
     * <pre>
     * Which Android Gradle plugin is used.
     * </pre>
     */
    boolean hasAndroidPlugin();
    /**
     * <code>optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;</code>
     *
     * <pre>
     * Which Android Gradle plugin is used.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType getAndroidPlugin();

    // optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;
    /**
     * <code>optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;</code>
     *
     * <pre>
     * Which plugin generation is used.
     * </pre>
     */
    boolean hasPluginGeneration();
    /**
     * <code>optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;</code>
     *
     * <pre>
     * Which plugin generation is used.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration getPluginGeneration();

    // optional string build_tools_version = 5;
    /**
     * <code>optional string build_tools_version = 5;</code>
     *
     * <pre>
     * The build tools version used, e.g. '24.0.0 rc2'
     * </pre>
     */
    boolean hasBuildToolsVersion();
    /**
     * <code>optional string build_tools_version = 5;</code>
     *
     * <pre>
     * The build tools version used, e.g. '24.0.0 rc2'
     * </pre>
     */
    java.lang.String getBuildToolsVersion();
    /**
     * <code>optional string build_tools_version = 5;</code>
     *
     * <pre>
     * The build tools version used, e.g. '24.0.0 rc2'
     * </pre>
     */
    com.google.protobuf.ByteString
        getBuildToolsVersionBytes();

    // optional .android_studio.GradleBuildProjectMetrics metrics = 6;
    /**
     * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
     *
     * <pre>
     * Statistics about the project build.
     *  Will be used to characterize and bucket projects for subgroup analysis.
     * </pre>
     */
    boolean hasMetrics();
    /**
     * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
     *
     * <pre>
     * Statistics about the project build.
     *  Will be used to characterize and bucket projects for subgroup analysis.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics getMetrics();
    /**
     * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
     *
     * <pre>
     * Statistics about the project build.
     *  Will be used to characterize and bucket projects for subgroup analysis.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetricsOrBuilder getMetricsOrBuilder();

    // repeated .android_studio.GradleBuildVariant variant = 7;
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant> 
        getVariantList();
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant getVariant(int index);
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    int getVariantCount();
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder> 
        getVariantOrBuilderList();
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder getVariantOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code android_studio.GradleBuildProject}
   */
  public static final class GradleBuildProject extends
      com.google.protobuf.GeneratedMessage
      implements GradleBuildProjectOrBuilder {
    // Use GradleBuildProject.newBuilder() to construct.
    private GradleBuildProject(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleBuildProject(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleBuildProject defaultInstance;
    public static GradleBuildProject getDefaultInstance() {
      return defaultInstance;
    }

    public GradleBuildProject getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleBuildProject(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt64();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              androidPluginVersion_ = input.readBytes();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                androidPlugin_ = value;
              }
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration value = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                pluginGeneration_ = value;
              }
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              buildToolsVersion_ = input.readBytes();
              break;
            }
            case 50: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = metrics_.toBuilder();
              }
              metrics_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(metrics_);
                metrics_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                variant_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant>();
                mutable_bitField0_ |= 0x00000040;
              }
              variant_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          variant_ = java.util.Collections.unmodifiableList(variant_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProject_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProject_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleBuildProject> PARSER =
        new com.google.protobuf.AbstractParser<GradleBuildProject>() {
      public GradleBuildProject parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleBuildProject(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleBuildProject> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.GradleBuildProject.PluginType}
     */
    public enum PluginType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_PLUGIN_TYPE = 0;</code>
       */
      UNKNOWN_PLUGIN_TYPE(0, 0),
      /**
       * <code>APPLICATION = 1;</code>
       *
       * <pre>
       * The 'com.android.application' or 'com.android.model.application' plugins.
       * </pre>
       */
      APPLICATION(1, 1),
      /**
       * <code>LIBRARY = 2;</code>
       *
       * <pre>
       * The 'com.android.library' or 'com.android.model.library' plugins.
       * </pre>
       */
      LIBRARY(2, 2),
      /**
       * <code>TEST = 3;</code>
       *
       * <pre>
       * The 'com.android.test' plugin.
       * </pre>
       */
      TEST(3, 3),
      ;

      /**
       * <code>UNKNOWN_PLUGIN_TYPE = 0;</code>
       */
      public static final int UNKNOWN_PLUGIN_TYPE_VALUE = 0;
      /**
       * <code>APPLICATION = 1;</code>
       *
       * <pre>
       * The 'com.android.application' or 'com.android.model.application' plugins.
       * </pre>
       */
      public static final int APPLICATION_VALUE = 1;
      /**
       * <code>LIBRARY = 2;</code>
       *
       * <pre>
       * The 'com.android.library' or 'com.android.model.library' plugins.
       * </pre>
       */
      public static final int LIBRARY_VALUE = 2;
      /**
       * <code>TEST = 3;</code>
       *
       * <pre>
       * The 'com.android.test' plugin.
       * </pre>
       */
      public static final int TEST_VALUE = 3;


      public final int getNumber() { return value; }

      public static PluginType valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_PLUGIN_TYPE;
          case 1: return APPLICATION;
          case 2: return LIBRARY;
          case 3: return TEST;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<PluginType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<PluginType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<PluginType>() {
              public PluginType findValueByNumber(int number) {
                return PluginType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.getDescriptor().getEnumTypes().get(0);
      }

      private static final PluginType[] VALUES = values();

      public static PluginType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private PluginType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.GradleBuildProject.PluginType)
    }

    /**
     * Protobuf enum {@code android_studio.GradleBuildProject.PluginGeneration}
     */
    public enum PluginGeneration
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_PLUGIN_GENERATION = 0;</code>
       */
      UNKNOWN_PLUGIN_GENERATION(0, 0),
      /**
       * <code>FIRST = 1;</code>
       *
       * <pre>
       * The 'com.android.[application,library,test] plugins.
       * </pre>
       */
      FIRST(1, 1),
      /**
       * <code>COMPONENT_MODEL = 2;</code>
       *
       * <pre>
       * The 'com.android.model.[application,library]' plugins
       * </pre>
       */
      COMPONENT_MODEL(2, 2),
      ;

      /**
       * <code>UNKNOWN_PLUGIN_GENERATION = 0;</code>
       */
      public static final int UNKNOWN_PLUGIN_GENERATION_VALUE = 0;
      /**
       * <code>FIRST = 1;</code>
       *
       * <pre>
       * The 'com.android.[application,library,test] plugins.
       * </pre>
       */
      public static final int FIRST_VALUE = 1;
      /**
       * <code>COMPONENT_MODEL = 2;</code>
       *
       * <pre>
       * The 'com.android.model.[application,library]' plugins
       * </pre>
       */
      public static final int COMPONENT_MODEL_VALUE = 2;


      public final int getNumber() { return value; }

      public static PluginGeneration valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_PLUGIN_GENERATION;
          case 1: return FIRST;
          case 2: return COMPONENT_MODEL;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<PluginGeneration>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<PluginGeneration>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<PluginGeneration>() {
              public PluginGeneration findValueByNumber(int number) {
                return PluginGeneration.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.getDescriptor().getEnumTypes().get(1);
      }

      private static final PluginGeneration[] VALUES = values();

      public static PluginGeneration valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private PluginGeneration(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.GradleBuildProject.PluginGeneration)
    }

    private int bitField0_;
    // optional int64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private long id_;
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier, local to the containing AndroidStudioEvent, for the project.
     *  Can be used to correlate spans (GradleBuildProfileSpan) with this
     *  project for this build only. Is created by sequentially
     *  numbering projects as they are encountered.
     *  Is not stable across build invocations.
     * </pre>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier, local to the containing AndroidStudioEvent, for the project.
     *  Can be used to correlate spans (GradleBuildProfileSpan) with this
     *  project for this build only. Is created by sequentially
     *  numbering projects as they are encountered.
     *  Is not stable across build invocations.
     * </pre>
     */
    public long getId() {
      return id_;
    }

    // optional string android_plugin_version = 2;
    public static final int ANDROID_PLUGIN_VERSION_FIELD_NUMBER = 2;
    private java.lang.Object androidPluginVersion_;
    /**
     * <code>optional string android_plugin_version = 2;</code>
     *
     * <pre>
     * Version of our Android Gradle plugin supporting android builds.
     *  e.g. '2.0-beta1'
     *  For the experimental plugin this is the gradle-core version.
     * </pre>
     */
    public boolean hasAndroidPluginVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string android_plugin_version = 2;</code>
     *
     * <pre>
     * Version of our Android Gradle plugin supporting android builds.
     *  e.g. '2.0-beta1'
     *  For the experimental plugin this is the gradle-core version.
     * </pre>
     */
    public java.lang.String getAndroidPluginVersion() {
      java.lang.Object ref = androidPluginVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          androidPluginVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string android_plugin_version = 2;</code>
     *
     * <pre>
     * Version of our Android Gradle plugin supporting android builds.
     *  e.g. '2.0-beta1'
     *  For the experimental plugin this is the gradle-core version.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getAndroidPluginVersionBytes() {
      java.lang.Object ref = androidPluginVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        androidPluginVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;
    public static final int ANDROID_PLUGIN_FIELD_NUMBER = 3;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType androidPlugin_;
    /**
     * <code>optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;</code>
     *
     * <pre>
     * Which Android Gradle plugin is used.
     * </pre>
     */
    public boolean hasAndroidPlugin() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;</code>
     *
     * <pre>
     * Which Android Gradle plugin is used.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType getAndroidPlugin() {
      return androidPlugin_;
    }

    // optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;
    public static final int PLUGIN_GENERATION_FIELD_NUMBER = 4;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration pluginGeneration_;
    /**
     * <code>optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;</code>
     *
     * <pre>
     * Which plugin generation is used.
     * </pre>
     */
    public boolean hasPluginGeneration() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;</code>
     *
     * <pre>
     * Which plugin generation is used.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration getPluginGeneration() {
      return pluginGeneration_;
    }

    // optional string build_tools_version = 5;
    public static final int BUILD_TOOLS_VERSION_FIELD_NUMBER = 5;
    private java.lang.Object buildToolsVersion_;
    /**
     * <code>optional string build_tools_version = 5;</code>
     *
     * <pre>
     * The build tools version used, e.g. '24.0.0 rc2'
     * </pre>
     */
    public boolean hasBuildToolsVersion() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string build_tools_version = 5;</code>
     *
     * <pre>
     * The build tools version used, e.g. '24.0.0 rc2'
     * </pre>
     */
    public java.lang.String getBuildToolsVersion() {
      java.lang.Object ref = buildToolsVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          buildToolsVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string build_tools_version = 5;</code>
     *
     * <pre>
     * The build tools version used, e.g. '24.0.0 rc2'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getBuildToolsVersionBytes() {
      java.lang.Object ref = buildToolsVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        buildToolsVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .android_studio.GradleBuildProjectMetrics metrics = 6;
    public static final int METRICS_FIELD_NUMBER = 6;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics metrics_;
    /**
     * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
     *
     * <pre>
     * Statistics about the project build.
     *  Will be used to characterize and bucket projects for subgroup analysis.
     * </pre>
     */
    public boolean hasMetrics() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
     *
     * <pre>
     * Statistics about the project build.
     *  Will be used to characterize and bucket projects for subgroup analysis.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics getMetrics() {
      return metrics_;
    }
    /**
     * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
     *
     * <pre>
     * Statistics about the project build.
     *  Will be used to characterize and bucket projects for subgroup analysis.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetricsOrBuilder getMetricsOrBuilder() {
      return metrics_;
    }

    // repeated .android_studio.GradleBuildVariant variant = 7;
    public static final int VARIANT_FIELD_NUMBER = 7;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant> variant_;
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant> getVariantList() {
      return variant_;
    }
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder> 
        getVariantOrBuilderList() {
      return variant_;
    }
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    public int getVariantCount() {
      return variant_.size();
    }
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant getVariant(int index) {
      return variant_.get(index);
    }
    /**
     * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
     *
     * <pre>
     * The variants in this project
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder getVariantOrBuilder(
        int index) {
      return variant_.get(index);
    }

    private void initFields() {
      id_ = 0L;
      androidPluginVersion_ = "";
      androidPlugin_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType.UNKNOWN_PLUGIN_TYPE;
      pluginGeneration_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration.UNKNOWN_PLUGIN_GENERATION;
      buildToolsVersion_ = "";
      metrics_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.getDefaultInstance();
      variant_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getAndroidPluginVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, androidPlugin_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(4, pluginGeneration_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getBuildToolsVersionBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, metrics_);
      }
      for (int i = 0; i < variant_.size(); i++) {
        output.writeMessage(7, variant_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getAndroidPluginVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, androidPlugin_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, pluginGeneration_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getBuildToolsVersionBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, metrics_);
      }
      for (int i = 0; i < variant_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, variant_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleBuildProject}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProject_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProject_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getMetricsFieldBuilder();
          getVariantFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        androidPluginVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        androidPlugin_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType.UNKNOWN_PLUGIN_TYPE;
        bitField0_ = (bitField0_ & ~0x00000004);
        pluginGeneration_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration.UNKNOWN_PLUGIN_GENERATION;
        bitField0_ = (bitField0_ & ~0x00000008);
        buildToolsVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        if (metricsBuilder_ == null) {
          metrics_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.getDefaultInstance();
        } else {
          metricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (variantBuilder_ == null) {
          variant_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          variantBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProject_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.androidPluginVersion_ = androidPluginVersion_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.androidPlugin_ = androidPlugin_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.pluginGeneration_ = pluginGeneration_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.buildToolsVersion_ = buildToolsVersion_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (metricsBuilder_ == null) {
          result.metrics_ = metrics_;
        } else {
          result.metrics_ = metricsBuilder_.build();
        }
        if (variantBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            variant_ = java.util.Collections.unmodifiableList(variant_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.variant_ = variant_;
        } else {
          result.variant_ = variantBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasAndroidPluginVersion()) {
          bitField0_ |= 0x00000002;
          androidPluginVersion_ = other.androidPluginVersion_;
          onChanged();
        }
        if (other.hasAndroidPlugin()) {
          setAndroidPlugin(other.getAndroidPlugin());
        }
        if (other.hasPluginGeneration()) {
          setPluginGeneration(other.getPluginGeneration());
        }
        if (other.hasBuildToolsVersion()) {
          bitField0_ |= 0x00000010;
          buildToolsVersion_ = other.buildToolsVersion_;
          onChanged();
        }
        if (other.hasMetrics()) {
          mergeMetrics(other.getMetrics());
        }
        if (variantBuilder_ == null) {
          if (!other.variant_.isEmpty()) {
            if (variant_.isEmpty()) {
              variant_ = other.variant_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureVariantIsMutable();
              variant_.addAll(other.variant_);
            }
            onChanged();
          }
        } else {
          if (!other.variant_.isEmpty()) {
            if (variantBuilder_.isEmpty()) {
              variantBuilder_.dispose();
              variantBuilder_ = null;
              variant_ = other.variant_;
              bitField0_ = (bitField0_ & ~0x00000040);
              variantBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getVariantFieldBuilder() : null;
            } else {
              variantBuilder_.addAllMessages(other.variant_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 id = 1;
      private long id_ ;
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier, local to the containing AndroidStudioEvent, for the project.
       *  Can be used to correlate spans (GradleBuildProfileSpan) with this
       *  project for this build only. Is created by sequentially
       *  numbering projects as they are encountered.
       *  Is not stable across build invocations.
       * </pre>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier, local to the containing AndroidStudioEvent, for the project.
       *  Can be used to correlate spans (GradleBuildProfileSpan) with this
       *  project for this build only. Is created by sequentially
       *  numbering projects as they are encountered.
       *  Is not stable across build invocations.
       * </pre>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier, local to the containing AndroidStudioEvent, for the project.
       *  Can be used to correlate spans (GradleBuildProfileSpan) with this
       *  project for this build only. Is created by sequentially
       *  numbering projects as they are encountered.
       *  Is not stable across build invocations.
       * </pre>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier, local to the containing AndroidStudioEvent, for the project.
       *  Can be used to correlate spans (GradleBuildProfileSpan) with this
       *  project for this build only. Is created by sequentially
       *  numbering projects as they are encountered.
       *  Is not stable across build invocations.
       * </pre>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        onChanged();
        return this;
      }

      // optional string android_plugin_version = 2;
      private java.lang.Object androidPluginVersion_ = "";
      /**
       * <code>optional string android_plugin_version = 2;</code>
       *
       * <pre>
       * Version of our Android Gradle plugin supporting android builds.
       *  e.g. '2.0-beta1'
       *  For the experimental plugin this is the gradle-core version.
       * </pre>
       */
      public boolean hasAndroidPluginVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string android_plugin_version = 2;</code>
       *
       * <pre>
       * Version of our Android Gradle plugin supporting android builds.
       *  e.g. '2.0-beta1'
       *  For the experimental plugin this is the gradle-core version.
       * </pre>
       */
      public java.lang.String getAndroidPluginVersion() {
        java.lang.Object ref = androidPluginVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          androidPluginVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string android_plugin_version = 2;</code>
       *
       * <pre>
       * Version of our Android Gradle plugin supporting android builds.
       *  e.g. '2.0-beta1'
       *  For the experimental plugin this is the gradle-core version.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getAndroidPluginVersionBytes() {
        java.lang.Object ref = androidPluginVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          androidPluginVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string android_plugin_version = 2;</code>
       *
       * <pre>
       * Version of our Android Gradle plugin supporting android builds.
       *  e.g. '2.0-beta1'
       *  For the experimental plugin this is the gradle-core version.
       * </pre>
       */
      public Builder setAndroidPluginVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        androidPluginVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string android_plugin_version = 2;</code>
       *
       * <pre>
       * Version of our Android Gradle plugin supporting android builds.
       *  e.g. '2.0-beta1'
       *  For the experimental plugin this is the gradle-core version.
       * </pre>
       */
      public Builder clearAndroidPluginVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        androidPluginVersion_ = getDefaultInstance().getAndroidPluginVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string android_plugin_version = 2;</code>
       *
       * <pre>
       * Version of our Android Gradle plugin supporting android builds.
       *  e.g. '2.0-beta1'
       *  For the experimental plugin this is the gradle-core version.
       * </pre>
       */
      public Builder setAndroidPluginVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        androidPluginVersion_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType androidPlugin_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType.UNKNOWN_PLUGIN_TYPE;
      /**
       * <code>optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;</code>
       *
       * <pre>
       * Which Android Gradle plugin is used.
       * </pre>
       */
      public boolean hasAndroidPlugin() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;</code>
       *
       * <pre>
       * Which Android Gradle plugin is used.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType getAndroidPlugin() {
        return androidPlugin_;
      }
      /**
       * <code>optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;</code>
       *
       * <pre>
       * Which Android Gradle plugin is used.
       * </pre>
       */
      public Builder setAndroidPlugin(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        androidPlugin_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProject.PluginType android_plugin = 3;</code>
       *
       * <pre>
       * Which Android Gradle plugin is used.
       * </pre>
       */
      public Builder clearAndroidPlugin() {
        bitField0_ = (bitField0_ & ~0x00000004);
        androidPlugin_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginType.UNKNOWN_PLUGIN_TYPE;
        onChanged();
        return this;
      }

      // optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration pluginGeneration_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration.UNKNOWN_PLUGIN_GENERATION;
      /**
       * <code>optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;</code>
       *
       * <pre>
       * Which plugin generation is used.
       * </pre>
       */
      public boolean hasPluginGeneration() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;</code>
       *
       * <pre>
       * Which plugin generation is used.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration getPluginGeneration() {
        return pluginGeneration_;
      }
      /**
       * <code>optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;</code>
       *
       * <pre>
       * Which plugin generation is used.
       * </pre>
       */
      public Builder setPluginGeneration(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        pluginGeneration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProject.PluginGeneration plugin_generation = 4;</code>
       *
       * <pre>
       * Which plugin generation is used.
       * </pre>
       */
      public Builder clearPluginGeneration() {
        bitField0_ = (bitField0_ & ~0x00000008);
        pluginGeneration_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProject.PluginGeneration.UNKNOWN_PLUGIN_GENERATION;
        onChanged();
        return this;
      }

      // optional string build_tools_version = 5;
      private java.lang.Object buildToolsVersion_ = "";
      /**
       * <code>optional string build_tools_version = 5;</code>
       *
       * <pre>
       * The build tools version used, e.g. '24.0.0 rc2'
       * </pre>
       */
      public boolean hasBuildToolsVersion() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string build_tools_version = 5;</code>
       *
       * <pre>
       * The build tools version used, e.g. '24.0.0 rc2'
       * </pre>
       */
      public java.lang.String getBuildToolsVersion() {
        java.lang.Object ref = buildToolsVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          buildToolsVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string build_tools_version = 5;</code>
       *
       * <pre>
       * The build tools version used, e.g. '24.0.0 rc2'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getBuildToolsVersionBytes() {
        java.lang.Object ref = buildToolsVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          buildToolsVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string build_tools_version = 5;</code>
       *
       * <pre>
       * The build tools version used, e.g. '24.0.0 rc2'
       * </pre>
       */
      public Builder setBuildToolsVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        buildToolsVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_tools_version = 5;</code>
       *
       * <pre>
       * The build tools version used, e.g. '24.0.0 rc2'
       * </pre>
       */
      public Builder clearBuildToolsVersion() {
        bitField0_ = (bitField0_ & ~0x00000010);
        buildToolsVersion_ = getDefaultInstance().getBuildToolsVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string build_tools_version = 5;</code>
       *
       * <pre>
       * The build tools version used, e.g. '24.0.0 rc2'
       * </pre>
       */
      public Builder setBuildToolsVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        buildToolsVersion_ = value;
        onChanged();
        return this;
      }

      // optional .android_studio.GradleBuildProjectMetrics metrics = 6;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics metrics_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetricsOrBuilder> metricsBuilder_;
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      public boolean hasMetrics() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics getMetrics() {
        if (metricsBuilder_ == null) {
          return metrics_;
        } else {
          return metricsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      public Builder setMetrics(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics value) {
        if (metricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          metrics_ = value;
          onChanged();
        } else {
          metricsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      public Builder setMetrics(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.Builder builderForValue) {
        if (metricsBuilder_ == null) {
          metrics_ = builderForValue.build();
          onChanged();
        } else {
          metricsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      public Builder mergeMetrics(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics value) {
        if (metricsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              metrics_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.getDefaultInstance()) {
            metrics_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.newBuilder(metrics_).mergeFrom(value).buildPartial();
          } else {
            metrics_ = value;
          }
          onChanged();
        } else {
          metricsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      public Builder clearMetrics() {
        if (metricsBuilder_ == null) {
          metrics_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.getDefaultInstance();
          onChanged();
        } else {
          metricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.Builder getMetricsBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getMetricsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetricsOrBuilder getMetricsOrBuilder() {
        if (metricsBuilder_ != null) {
          return metricsBuilder_.getMessageOrBuilder();
        } else {
          return metrics_;
        }
      }
      /**
       * <code>optional .android_studio.GradleBuildProjectMetrics metrics = 6;</code>
       *
       * <pre>
       * Statistics about the project build.
       *  Will be used to characterize and bucket projects for subgroup analysis.
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetricsOrBuilder> 
          getMetricsFieldBuilder() {
        if (metricsBuilder_ == null) {
          metricsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetricsOrBuilder>(
                  metrics_,
                  getParentForChildren(),
                  isClean());
          metrics_ = null;
        }
        return metricsBuilder_;
      }

      // repeated .android_studio.GradleBuildVariant variant = 7;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant> variant_ =
        java.util.Collections.emptyList();
      private void ensureVariantIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          variant_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant>(variant_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder> variantBuilder_;

      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant> getVariantList() {
        if (variantBuilder_ == null) {
          return java.util.Collections.unmodifiableList(variant_);
        } else {
          return variantBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public int getVariantCount() {
        if (variantBuilder_ == null) {
          return variant_.size();
        } else {
          return variantBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant getVariant(int index) {
        if (variantBuilder_ == null) {
          return variant_.get(index);
        } else {
          return variantBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder setVariant(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant value) {
        if (variantBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVariantIsMutable();
          variant_.set(index, value);
          onChanged();
        } else {
          variantBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder setVariant(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder builderForValue) {
        if (variantBuilder_ == null) {
          ensureVariantIsMutable();
          variant_.set(index, builderForValue.build());
          onChanged();
        } else {
          variantBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder addVariant(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant value) {
        if (variantBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVariantIsMutable();
          variant_.add(value);
          onChanged();
        } else {
          variantBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder addVariant(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant value) {
        if (variantBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVariantIsMutable();
          variant_.add(index, value);
          onChanged();
        } else {
          variantBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder addVariant(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder builderForValue) {
        if (variantBuilder_ == null) {
          ensureVariantIsMutable();
          variant_.add(builderForValue.build());
          onChanged();
        } else {
          variantBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder addVariant(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder builderForValue) {
        if (variantBuilder_ == null) {
          ensureVariantIsMutable();
          variant_.add(index, builderForValue.build());
          onChanged();
        } else {
          variantBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder addAllVariant(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant> values) {
        if (variantBuilder_ == null) {
          ensureVariantIsMutable();
          super.addAll(values, variant_);
          onChanged();
        } else {
          variantBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder clearVariant() {
        if (variantBuilder_ == null) {
          variant_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          variantBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public Builder removeVariant(int index) {
        if (variantBuilder_ == null) {
          ensureVariantIsMutable();
          variant_.remove(index);
          onChanged();
        } else {
          variantBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder getVariantBuilder(
          int index) {
        return getVariantFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder getVariantOrBuilder(
          int index) {
        if (variantBuilder_ == null) {
          return variant_.get(index);  } else {
          return variantBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder> 
           getVariantOrBuilderList() {
        if (variantBuilder_ != null) {
          return variantBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(variant_);
        }
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder addVariantBuilder() {
        return getVariantFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder addVariantBuilder(
          int index) {
        return getVariantFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GradleBuildVariant variant = 7;</code>
       *
       * <pre>
       * The variants in this project
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder> 
           getVariantBuilderList() {
        return getVariantFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder> 
          getVariantFieldBuilder() {
        if (variantBuilder_ == null) {
          variantBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder>(
                  variant_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          variant_ = null;
        }
        return variantBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleBuildProject)
    }

    static {
      defaultInstance = new GradleBuildProject(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleBuildProject)
  }

  public interface GradleBuildProjectMetricsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 metrics_time_ns = 1;
    /**
     * <code>optional int64 metrics_time_ns = 1;</code>
     *
     * <pre>
     * The time taken to collect these metrics
     * </pre>
     */
    boolean hasMetricsTimeNs();
    /**
     * <code>optional int64 metrics_time_ns = 1;</code>
     *
     * <pre>
     * The time taken to collect these metrics
     * </pre>
     */
    long getMetricsTimeNs();

    // optional int64 apk_size = 2;
    /**
     * <code>optional int64 apk_size = 2;</code>
     *
     * <pre>
     * The size of the APK built, if relevant.
     * </pre>
     */
    boolean hasApkSize();
    /**
     * <code>optional int64 apk_size = 2;</code>
     *
     * <pre>
     * The size of the APK built, if relevant.
     * </pre>
     */
    long getApkSize();

    // optional int64 resources_ap_size = 3;
    /**
     * <code>optional int64 resources_ap_size = 3;</code>
     *
     * <pre>
     * The size of the resources_ap included in that apk.
     * </pre>
     */
    boolean hasResourcesApSize();
    /**
     * <code>optional int64 resources_ap_size = 3;</code>
     *
     * <pre>
     * The size of the resources_ap included in that apk.
     * </pre>
     */
    long getResourcesApSize();
  }
  /**
   * Protobuf type {@code android_studio.GradleBuildProjectMetrics}
   */
  public static final class GradleBuildProjectMetrics extends
      com.google.protobuf.GeneratedMessage
      implements GradleBuildProjectMetricsOrBuilder {
    // Use GradleBuildProjectMetrics.newBuilder() to construct.
    private GradleBuildProjectMetrics(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleBuildProjectMetrics(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleBuildProjectMetrics defaultInstance;
    public static GradleBuildProjectMetrics getDefaultInstance() {
      return defaultInstance;
    }

    public GradleBuildProjectMetrics getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleBuildProjectMetrics(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              metricsTimeNs_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              apkSize_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              resourcesApSize_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProjectMetrics_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProjectMetrics_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleBuildProjectMetrics> PARSER =
        new com.google.protobuf.AbstractParser<GradleBuildProjectMetrics>() {
      public GradleBuildProjectMetrics parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleBuildProjectMetrics(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleBuildProjectMetrics> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 metrics_time_ns = 1;
    public static final int METRICS_TIME_NS_FIELD_NUMBER = 1;
    private long metricsTimeNs_;
    /**
     * <code>optional int64 metrics_time_ns = 1;</code>
     *
     * <pre>
     * The time taken to collect these metrics
     * </pre>
     */
    public boolean hasMetricsTimeNs() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 metrics_time_ns = 1;</code>
     *
     * <pre>
     * The time taken to collect these metrics
     * </pre>
     */
    public long getMetricsTimeNs() {
      return metricsTimeNs_;
    }

    // optional int64 apk_size = 2;
    public static final int APK_SIZE_FIELD_NUMBER = 2;
    private long apkSize_;
    /**
     * <code>optional int64 apk_size = 2;</code>
     *
     * <pre>
     * The size of the APK built, if relevant.
     * </pre>
     */
    public boolean hasApkSize() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 apk_size = 2;</code>
     *
     * <pre>
     * The size of the APK built, if relevant.
     * </pre>
     */
    public long getApkSize() {
      return apkSize_;
    }

    // optional int64 resources_ap_size = 3;
    public static final int RESOURCES_AP_SIZE_FIELD_NUMBER = 3;
    private long resourcesApSize_;
    /**
     * <code>optional int64 resources_ap_size = 3;</code>
     *
     * <pre>
     * The size of the resources_ap included in that apk.
     * </pre>
     */
    public boolean hasResourcesApSize() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 resources_ap_size = 3;</code>
     *
     * <pre>
     * The size of the resources_ap included in that apk.
     * </pre>
     */
    public long getResourcesApSize() {
      return resourcesApSize_;
    }

    private void initFields() {
      metricsTimeNs_ = 0L;
      apkSize_ = 0L;
      resourcesApSize_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, metricsTimeNs_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, apkSize_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, resourcesApSize_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, metricsTimeNs_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, apkSize_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, resourcesApSize_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleBuildProjectMetrics}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetricsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProjectMetrics_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProjectMetrics_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        metricsTimeNs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        apkSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        resourcesApSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProjectMetrics_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.metricsTimeNs_ = metricsTimeNs_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.apkSize_ = apkSize_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.resourcesApSize_ = resourcesApSize_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics.getDefaultInstance()) return this;
        if (other.hasMetricsTimeNs()) {
          setMetricsTimeNs(other.getMetricsTimeNs());
        }
        if (other.hasApkSize()) {
          setApkSize(other.getApkSize());
        }
        if (other.hasResourcesApSize()) {
          setResourcesApSize(other.getResourcesApSize());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProjectMetrics) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 metrics_time_ns = 1;
      private long metricsTimeNs_ ;
      /**
       * <code>optional int64 metrics_time_ns = 1;</code>
       *
       * <pre>
       * The time taken to collect these metrics
       * </pre>
       */
      public boolean hasMetricsTimeNs() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 metrics_time_ns = 1;</code>
       *
       * <pre>
       * The time taken to collect these metrics
       * </pre>
       */
      public long getMetricsTimeNs() {
        return metricsTimeNs_;
      }
      /**
       * <code>optional int64 metrics_time_ns = 1;</code>
       *
       * <pre>
       * The time taken to collect these metrics
       * </pre>
       */
      public Builder setMetricsTimeNs(long value) {
        bitField0_ |= 0x00000001;
        metricsTimeNs_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 metrics_time_ns = 1;</code>
       *
       * <pre>
       * The time taken to collect these metrics
       * </pre>
       */
      public Builder clearMetricsTimeNs() {
        bitField0_ = (bitField0_ & ~0x00000001);
        metricsTimeNs_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 apk_size = 2;
      private long apkSize_ ;
      /**
       * <code>optional int64 apk_size = 2;</code>
       *
       * <pre>
       * The size of the APK built, if relevant.
       * </pre>
       */
      public boolean hasApkSize() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 apk_size = 2;</code>
       *
       * <pre>
       * The size of the APK built, if relevant.
       * </pre>
       */
      public long getApkSize() {
        return apkSize_;
      }
      /**
       * <code>optional int64 apk_size = 2;</code>
       *
       * <pre>
       * The size of the APK built, if relevant.
       * </pre>
       */
      public Builder setApkSize(long value) {
        bitField0_ |= 0x00000002;
        apkSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 apk_size = 2;</code>
       *
       * <pre>
       * The size of the APK built, if relevant.
       * </pre>
       */
      public Builder clearApkSize() {
        bitField0_ = (bitField0_ & ~0x00000002);
        apkSize_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 resources_ap_size = 3;
      private long resourcesApSize_ ;
      /**
       * <code>optional int64 resources_ap_size = 3;</code>
       *
       * <pre>
       * The size of the resources_ap included in that apk.
       * </pre>
       */
      public boolean hasResourcesApSize() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 resources_ap_size = 3;</code>
       *
       * <pre>
       * The size of the resources_ap included in that apk.
       * </pre>
       */
      public long getResourcesApSize() {
        return resourcesApSize_;
      }
      /**
       * <code>optional int64 resources_ap_size = 3;</code>
       *
       * <pre>
       * The size of the resources_ap included in that apk.
       * </pre>
       */
      public Builder setResourcesApSize(long value) {
        bitField0_ |= 0x00000004;
        resourcesApSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 resources_ap_size = 3;</code>
       *
       * <pre>
       * The size of the resources_ap included in that apk.
       * </pre>
       */
      public Builder clearResourcesApSize() {
        bitField0_ = (bitField0_ & ~0x00000004);
        resourcesApSize_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleBuildProjectMetrics)
    }

    static {
      defaultInstance = new GradleBuildProjectMetrics(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleBuildProjectMetrics)
  }

  public interface GradleBuildVariantOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 id = 1;
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier, local to this AndroidStudioEvent, for the variant.
     *  Can be used to correlate spans (GradleBuildProfileSpan) with this
     *  project for this build only. Is created by sequentially
     *  numbering variants as they are created.
     *  Is not stable across build invocations.
     * </pre>
     */
    boolean hasId();
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier, local to this AndroidStudioEvent, for the variant.
     *  Can be used to correlate spans (GradleBuildProfileSpan) with this
     *  project for this build only. Is created by sequentially
     *  numbering variants as they are created.
     *  Is not stable across build invocations.
     * </pre>
     */
    long getId();

    // optional bool is_debug = 2;
    /**
     * <code>optional bool is_debug = 2;</code>
     *
     * <pre>
     * Whether the variant is debuggable.
     * </pre>
     */
    boolean hasIsDebug();
    /**
     * <code>optional bool is_debug = 2;</code>
     *
     * <pre>
     * Whether the variant is debuggable.
     * </pre>
     */
    boolean getIsDebug();

    // optional bool use_jack = 3;
    /**
     * <code>optional bool use_jack = 3;</code>
     *
     * <pre>
     * Whether the variant is compiled using jack
     * </pre>
     */
    boolean hasUseJack();
    /**
     * <code>optional bool use_jack = 3;</code>
     *
     * <pre>
     * Whether the variant is compiled using jack
     * </pre>
     */
    boolean getUseJack();

    // optional bool minify_enabled = 4;
    /**
     * <code>optional bool minify_enabled = 4;</code>
     *
     * <pre>
     * Whether the variant is minified
     * </pre>
     */
    boolean hasMinifyEnabled();
    /**
     * <code>optional bool minify_enabled = 4;</code>
     *
     * <pre>
     * Whether the variant is minified
     * </pre>
     */
    boolean getMinifyEnabled();

    // optional bool use_multidex = 5;
    /**
     * <code>optional bool use_multidex = 5;</code>
     *
     * <pre>
     * Is multidex enabled for the variant
     * </pre>
     */
    boolean hasUseMultidex();
    /**
     * <code>optional bool use_multidex = 5;</code>
     *
     * <pre>
     * Is multidex enabled for the variant
     * </pre>
     */
    boolean getUseMultidex();

    // optional bool use_legacy_multidex = 6;
    /**
     * <code>optional bool use_legacy_multidex = 6;</code>
     *
     * <pre>
     * Is legacy (pre-api 19) multidex enabled for the variant.
     *  Only can true if use_multidex is also true.
     * </pre>
     */
    boolean hasUseLegacyMultidex();
    /**
     * <code>optional bool use_legacy_multidex = 6;</code>
     *
     * <pre>
     * Is legacy (pre-api 19) multidex enabled for the variant.
     *  Only can true if use_multidex is also true.
     * </pre>
     */
    boolean getUseLegacyMultidex();

    // optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;
    /**
     * <code>optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;</code>
     *
     * <pre>
     * The type of variant.
     * </pre>
     */
    boolean hasVariantType();
    /**
     * <code>optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;</code>
     *
     * <pre>
     * The type of variant.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType getVariantType();

    // optional int64 tested_id = 8;
    /**
     * <code>optional int64 tested_id = 8;</code>
     *
     * <pre>
     * For test variants, the tested variant id. (See GradleBuildVariant.id)
     * </pre>
     */
    boolean hasTestedId();
    /**
     * <code>optional int64 tested_id = 8;</code>
     *
     * <pre>
     * For test variants, the tested variant id. (See GradleBuildVariant.id)
     * </pre>
     */
    long getTestedId();
  }
  /**
   * Protobuf type {@code android_studio.GradleBuildVariant}
   */
  public static final class GradleBuildVariant extends
      com.google.protobuf.GeneratedMessage
      implements GradleBuildVariantOrBuilder {
    // Use GradleBuildVariant.newBuilder() to construct.
    private GradleBuildVariant(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleBuildVariant(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleBuildVariant defaultInstance;
    public static GradleBuildVariant getDefaultInstance() {
      return defaultInstance;
    }

    public GradleBuildVariant getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleBuildVariant(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              isDebug_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              useJack_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              minifyEnabled_ = input.readBool();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              useMultidex_ = input.readBool();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              useLegacyMultidex_ = input.readBool();
              break;
            }
            case 56: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(7, rawValue);
              } else {
                bitField0_ |= 0x00000040;
                variantType_ = value;
              }
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              testedId_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildVariant_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildVariant_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleBuildVariant> PARSER =
        new com.google.protobuf.AbstractParser<GradleBuildVariant>() {
      public GradleBuildVariant parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleBuildVariant(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleBuildVariant> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.GradleBuildVariant.VariantType}
     *
     * <pre>
     * The nature of this variant.
     *  The test variants have an associated tested variant.
     *  See com.android.builder.core.VariantType
     * </pre>
     */
    public enum VariantType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>APPLICATION = 0;</code>
       *
       * <pre>
       * For building an APK.
       * </pre>
       */
      APPLICATION(0, 0),
      /**
       * <code>LIBRARY = 1;</code>
       *
       * <pre>
       * For building an AAR.
       * </pre>
       */
      LIBRARY(1, 1),
      /**
       * <code>ANDROID_TEST = 2;</code>
       *
       * <pre>
       * For building a test APK.
       * </pre>
       */
      ANDROID_TEST(2, 2),
      /**
       * <code>UNIT_TEST = 3;</code>
       *
       * <pre>
       * For building unit tests to run locally.
       * </pre>
       */
      UNIT_TEST(3, 3),
      ;

      /**
       * <code>APPLICATION = 0;</code>
       *
       * <pre>
       * For building an APK.
       * </pre>
       */
      public static final int APPLICATION_VALUE = 0;
      /**
       * <code>LIBRARY = 1;</code>
       *
       * <pre>
       * For building an AAR.
       * </pre>
       */
      public static final int LIBRARY_VALUE = 1;
      /**
       * <code>ANDROID_TEST = 2;</code>
       *
       * <pre>
       * For building a test APK.
       * </pre>
       */
      public static final int ANDROID_TEST_VALUE = 2;
      /**
       * <code>UNIT_TEST = 3;</code>
       *
       * <pre>
       * For building unit tests to run locally.
       * </pre>
       */
      public static final int UNIT_TEST_VALUE = 3;


      public final int getNumber() { return value; }

      public static VariantType valueOf(int value) {
        switch (value) {
          case 0: return APPLICATION;
          case 1: return LIBRARY;
          case 2: return ANDROID_TEST;
          case 3: return UNIT_TEST;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<VariantType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<VariantType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<VariantType>() {
              public VariantType findValueByNumber(int number) {
                return VariantType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.getDescriptor().getEnumTypes().get(0);
      }

      private static final VariantType[] VALUES = values();

      public static VariantType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private VariantType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.GradleBuildVariant.VariantType)
    }

    private int bitField0_;
    // optional int64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private long id_;
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier, local to this AndroidStudioEvent, for the variant.
     *  Can be used to correlate spans (GradleBuildProfileSpan) with this
     *  project for this build only. Is created by sequentially
     *  numbering variants as they are created.
     *  Is not stable across build invocations.
     * </pre>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier, local to this AndroidStudioEvent, for the variant.
     *  Can be used to correlate spans (GradleBuildProfileSpan) with this
     *  project for this build only. Is created by sequentially
     *  numbering variants as they are created.
     *  Is not stable across build invocations.
     * </pre>
     */
    public long getId() {
      return id_;
    }

    // optional bool is_debug = 2;
    public static final int IS_DEBUG_FIELD_NUMBER = 2;
    private boolean isDebug_;
    /**
     * <code>optional bool is_debug = 2;</code>
     *
     * <pre>
     * Whether the variant is debuggable.
     * </pre>
     */
    public boolean hasIsDebug() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool is_debug = 2;</code>
     *
     * <pre>
     * Whether the variant is debuggable.
     * </pre>
     */
    public boolean getIsDebug() {
      return isDebug_;
    }

    // optional bool use_jack = 3;
    public static final int USE_JACK_FIELD_NUMBER = 3;
    private boolean useJack_;
    /**
     * <code>optional bool use_jack = 3;</code>
     *
     * <pre>
     * Whether the variant is compiled using jack
     * </pre>
     */
    public boolean hasUseJack() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool use_jack = 3;</code>
     *
     * <pre>
     * Whether the variant is compiled using jack
     * </pre>
     */
    public boolean getUseJack() {
      return useJack_;
    }

    // optional bool minify_enabled = 4;
    public static final int MINIFY_ENABLED_FIELD_NUMBER = 4;
    private boolean minifyEnabled_;
    /**
     * <code>optional bool minify_enabled = 4;</code>
     *
     * <pre>
     * Whether the variant is minified
     * </pre>
     */
    public boolean hasMinifyEnabled() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool minify_enabled = 4;</code>
     *
     * <pre>
     * Whether the variant is minified
     * </pre>
     */
    public boolean getMinifyEnabled() {
      return minifyEnabled_;
    }

    // optional bool use_multidex = 5;
    public static final int USE_MULTIDEX_FIELD_NUMBER = 5;
    private boolean useMultidex_;
    /**
     * <code>optional bool use_multidex = 5;</code>
     *
     * <pre>
     * Is multidex enabled for the variant
     * </pre>
     */
    public boolean hasUseMultidex() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bool use_multidex = 5;</code>
     *
     * <pre>
     * Is multidex enabled for the variant
     * </pre>
     */
    public boolean getUseMultidex() {
      return useMultidex_;
    }

    // optional bool use_legacy_multidex = 6;
    public static final int USE_LEGACY_MULTIDEX_FIELD_NUMBER = 6;
    private boolean useLegacyMultidex_;
    /**
     * <code>optional bool use_legacy_multidex = 6;</code>
     *
     * <pre>
     * Is legacy (pre-api 19) multidex enabled for the variant.
     *  Only can true if use_multidex is also true.
     * </pre>
     */
    public boolean hasUseLegacyMultidex() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool use_legacy_multidex = 6;</code>
     *
     * <pre>
     * Is legacy (pre-api 19) multidex enabled for the variant.
     *  Only can true if use_multidex is also true.
     * </pre>
     */
    public boolean getUseLegacyMultidex() {
      return useLegacyMultidex_;
    }

    // optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;
    public static final int VARIANT_TYPE_FIELD_NUMBER = 7;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType variantType_;
    /**
     * <code>optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;</code>
     *
     * <pre>
     * The type of variant.
     * </pre>
     */
    public boolean hasVariantType() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;</code>
     *
     * <pre>
     * The type of variant.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType getVariantType() {
      return variantType_;
    }

    // optional int64 tested_id = 8;
    public static final int TESTED_ID_FIELD_NUMBER = 8;
    private long testedId_;
    /**
     * <code>optional int64 tested_id = 8;</code>
     *
     * <pre>
     * For test variants, the tested variant id. (See GradleBuildVariant.id)
     * </pre>
     */
    public boolean hasTestedId() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int64 tested_id = 8;</code>
     *
     * <pre>
     * For test variants, the tested variant id. (See GradleBuildVariant.id)
     * </pre>
     */
    public long getTestedId() {
      return testedId_;
    }

    private void initFields() {
      id_ = 0L;
      isDebug_ = false;
      useJack_ = false;
      minifyEnabled_ = false;
      useMultidex_ = false;
      useLegacyMultidex_ = false;
      variantType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType.APPLICATION;
      testedId_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, isDebug_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, useJack_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, minifyEnabled_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(5, useMultidex_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, useLegacyMultidex_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeEnum(7, variantType_.getNumber());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt64(8, testedId_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, isDebug_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, useJack_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, minifyEnabled_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, useMultidex_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, useLegacyMultidex_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(7, variantType_.getNumber());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(8, testedId_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleBuildVariant}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariantOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildVariant_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildVariant_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        isDebug_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        useJack_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        minifyEnabled_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        useMultidex_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        useLegacyMultidex_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        variantType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType.APPLICATION;
        bitField0_ = (bitField0_ & ~0x00000040);
        testedId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildVariant_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.isDebug_ = isDebug_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.useJack_ = useJack_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.minifyEnabled_ = minifyEnabled_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.useMultidex_ = useMultidex_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.useLegacyMultidex_ = useLegacyMultidex_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.variantType_ = variantType_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.testedId_ = testedId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasIsDebug()) {
          setIsDebug(other.getIsDebug());
        }
        if (other.hasUseJack()) {
          setUseJack(other.getUseJack());
        }
        if (other.hasMinifyEnabled()) {
          setMinifyEnabled(other.getMinifyEnabled());
        }
        if (other.hasUseMultidex()) {
          setUseMultidex(other.getUseMultidex());
        }
        if (other.hasUseLegacyMultidex()) {
          setUseLegacyMultidex(other.getUseLegacyMultidex());
        }
        if (other.hasVariantType()) {
          setVariantType(other.getVariantType());
        }
        if (other.hasTestedId()) {
          setTestedId(other.getTestedId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 id = 1;
      private long id_ ;
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier, local to this AndroidStudioEvent, for the variant.
       *  Can be used to correlate spans (GradleBuildProfileSpan) with this
       *  project for this build only. Is created by sequentially
       *  numbering variants as they are created.
       *  Is not stable across build invocations.
       * </pre>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier, local to this AndroidStudioEvent, for the variant.
       *  Can be used to correlate spans (GradleBuildProfileSpan) with this
       *  project for this build only. Is created by sequentially
       *  numbering variants as they are created.
       *  Is not stable across build invocations.
       * </pre>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier, local to this AndroidStudioEvent, for the variant.
       *  Can be used to correlate spans (GradleBuildProfileSpan) with this
       *  project for this build only. Is created by sequentially
       *  numbering variants as they are created.
       *  Is not stable across build invocations.
       * </pre>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier, local to this AndroidStudioEvent, for the variant.
       *  Can be used to correlate spans (GradleBuildProfileSpan) with this
       *  project for this build only. Is created by sequentially
       *  numbering variants as they are created.
       *  Is not stable across build invocations.
       * </pre>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        onChanged();
        return this;
      }

      // optional bool is_debug = 2;
      private boolean isDebug_ ;
      /**
       * <code>optional bool is_debug = 2;</code>
       *
       * <pre>
       * Whether the variant is debuggable.
       * </pre>
       */
      public boolean hasIsDebug() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool is_debug = 2;</code>
       *
       * <pre>
       * Whether the variant is debuggable.
       * </pre>
       */
      public boolean getIsDebug() {
        return isDebug_;
      }
      /**
       * <code>optional bool is_debug = 2;</code>
       *
       * <pre>
       * Whether the variant is debuggable.
       * </pre>
       */
      public Builder setIsDebug(boolean value) {
        bitField0_ |= 0x00000002;
        isDebug_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool is_debug = 2;</code>
       *
       * <pre>
       * Whether the variant is debuggable.
       * </pre>
       */
      public Builder clearIsDebug() {
        bitField0_ = (bitField0_ & ~0x00000002);
        isDebug_ = false;
        onChanged();
        return this;
      }

      // optional bool use_jack = 3;
      private boolean useJack_ ;
      /**
       * <code>optional bool use_jack = 3;</code>
       *
       * <pre>
       * Whether the variant is compiled using jack
       * </pre>
       */
      public boolean hasUseJack() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool use_jack = 3;</code>
       *
       * <pre>
       * Whether the variant is compiled using jack
       * </pre>
       */
      public boolean getUseJack() {
        return useJack_;
      }
      /**
       * <code>optional bool use_jack = 3;</code>
       *
       * <pre>
       * Whether the variant is compiled using jack
       * </pre>
       */
      public Builder setUseJack(boolean value) {
        bitField0_ |= 0x00000004;
        useJack_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool use_jack = 3;</code>
       *
       * <pre>
       * Whether the variant is compiled using jack
       * </pre>
       */
      public Builder clearUseJack() {
        bitField0_ = (bitField0_ & ~0x00000004);
        useJack_ = false;
        onChanged();
        return this;
      }

      // optional bool minify_enabled = 4;
      private boolean minifyEnabled_ ;
      /**
       * <code>optional bool minify_enabled = 4;</code>
       *
       * <pre>
       * Whether the variant is minified
       * </pre>
       */
      public boolean hasMinifyEnabled() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool minify_enabled = 4;</code>
       *
       * <pre>
       * Whether the variant is minified
       * </pre>
       */
      public boolean getMinifyEnabled() {
        return minifyEnabled_;
      }
      /**
       * <code>optional bool minify_enabled = 4;</code>
       *
       * <pre>
       * Whether the variant is minified
       * </pre>
       */
      public Builder setMinifyEnabled(boolean value) {
        bitField0_ |= 0x00000008;
        minifyEnabled_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool minify_enabled = 4;</code>
       *
       * <pre>
       * Whether the variant is minified
       * </pre>
       */
      public Builder clearMinifyEnabled() {
        bitField0_ = (bitField0_ & ~0x00000008);
        minifyEnabled_ = false;
        onChanged();
        return this;
      }

      // optional bool use_multidex = 5;
      private boolean useMultidex_ ;
      /**
       * <code>optional bool use_multidex = 5;</code>
       *
       * <pre>
       * Is multidex enabled for the variant
       * </pre>
       */
      public boolean hasUseMultidex() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool use_multidex = 5;</code>
       *
       * <pre>
       * Is multidex enabled for the variant
       * </pre>
       */
      public boolean getUseMultidex() {
        return useMultidex_;
      }
      /**
       * <code>optional bool use_multidex = 5;</code>
       *
       * <pre>
       * Is multidex enabled for the variant
       * </pre>
       */
      public Builder setUseMultidex(boolean value) {
        bitField0_ |= 0x00000010;
        useMultidex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool use_multidex = 5;</code>
       *
       * <pre>
       * Is multidex enabled for the variant
       * </pre>
       */
      public Builder clearUseMultidex() {
        bitField0_ = (bitField0_ & ~0x00000010);
        useMultidex_ = false;
        onChanged();
        return this;
      }

      // optional bool use_legacy_multidex = 6;
      private boolean useLegacyMultidex_ ;
      /**
       * <code>optional bool use_legacy_multidex = 6;</code>
       *
       * <pre>
       * Is legacy (pre-api 19) multidex enabled for the variant.
       *  Only can true if use_multidex is also true.
       * </pre>
       */
      public boolean hasUseLegacyMultidex() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool use_legacy_multidex = 6;</code>
       *
       * <pre>
       * Is legacy (pre-api 19) multidex enabled for the variant.
       *  Only can true if use_multidex is also true.
       * </pre>
       */
      public boolean getUseLegacyMultidex() {
        return useLegacyMultidex_;
      }
      /**
       * <code>optional bool use_legacy_multidex = 6;</code>
       *
       * <pre>
       * Is legacy (pre-api 19) multidex enabled for the variant.
       *  Only can true if use_multidex is also true.
       * </pre>
       */
      public Builder setUseLegacyMultidex(boolean value) {
        bitField0_ |= 0x00000020;
        useLegacyMultidex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool use_legacy_multidex = 6;</code>
       *
       * <pre>
       * Is legacy (pre-api 19) multidex enabled for the variant.
       *  Only can true if use_multidex is also true.
       * </pre>
       */
      public Builder clearUseLegacyMultidex() {
        bitField0_ = (bitField0_ & ~0x00000020);
        useLegacyMultidex_ = false;
        onChanged();
        return this;
      }

      // optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType variantType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType.APPLICATION;
      /**
       * <code>optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;</code>
       *
       * <pre>
       * The type of variant.
       * </pre>
       */
      public boolean hasVariantType() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;</code>
       *
       * <pre>
       * The type of variant.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType getVariantType() {
        return variantType_;
      }
      /**
       * <code>optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;</code>
       *
       * <pre>
       * The type of variant.
       * </pre>
       */
      public Builder setVariantType(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000040;
        variantType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildVariant.VariantType variant_type = 7;</code>
       *
       * <pre>
       * The type of variant.
       * </pre>
       */
      public Builder clearVariantType() {
        bitField0_ = (bitField0_ & ~0x00000040);
        variantType_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildVariant.VariantType.APPLICATION;
        onChanged();
        return this;
      }

      // optional int64 tested_id = 8;
      private long testedId_ ;
      /**
       * <code>optional int64 tested_id = 8;</code>
       *
       * <pre>
       * For test variants, the tested variant id. (See GradleBuildVariant.id)
       * </pre>
       */
      public boolean hasTestedId() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int64 tested_id = 8;</code>
       *
       * <pre>
       * For test variants, the tested variant id. (See GradleBuildVariant.id)
       * </pre>
       */
      public long getTestedId() {
        return testedId_;
      }
      /**
       * <code>optional int64 tested_id = 8;</code>
       *
       * <pre>
       * For test variants, the tested variant id. (See GradleBuildVariant.id)
       * </pre>
       */
      public Builder setTestedId(long value) {
        bitField0_ |= 0x00000080;
        testedId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 tested_id = 8;</code>
       *
       * <pre>
       * For test variants, the tested variant id. (See GradleBuildVariant.id)
       * </pre>
       */
      public Builder clearTestedId() {
        bitField0_ = (bitField0_ & ~0x00000080);
        testedId_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleBuildVariant)
    }

    static {
      defaultInstance = new GradleBuildVariant(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleBuildVariant)
  }

  public interface GradleBuildMemorySampleOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 gc_time_ms = 1;
    /**
     * <code>optional int64 gc_time_ms = 1;</code>
     *
     * <pre>
     * Garbage collection time since the current daemon started.
     * </pre>
     */
    boolean hasGcTimeMs();
    /**
     * <code>optional int64 gc_time_ms = 1;</code>
     *
     * <pre>
     * Garbage collection time since the current daemon started.
     * </pre>
     */
    long getGcTimeMs();

    // optional int64 gc_count = 2;
    /**
     * <code>optional int64 gc_count = 2;</code>
     *
     * <pre>
     * Garbage collection count since the current daemon started.
     * </pre>
     */
    boolean hasGcCount();
    /**
     * <code>optional int64 gc_count = 2;</code>
     *
     * <pre>
     * Garbage collection count since the current daemon started.
     * </pre>
     */
    long getGcCount();

    // optional int64 timestamp = 3;
    /**
     * <code>optional int64 timestamp = 3;</code>
     *
     * <pre>
     * Time that the memory stats were collected.
     * </pre>
     */
    boolean hasTimestamp();
    /**
     * <code>optional int64 timestamp = 3;</code>
     *
     * <pre>
     * Time that the memory stats were collected.
     * </pre>
     */
    long getTimestamp();
  }
  /**
   * Protobuf type {@code android_studio.GradleBuildMemorySample}
   */
  public static final class GradleBuildMemorySample extends
      com.google.protobuf.GeneratedMessage
      implements GradleBuildMemorySampleOrBuilder {
    // Use GradleBuildMemorySample.newBuilder() to construct.
    private GradleBuildMemorySample(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleBuildMemorySample(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleBuildMemorySample defaultInstance;
    public static GradleBuildMemorySample getDefaultInstance() {
      return defaultInstance;
    }

    public GradleBuildMemorySample getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleBuildMemorySample(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              gcTimeMs_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              gcCount_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              timestamp_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildMemorySample_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildMemorySample_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleBuildMemorySample> PARSER =
        new com.google.protobuf.AbstractParser<GradleBuildMemorySample>() {
      public GradleBuildMemorySample parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleBuildMemorySample(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleBuildMemorySample> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 gc_time_ms = 1;
    public static final int GC_TIME_MS_FIELD_NUMBER = 1;
    private long gcTimeMs_;
    /**
     * <code>optional int64 gc_time_ms = 1;</code>
     *
     * <pre>
     * Garbage collection time since the current daemon started.
     * </pre>
     */
    public boolean hasGcTimeMs() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 gc_time_ms = 1;</code>
     *
     * <pre>
     * Garbage collection time since the current daemon started.
     * </pre>
     */
    public long getGcTimeMs() {
      return gcTimeMs_;
    }

    // optional int64 gc_count = 2;
    public static final int GC_COUNT_FIELD_NUMBER = 2;
    private long gcCount_;
    /**
     * <code>optional int64 gc_count = 2;</code>
     *
     * <pre>
     * Garbage collection count since the current daemon started.
     * </pre>
     */
    public boolean hasGcCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 gc_count = 2;</code>
     *
     * <pre>
     * Garbage collection count since the current daemon started.
     * </pre>
     */
    public long getGcCount() {
      return gcCount_;
    }

    // optional int64 timestamp = 3;
    public static final int TIMESTAMP_FIELD_NUMBER = 3;
    private long timestamp_;
    /**
     * <code>optional int64 timestamp = 3;</code>
     *
     * <pre>
     * Time that the memory stats were collected.
     * </pre>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 timestamp = 3;</code>
     *
     * <pre>
     * Time that the memory stats were collected.
     * </pre>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    private void initFields() {
      gcTimeMs_ = 0L;
      gcCount_ = 0L;
      timestamp_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, gcTimeMs_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, gcCount_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, timestamp_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, gcTimeMs_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, gcCount_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, timestamp_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleBuildMemorySample}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySampleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildMemorySample_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildMemorySample_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        gcTimeMs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        gcCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildMemorySample_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.gcTimeMs_ = gcTimeMs_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.gcCount_ = gcCount_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.timestamp_ = timestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample.getDefaultInstance()) return this;
        if (other.hasGcTimeMs()) {
          setGcTimeMs(other.getGcTimeMs());
        }
        if (other.hasGcCount()) {
          setGcCount(other.getGcCount());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildMemorySample) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 gc_time_ms = 1;
      private long gcTimeMs_ ;
      /**
       * <code>optional int64 gc_time_ms = 1;</code>
       *
       * <pre>
       * Garbage collection time since the current daemon started.
       * </pre>
       */
      public boolean hasGcTimeMs() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 gc_time_ms = 1;</code>
       *
       * <pre>
       * Garbage collection time since the current daemon started.
       * </pre>
       */
      public long getGcTimeMs() {
        return gcTimeMs_;
      }
      /**
       * <code>optional int64 gc_time_ms = 1;</code>
       *
       * <pre>
       * Garbage collection time since the current daemon started.
       * </pre>
       */
      public Builder setGcTimeMs(long value) {
        bitField0_ |= 0x00000001;
        gcTimeMs_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 gc_time_ms = 1;</code>
       *
       * <pre>
       * Garbage collection time since the current daemon started.
       * </pre>
       */
      public Builder clearGcTimeMs() {
        bitField0_ = (bitField0_ & ~0x00000001);
        gcTimeMs_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 gc_count = 2;
      private long gcCount_ ;
      /**
       * <code>optional int64 gc_count = 2;</code>
       *
       * <pre>
       * Garbage collection count since the current daemon started.
       * </pre>
       */
      public boolean hasGcCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 gc_count = 2;</code>
       *
       * <pre>
       * Garbage collection count since the current daemon started.
       * </pre>
       */
      public long getGcCount() {
        return gcCount_;
      }
      /**
       * <code>optional int64 gc_count = 2;</code>
       *
       * <pre>
       * Garbage collection count since the current daemon started.
       * </pre>
       */
      public Builder setGcCount(long value) {
        bitField0_ |= 0x00000002;
        gcCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 gc_count = 2;</code>
       *
       * <pre>
       * Garbage collection count since the current daemon started.
       * </pre>
       */
      public Builder clearGcCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gcCount_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 timestamp = 3;
      private long timestamp_ ;
      /**
       * <code>optional int64 timestamp = 3;</code>
       *
       * <pre>
       * Time that the memory stats were collected.
       * </pre>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 timestamp = 3;</code>
       *
       * <pre>
       * Time that the memory stats were collected.
       * </pre>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional int64 timestamp = 3;</code>
       *
       * <pre>
       * Time that the memory stats were collected.
       * </pre>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000004;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timestamp = 3;</code>
       *
       * <pre>
       * Time that the memory stats were collected.
       * </pre>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000004);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleBuildMemorySample)
    }

    static {
      defaultInstance = new GradleBuildMemorySample(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleBuildMemorySample)
  }

  public interface GradleBuildProfileSpanOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 id = 1;
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier for this span, created by sequentially allocating IDs to spans
     *  as they start. Used only for the parent-child relationship of spans, to
     *  show execution that is part of another span.
     *  Not stable or meaningful across builds.
     * </pre>
     */
    boolean hasId();
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier for this span, created by sequentially allocating IDs to spans
     *  as they start. Used only for the parent-child relationship of spans, to
     *  show execution that is part of another span.
     *  Not stable or meaningful across builds.
     * </pre>
     */
    long getId();

    // optional int64 parent_id = 2;
    /**
     * <code>optional int64 parent_id = 2;</code>
     *
     * <pre>
     * For nested spans: the id for containing span.
     *  See GradleBuildProfileSpan.id.
     * </pre>
     */
    boolean hasParentId();
    /**
     * <code>optional int64 parent_id = 2;</code>
     *
     * <pre>
     * For nested spans: the id for containing span.
     *  See GradleBuildProfileSpan.id.
     * </pre>
     */
    long getParentId();

    // optional int64 start_time_in_ms = 3;
    /**
     * <code>optional int64 start_time_in_ms = 3;</code>
     *
     * <pre>
     * The start time of this event
     * </pre>
     */
    boolean hasStartTimeInMs();
    /**
     * <code>optional int64 start_time_in_ms = 3;</code>
     *
     * <pre>
     * The start time of this event
     * </pre>
     */
    long getStartTimeInMs();

    // optional int64 duration_in_ms = 4;
    /**
     * <code>optional int64 duration_in_ms = 4;</code>
     *
     * <pre>
     * The duration of this event. May be zero.
     * </pre>
     */
    boolean hasDurationInMs();
    /**
     * <code>optional int64 duration_in_ms = 4;</code>
     *
     * <pre>
     * The duration of this event. May be zero.
     * </pre>
     */
    long getDurationInMs();

    // optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;
    /**
     * <code>optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;</code>
     *
     * <pre>
     * The type of event recorded
     * </pre>
     */
    boolean hasType();
    /**
     * <code>optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;</code>
     *
     * <pre>
     * The type of event recorded
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType getType();

    // optional .android_studio.GradleTransformExecution transform = 6;
    /**
     * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
     *
     * <pre>
     * More informations about the execution of TransformTasks.
     *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
     *  TASK_TRANSFORM.
     * </pre>
     */
    boolean hasTransform();
    /**
     * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
     *
     * <pre>
     * More informations about the execution of TransformTasks.
     *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
     *  TASK_TRANSFORM.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution getTransform();
    /**
     * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
     *
     * <pre>
     * More informations about the execution of TransformTasks.
     *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
     *  TASK_TRANSFORM.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecutionOrBuilder getTransformOrBuilder();

    // optional .android_studio.GradleTaskExecution task = 9;
    /**
     * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
     *
     * <pre>
     * More informations about the execution of Tasks.
     *  Only used when executionType is TASK_EXECUTION
     * </pre>
     */
    boolean hasTask();
    /**
     * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
     *
     * <pre>
     * More informations about the execution of Tasks.
     *  Only used when executionType is TASK_EXECUTION
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution getTask();
    /**
     * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
     *
     * <pre>
     * More informations about the execution of Tasks.
     *  Only used when executionType is TASK_EXECUTION
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecutionOrBuilder getTaskOrBuilder();

    // optional int64 project = 7;
    /**
     * <code>optional int64 project = 7;</code>
     *
     * <pre>
     * Session id of the GradleBuildProject that this span is part of.
     *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
     *  See GradleBuildProfile.id
     * </pre>
     */
    boolean hasProject();
    /**
     * <code>optional int64 project = 7;</code>
     *
     * <pre>
     * Session id of the GradleBuildProject that this span is part of.
     *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
     *  See GradleBuildProfile.id
     * </pre>
     */
    long getProject();

    // optional int64 variant = 8;
    /**
     * <code>optional int64 variant = 8;</code>
     *
     * <pre>
     * Session id of the GradleBuildVariant that this span is part of.
     *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
     *  See GradleBuildVariant.id
     * </pre>
     */
    boolean hasVariant();
    /**
     * <code>optional int64 variant = 8;</code>
     *
     * <pre>
     * Session id of the GradleBuildVariant that this span is part of.
     *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
     *  See GradleBuildVariant.id
     * </pre>
     */
    long getVariant();
  }
  /**
   * Protobuf type {@code android_studio.GradleBuildProfileSpan}
   *
   * <pre>
   * A single execution span from a build.
   *  For example, a task execution or creation of some tasks for a variant.
   * </pre>
   */
  public static final class GradleBuildProfileSpan extends
      com.google.protobuf.GeneratedMessage
      implements GradleBuildProfileSpanOrBuilder {
    // Use GradleBuildProfileSpan.newBuilder() to construct.
    private GradleBuildProfileSpan(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleBuildProfileSpan(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleBuildProfileSpan defaultInstance;
    public static GradleBuildProfileSpan getDefaultInstance() {
      return defaultInstance;
    }

    public GradleBuildProfileSpan getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleBuildProfileSpan(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              parentId_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              startTimeInMs_ = input.readInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              durationInMs_ = input.readInt64();
              break;
            }
            case 40: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType value = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(5, rawValue);
              } else {
                bitField0_ |= 0x00000010;
                type_ = value;
              }
              break;
            }
            case 50: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = transform_.toBuilder();
              }
              transform_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(transform_);
                transform_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 56: {
              bitField0_ |= 0x00000080;
              project_ = input.readInt64();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000100;
              variant_ = input.readInt64();
              break;
            }
            case 74: {
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = task_.toBuilder();
              }
              task_ = input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(task_);
                task_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfileSpan_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfileSpan_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleBuildProfileSpan> PARSER =
        new com.google.protobuf.AbstractParser<GradleBuildProfileSpan>() {
      public GradleBuildProfileSpan parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleBuildProfileSpan(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleBuildProfileSpan> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.GradleBuildProfileSpan.ExecutionType}
     *
     * <pre>
     * The type of execution.
     *  This was originally com.android.builder.profile.ExecutionType.
     * </pre>
     */
    public enum ExecutionType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>SOME_RANDOM_PROCESSING = 1;</code>
       */
      SOME_RANDOM_PROCESSING(0, 1),
      /**
       * <code>BASE_PLUGIN_PROJECT_CONFIGURE = 2;</code>
       */
      BASE_PLUGIN_PROJECT_CONFIGURE(1, 2),
      /**
       * <code>BASE_PLUGIN_PROJECT_BASE_EXTENSION_CREATION = 3;</code>
       */
      BASE_PLUGIN_PROJECT_BASE_EXTENSION_CREATION(2, 3),
      /**
       * <code>BASE_PLUGIN_PROJECT_TASKS_CREATION = 4;</code>
       */
      BASE_PLUGIN_PROJECT_TASKS_CREATION(3, 4),
      /**
       * <code>BASE_PLUGIN_BUILD_FINISHED = 5;</code>
       */
      BASE_PLUGIN_BUILD_FINISHED(4, 5),
      /**
       * <code>TASK_MANAGER_CREATE_TASKS = 6;</code>
       */
      TASK_MANAGER_CREATE_TASKS(5, 6),
      /**
       * <code>BASE_PLUGIN_CREATE_ANDROID_TASKS = 7;</code>
       */
      BASE_PLUGIN_CREATE_ANDROID_TASKS(6, 7),
      /**
       * <code>VARIANT_MANAGER_CREATE_ANDROID_TASKS = 8;</code>
       */
      VARIANT_MANAGER_CREATE_ANDROID_TASKS(7, 8),
      /**
       * <code>VARIANT_MANAGER_CREATE_TASKS_FOR_VARIANT = 9;</code>
       */
      VARIANT_MANAGER_CREATE_TASKS_FOR_VARIANT(8, 9),
      /**
       * <code>VARIANT_MANAGER_CREATE_LINT_TASKS = 10;</code>
       */
      VARIANT_MANAGER_CREATE_LINT_TASKS(9, 10),
      /**
       * <code>VARIANT_MANAGER_CREATE_TESTS_TASKS = 11;</code>
       */
      VARIANT_MANAGER_CREATE_TESTS_TASKS(10, 11),
      /**
       * <code>VARIANT_MANAGER_CREATE_VARIANTS = 12;</code>
       */
      VARIANT_MANAGER_CREATE_VARIANTS(11, 12),
      /**
       * <code>RESOLVE_DEPENDENCIES = 13;</code>
       */
      RESOLVE_DEPENDENCIES(12, 13),
      /**
       * <code>TASK_EXECUTION = 14;</code>
       */
      TASK_EXECUTION(13, 14),
      /**
       * <code>INITIAL_METADATA = 100;</code>
       */
      INITIAL_METADATA(14, 100),
      /**
       * <code>FINAL_METADATA = 101;</code>
       */
      FINAL_METADATA(15, 101),
      /**
       * <code>GENERAL_CONFIG = 102;</code>
       */
      GENERAL_CONFIG(16, 102),
      /**
       * <code>VARIANT_CONFIG = 103;</code>
       */
      VARIANT_CONFIG(17, 103),
      /**
       * <code>VARIANT_MANAGER_EXTERNAL_NATIVE_CONFIG_VALUES = 104;</code>
       */
      VARIANT_MANAGER_EXTERNAL_NATIVE_CONFIG_VALUES(18, 104),
      /**
       * <code>APK_METRICS = 105;</code>
       */
      APK_METRICS(19, 105),
      /**
       * <code>APP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 1000;</code>
       *
       * <pre>
       * ApplicationTaskManager per variant tasks.
       * </pre>
       */
      APP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK(20, 1000),
      /**
       * <code>APP_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 1001;</code>
       */
      APP_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK(21, 1001),
      /**
       * <code>APP_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 1002;</code>
       */
      APP_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK(22, 1002),
      /**
       * <code>APP_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 1003;</code>
       */
      APP_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK(23, 1003),
      /**
       * <code>APP_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 1004;</code>
       */
      APP_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK(24, 1004),
      /**
       * <code>APP_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 1005;</code>
       */
      APP_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK(25, 1005),
      /**
       * <code>APP_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 1006;</code>
       */
      APP_TASK_MANAGER_CREATE_PROCESS_RES_TASK(26, 1006),
      /**
       * <code>APP_TASK_MANAGER_CREATE_AIDL_TASK = 1007;</code>
       */
      APP_TASK_MANAGER_CREATE_AIDL_TASK(27, 1007),
      /**
       * <code>APP_TASK_MANAGER_CREATE_COMPILE_TASK = 1008;</code>
       */
      APP_TASK_MANAGER_CREATE_COMPILE_TASK(28, 1008),
      /**
       * <code>APP_TASK_MANAGER_CREATE_NDK_TASK = 1009;</code>
       */
      APP_TASK_MANAGER_CREATE_NDK_TASK(29, 1009),
      /**
       * <code>APP_TASK_MANAGER_CREATE_SPLIT_TASK = 1010;</code>
       */
      APP_TASK_MANAGER_CREATE_SPLIT_TASK(30, 1010),
      /**
       * <code>APP_TASK_MANAGER_CREATE_PACKAGING_TASK = 1011;</code>
       */
      APP_TASK_MANAGER_CREATE_PACKAGING_TASK(31, 1011),
      /**
       * <code>APP_TASK_MANAGER_CREATE_PREPROCESS_RESOURCES_TASK = 1012;</code>
       */
      APP_TASK_MANAGER_CREATE_PREPROCESS_RESOURCES_TASK(32, 1012),
      /**
       * <code>APP_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK = 1013;</code>
       */
      APP_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK(33, 1013),
      /**
       * <code>APP_TASK_MANAGER_CREATE_LINT_TASK = 1014;</code>
       */
      APP_TASK_MANAGER_CREATE_LINT_TASK(34, 1014),
      /**
       * <code>APP_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK = 1015;</code>
       */
      APP_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK(35, 1015),
      /**
       * <code>APP_TASK_MANAGER_CREATE_SHADER_TASK = 1016;</code>
       */
      APP_TASK_MANAGER_CREATE_SHADER_TASK(36, 1016),
      /**
       * <code>APP_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 1017;</code>
       */
      APP_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK(37, 1017),
      /**
       * <code>APP_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK = 1018;</code>
       */
      APP_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK(38, 1018),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 2000;</code>
       *
       * <pre>
       * LibraryTaskManager per variant tasks.
       * </pre>
       */
      LIB_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK(39, 2000),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 2001;</code>
       */
      LIB_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK(40, 2001),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 2002;</code>
       */
      LIB_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK(41, 2002),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 2003;</code>
       */
      LIB_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK(42, 2003),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 2004;</code>
       */
      LIB_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK(43, 2004),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 2005;</code>
       */
      LIB_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK(44, 2005),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 2006;</code>
       */
      LIB_TASK_MANAGER_CREATE_PROCESS_RES_TASK(45, 2006),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_AIDL_TASK = 2007;</code>
       */
      LIB_TASK_MANAGER_CREATE_AIDL_TASK(46, 2007),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_COMPILE_TASK = 2008;</code>
       */
      LIB_TASK_MANAGER_CREATE_COMPILE_TASK(47, 2008),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_NDK_TASK = 2009;</code>
       */
      LIB_TASK_MANAGER_CREATE_NDK_TASK(48, 2009),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_SPLIT_TASK = 2010;</code>
       */
      LIB_TASK_MANAGER_CREATE_SPLIT_TASK(49, 2010),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_PACKAGING_TASK = 2011;</code>
       */
      LIB_TASK_MANAGER_CREATE_PACKAGING_TASK(50, 2011),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_MERGE_PROGUARD_FILE_TASK = 2012;</code>
       */
      LIB_TASK_MANAGER_CREATE_MERGE_PROGUARD_FILE_TASK(51, 2012),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_POST_COMPILATION_TASK = 2013;</code>
       */
      LIB_TASK_MANAGER_CREATE_POST_COMPILATION_TASK(52, 2013),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_PROGUARD_TASK = 2014;</code>
       */
      LIB_TASK_MANAGER_CREATE_PROGUARD_TASK(53, 2014),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_PACKAGE_LOCAL_JAR = 2015;</code>
       */
      LIB_TASK_MANAGER_CREATE_PACKAGE_LOCAL_JAR(54, 2015),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK = 2016;</code>
       */
      LIB_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK(55, 2016),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_LINT_TASK = 2017;</code>
       */
      LIB_TASK_MANAGER_CREATE_LINT_TASK(56, 2017),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_SHADER_TASK = 2018;</code>
       */
      LIB_TASK_MANAGER_CREATE_SHADER_TASK(57, 2018),
      /**
       * <code>LIB_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 2019;</code>
       */
      LIB_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK(58, 2019),
      /**
       * <code>GENERIC_TASK_EXECUTION = 3000;</code>
       *
       * <pre>
       * Task execution: Deprecated, use TASK_EXECUTION and
       *  GradleTaskExecution#Type instead.
       *  Deprecated July 2016.
       * </pre>
       */
      GENERIC_TASK_EXECUTION(59, 3000),
      /**
       * <code>TASK_AIDL_COMPILE = 3001;</code>
       */
      TASK_AIDL_COMPILE(60, 3001),
      /**
       * <code>TASK_DELETE = 3002;</code>
       */
      TASK_DELETE(61, 3002),
      /**
       * <code>TASK_CHECK_MANIFEST = 3003;</code>
       */
      TASK_CHECK_MANIFEST(62, 3003),
      /**
       * <code>TASK_PREPARE_DEPENDENCIES_TASK = 3004;</code>
       */
      TASK_PREPARE_DEPENDENCIES_TASK(63, 3004),
      /**
       * <code>TASK_RENDERSCRIPT_COMPILE = 3005;</code>
       */
      TASK_RENDERSCRIPT_COMPILE(64, 3005),
      /**
       * <code>TASK_GENERATE_BUILD_CONFIG = 3006;</code>
       */
      TASK_GENERATE_BUILD_CONFIG(65, 3006),
      /**
       * <code>TASK_MERGE_ASSETS = 3007;</code>
       */
      TASK_MERGE_ASSETS(66, 3007),
      /**
       * <code>TASK_GENERATE_RES_VALUES = 3008;</code>
       */
      TASK_GENERATE_RES_VALUES(67, 3008),
      /**
       * <code>TASK_MERGE_RESOURCES = 3009;</code>
       */
      TASK_MERGE_RESOURCES(68, 3009),
      /**
       * <code>TASK_MERGE_MANIFESTS = 3010;</code>
       */
      TASK_MERGE_MANIFESTS(69, 3010),
      /**
       * <code>TASK_PROCESS_ANDROID_RESOURCES = 3011;</code>
       */
      TASK_PROCESS_ANDROID_RESOURCES(70, 3011),
      /**
       * <code>TASK_JAVA_COMPILE = 3012;</code>
       */
      TASK_JAVA_COMPILE(71, 3012),
      /**
       * <code>TASK_NDK_COMPILE = 3013;</code>
       */
      TASK_NDK_COMPILE(72, 3013),
      /**
       * <code>TASK_PRE_DEX = 3014;</code>
       */
      TASK_PRE_DEX(73, 3014),
      /**
       * <code>TASK_DEX = 3015;</code>
       */
      TASK_DEX(74, 3015),
      /**
       * <code>TASK_PACKAGE_SPLIT_RES = 3016;</code>
       */
      TASK_PACKAGE_SPLIT_RES(75, 3016),
      /**
       * <code>TASK_PROCESS_RESOURCES = 3017;</code>
       */
      TASK_PROCESS_RESOURCES(76, 3017),
      /**
       * <code>TASK_VALIDATE_SIGNING_TASK = 3018;</code>
       */
      TASK_VALIDATE_SIGNING_TASK(77, 3018),
      /**
       * <code>TASK_PACKAGE_APPLICATION = 3019;</code>
       */
      TASK_PACKAGE_APPLICATION(78, 3019),
      /**
       * <code>TASK_SPLIT_ZIP_ALIGN = 3020;</code>
       */
      TASK_SPLIT_ZIP_ALIGN(79, 3020),
      /**
       * <code>TASK_ZIP_ALIGN = 3021;</code>
       */
      TASK_ZIP_ALIGN(80, 3021),
      /**
       * <code>TASK_COPY = 3022;</code>
       */
      TASK_COPY(81, 3022),
      /**
       * <code>TASK_LINT = 3023;</code>
       */
      TASK_LINT(82, 3023),
      /**
       * <code>TASK_FILE_VERIFICATION = 3026;</code>
       */
      TASK_FILE_VERIFICATION(83, 3026),
      /**
       * <code>TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS_PER_ABI = 3027;</code>
       */
      TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS_PER_ABI(84, 3027),
      /**
       * <code>TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS = 3028;</code>
       */
      TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS(85, 3028),
      /**
       * <code>TASK_TRANSFORM_PREPARATION = 3024;</code>
       *
       * <pre>
       * Transform execution
       * </pre>
       */
      TASK_TRANSFORM_PREPARATION(86, 3024),
      /**
       * <code>TASK_TRANSFORM = 3025;</code>
       */
      TASK_TRANSFORM(87, 3025),
      ;

      /**
       * <code>SOME_RANDOM_PROCESSING = 1;</code>
       */
      public static final int SOME_RANDOM_PROCESSING_VALUE = 1;
      /**
       * <code>BASE_PLUGIN_PROJECT_CONFIGURE = 2;</code>
       */
      public static final int BASE_PLUGIN_PROJECT_CONFIGURE_VALUE = 2;
      /**
       * <code>BASE_PLUGIN_PROJECT_BASE_EXTENSION_CREATION = 3;</code>
       */
      public static final int BASE_PLUGIN_PROJECT_BASE_EXTENSION_CREATION_VALUE = 3;
      /**
       * <code>BASE_PLUGIN_PROJECT_TASKS_CREATION = 4;</code>
       */
      public static final int BASE_PLUGIN_PROJECT_TASKS_CREATION_VALUE = 4;
      /**
       * <code>BASE_PLUGIN_BUILD_FINISHED = 5;</code>
       */
      public static final int BASE_PLUGIN_BUILD_FINISHED_VALUE = 5;
      /**
       * <code>TASK_MANAGER_CREATE_TASKS = 6;</code>
       */
      public static final int TASK_MANAGER_CREATE_TASKS_VALUE = 6;
      /**
       * <code>BASE_PLUGIN_CREATE_ANDROID_TASKS = 7;</code>
       */
      public static final int BASE_PLUGIN_CREATE_ANDROID_TASKS_VALUE = 7;
      /**
       * <code>VARIANT_MANAGER_CREATE_ANDROID_TASKS = 8;</code>
       */
      public static final int VARIANT_MANAGER_CREATE_ANDROID_TASKS_VALUE = 8;
      /**
       * <code>VARIANT_MANAGER_CREATE_TASKS_FOR_VARIANT = 9;</code>
       */
      public static final int VARIANT_MANAGER_CREATE_TASKS_FOR_VARIANT_VALUE = 9;
      /**
       * <code>VARIANT_MANAGER_CREATE_LINT_TASKS = 10;</code>
       */
      public static final int VARIANT_MANAGER_CREATE_LINT_TASKS_VALUE = 10;
      /**
       * <code>VARIANT_MANAGER_CREATE_TESTS_TASKS = 11;</code>
       */
      public static final int VARIANT_MANAGER_CREATE_TESTS_TASKS_VALUE = 11;
      /**
       * <code>VARIANT_MANAGER_CREATE_VARIANTS = 12;</code>
       */
      public static final int VARIANT_MANAGER_CREATE_VARIANTS_VALUE = 12;
      /**
       * <code>RESOLVE_DEPENDENCIES = 13;</code>
       */
      public static final int RESOLVE_DEPENDENCIES_VALUE = 13;
      /**
       * <code>TASK_EXECUTION = 14;</code>
       */
      public static final int TASK_EXECUTION_VALUE = 14;
      /**
       * <code>INITIAL_METADATA = 100;</code>
       */
      public static final int INITIAL_METADATA_VALUE = 100;
      /**
       * <code>FINAL_METADATA = 101;</code>
       */
      public static final int FINAL_METADATA_VALUE = 101;
      /**
       * <code>GENERAL_CONFIG = 102;</code>
       */
      public static final int GENERAL_CONFIG_VALUE = 102;
      /**
       * <code>VARIANT_CONFIG = 103;</code>
       */
      public static final int VARIANT_CONFIG_VALUE = 103;
      /**
       * <code>VARIANT_MANAGER_EXTERNAL_NATIVE_CONFIG_VALUES = 104;</code>
       */
      public static final int VARIANT_MANAGER_EXTERNAL_NATIVE_CONFIG_VALUES_VALUE = 104;
      /**
       * <code>APK_METRICS = 105;</code>
       */
      public static final int APK_METRICS_VALUE = 105;
      /**
       * <code>APP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 1000;</code>
       *
       * <pre>
       * ApplicationTaskManager per variant tasks.
       * </pre>
       */
      public static final int APP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK_VALUE = 1000;
      /**
       * <code>APP_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 1001;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK_VALUE = 1001;
      /**
       * <code>APP_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 1002;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK_VALUE = 1002;
      /**
       * <code>APP_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 1003;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK_VALUE = 1003;
      /**
       * <code>APP_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 1004;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK_VALUE = 1004;
      /**
       * <code>APP_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 1005;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK_VALUE = 1005;
      /**
       * <code>APP_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 1006;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_PROCESS_RES_TASK_VALUE = 1006;
      /**
       * <code>APP_TASK_MANAGER_CREATE_AIDL_TASK = 1007;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_AIDL_TASK_VALUE = 1007;
      /**
       * <code>APP_TASK_MANAGER_CREATE_COMPILE_TASK = 1008;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_COMPILE_TASK_VALUE = 1008;
      /**
       * <code>APP_TASK_MANAGER_CREATE_NDK_TASK = 1009;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_NDK_TASK_VALUE = 1009;
      /**
       * <code>APP_TASK_MANAGER_CREATE_SPLIT_TASK = 1010;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_SPLIT_TASK_VALUE = 1010;
      /**
       * <code>APP_TASK_MANAGER_CREATE_PACKAGING_TASK = 1011;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_PACKAGING_TASK_VALUE = 1011;
      /**
       * <code>APP_TASK_MANAGER_CREATE_PREPROCESS_RESOURCES_TASK = 1012;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_PREPROCESS_RESOURCES_TASK_VALUE = 1012;
      /**
       * <code>APP_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK = 1013;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK_VALUE = 1013;
      /**
       * <code>APP_TASK_MANAGER_CREATE_LINT_TASK = 1014;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_LINT_TASK_VALUE = 1014;
      /**
       * <code>APP_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK = 1015;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK_VALUE = 1015;
      /**
       * <code>APP_TASK_MANAGER_CREATE_SHADER_TASK = 1016;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_SHADER_TASK_VALUE = 1016;
      /**
       * <code>APP_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 1017;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK_VALUE = 1017;
      /**
       * <code>APP_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK = 1018;</code>
       */
      public static final int APP_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK_VALUE = 1018;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 2000;</code>
       *
       * <pre>
       * LibraryTaskManager per variant tasks.
       * </pre>
       */
      public static final int LIB_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK_VALUE = 2000;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 2001;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK_VALUE = 2001;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 2002;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK_VALUE = 2002;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 2003;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK_VALUE = 2003;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 2004;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK_VALUE = 2004;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 2005;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK_VALUE = 2005;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 2006;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_PROCESS_RES_TASK_VALUE = 2006;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_AIDL_TASK = 2007;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_AIDL_TASK_VALUE = 2007;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_COMPILE_TASK = 2008;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_COMPILE_TASK_VALUE = 2008;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_NDK_TASK = 2009;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_NDK_TASK_VALUE = 2009;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_SPLIT_TASK = 2010;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_SPLIT_TASK_VALUE = 2010;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_PACKAGING_TASK = 2011;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_PACKAGING_TASK_VALUE = 2011;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_MERGE_PROGUARD_FILE_TASK = 2012;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_MERGE_PROGUARD_FILE_TASK_VALUE = 2012;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_POST_COMPILATION_TASK = 2013;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_POST_COMPILATION_TASK_VALUE = 2013;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_PROGUARD_TASK = 2014;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_PROGUARD_TASK_VALUE = 2014;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_PACKAGE_LOCAL_JAR = 2015;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_PACKAGE_LOCAL_JAR_VALUE = 2015;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK = 2016;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK_VALUE = 2016;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_LINT_TASK = 2017;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_LINT_TASK_VALUE = 2017;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_SHADER_TASK = 2018;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_SHADER_TASK_VALUE = 2018;
      /**
       * <code>LIB_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 2019;</code>
       */
      public static final int LIB_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK_VALUE = 2019;
      /**
       * <code>GENERIC_TASK_EXECUTION = 3000;</code>
       *
       * <pre>
       * Task execution: Deprecated, use TASK_EXECUTION and
       *  GradleTaskExecution#Type instead.
       *  Deprecated July 2016.
       * </pre>
       */
      public static final int GENERIC_TASK_EXECUTION_VALUE = 3000;
      /**
       * <code>TASK_AIDL_COMPILE = 3001;</code>
       */
      public static final int TASK_AIDL_COMPILE_VALUE = 3001;
      /**
       * <code>TASK_DELETE = 3002;</code>
       */
      public static final int TASK_DELETE_VALUE = 3002;
      /**
       * <code>TASK_CHECK_MANIFEST = 3003;</code>
       */
      public static final int TASK_CHECK_MANIFEST_VALUE = 3003;
      /**
       * <code>TASK_PREPARE_DEPENDENCIES_TASK = 3004;</code>
       */
      public static final int TASK_PREPARE_DEPENDENCIES_TASK_VALUE = 3004;
      /**
       * <code>TASK_RENDERSCRIPT_COMPILE = 3005;</code>
       */
      public static final int TASK_RENDERSCRIPT_COMPILE_VALUE = 3005;
      /**
       * <code>TASK_GENERATE_BUILD_CONFIG = 3006;</code>
       */
      public static final int TASK_GENERATE_BUILD_CONFIG_VALUE = 3006;
      /**
       * <code>TASK_MERGE_ASSETS = 3007;</code>
       */
      public static final int TASK_MERGE_ASSETS_VALUE = 3007;
      /**
       * <code>TASK_GENERATE_RES_VALUES = 3008;</code>
       */
      public static final int TASK_GENERATE_RES_VALUES_VALUE = 3008;
      /**
       * <code>TASK_MERGE_RESOURCES = 3009;</code>
       */
      public static final int TASK_MERGE_RESOURCES_VALUE = 3009;
      /**
       * <code>TASK_MERGE_MANIFESTS = 3010;</code>
       */
      public static final int TASK_MERGE_MANIFESTS_VALUE = 3010;
      /**
       * <code>TASK_PROCESS_ANDROID_RESOURCES = 3011;</code>
       */
      public static final int TASK_PROCESS_ANDROID_RESOURCES_VALUE = 3011;
      /**
       * <code>TASK_JAVA_COMPILE = 3012;</code>
       */
      public static final int TASK_JAVA_COMPILE_VALUE = 3012;
      /**
       * <code>TASK_NDK_COMPILE = 3013;</code>
       */
      public static final int TASK_NDK_COMPILE_VALUE = 3013;
      /**
       * <code>TASK_PRE_DEX = 3014;</code>
       */
      public static final int TASK_PRE_DEX_VALUE = 3014;
      /**
       * <code>TASK_DEX = 3015;</code>
       */
      public static final int TASK_DEX_VALUE = 3015;
      /**
       * <code>TASK_PACKAGE_SPLIT_RES = 3016;</code>
       */
      public static final int TASK_PACKAGE_SPLIT_RES_VALUE = 3016;
      /**
       * <code>TASK_PROCESS_RESOURCES = 3017;</code>
       */
      public static final int TASK_PROCESS_RESOURCES_VALUE = 3017;
      /**
       * <code>TASK_VALIDATE_SIGNING_TASK = 3018;</code>
       */
      public static final int TASK_VALIDATE_SIGNING_TASK_VALUE = 3018;
      /**
       * <code>TASK_PACKAGE_APPLICATION = 3019;</code>
       */
      public static final int TASK_PACKAGE_APPLICATION_VALUE = 3019;
      /**
       * <code>TASK_SPLIT_ZIP_ALIGN = 3020;</code>
       */
      public static final int TASK_SPLIT_ZIP_ALIGN_VALUE = 3020;
      /**
       * <code>TASK_ZIP_ALIGN = 3021;</code>
       */
      public static final int TASK_ZIP_ALIGN_VALUE = 3021;
      /**
       * <code>TASK_COPY = 3022;</code>
       */
      public static final int TASK_COPY_VALUE = 3022;
      /**
       * <code>TASK_LINT = 3023;</code>
       */
      public static final int TASK_LINT_VALUE = 3023;
      /**
       * <code>TASK_FILE_VERIFICATION = 3026;</code>
       */
      public static final int TASK_FILE_VERIFICATION_VALUE = 3026;
      /**
       * <code>TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS_PER_ABI = 3027;</code>
       */
      public static final int TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS_PER_ABI_VALUE = 3027;
      /**
       * <code>TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS = 3028;</code>
       */
      public static final int TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS_VALUE = 3028;
      /**
       * <code>TASK_TRANSFORM_PREPARATION = 3024;</code>
       *
       * <pre>
       * Transform execution
       * </pre>
       */
      public static final int TASK_TRANSFORM_PREPARATION_VALUE = 3024;
      /**
       * <code>TASK_TRANSFORM = 3025;</code>
       */
      public static final int TASK_TRANSFORM_VALUE = 3025;


      public final int getNumber() { return value; }

      public static ExecutionType valueOf(int value) {
        switch (value) {
          case 1: return SOME_RANDOM_PROCESSING;
          case 2: return BASE_PLUGIN_PROJECT_CONFIGURE;
          case 3: return BASE_PLUGIN_PROJECT_BASE_EXTENSION_CREATION;
          case 4: return BASE_PLUGIN_PROJECT_TASKS_CREATION;
          case 5: return BASE_PLUGIN_BUILD_FINISHED;
          case 6: return TASK_MANAGER_CREATE_TASKS;
          case 7: return BASE_PLUGIN_CREATE_ANDROID_TASKS;
          case 8: return VARIANT_MANAGER_CREATE_ANDROID_TASKS;
          case 9: return VARIANT_MANAGER_CREATE_TASKS_FOR_VARIANT;
          case 10: return VARIANT_MANAGER_CREATE_LINT_TASKS;
          case 11: return VARIANT_MANAGER_CREATE_TESTS_TASKS;
          case 12: return VARIANT_MANAGER_CREATE_VARIANTS;
          case 13: return RESOLVE_DEPENDENCIES;
          case 14: return TASK_EXECUTION;
          case 100: return INITIAL_METADATA;
          case 101: return FINAL_METADATA;
          case 102: return GENERAL_CONFIG;
          case 103: return VARIANT_CONFIG;
          case 104: return VARIANT_MANAGER_EXTERNAL_NATIVE_CONFIG_VALUES;
          case 105: return APK_METRICS;
          case 1000: return APP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK;
          case 1001: return APP_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK;
          case 1002: return APP_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK;
          case 1003: return APP_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK;
          case 1004: return APP_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK;
          case 1005: return APP_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK;
          case 1006: return APP_TASK_MANAGER_CREATE_PROCESS_RES_TASK;
          case 1007: return APP_TASK_MANAGER_CREATE_AIDL_TASK;
          case 1008: return APP_TASK_MANAGER_CREATE_COMPILE_TASK;
          case 1009: return APP_TASK_MANAGER_CREATE_NDK_TASK;
          case 1010: return APP_TASK_MANAGER_CREATE_SPLIT_TASK;
          case 1011: return APP_TASK_MANAGER_CREATE_PACKAGING_TASK;
          case 1012: return APP_TASK_MANAGER_CREATE_PREPROCESS_RESOURCES_TASK;
          case 1013: return APP_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK;
          case 1014: return APP_TASK_MANAGER_CREATE_LINT_TASK;
          case 1015: return APP_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK;
          case 1016: return APP_TASK_MANAGER_CREATE_SHADER_TASK;
          case 1017: return APP_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK;
          case 1018: return APP_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK;
          case 2000: return LIB_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK;
          case 2001: return LIB_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK;
          case 2002: return LIB_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK;
          case 2003: return LIB_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK;
          case 2004: return LIB_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK;
          case 2005: return LIB_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK;
          case 2006: return LIB_TASK_MANAGER_CREATE_PROCESS_RES_TASK;
          case 2007: return LIB_TASK_MANAGER_CREATE_AIDL_TASK;
          case 2008: return LIB_TASK_MANAGER_CREATE_COMPILE_TASK;
          case 2009: return LIB_TASK_MANAGER_CREATE_NDK_TASK;
          case 2010: return LIB_TASK_MANAGER_CREATE_SPLIT_TASK;
          case 2011: return LIB_TASK_MANAGER_CREATE_PACKAGING_TASK;
          case 2012: return LIB_TASK_MANAGER_CREATE_MERGE_PROGUARD_FILE_TASK;
          case 2013: return LIB_TASK_MANAGER_CREATE_POST_COMPILATION_TASK;
          case 2014: return LIB_TASK_MANAGER_CREATE_PROGUARD_TASK;
          case 2015: return LIB_TASK_MANAGER_CREATE_PACKAGE_LOCAL_JAR;
          case 2016: return LIB_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK;
          case 2017: return LIB_TASK_MANAGER_CREATE_LINT_TASK;
          case 2018: return LIB_TASK_MANAGER_CREATE_SHADER_TASK;
          case 2019: return LIB_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK;
          case 3000: return GENERIC_TASK_EXECUTION;
          case 3001: return TASK_AIDL_COMPILE;
          case 3002: return TASK_DELETE;
          case 3003: return TASK_CHECK_MANIFEST;
          case 3004: return TASK_PREPARE_DEPENDENCIES_TASK;
          case 3005: return TASK_RENDERSCRIPT_COMPILE;
          case 3006: return TASK_GENERATE_BUILD_CONFIG;
          case 3007: return TASK_MERGE_ASSETS;
          case 3008: return TASK_GENERATE_RES_VALUES;
          case 3009: return TASK_MERGE_RESOURCES;
          case 3010: return TASK_MERGE_MANIFESTS;
          case 3011: return TASK_PROCESS_ANDROID_RESOURCES;
          case 3012: return TASK_JAVA_COMPILE;
          case 3013: return TASK_NDK_COMPILE;
          case 3014: return TASK_PRE_DEX;
          case 3015: return TASK_DEX;
          case 3016: return TASK_PACKAGE_SPLIT_RES;
          case 3017: return TASK_PROCESS_RESOURCES;
          case 3018: return TASK_VALIDATE_SIGNING_TASK;
          case 3019: return TASK_PACKAGE_APPLICATION;
          case 3020: return TASK_SPLIT_ZIP_ALIGN;
          case 3021: return TASK_ZIP_ALIGN;
          case 3022: return TASK_COPY;
          case 3023: return TASK_LINT;
          case 3026: return TASK_FILE_VERIFICATION;
          case 3027: return TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS_PER_ABI;
          case 3028: return TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS;
          case 3024: return TASK_TRANSFORM_PREPARATION;
          case 3025: return TASK_TRANSFORM;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<ExecutionType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<ExecutionType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<ExecutionType>() {
              public ExecutionType findValueByNumber(int number) {
                return ExecutionType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.getDescriptor().getEnumTypes().get(0);
      }

      private static final ExecutionType[] VALUES = values();

      public static ExecutionType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private ExecutionType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.GradleBuildProfileSpan.ExecutionType)
    }

    private int bitField0_;
    // optional int64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private long id_;
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier for this span, created by sequentially allocating IDs to spans
     *  as they start. Used only for the parent-child relationship of spans, to
     *  show execution that is part of another span.
     *  Not stable or meaningful across builds.
     * </pre>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 id = 1;</code>
     *
     * <pre>
     * Identifier for this span, created by sequentially allocating IDs to spans
     *  as they start. Used only for the parent-child relationship of spans, to
     *  show execution that is part of another span.
     *  Not stable or meaningful across builds.
     * </pre>
     */
    public long getId() {
      return id_;
    }

    // optional int64 parent_id = 2;
    public static final int PARENT_ID_FIELD_NUMBER = 2;
    private long parentId_;
    /**
     * <code>optional int64 parent_id = 2;</code>
     *
     * <pre>
     * For nested spans: the id for containing span.
     *  See GradleBuildProfileSpan.id.
     * </pre>
     */
    public boolean hasParentId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 parent_id = 2;</code>
     *
     * <pre>
     * For nested spans: the id for containing span.
     *  See GradleBuildProfileSpan.id.
     * </pre>
     */
    public long getParentId() {
      return parentId_;
    }

    // optional int64 start_time_in_ms = 3;
    public static final int START_TIME_IN_MS_FIELD_NUMBER = 3;
    private long startTimeInMs_;
    /**
     * <code>optional int64 start_time_in_ms = 3;</code>
     *
     * <pre>
     * The start time of this event
     * </pre>
     */
    public boolean hasStartTimeInMs() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 start_time_in_ms = 3;</code>
     *
     * <pre>
     * The start time of this event
     * </pre>
     */
    public long getStartTimeInMs() {
      return startTimeInMs_;
    }

    // optional int64 duration_in_ms = 4;
    public static final int DURATION_IN_MS_FIELD_NUMBER = 4;
    private long durationInMs_;
    /**
     * <code>optional int64 duration_in_ms = 4;</code>
     *
     * <pre>
     * The duration of this event. May be zero.
     * </pre>
     */
    public boolean hasDurationInMs() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 duration_in_ms = 4;</code>
     *
     * <pre>
     * The duration of this event. May be zero.
     * </pre>
     */
    public long getDurationInMs() {
      return durationInMs_;
    }

    // optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;
    public static final int TYPE_FIELD_NUMBER = 5;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType type_;
    /**
     * <code>optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;</code>
     *
     * <pre>
     * The type of event recorded
     * </pre>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;</code>
     *
     * <pre>
     * The type of event recorded
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType getType() {
      return type_;
    }

    // optional .android_studio.GradleTransformExecution transform = 6;
    public static final int TRANSFORM_FIELD_NUMBER = 6;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution transform_;
    /**
     * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
     *
     * <pre>
     * More informations about the execution of TransformTasks.
     *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
     *  TASK_TRANSFORM.
     * </pre>
     */
    public boolean hasTransform() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
     *
     * <pre>
     * More informations about the execution of TransformTasks.
     *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
     *  TASK_TRANSFORM.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution getTransform() {
      return transform_;
    }
    /**
     * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
     *
     * <pre>
     * More informations about the execution of TransformTasks.
     *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
     *  TASK_TRANSFORM.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecutionOrBuilder getTransformOrBuilder() {
      return transform_;
    }

    // optional .android_studio.GradleTaskExecution task = 9;
    public static final int TASK_FIELD_NUMBER = 9;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution task_;
    /**
     * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
     *
     * <pre>
     * More informations about the execution of Tasks.
     *  Only used when executionType is TASK_EXECUTION
     * </pre>
     */
    public boolean hasTask() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
     *
     * <pre>
     * More informations about the execution of Tasks.
     *  Only used when executionType is TASK_EXECUTION
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution getTask() {
      return task_;
    }
    /**
     * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
     *
     * <pre>
     * More informations about the execution of Tasks.
     *  Only used when executionType is TASK_EXECUTION
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecutionOrBuilder getTaskOrBuilder() {
      return task_;
    }

    // optional int64 project = 7;
    public static final int PROJECT_FIELD_NUMBER = 7;
    private long project_;
    /**
     * <code>optional int64 project = 7;</code>
     *
     * <pre>
     * Session id of the GradleBuildProject that this span is part of.
     *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
     *  See GradleBuildProfile.id
     * </pre>
     */
    public boolean hasProject() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int64 project = 7;</code>
     *
     * <pre>
     * Session id of the GradleBuildProject that this span is part of.
     *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
     *  See GradleBuildProfile.id
     * </pre>
     */
    public long getProject() {
      return project_;
    }

    // optional int64 variant = 8;
    public static final int VARIANT_FIELD_NUMBER = 8;
    private long variant_;
    /**
     * <code>optional int64 variant = 8;</code>
     *
     * <pre>
     * Session id of the GradleBuildVariant that this span is part of.
     *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
     *  See GradleBuildVariant.id
     * </pre>
     */
    public boolean hasVariant() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional int64 variant = 8;</code>
     *
     * <pre>
     * Session id of the GradleBuildVariant that this span is part of.
     *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
     *  See GradleBuildVariant.id
     * </pre>
     */
    public long getVariant() {
      return variant_;
    }

    private void initFields() {
      id_ = 0L;
      parentId_ = 0L;
      startTimeInMs_ = 0L;
      durationInMs_ = 0L;
      type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType.SOME_RANDOM_PROCESSING;
      transform_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.getDefaultInstance();
      task_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.getDefaultInstance();
      project_ = 0L;
      variant_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, parentId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, startTimeInMs_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, durationInMs_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeEnum(5, type_.getNumber());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, transform_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt64(7, project_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeInt64(8, variant_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(9, task_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, parentId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, startTimeInMs_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, durationInMs_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, type_.getNumber());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, transform_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, project_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(8, variant_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, task_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleBuildProfileSpan}
     *
     * <pre>
     * A single execution span from a build.
     *  For example, a task execution or creation of some tasks for a variant.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpanOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfileSpan_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfileSpan_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTransformFieldBuilder();
          getTaskFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        parentId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        startTimeInMs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        durationInMs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType.SOME_RANDOM_PROCESSING;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (transformBuilder_ == null) {
          transform_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.getDefaultInstance();
        } else {
          transformBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (taskBuilder_ == null) {
          task_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.getDefaultInstance();
        } else {
          taskBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        project_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        variant_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleBuildProfileSpan_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.parentId_ = parentId_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.startTimeInMs_ = startTimeInMs_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.durationInMs_ = durationInMs_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (transformBuilder_ == null) {
          result.transform_ = transform_;
        } else {
          result.transform_ = transformBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (taskBuilder_ == null) {
          result.task_ = task_;
        } else {
          result.task_ = taskBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.project_ = project_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.variant_ = variant_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasParentId()) {
          setParentId(other.getParentId());
        }
        if (other.hasStartTimeInMs()) {
          setStartTimeInMs(other.getStartTimeInMs());
        }
        if (other.hasDurationInMs()) {
          setDurationInMs(other.getDurationInMs());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasTransform()) {
          mergeTransform(other.getTransform());
        }
        if (other.hasTask()) {
          mergeTask(other.getTask());
        }
        if (other.hasProject()) {
          setProject(other.getProject());
        }
        if (other.hasVariant()) {
          setVariant(other.getVariant());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 id = 1;
      private long id_ ;
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier for this span, created by sequentially allocating IDs to spans
       *  as they start. Used only for the parent-child relationship of spans, to
       *  show execution that is part of another span.
       *  Not stable or meaningful across builds.
       * </pre>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier for this span, created by sequentially allocating IDs to spans
       *  as they start. Used only for the parent-child relationship of spans, to
       *  show execution that is part of another span.
       *  Not stable or meaningful across builds.
       * </pre>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier for this span, created by sequentially allocating IDs to spans
       *  as they start. Used only for the parent-child relationship of spans, to
       *  show execution that is part of another span.
       *  Not stable or meaningful across builds.
       * </pre>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 id = 1;</code>
       *
       * <pre>
       * Identifier for this span, created by sequentially allocating IDs to spans
       *  as they start. Used only for the parent-child relationship of spans, to
       *  show execution that is part of another span.
       *  Not stable or meaningful across builds.
       * </pre>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 parent_id = 2;
      private long parentId_ ;
      /**
       * <code>optional int64 parent_id = 2;</code>
       *
       * <pre>
       * For nested spans: the id for containing span.
       *  See GradleBuildProfileSpan.id.
       * </pre>
       */
      public boolean hasParentId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 parent_id = 2;</code>
       *
       * <pre>
       * For nested spans: the id for containing span.
       *  See GradleBuildProfileSpan.id.
       * </pre>
       */
      public long getParentId() {
        return parentId_;
      }
      /**
       * <code>optional int64 parent_id = 2;</code>
       *
       * <pre>
       * For nested spans: the id for containing span.
       *  See GradleBuildProfileSpan.id.
       * </pre>
       */
      public Builder setParentId(long value) {
        bitField0_ |= 0x00000002;
        parentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 parent_id = 2;</code>
       *
       * <pre>
       * For nested spans: the id for containing span.
       *  See GradleBuildProfileSpan.id.
       * </pre>
       */
      public Builder clearParentId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        parentId_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 start_time_in_ms = 3;
      private long startTimeInMs_ ;
      /**
       * <code>optional int64 start_time_in_ms = 3;</code>
       *
       * <pre>
       * The start time of this event
       * </pre>
       */
      public boolean hasStartTimeInMs() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 start_time_in_ms = 3;</code>
       *
       * <pre>
       * The start time of this event
       * </pre>
       */
      public long getStartTimeInMs() {
        return startTimeInMs_;
      }
      /**
       * <code>optional int64 start_time_in_ms = 3;</code>
       *
       * <pre>
       * The start time of this event
       * </pre>
       */
      public Builder setStartTimeInMs(long value) {
        bitField0_ |= 0x00000004;
        startTimeInMs_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 start_time_in_ms = 3;</code>
       *
       * <pre>
       * The start time of this event
       * </pre>
       */
      public Builder clearStartTimeInMs() {
        bitField0_ = (bitField0_ & ~0x00000004);
        startTimeInMs_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 duration_in_ms = 4;
      private long durationInMs_ ;
      /**
       * <code>optional int64 duration_in_ms = 4;</code>
       *
       * <pre>
       * The duration of this event. May be zero.
       * </pre>
       */
      public boolean hasDurationInMs() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 duration_in_ms = 4;</code>
       *
       * <pre>
       * The duration of this event. May be zero.
       * </pre>
       */
      public long getDurationInMs() {
        return durationInMs_;
      }
      /**
       * <code>optional int64 duration_in_ms = 4;</code>
       *
       * <pre>
       * The duration of this event. May be zero.
       * </pre>
       */
      public Builder setDurationInMs(long value) {
        bitField0_ |= 0x00000008;
        durationInMs_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 duration_in_ms = 4;</code>
       *
       * <pre>
       * The duration of this event. May be zero.
       * </pre>
       */
      public Builder clearDurationInMs() {
        bitField0_ = (bitField0_ & ~0x00000008);
        durationInMs_ = 0L;
        onChanged();
        return this;
      }

      // optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType.SOME_RANDOM_PROCESSING;
      /**
       * <code>optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;</code>
       *
       * <pre>
       * The type of event recorded
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;</code>
       *
       * <pre>
       * The type of event recorded
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType getType() {
        return type_;
      }
      /**
       * <code>optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;</code>
       *
       * <pre>
       * The type of event recorded
       * </pre>
       */
      public Builder setType(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000010;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.GradleBuildProfileSpan.ExecutionType type = 5;</code>
       *
       * <pre>
       * The type of event recorded
       * </pre>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000010);
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleBuildProfileSpan.ExecutionType.SOME_RANDOM_PROCESSING;
        onChanged();
        return this;
      }

      // optional .android_studio.GradleTransformExecution transform = 6;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution transform_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecutionOrBuilder> transformBuilder_;
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      public boolean hasTransform() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution getTransform() {
        if (transformBuilder_ == null) {
          return transform_;
        } else {
          return transformBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      public Builder setTransform(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution value) {
        if (transformBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          transform_ = value;
          onChanged();
        } else {
          transformBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      public Builder setTransform(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Builder builderForValue) {
        if (transformBuilder_ == null) {
          transform_ = builderForValue.build();
          onChanged();
        } else {
          transformBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      public Builder mergeTransform(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution value) {
        if (transformBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              transform_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.getDefaultInstance()) {
            transform_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.newBuilder(transform_).mergeFrom(value).buildPartial();
          } else {
            transform_ = value;
          }
          onChanged();
        } else {
          transformBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      public Builder clearTransform() {
        if (transformBuilder_ == null) {
          transform_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.getDefaultInstance();
          onChanged();
        } else {
          transformBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Builder getTransformBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getTransformFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecutionOrBuilder getTransformOrBuilder() {
        if (transformBuilder_ != null) {
          return transformBuilder_.getMessageOrBuilder();
        } else {
          return transform_;
        }
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution transform = 6;</code>
       *
       * <pre>
       * More informations about the execution of TransformTasks.
       *  Only used when executionType is TASK_TRANSFORM_PREPARATION or
       *  TASK_TRANSFORM.
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecutionOrBuilder> 
          getTransformFieldBuilder() {
        if (transformBuilder_ == null) {
          transformBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecutionOrBuilder>(
                  transform_,
                  getParentForChildren(),
                  isClean());
          transform_ = null;
        }
        return transformBuilder_;
      }

      // optional .android_studio.GradleTaskExecution task = 9;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution task_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecutionOrBuilder> taskBuilder_;
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      public boolean hasTask() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution getTask() {
        if (taskBuilder_ == null) {
          return task_;
        } else {
          return taskBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      public Builder setTask(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution value) {
        if (taskBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          task_ = value;
          onChanged();
        } else {
          taskBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      public Builder setTask(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Builder builderForValue) {
        if (taskBuilder_ == null) {
          task_ = builderForValue.build();
          onChanged();
        } else {
          taskBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      public Builder mergeTask(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution value) {
        if (taskBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              task_ != com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.getDefaultInstance()) {
            task_ =
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.newBuilder(task_).mergeFrom(value).buildPartial();
          } else {
            task_ = value;
          }
          onChanged();
        } else {
          taskBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      public Builder clearTask() {
        if (taskBuilder_ == null) {
          task_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.getDefaultInstance();
          onChanged();
        } else {
          taskBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Builder getTaskBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getTaskFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecutionOrBuilder getTaskOrBuilder() {
        if (taskBuilder_ != null) {
          return taskBuilder_.getMessageOrBuilder();
        } else {
          return task_;
        }
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution task = 9;</code>
       *
       * <pre>
       * More informations about the execution of Tasks.
       *  Only used when executionType is TASK_EXECUTION
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecutionOrBuilder> 
          getTaskFieldBuilder() {
        if (taskBuilder_ == null) {
          taskBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecutionOrBuilder>(
                  task_,
                  getParentForChildren(),
                  isClean());
          task_ = null;
        }
        return taskBuilder_;
      }

      // optional int64 project = 7;
      private long project_ ;
      /**
       * <code>optional int64 project = 7;</code>
       *
       * <pre>
       * Session id of the GradleBuildProject that this span is part of.
       *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
       *  See GradleBuildProfile.id
       * </pre>
       */
      public boolean hasProject() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int64 project = 7;</code>
       *
       * <pre>
       * Session id of the GradleBuildProject that this span is part of.
       *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
       *  See GradleBuildProfile.id
       * </pre>
       */
      public long getProject() {
        return project_;
      }
      /**
       * <code>optional int64 project = 7;</code>
       *
       * <pre>
       * Session id of the GradleBuildProject that this span is part of.
       *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
       *  See GradleBuildProfile.id
       * </pre>
       */
      public Builder setProject(long value) {
        bitField0_ |= 0x00000080;
        project_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 project = 7;</code>
       *
       * <pre>
       * Session id of the GradleBuildProject that this span is part of.
       *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
       *  See GradleBuildProfile.id
       * </pre>
       */
      public Builder clearProject() {
        bitField0_ = (bitField0_ & ~0x00000080);
        project_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 variant = 8;
      private long variant_ ;
      /**
       * <code>optional int64 variant = 8;</code>
       *
       * <pre>
       * Session id of the GradleBuildVariant that this span is part of.
       *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
       *  See GradleBuildVariant.id
       * </pre>
       */
      public boolean hasVariant() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional int64 variant = 8;</code>
       *
       * <pre>
       * Session id of the GradleBuildVariant that this span is part of.
       *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
       *  See GradleBuildVariant.id
       * </pre>
       */
      public long getVariant() {
        return variant_;
      }
      /**
       * <code>optional int64 variant = 8;</code>
       *
       * <pre>
       * Session id of the GradleBuildVariant that this span is part of.
       *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
       *  See GradleBuildVariant.id
       * </pre>
       */
      public Builder setVariant(long value) {
        bitField0_ |= 0x00000100;
        variant_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 variant = 8;</code>
       *
       * <pre>
       * Session id of the GradleBuildVariant that this span is part of.
       *  The ID is not stable nor meaningful over multiple GradleBuildProfile.
       *  See GradleBuildVariant.id
       * </pre>
       */
      public Builder clearVariant() {
        bitField0_ = (bitField0_ & ~0x00000100);
        variant_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleBuildProfileSpan)
    }

    static {
      defaultInstance = new GradleBuildProfileSpan(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleBuildProfileSpan)
  }

  public interface GradleTaskExecutionOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.GradleTaskExecution.Type type = 1;
    /**
     * <code>optional .android_studio.GradleTaskExecution.Type type = 1;</code>
     *
     * <pre>
     * The task implementing class.
     *  Custom tasks are recorded as UNKNOWN_TASK_TYPE.
     * </pre>
     */
    boolean hasType();
    /**
     * <code>optional .android_studio.GradleTaskExecution.Type type = 1;</code>
     *
     * <pre>
     * The task implementing class.
     *  Custom tasks are recorded as UNKNOWN_TASK_TYPE.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type getType();

    // optional bool did_work = 2;
    /**
     * <code>optional bool did_work = 2;</code>
     *
     * <pre>
     * Whether the task did work (TaskState#getDidWork())
     *  This is not necessarily the inverse of up_to_date: see
     *  https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
     * </pre>
     */
    boolean hasDidWork();
    /**
     * <code>optional bool did_work = 2;</code>
     *
     * <pre>
     * Whether the task did work (TaskState#getDidWork())
     *  This is not necessarily the inverse of up_to_date: see
     *  https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
     * </pre>
     */
    boolean getDidWork();

    // optional bool skipped = 3;
    /**
     * <code>optional bool skipped = 3;</code>
     *
     * <pre>
     * Whether the task was skipped (TaskState#getSkipped())
     * </pre>
     */
    boolean hasSkipped();
    /**
     * <code>optional bool skipped = 3;</code>
     *
     * <pre>
     * Whether the task was skipped (TaskState#getSkipped())
     * </pre>
     */
    boolean getSkipped();

    // optional bool up_to_date = 4;
    /**
     * <code>optional bool up_to_date = 4;</code>
     *
     * <pre>
     * Whether the task was up to date (TaskState#getUpToDate())
     * </pre>
     */
    boolean hasUpToDate();
    /**
     * <code>optional bool up_to_date = 4;</code>
     *
     * <pre>
     * Whether the task was up to date (TaskState#getUpToDate())
     * </pre>
     */
    boolean getUpToDate();

    // optional bool failed = 5;
    /**
     * <code>optional bool failed = 5;</code>
     *
     * <pre>
     * Whether the task failed
     * </pre>
     */
    boolean hasFailed();
    /**
     * <code>optional bool failed = 5;</code>
     *
     * <pre>
     * Whether the task failed
     * </pre>
     */
    boolean getFailed();
  }
  /**
   * Protobuf type {@code android_studio.GradleTaskExecution}
   */
  public static final class GradleTaskExecution extends
      com.google.protobuf.GeneratedMessage
      implements GradleTaskExecutionOrBuilder {
    // Use GradleTaskExecution.newBuilder() to construct.
    private GradleTaskExecution(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleTaskExecution(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleTaskExecution defaultInstance;
    public static GradleTaskExecution getDefaultInstance() {
      return defaultInstance;
    }

    public GradleTaskExecution getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleTaskExecution(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type value = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              didWork_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              skipped_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              upToDate_ = input.readBool();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              failed_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTaskExecution_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTaskExecution_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleTaskExecution> PARSER =
        new com.google.protobuf.AbstractParser<GradleTaskExecution>() {
      public GradleTaskExecution parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleTaskExecution(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleTaskExecution> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.GradleTaskExecution.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_TASK_TYPE = 0;</code>
       */
      UNKNOWN_TASK_TYPE(0, 0),
      /**
       * <code>AIDL_COMPILE = 1;</code>
       */
      AIDL_COMPILE(1, 1),
      /**
       * <code>ANDROID_JAR = 2;</code>
       */
      ANDROID_JAR(2, 2),
      /**
       * <code>ANDROID_JAVA_COMPILE = 3;</code>
       */
      ANDROID_JAVA_COMPILE(3, 3),
      /**
       * <code>ANDROID_REPORT = 4;</code>
       */
      ANDROID_REPORT(4, 4),
      /**
       * <code>ANDROID_UNIT_TEST = 5;</code>
       */
      ANDROID_UNIT_TEST(5, 5),
      /**
       * <code>BUILD_EMULATOR = 6;</code>
       */
      BUILD_EMULATOR(6, 6),
      /**
       * <code>BUILD_INFO_LOADER = 7;</code>
       */
      BUILD_INFO_LOADER(7, 7),
      /**
       * <code>CHECK_MANIFEST = 8;</code>
       */
      CHECK_MANIFEST(8, 8),
      /**
       * <code>COMPATIBLE_SCREENS_MANIFEST = 9;</code>
       */
      COMPATIBLE_SCREENS_MANIFEST(9, 9),
      /**
       * <code>CREATE_MANIFEST_KEEP_LIST = 10;</code>
       */
      CREATE_MANIFEST_KEEP_LIST(10, 10),
      /**
       * <code>DATA_BINDING_EXPORT_BUILD_INFO = 11;</code>
       */
      DATA_BINDING_EXPORT_BUILD_INFO(11, 11),
      /**
       * <code>DATA_BINDING_PROCESS_LAYOUTS = 12;</code>
       */
      DATA_BINDING_PROCESS_LAYOUTS(12, 12),
      /**
       * <code>DEPENDENCY_REPORT = 13;</code>
       */
      DEPENDENCY_REPORT(13, 13),
      /**
       * <code>DEVICE_PROVIDER_INSTRUMENT_TEST = 14;</code>
       */
      DEVICE_PROVIDER_INSTRUMENT_TEST(14, 14),
      /**
       * <code>EXTERNAL_BUILD_ANCHOR = 15;</code>
       */
      EXTERNAL_BUILD_ANCHOR(15, 15),
      /**
       * <code>EXTERNAL_NATIVE_BUILD_JSON = 16;</code>
       */
      EXTERNAL_NATIVE_BUILD_JSON(16, 16),
      /**
       * <code>EXTERNAL_NATIVE_BUILD = 17;</code>
       */
      EXTERNAL_NATIVE_BUILD(17, 17),
      /**
       * <code>EXTRACT_ANNOTATIONS = 18;</code>
       */
      EXTRACT_ANNOTATIONS(18, 18),
      /**
       * <code>EXTRACT_JAVA_RESOURCES = 19;</code>
       */
      EXTRACT_JAVA_RESOURCES(19, 19),
      /**
       * <code>EXTRACT_PROGUARD_FILES = 20;</code>
       */
      EXTRACT_PROGUARD_FILES(20, 20),
      /**
       * <code>FAST_DEPLOY_RUNTIME_EXTRACTOR = 21;</code>
       */
      FAST_DEPLOY_RUNTIME_EXTRACTOR(21, 21),
      /**
       * <code>FILTERED_JAR_COPY = 22;</code>
       */
      FILTERED_JAR_COPY(22, 22),
      /**
       * <code>GENERATE_APK_DATA = 23;</code>
       */
      GENERATE_APK_DATA(23, 23),
      /**
       * <code>GENERATE_BUILD_CONFIG = 24;</code>
       */
      GENERATE_BUILD_CONFIG(24, 24),
      /**
       * <code>GENERATE_INSTANT_RUN_APP_INFO = 25;</code>
       */
      GENERATE_INSTANT_RUN_APP_INFO(25, 25),
      /**
       * <code>GENERATE_RES_VALUES = 26;</code>
       */
      GENERATE_RES_VALUES(26, 26),
      /**
       * <code>GENERATE_SPLIT_ABI_RES = 27;</code>
       */
      GENERATE_SPLIT_ABI_RES(27, 27),
      /**
       * <code>GOOGLE_SERVICES = 28;</code>
       */
      GOOGLE_SERVICES(28, 28),
      /**
       * <code>INCREMENTAL_SAFEGUARD = 29;</code>
       */
      INCREMENTAL_SAFEGUARD(29, 29),
      /**
       * <code>INSTALL_VARIANT = 30;</code>
       */
      INSTALL_VARIANT(30, 30),
      /**
       * <code>INSTANT_RUN_SPLIT_APK_BUILDER = 31;</code>
       */
      INSTANT_RUN_SPLIT_APK_BUILDER(31, 31),
      /**
       * <code>INSTANT_RUN_WRAPPER = 32;</code>
       */
      INSTANT_RUN_WRAPPER(32, 32),
      /**
       * <code>INVOKE_MANIFEST_MERGER = 33;</code>
       */
      INVOKE_MANIFEST_MERGER(33, 33),
      /**
       * <code>JACK_JACOCO_REPORT = 34;</code>
       */
      JACK_JACOCO_REPORT(34, 34),
      /**
       * <code>JACOCO_REPORT = 35;</code>
       */
      JACOCO_REPORT(35, 35),
      /**
       * <code>LINT = 36;</code>
       */
      LINT(36, 36),
      /**
       * <code>LINT_COMPILE = 37;</code>
       */
      LINT_COMPILE(37, 37),
      /**
       * <code>MERGE_FILE = 38;</code>
       */
      MERGE_FILE(38, 38),
      /**
       * <code>MERGE_MANIFESTS = 39;</code>
       */
      MERGE_MANIFESTS(39, 39),
      /**
       * <code>MERGE_RESOURCES = 40;</code>
       */
      MERGE_RESOURCES(40, 40),
      /**
       * <code>MERGE_SOURCE_SET_FOLDERS = 41;</code>
       */
      MERGE_SOURCE_SET_FOLDERS(41, 41),
      /**
       * <code>MOCKABLE_ANDROID_JAR = 42;</code>
       */
      MOCKABLE_ANDROID_JAR(42, 42),
      /**
       * <code>NDK_COMPILE = 43;</code>
       */
      NDK_COMPILE(43, 43),
      /**
       * <code>NDK = 44;</code>
       */
      NDK(44, 44),
      /**
       * <code>PACKAGE_APPLICATION = 45;</code>
       */
      PACKAGE_APPLICATION(45, 45),
      /**
       * <code>PACKAGE_SPLIT_ABI = 46;</code>
       */
      PACKAGE_SPLIT_ABI(46, 46),
      /**
       * <code>PACKAGE_SPLIT_RES = 47;</code>
       */
      PACKAGE_SPLIT_RES(47, 47),
      /**
       * <code>PRE_COLD_SWAP = 48;</code>
       */
      PRE_COLD_SWAP(48, 48),
      /**
       * <code>PREPARE_DEPENDENCIES = 49;</code>
       */
      PREPARE_DEPENDENCIES(49, 49),
      /**
       * <code>PREPARE_LIBRARY = 50;</code>
       */
      PREPARE_LIBRARY(50, 50),
      /**
       * <code>PROCESS_ANDROID_RESOURCES = 51;</code>
       */
      PROCESS_ANDROID_RESOURCES(51, 51),
      /**
       * <code>PROCESS_MANIFEST = 52;</code>
       */
      PROCESS_MANIFEST(52, 52),
      /**
       * <code>PROCESS_TEST_MANIFEST = 53;</code>
       */
      PROCESS_TEST_MANIFEST(53, 53),
      /**
       * <code>RENDERSCRIPT_COMPILE = 54;</code>
       */
      RENDERSCRIPT_COMPILE(54, 54),
      /**
       * <code>SHADER_COMPILE = 55;</code>
       */
      SHADER_COMPILE(55, 55),
      /**
       * <code>SIGNING_REPORT = 56;</code>
       */
      SIGNING_REPORT(56, 56),
      /**
       * <code>SINGLE_FILE_COPY = 57;</code>
       */
      SINGLE_FILE_COPY(57, 57),
      /**
       * <code>SOURCE_SETS = 58;</code>
       */
      SOURCE_SETS(58, 58),
      /**
       * <code>SPLIT_ZIP_ALIGN = 59;</code>
       */
      SPLIT_ZIP_ALIGN(59, 59),
      /**
       * <code>STREAM_BASED = 60;</code>
       */
      STREAM_BASED(60, 60),
      /**
       * <code>STRIP_DEBUG_SYMBOL = 61;</code>
       */
      STRIP_DEBUG_SYMBOL(61, 61),
      /**
       * <code>STRIP_DEPENDENCIES = 62;</code>
       */
      STRIP_DEPENDENCIES(62, 62),
      /**
       * <code>TEST_MODULE_PRO_GUARD = 63;</code>
       */
      TEST_MODULE_PRO_GUARD(63, 63),
      /**
       * <code>TEST_SERVER = 64;</code>
       */
      TEST_SERVER(64, 64),
      /**
       * <code>TRANSFORM = 65;</code>
       */
      TRANSFORM(65, 65),
      /**
       * <code>UNINSTALL = 66;</code>
       */
      UNINSTALL(66, 66),
      /**
       * <code>VALIDATE_SIGNING = 67;</code>
       */
      VALIDATE_SIGNING(67, 67),
      /**
       * <code>ZIP_ALIGN = 68;</code>
       */
      ZIP_ALIGN(68, 68),
      /**
       * <code>JAVA_COMPILE = 69;</code>
       */
      JAVA_COMPILE(69, 69),
      ;

      /**
       * <code>UNKNOWN_TASK_TYPE = 0;</code>
       */
      public static final int UNKNOWN_TASK_TYPE_VALUE = 0;
      /**
       * <code>AIDL_COMPILE = 1;</code>
       */
      public static final int AIDL_COMPILE_VALUE = 1;
      /**
       * <code>ANDROID_JAR = 2;</code>
       */
      public static final int ANDROID_JAR_VALUE = 2;
      /**
       * <code>ANDROID_JAVA_COMPILE = 3;</code>
       */
      public static final int ANDROID_JAVA_COMPILE_VALUE = 3;
      /**
       * <code>ANDROID_REPORT = 4;</code>
       */
      public static final int ANDROID_REPORT_VALUE = 4;
      /**
       * <code>ANDROID_UNIT_TEST = 5;</code>
       */
      public static final int ANDROID_UNIT_TEST_VALUE = 5;
      /**
       * <code>BUILD_EMULATOR = 6;</code>
       */
      public static final int BUILD_EMULATOR_VALUE = 6;
      /**
       * <code>BUILD_INFO_LOADER = 7;</code>
       */
      public static final int BUILD_INFO_LOADER_VALUE = 7;
      /**
       * <code>CHECK_MANIFEST = 8;</code>
       */
      public static final int CHECK_MANIFEST_VALUE = 8;
      /**
       * <code>COMPATIBLE_SCREENS_MANIFEST = 9;</code>
       */
      public static final int COMPATIBLE_SCREENS_MANIFEST_VALUE = 9;
      /**
       * <code>CREATE_MANIFEST_KEEP_LIST = 10;</code>
       */
      public static final int CREATE_MANIFEST_KEEP_LIST_VALUE = 10;
      /**
       * <code>DATA_BINDING_EXPORT_BUILD_INFO = 11;</code>
       */
      public static final int DATA_BINDING_EXPORT_BUILD_INFO_VALUE = 11;
      /**
       * <code>DATA_BINDING_PROCESS_LAYOUTS = 12;</code>
       */
      public static final int DATA_BINDING_PROCESS_LAYOUTS_VALUE = 12;
      /**
       * <code>DEPENDENCY_REPORT = 13;</code>
       */
      public static final int DEPENDENCY_REPORT_VALUE = 13;
      /**
       * <code>DEVICE_PROVIDER_INSTRUMENT_TEST = 14;</code>
       */
      public static final int DEVICE_PROVIDER_INSTRUMENT_TEST_VALUE = 14;
      /**
       * <code>EXTERNAL_BUILD_ANCHOR = 15;</code>
       */
      public static final int EXTERNAL_BUILD_ANCHOR_VALUE = 15;
      /**
       * <code>EXTERNAL_NATIVE_BUILD_JSON = 16;</code>
       */
      public static final int EXTERNAL_NATIVE_BUILD_JSON_VALUE = 16;
      /**
       * <code>EXTERNAL_NATIVE_BUILD = 17;</code>
       */
      public static final int EXTERNAL_NATIVE_BUILD_VALUE = 17;
      /**
       * <code>EXTRACT_ANNOTATIONS = 18;</code>
       */
      public static final int EXTRACT_ANNOTATIONS_VALUE = 18;
      /**
       * <code>EXTRACT_JAVA_RESOURCES = 19;</code>
       */
      public static final int EXTRACT_JAVA_RESOURCES_VALUE = 19;
      /**
       * <code>EXTRACT_PROGUARD_FILES = 20;</code>
       */
      public static final int EXTRACT_PROGUARD_FILES_VALUE = 20;
      /**
       * <code>FAST_DEPLOY_RUNTIME_EXTRACTOR = 21;</code>
       */
      public static final int FAST_DEPLOY_RUNTIME_EXTRACTOR_VALUE = 21;
      /**
       * <code>FILTERED_JAR_COPY = 22;</code>
       */
      public static final int FILTERED_JAR_COPY_VALUE = 22;
      /**
       * <code>GENERATE_APK_DATA = 23;</code>
       */
      public static final int GENERATE_APK_DATA_VALUE = 23;
      /**
       * <code>GENERATE_BUILD_CONFIG = 24;</code>
       */
      public static final int GENERATE_BUILD_CONFIG_VALUE = 24;
      /**
       * <code>GENERATE_INSTANT_RUN_APP_INFO = 25;</code>
       */
      public static final int GENERATE_INSTANT_RUN_APP_INFO_VALUE = 25;
      /**
       * <code>GENERATE_RES_VALUES = 26;</code>
       */
      public static final int GENERATE_RES_VALUES_VALUE = 26;
      /**
       * <code>GENERATE_SPLIT_ABI_RES = 27;</code>
       */
      public static final int GENERATE_SPLIT_ABI_RES_VALUE = 27;
      /**
       * <code>GOOGLE_SERVICES = 28;</code>
       */
      public static final int GOOGLE_SERVICES_VALUE = 28;
      /**
       * <code>INCREMENTAL_SAFEGUARD = 29;</code>
       */
      public static final int INCREMENTAL_SAFEGUARD_VALUE = 29;
      /**
       * <code>INSTALL_VARIANT = 30;</code>
       */
      public static final int INSTALL_VARIANT_VALUE = 30;
      /**
       * <code>INSTANT_RUN_SPLIT_APK_BUILDER = 31;</code>
       */
      public static final int INSTANT_RUN_SPLIT_APK_BUILDER_VALUE = 31;
      /**
       * <code>INSTANT_RUN_WRAPPER = 32;</code>
       */
      public static final int INSTANT_RUN_WRAPPER_VALUE = 32;
      /**
       * <code>INVOKE_MANIFEST_MERGER = 33;</code>
       */
      public static final int INVOKE_MANIFEST_MERGER_VALUE = 33;
      /**
       * <code>JACK_JACOCO_REPORT = 34;</code>
       */
      public static final int JACK_JACOCO_REPORT_VALUE = 34;
      /**
       * <code>JACOCO_REPORT = 35;</code>
       */
      public static final int JACOCO_REPORT_VALUE = 35;
      /**
       * <code>LINT = 36;</code>
       */
      public static final int LINT_VALUE = 36;
      /**
       * <code>LINT_COMPILE = 37;</code>
       */
      public static final int LINT_COMPILE_VALUE = 37;
      /**
       * <code>MERGE_FILE = 38;</code>
       */
      public static final int MERGE_FILE_VALUE = 38;
      /**
       * <code>MERGE_MANIFESTS = 39;</code>
       */
      public static final int MERGE_MANIFESTS_VALUE = 39;
      /**
       * <code>MERGE_RESOURCES = 40;</code>
       */
      public static final int MERGE_RESOURCES_VALUE = 40;
      /**
       * <code>MERGE_SOURCE_SET_FOLDERS = 41;</code>
       */
      public static final int MERGE_SOURCE_SET_FOLDERS_VALUE = 41;
      /**
       * <code>MOCKABLE_ANDROID_JAR = 42;</code>
       */
      public static final int MOCKABLE_ANDROID_JAR_VALUE = 42;
      /**
       * <code>NDK_COMPILE = 43;</code>
       */
      public static final int NDK_COMPILE_VALUE = 43;
      /**
       * <code>NDK = 44;</code>
       */
      public static final int NDK_VALUE = 44;
      /**
       * <code>PACKAGE_APPLICATION = 45;</code>
       */
      public static final int PACKAGE_APPLICATION_VALUE = 45;
      /**
       * <code>PACKAGE_SPLIT_ABI = 46;</code>
       */
      public static final int PACKAGE_SPLIT_ABI_VALUE = 46;
      /**
       * <code>PACKAGE_SPLIT_RES = 47;</code>
       */
      public static final int PACKAGE_SPLIT_RES_VALUE = 47;
      /**
       * <code>PRE_COLD_SWAP = 48;</code>
       */
      public static final int PRE_COLD_SWAP_VALUE = 48;
      /**
       * <code>PREPARE_DEPENDENCIES = 49;</code>
       */
      public static final int PREPARE_DEPENDENCIES_VALUE = 49;
      /**
       * <code>PREPARE_LIBRARY = 50;</code>
       */
      public static final int PREPARE_LIBRARY_VALUE = 50;
      /**
       * <code>PROCESS_ANDROID_RESOURCES = 51;</code>
       */
      public static final int PROCESS_ANDROID_RESOURCES_VALUE = 51;
      /**
       * <code>PROCESS_MANIFEST = 52;</code>
       */
      public static final int PROCESS_MANIFEST_VALUE = 52;
      /**
       * <code>PROCESS_TEST_MANIFEST = 53;</code>
       */
      public static final int PROCESS_TEST_MANIFEST_VALUE = 53;
      /**
       * <code>RENDERSCRIPT_COMPILE = 54;</code>
       */
      public static final int RENDERSCRIPT_COMPILE_VALUE = 54;
      /**
       * <code>SHADER_COMPILE = 55;</code>
       */
      public static final int SHADER_COMPILE_VALUE = 55;
      /**
       * <code>SIGNING_REPORT = 56;</code>
       */
      public static final int SIGNING_REPORT_VALUE = 56;
      /**
       * <code>SINGLE_FILE_COPY = 57;</code>
       */
      public static final int SINGLE_FILE_COPY_VALUE = 57;
      /**
       * <code>SOURCE_SETS = 58;</code>
       */
      public static final int SOURCE_SETS_VALUE = 58;
      /**
       * <code>SPLIT_ZIP_ALIGN = 59;</code>
       */
      public static final int SPLIT_ZIP_ALIGN_VALUE = 59;
      /**
       * <code>STREAM_BASED = 60;</code>
       */
      public static final int STREAM_BASED_VALUE = 60;
      /**
       * <code>STRIP_DEBUG_SYMBOL = 61;</code>
       */
      public static final int STRIP_DEBUG_SYMBOL_VALUE = 61;
      /**
       * <code>STRIP_DEPENDENCIES = 62;</code>
       */
      public static final int STRIP_DEPENDENCIES_VALUE = 62;
      /**
       * <code>TEST_MODULE_PRO_GUARD = 63;</code>
       */
      public static final int TEST_MODULE_PRO_GUARD_VALUE = 63;
      /**
       * <code>TEST_SERVER = 64;</code>
       */
      public static final int TEST_SERVER_VALUE = 64;
      /**
       * <code>TRANSFORM = 65;</code>
       */
      public static final int TRANSFORM_VALUE = 65;
      /**
       * <code>UNINSTALL = 66;</code>
       */
      public static final int UNINSTALL_VALUE = 66;
      /**
       * <code>VALIDATE_SIGNING = 67;</code>
       */
      public static final int VALIDATE_SIGNING_VALUE = 67;
      /**
       * <code>ZIP_ALIGN = 68;</code>
       */
      public static final int ZIP_ALIGN_VALUE = 68;
      /**
       * <code>JAVA_COMPILE = 69;</code>
       */
      public static final int JAVA_COMPILE_VALUE = 69;


      public final int getNumber() { return value; }

      public static Type valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_TASK_TYPE;
          case 1: return AIDL_COMPILE;
          case 2: return ANDROID_JAR;
          case 3: return ANDROID_JAVA_COMPILE;
          case 4: return ANDROID_REPORT;
          case 5: return ANDROID_UNIT_TEST;
          case 6: return BUILD_EMULATOR;
          case 7: return BUILD_INFO_LOADER;
          case 8: return CHECK_MANIFEST;
          case 9: return COMPATIBLE_SCREENS_MANIFEST;
          case 10: return CREATE_MANIFEST_KEEP_LIST;
          case 11: return DATA_BINDING_EXPORT_BUILD_INFO;
          case 12: return DATA_BINDING_PROCESS_LAYOUTS;
          case 13: return DEPENDENCY_REPORT;
          case 14: return DEVICE_PROVIDER_INSTRUMENT_TEST;
          case 15: return EXTERNAL_BUILD_ANCHOR;
          case 16: return EXTERNAL_NATIVE_BUILD_JSON;
          case 17: return EXTERNAL_NATIVE_BUILD;
          case 18: return EXTRACT_ANNOTATIONS;
          case 19: return EXTRACT_JAVA_RESOURCES;
          case 20: return EXTRACT_PROGUARD_FILES;
          case 21: return FAST_DEPLOY_RUNTIME_EXTRACTOR;
          case 22: return FILTERED_JAR_COPY;
          case 23: return GENERATE_APK_DATA;
          case 24: return GENERATE_BUILD_CONFIG;
          case 25: return GENERATE_INSTANT_RUN_APP_INFO;
          case 26: return GENERATE_RES_VALUES;
          case 27: return GENERATE_SPLIT_ABI_RES;
          case 28: return GOOGLE_SERVICES;
          case 29: return INCREMENTAL_SAFEGUARD;
          case 30: return INSTALL_VARIANT;
          case 31: return INSTANT_RUN_SPLIT_APK_BUILDER;
          case 32: return INSTANT_RUN_WRAPPER;
          case 33: return INVOKE_MANIFEST_MERGER;
          case 34: return JACK_JACOCO_REPORT;
          case 35: return JACOCO_REPORT;
          case 36: return LINT;
          case 37: return LINT_COMPILE;
          case 38: return MERGE_FILE;
          case 39: return MERGE_MANIFESTS;
          case 40: return MERGE_RESOURCES;
          case 41: return MERGE_SOURCE_SET_FOLDERS;
          case 42: return MOCKABLE_ANDROID_JAR;
          case 43: return NDK_COMPILE;
          case 44: return NDK;
          case 45: return PACKAGE_APPLICATION;
          case 46: return PACKAGE_SPLIT_ABI;
          case 47: return PACKAGE_SPLIT_RES;
          case 48: return PRE_COLD_SWAP;
          case 49: return PREPARE_DEPENDENCIES;
          case 50: return PREPARE_LIBRARY;
          case 51: return PROCESS_ANDROID_RESOURCES;
          case 52: return PROCESS_MANIFEST;
          case 53: return PROCESS_TEST_MANIFEST;
          case 54: return RENDERSCRIPT_COMPILE;
          case 55: return SHADER_COMPILE;
          case 56: return SIGNING_REPORT;
          case 57: return SINGLE_FILE_COPY;
          case 58: return SOURCE_SETS;
          case 59: return SPLIT_ZIP_ALIGN;
          case 60: return STREAM_BASED;
          case 61: return STRIP_DEBUG_SYMBOL;
          case 62: return STRIP_DEPENDENCIES;
          case 63: return TEST_MODULE_PRO_GUARD;
          case 64: return TEST_SERVER;
          case 65: return TRANSFORM;
          case 66: return UNINSTALL;
          case 67: return VALIDATE_SIGNING;
          case 68: return ZIP_ALIGN;
          case 69: return JAVA_COMPILE;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.getDescriptor().getEnumTypes().get(0);
      }

      private static final Type[] VALUES = values();

      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.GradleTaskExecution.Type)
    }

    private int bitField0_;
    // optional .android_studio.GradleTaskExecution.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type type_;
    /**
     * <code>optional .android_studio.GradleTaskExecution.Type type = 1;</code>
     *
     * <pre>
     * The task implementing class.
     *  Custom tasks are recorded as UNKNOWN_TASK_TYPE.
     * </pre>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.GradleTaskExecution.Type type = 1;</code>
     *
     * <pre>
     * The task implementing class.
     *  Custom tasks are recorded as UNKNOWN_TASK_TYPE.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type getType() {
      return type_;
    }

    // optional bool did_work = 2;
    public static final int DID_WORK_FIELD_NUMBER = 2;
    private boolean didWork_;
    /**
     * <code>optional bool did_work = 2;</code>
     *
     * <pre>
     * Whether the task did work (TaskState#getDidWork())
     *  This is not necessarily the inverse of up_to_date: see
     *  https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
     * </pre>
     */
    public boolean hasDidWork() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool did_work = 2;</code>
     *
     * <pre>
     * Whether the task did work (TaskState#getDidWork())
     *  This is not necessarily the inverse of up_to_date: see
     *  https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
     * </pre>
     */
    public boolean getDidWork() {
      return didWork_;
    }

    // optional bool skipped = 3;
    public static final int SKIPPED_FIELD_NUMBER = 3;
    private boolean skipped_;
    /**
     * <code>optional bool skipped = 3;</code>
     *
     * <pre>
     * Whether the task was skipped (TaskState#getSkipped())
     * </pre>
     */
    public boolean hasSkipped() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool skipped = 3;</code>
     *
     * <pre>
     * Whether the task was skipped (TaskState#getSkipped())
     * </pre>
     */
    public boolean getSkipped() {
      return skipped_;
    }

    // optional bool up_to_date = 4;
    public static final int UP_TO_DATE_FIELD_NUMBER = 4;
    private boolean upToDate_;
    /**
     * <code>optional bool up_to_date = 4;</code>
     *
     * <pre>
     * Whether the task was up to date (TaskState#getUpToDate())
     * </pre>
     */
    public boolean hasUpToDate() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool up_to_date = 4;</code>
     *
     * <pre>
     * Whether the task was up to date (TaskState#getUpToDate())
     * </pre>
     */
    public boolean getUpToDate() {
      return upToDate_;
    }

    // optional bool failed = 5;
    public static final int FAILED_FIELD_NUMBER = 5;
    private boolean failed_;
    /**
     * <code>optional bool failed = 5;</code>
     *
     * <pre>
     * Whether the task failed
     * </pre>
     */
    public boolean hasFailed() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bool failed = 5;</code>
     *
     * <pre>
     * Whether the task failed
     * </pre>
     */
    public boolean getFailed() {
      return failed_;
    }

    private void initFields() {
      type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type.UNKNOWN_TASK_TYPE;
      didWork_ = false;
      skipped_ = false;
      upToDate_ = false;
      failed_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, didWork_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, skipped_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, upToDate_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(5, failed_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, didWork_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, skipped_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, upToDate_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, failed_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleTaskExecution}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecutionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTaskExecution_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTaskExecution_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type.UNKNOWN_TASK_TYPE;
        bitField0_ = (bitField0_ & ~0x00000001);
        didWork_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        skipped_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        upToDate_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        failed_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTaskExecution_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.didWork_ = didWork_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.skipped_ = skipped_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.upToDate_ = upToDate_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.failed_ = failed_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasDidWork()) {
          setDidWork(other.getDidWork());
        }
        if (other.hasSkipped()) {
          setSkipped(other.getSkipped());
        }
        if (other.hasUpToDate()) {
          setUpToDate(other.getUpToDate());
        }
        if (other.hasFailed()) {
          setFailed(other.getFailed());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.GradleTaskExecution.Type type = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type.UNKNOWN_TASK_TYPE;
      /**
       * <code>optional .android_studio.GradleTaskExecution.Type type = 1;</code>
       *
       * <pre>
       * The task implementing class.
       *  Custom tasks are recorded as UNKNOWN_TASK_TYPE.
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution.Type type = 1;</code>
       *
       * <pre>
       * The task implementing class.
       *  Custom tasks are recorded as UNKNOWN_TASK_TYPE.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type getType() {
        return type_;
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution.Type type = 1;</code>
       *
       * <pre>
       * The task implementing class.
       *  Custom tasks are recorded as UNKNOWN_TASK_TYPE.
       * </pre>
       */
      public Builder setType(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTaskExecution.Type type = 1;</code>
       *
       * <pre>
       * The task implementing class.
       *  Custom tasks are recorded as UNKNOWN_TASK_TYPE.
       * </pre>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTaskExecution.Type.UNKNOWN_TASK_TYPE;
        onChanged();
        return this;
      }

      // optional bool did_work = 2;
      private boolean didWork_ ;
      /**
       * <code>optional bool did_work = 2;</code>
       *
       * <pre>
       * Whether the task did work (TaskState#getDidWork())
       *  This is not necessarily the inverse of up_to_date: see
       *  https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
       * </pre>
       */
      public boolean hasDidWork() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool did_work = 2;</code>
       *
       * <pre>
       * Whether the task did work (TaskState#getDidWork())
       *  This is not necessarily the inverse of up_to_date: see
       *  https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
       * </pre>
       */
      public boolean getDidWork() {
        return didWork_;
      }
      /**
       * <code>optional bool did_work = 2;</code>
       *
       * <pre>
       * Whether the task did work (TaskState#getDidWork())
       *  This is not necessarily the inverse of up_to_date: see
       *  https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
       * </pre>
       */
      public Builder setDidWork(boolean value) {
        bitField0_ |= 0x00000002;
        didWork_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool did_work = 2;</code>
       *
       * <pre>
       * Whether the task did work (TaskState#getDidWork())
       *  This is not necessarily the inverse of up_to_date: see
       *  https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork()
       * </pre>
       */
      public Builder clearDidWork() {
        bitField0_ = (bitField0_ & ~0x00000002);
        didWork_ = false;
        onChanged();
        return this;
      }

      // optional bool skipped = 3;
      private boolean skipped_ ;
      /**
       * <code>optional bool skipped = 3;</code>
       *
       * <pre>
       * Whether the task was skipped (TaskState#getSkipped())
       * </pre>
       */
      public boolean hasSkipped() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool skipped = 3;</code>
       *
       * <pre>
       * Whether the task was skipped (TaskState#getSkipped())
       * </pre>
       */
      public boolean getSkipped() {
        return skipped_;
      }
      /**
       * <code>optional bool skipped = 3;</code>
       *
       * <pre>
       * Whether the task was skipped (TaskState#getSkipped())
       * </pre>
       */
      public Builder setSkipped(boolean value) {
        bitField0_ |= 0x00000004;
        skipped_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool skipped = 3;</code>
       *
       * <pre>
       * Whether the task was skipped (TaskState#getSkipped())
       * </pre>
       */
      public Builder clearSkipped() {
        bitField0_ = (bitField0_ & ~0x00000004);
        skipped_ = false;
        onChanged();
        return this;
      }

      // optional bool up_to_date = 4;
      private boolean upToDate_ ;
      /**
       * <code>optional bool up_to_date = 4;</code>
       *
       * <pre>
       * Whether the task was up to date (TaskState#getUpToDate())
       * </pre>
       */
      public boolean hasUpToDate() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool up_to_date = 4;</code>
       *
       * <pre>
       * Whether the task was up to date (TaskState#getUpToDate())
       * </pre>
       */
      public boolean getUpToDate() {
        return upToDate_;
      }
      /**
       * <code>optional bool up_to_date = 4;</code>
       *
       * <pre>
       * Whether the task was up to date (TaskState#getUpToDate())
       * </pre>
       */
      public Builder setUpToDate(boolean value) {
        bitField0_ |= 0x00000008;
        upToDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool up_to_date = 4;</code>
       *
       * <pre>
       * Whether the task was up to date (TaskState#getUpToDate())
       * </pre>
       */
      public Builder clearUpToDate() {
        bitField0_ = (bitField0_ & ~0x00000008);
        upToDate_ = false;
        onChanged();
        return this;
      }

      // optional bool failed = 5;
      private boolean failed_ ;
      /**
       * <code>optional bool failed = 5;</code>
       *
       * <pre>
       * Whether the task failed
       * </pre>
       */
      public boolean hasFailed() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool failed = 5;</code>
       *
       * <pre>
       * Whether the task failed
       * </pre>
       */
      public boolean getFailed() {
        return failed_;
      }
      /**
       * <code>optional bool failed = 5;</code>
       *
       * <pre>
       * Whether the task failed
       * </pre>
       */
      public Builder setFailed(boolean value) {
        bitField0_ |= 0x00000010;
        failed_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool failed = 5;</code>
       *
       * <pre>
       * Whether the task failed
       * </pre>
       */
      public Builder clearFailed() {
        bitField0_ = (bitField0_ & ~0x00000010);
        failed_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleTaskExecution)
    }

    static {
      defaultInstance = new GradleTaskExecution(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleTaskExecution)
  }

  public interface GradleTransformExecutionOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.GradleTransformExecution.Type type = 1;
    /**
     * <code>optional .android_studio.GradleTransformExecution.Type type = 1;</code>
     *
     * <pre>
     * The transform implementing class.
     *  Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
     * </pre>
     */
    boolean hasType();
    /**
     * <code>optional .android_studio.GradleTransformExecution.Type type = 1;</code>
     *
     * <pre>
     * The transform implementing class.
     *  Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type getType();

    // optional bool is_incremental = 2;
    /**
     * <code>optional bool is_incremental = 2;</code>
     *
     * <pre>
     * Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
     *  or was (in the case of TASK_TRANSFORM) incremental.
     * </pre>
     */
    boolean hasIsIncremental();
    /**
     * <code>optional bool is_incremental = 2;</code>
     *
     * <pre>
     * Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
     *  or was (in the case of TASK_TRANSFORM) incremental.
     * </pre>
     */
    boolean getIsIncremental();
  }
  /**
   * Protobuf type {@code android_studio.GradleTransformExecution}
   */
  public static final class GradleTransformExecution extends
      com.google.protobuf.GeneratedMessage
      implements GradleTransformExecutionOrBuilder {
    // Use GradleTransformExecution.newBuilder() to construct.
    private GradleTransformExecution(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GradleTransformExecution(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GradleTransformExecution defaultInstance;
    public static GradleTransformExecution getDefaultInstance() {
      return defaultInstance;
    }

    public GradleTransformExecution getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GradleTransformExecution(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type value = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              isIncremental_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTransformExecution_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTransformExecution_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Builder.class);
    }

    public static com.google.protobuf.Parser<GradleTransformExecution> PARSER =
        new com.google.protobuf.AbstractParser<GradleTransformExecution>() {
      public GradleTransformExecution parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GradleTransformExecution(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GradleTransformExecution> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.GradleTransformExecution.Type}
     *
     * <pre>
     * The transform class.
     * </pre>
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_TRANSFORM_TYPE = 0;</code>
       */
      UNKNOWN_TRANSFORM_TYPE(0, 0),
      /**
       * <code>DEX = 1;</code>
       */
      DEX(1, 1),
      /**
       * <code>EXTRACT_JARS = 2;</code>
       */
      EXTRACT_JARS(2, 2),
      /**
       * <code>INSTANT_RUN_DEX = 3;</code>
       */
      INSTANT_RUN_DEX(3, 3),
      /**
       * <code>INSTANT_RUN_SLICER = 4;</code>
       */
      INSTANT_RUN_SLICER(4, 4),
      /**
       * <code>INSTANT_RUN = 5;</code>
       */
      INSTANT_RUN(5, 5),
      /**
       * <code>INSTANT_RUN_VERIFER = 6;</code>
       */
      INSTANT_RUN_VERIFER(6, 6),
      /**
       * <code>JACK_PRE_DEX = 7;</code>
       */
      JACK_PRE_DEX(7, 7),
      /**
       * <code>JACK = 8;</code>
       */
      JACK(8, 8),
      /**
       * <code>JACOCO = 9;</code>
       */
      JACOCO(9, 9),
      /**
       * <code>JAR_MERGING = 10;</code>
       */
      JAR_MERGING(10, 10),
      /**
       * <code>LIBRARY_JAR = 11;</code>
       */
      LIBRARY_JAR(11, 11),
      /**
       * <code>LIBRARY_JNI_LIBS = 12;</code>
       */
      LIBRARY_JNI_LIBS(12, 12),
      /**
       * <code>MERGE_JAVA_RESOURCES = 13;</code>
       */
      MERGE_JAVA_RESOURCES(13, 13),
      /**
       * <code>MULTI_DEX = 14;</code>
       */
      MULTI_DEX(14, 14),
      /**
       * <code>NEW_SHRINKER = 15;</code>
       */
      NEW_SHRINKER(15, 15),
      /**
       * <code>NO_CHANGES_VERIFIER = 16;</code>
       */
      NO_CHANGES_VERIFIER(16, 16),
      /**
       * <code>PRO_GUARD = 17;</code>
       */
      PRO_GUARD(17, 17),
      /**
       * <code>SHRINK_RESOURCES = 18;</code>
       */
      SHRINK_RESOURCES(18, 18),
      ;

      /**
       * <code>UNKNOWN_TRANSFORM_TYPE = 0;</code>
       */
      public static final int UNKNOWN_TRANSFORM_TYPE_VALUE = 0;
      /**
       * <code>DEX = 1;</code>
       */
      public static final int DEX_VALUE = 1;
      /**
       * <code>EXTRACT_JARS = 2;</code>
       */
      public static final int EXTRACT_JARS_VALUE = 2;
      /**
       * <code>INSTANT_RUN_DEX = 3;</code>
       */
      public static final int INSTANT_RUN_DEX_VALUE = 3;
      /**
       * <code>INSTANT_RUN_SLICER = 4;</code>
       */
      public static final int INSTANT_RUN_SLICER_VALUE = 4;
      /**
       * <code>INSTANT_RUN = 5;</code>
       */
      public static final int INSTANT_RUN_VALUE = 5;
      /**
       * <code>INSTANT_RUN_VERIFER = 6;</code>
       */
      public static final int INSTANT_RUN_VERIFER_VALUE = 6;
      /**
       * <code>JACK_PRE_DEX = 7;</code>
       */
      public static final int JACK_PRE_DEX_VALUE = 7;
      /**
       * <code>JACK = 8;</code>
       */
      public static final int JACK_VALUE = 8;
      /**
       * <code>JACOCO = 9;</code>
       */
      public static final int JACOCO_VALUE = 9;
      /**
       * <code>JAR_MERGING = 10;</code>
       */
      public static final int JAR_MERGING_VALUE = 10;
      /**
       * <code>LIBRARY_JAR = 11;</code>
       */
      public static final int LIBRARY_JAR_VALUE = 11;
      /**
       * <code>LIBRARY_JNI_LIBS = 12;</code>
       */
      public static final int LIBRARY_JNI_LIBS_VALUE = 12;
      /**
       * <code>MERGE_JAVA_RESOURCES = 13;</code>
       */
      public static final int MERGE_JAVA_RESOURCES_VALUE = 13;
      /**
       * <code>MULTI_DEX = 14;</code>
       */
      public static final int MULTI_DEX_VALUE = 14;
      /**
       * <code>NEW_SHRINKER = 15;</code>
       */
      public static final int NEW_SHRINKER_VALUE = 15;
      /**
       * <code>NO_CHANGES_VERIFIER = 16;</code>
       */
      public static final int NO_CHANGES_VERIFIER_VALUE = 16;
      /**
       * <code>PRO_GUARD = 17;</code>
       */
      public static final int PRO_GUARD_VALUE = 17;
      /**
       * <code>SHRINK_RESOURCES = 18;</code>
       */
      public static final int SHRINK_RESOURCES_VALUE = 18;


      public final int getNumber() { return value; }

      public static Type valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_TRANSFORM_TYPE;
          case 1: return DEX;
          case 2: return EXTRACT_JARS;
          case 3: return INSTANT_RUN_DEX;
          case 4: return INSTANT_RUN_SLICER;
          case 5: return INSTANT_RUN;
          case 6: return INSTANT_RUN_VERIFER;
          case 7: return JACK_PRE_DEX;
          case 8: return JACK;
          case 9: return JACOCO;
          case 10: return JAR_MERGING;
          case 11: return LIBRARY_JAR;
          case 12: return LIBRARY_JNI_LIBS;
          case 13: return MERGE_JAVA_RESOURCES;
          case 14: return MULTI_DEX;
          case 15: return NEW_SHRINKER;
          case 16: return NO_CHANGES_VERIFIER;
          case 17: return PRO_GUARD;
          case 18: return SHRINK_RESOURCES;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.getDescriptor().getEnumTypes().get(0);
      }

      private static final Type[] VALUES = values();

      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.GradleTransformExecution.Type)
    }

    private int bitField0_;
    // optional .android_studio.GradleTransformExecution.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type type_;
    /**
     * <code>optional .android_studio.GradleTransformExecution.Type type = 1;</code>
     *
     * <pre>
     * The transform implementing class.
     *  Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
     * </pre>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.GradleTransformExecution.Type type = 1;</code>
     *
     * <pre>
     * The transform implementing class.
     *  Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type getType() {
      return type_;
    }

    // optional bool is_incremental = 2;
    public static final int IS_INCREMENTAL_FIELD_NUMBER = 2;
    private boolean isIncremental_;
    /**
     * <code>optional bool is_incremental = 2;</code>
     *
     * <pre>
     * Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
     *  or was (in the case of TASK_TRANSFORM) incremental.
     * </pre>
     */
    public boolean hasIsIncremental() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool is_incremental = 2;</code>
     *
     * <pre>
     * Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
     *  or was (in the case of TASK_TRANSFORM) incremental.
     * </pre>
     */
    public boolean getIsIncremental() {
      return isIncremental_;
    }

    private void initFields() {
      type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type.UNKNOWN_TRANSFORM_TYPE;
      isIncremental_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, isIncremental_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, isIncremental_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GradleTransformExecution}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecutionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTransformExecution_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTransformExecution_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type.UNKNOWN_TRANSFORM_TYPE;
        bitField0_ = (bitField0_ & ~0x00000001);
        isIncremental_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GradleTransformExecution_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.isIncremental_ = isIncremental_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasIsIncremental()) {
          setIsIncremental(other.getIsIncremental());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.GradleTransformExecution.Type type = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type.UNKNOWN_TRANSFORM_TYPE;
      /**
       * <code>optional .android_studio.GradleTransformExecution.Type type = 1;</code>
       *
       * <pre>
       * The transform implementing class.
       *  Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution.Type type = 1;</code>
       *
       * <pre>
       * The transform implementing class.
       *  Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type getType() {
        return type_;
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution.Type type = 1;</code>
       *
       * <pre>
       * The transform implementing class.
       *  Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
       * </pre>
       */
      public Builder setType(com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.GradleTransformExecution.Type type = 1;</code>
       *
       * <pre>
       * The transform implementing class.
       *  Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE.
       * </pre>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.GradleTransformExecution.Type.UNKNOWN_TRANSFORM_TYPE;
        onChanged();
        return this;
      }

      // optional bool is_incremental = 2;
      private boolean isIncremental_ ;
      /**
       * <code>optional bool is_incremental = 2;</code>
       *
       * <pre>
       * Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
       *  or was (in the case of TASK_TRANSFORM) incremental.
       * </pre>
       */
      public boolean hasIsIncremental() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool is_incremental = 2;</code>
       *
       * <pre>
       * Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
       *  or was (in the case of TASK_TRANSFORM) incremental.
       * </pre>
       */
      public boolean getIsIncremental() {
        return isIncremental_;
      }
      /**
       * <code>optional bool is_incremental = 2;</code>
       *
       * <pre>
       * Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
       *  or was (in the case of TASK_TRANSFORM) incremental.
       * </pre>
       */
      public Builder setIsIncremental(boolean value) {
        bitField0_ |= 0x00000002;
        isIncremental_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool is_incremental = 2;</code>
       *
       * <pre>
       * Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION)
       *  or was (in the case of TASK_TRANSFORM) incremental.
       * </pre>
       */
      public Builder clearIsIncremental() {
        bitField0_ = (bitField0_ & ~0x00000002);
        isIncremental_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GradleTransformExecution)
    }

    static {
      defaultInstance = new GradleTransformExecution(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GradleTransformExecution)
  }

  public interface InstantRunStatusOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;
    /**
     * <code>optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;</code>
     *
     * <pre>
     * The type of artifacts built in this invocation.
     *  e.g. COLD for when the changes cannot be hot-swapped, either due to the
     *  app not running on the users device or the changes cannot be hot swapped.
     * </pre>
     */
    boolean hasBuildMode();
    /**
     * <code>optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;</code>
     *
     * <pre>
     * The type of artifacts built in this invocation.
     *  e.g. COLD for when the changes cannot be hot-swapped, either due to the
     *  app not running on the users device or the changes cannot be hot swapped.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode getBuildMode();

    // optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;
    /**
     * <code>optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;</code>
     *
     * <pre>
     * The type of deploy that the build can generate artifacts for.
     * </pre>
     */
    boolean hasPatchingPolicy();
    /**
     * <code>optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;</code>
     *
     * <pre>
     * The type of deploy that the build can generate artifacts for.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy getPatchingPolicy();

    // optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;
    /**
     * <code>optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;</code>
     *
     * <pre>
     * The result of the verifier run, whether the users change can be hot-swapped
     *  or requires a cold swap or full build is determined by the verifier.
     * </pre>
     */
    boolean hasVerifierStatus();
    /**
     * <code>optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;</code>
     *
     * <pre>
     * The result of the verifier run, whether the users change can be hot-swapped
     *  or requires a cold swap or full build is determined by the verifier.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus getVerifierStatus();

    // repeated .android_studio.InstantRunArtifact artifact = 4;
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact> 
        getArtifactList();
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact getArtifact(int index);
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    int getArtifactCount();
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder> 
        getArtifactOrBuilderList();
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder getArtifactOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code android_studio.InstantRunStatus}
   */
  public static final class InstantRunStatus extends
      com.google.protobuf.GeneratedMessage
      implements InstantRunStatusOrBuilder {
    // Use InstantRunStatus.newBuilder() to construct.
    private InstantRunStatus(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private InstantRunStatus(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final InstantRunStatus defaultInstance;
    public static InstantRunStatus getDefaultInstance() {
      return defaultInstance;
    }

    public InstantRunStatus getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private InstantRunStatus(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode value = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                buildMode_ = value;
              }
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy value = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                patchingPolicy_ = value;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus value = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                verifierStatus_ = value;
              }
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                artifact_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact>();
                mutable_bitField0_ |= 0x00000008;
              }
              artifact_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          artifact_ = java.util.Collections.unmodifiableList(artifact_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunStatus_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunStatus_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.Builder.class);
    }

    public static com.google.protobuf.Parser<InstantRunStatus> PARSER =
        new com.google.protobuf.AbstractParser<InstantRunStatus>() {
      public InstantRunStatus parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new InstantRunStatus(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<InstantRunStatus> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.InstantRunStatus.BuildMode}
     */
    public enum BuildMode
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_BUILD_MODE = 0;</code>
       */
      UNKNOWN_BUILD_MODE(0, 0),
      /**
       * <code>HOT_WARM = 1;</code>
       */
      HOT_WARM(1, 1),
      /**
       * <code>COLD = 2;</code>
       */
      COLD(2, 2),
      /**
       * <code>FULL = 3;</code>
       */
      FULL(3, 3),
      ;

      /**
       * <code>UNKNOWN_BUILD_MODE = 0;</code>
       */
      public static final int UNKNOWN_BUILD_MODE_VALUE = 0;
      /**
       * <code>HOT_WARM = 1;</code>
       */
      public static final int HOT_WARM_VALUE = 1;
      /**
       * <code>COLD = 2;</code>
       */
      public static final int COLD_VALUE = 2;
      /**
       * <code>FULL = 3;</code>
       */
      public static final int FULL_VALUE = 3;


      public final int getNumber() { return value; }

      public static BuildMode valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_BUILD_MODE;
          case 1: return HOT_WARM;
          case 2: return COLD;
          case 3: return FULL;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<BuildMode>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<BuildMode>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<BuildMode>() {
              public BuildMode findValueByNumber(int number) {
                return BuildMode.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDescriptor().getEnumTypes().get(0);
      }

      private static final BuildMode[] VALUES = values();

      public static BuildMode valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private BuildMode(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.InstantRunStatus.BuildMode)
    }

    /**
     * Protobuf enum {@code android_studio.InstantRunStatus.PatchingPolicy}
     */
    public enum PatchingPolicy
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_PATCHING_POLICY = 0;</code>
       */
      UNKNOWN_PATCHING_POLICY(0, 0),
      /**
       * <code>PRE_LOLLIPOP = 1;</code>
       *
       * <pre>
       * No Cold swap is possible
       * </pre>
       */
      PRE_LOLLIPOP(1, 1),
      /**
       * <code>MULTI_DEX = 2;</code>
       *
       * <pre>
       * Cold swap done by shipping dex classes to the Instant Run runtime
       * </pre>
       */
      MULTI_DEX(2, 2),
      /**
       * <code>MULTI_APK = 3;</code>
       *
       * <pre>
       * Cold swap done by reinstalling APK splits.
       * </pre>
       */
      MULTI_APK(3, 3),
      ;

      /**
       * <code>UNKNOWN_PATCHING_POLICY = 0;</code>
       */
      public static final int UNKNOWN_PATCHING_POLICY_VALUE = 0;
      /**
       * <code>PRE_LOLLIPOP = 1;</code>
       *
       * <pre>
       * No Cold swap is possible
       * </pre>
       */
      public static final int PRE_LOLLIPOP_VALUE = 1;
      /**
       * <code>MULTI_DEX = 2;</code>
       *
       * <pre>
       * Cold swap done by shipping dex classes to the Instant Run runtime
       * </pre>
       */
      public static final int MULTI_DEX_VALUE = 2;
      /**
       * <code>MULTI_APK = 3;</code>
       *
       * <pre>
       * Cold swap done by reinstalling APK splits.
       * </pre>
       */
      public static final int MULTI_APK_VALUE = 3;


      public final int getNumber() { return value; }

      public static PatchingPolicy valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_PATCHING_POLICY;
          case 1: return PRE_LOLLIPOP;
          case 2: return MULTI_DEX;
          case 3: return MULTI_APK;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<PatchingPolicy>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<PatchingPolicy>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<PatchingPolicy>() {
              public PatchingPolicy findValueByNumber(int number) {
                return PatchingPolicy.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDescriptor().getEnumTypes().get(1);
      }

      private static final PatchingPolicy[] VALUES = values();

      public static PatchingPolicy valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private PatchingPolicy(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.InstantRunStatus.PatchingPolicy)
    }

    /**
     * Protobuf enum {@code android_studio.InstantRunStatus.VerifierStatus}
     */
    public enum VerifierStatus
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_VERIFIER_STATUS = 0;</code>
       */
      UNKNOWN_VERIFIER_STATUS(0, 0),
      /**
       * <code>COMPATIBLE = 1;</code>
       */
      COMPATIBLE(1, 1),
      /**
       * <code>NOT_RUN = 2;</code>
       *
       * <pre>
       * the verifier did not run successfully.
       * </pre>
       */
      NOT_RUN(2, 2),
      /**
       * <code>INSTANT_RUN_DISABLED = 3;</code>
       *
       * <pre>
       * InstantRun disabled on element like a method, class or package.
       * </pre>
       */
      INSTANT_RUN_DISABLED(3, 3),
      /**
       * <code>INSTANT_RUN_FAILURE = 4;</code>
       *
       * <pre>
       * Any inability to run the verifier on a file will be tagged as such
       * </pre>
       */
      INSTANT_RUN_FAILURE(4, 4),
      /**
       * <code>CLASS_ADDED = 5;</code>
       *
       * <pre>
       * A new class was added.
       * </pre>
       */
      CLASS_ADDED(5, 5),
      /**
       * <code>PARENT_CLASS_CHANGED = 6;</code>
       *
       * <pre>
       * changes in the hierarchy
       * </pre>
       */
      PARENT_CLASS_CHANGED(6, 6),
      /**
       * <code>IMPLEMENTED_INTERFACES_CHANGE = 7;</code>
       */
      IMPLEMENTED_INTERFACES_CHANGE(7, 7),
      /**
       * <code>CLASS_ANNOTATION_CHANGE = 8;</code>
       *
       * <pre>
       * class related changes.
       * </pre>
       */
      CLASS_ANNOTATION_CHANGE(8, 8),
      /**
       * <code>STATIC_INITIALIZER_CHANGE = 9;</code>
       */
      STATIC_INITIALIZER_CHANGE(9, 9),
      /**
       * <code>CONSTRUCTOR_SIGNATURE_CHANGE = 10;</code>
       *
       * <pre>
       * changes in constructors,
       * </pre>
       */
      CONSTRUCTOR_SIGNATURE_CHANGE(10, 10),
      /**
       * <code>METHOD_SIGNATURE_CHANGE = 11;</code>
       *
       * <pre>
       * changes in method
       * </pre>
       */
      METHOD_SIGNATURE_CHANGE(11, 11),
      /**
       * <code>METHOD_ANNOTATION_CHANGE = 12;</code>
       */
      METHOD_ANNOTATION_CHANGE(12, 12),
      /**
       * <code>METHOD_DELETED = 13;</code>
       */
      METHOD_DELETED(13, 13),
      /**
       * <code>METHOD_ADDED = 14;</code>
       */
      METHOD_ADDED(14, 14),
      /**
       * <code>FIELD_ADDED = 15;</code>
       *
       * <pre>
       * changes in fields.
       * </pre>
       */
      FIELD_ADDED(15, 15),
      /**
       * <code>FIELD_REMOVED = 16;</code>
       */
      FIELD_REMOVED(16, 16),
      /**
       * <code>FIELD_TYPE_CHANGE = 17;</code>
       *
       * <pre>
       * change of field type or kind (static | instance)
       * </pre>
       */
      FIELD_TYPE_CHANGE(17, 17),
      /**
       * <code>R_CLASS_CHANGE = 18;</code>
       */
      R_CLASS_CHANGE(18, 18),
      /**
       * <code>REFLECTION_USED = 19;</code>
       *
       * <pre>
       * reflection use
       * </pre>
       */
      REFLECTION_USED(19, 19),
      /**
       * <code>JAVA_RESOURCES_CHANGED = 20;</code>
       */
      JAVA_RESOURCES_CHANGED(20, 20),
      /**
       * <code>DEPENDENCY_CHANGED = 21;</code>
       */
      DEPENDENCY_CHANGED(21, 21),
      /**
       * <code>MANIFEST_FILE_CHANGE = 22;</code>
       */
      MANIFEST_FILE_CHANGE(22, 22),
      /**
       * <code>BINARY_MANIFEST_FILE_CHANGE = 23;</code>
       *
       * <pre>
       * the binary manifest file changed, probably due to references to resources which ID changed
       *  since last build.
       * </pre>
       */
      BINARY_MANIFEST_FILE_CHANGE(23, 23),
      /**
       * <code>COLD_SWAP_REQUESTED = 24;</code>
       */
      COLD_SWAP_REQUESTED(24, 24),
      /**
       * <code>FULL_BUILD_REQUESTED = 25;</code>
       */
      FULL_BUILD_REQUESTED(25, 25),
      /**
       * <code>INITIAL_BUILD = 26;</code>
       */
      INITIAL_BUILD(26, 26),
      /**
       * <code>NO_CHANGES = 27;</code>
       */
      NO_CHANGES(27, 27),
      /**
       * <code>CHANGE_IN_SERIALIZABLE_CLASS_WITHOUT_VERSION_UID = 28;</code>
       */
      CHANGE_IN_SERIALIZABLE_CLASS_WITHOUT_VERSION_UID(28, 28),
      ;

      /**
       * <code>UNKNOWN_VERIFIER_STATUS = 0;</code>
       */
      public static final int UNKNOWN_VERIFIER_STATUS_VALUE = 0;
      /**
       * <code>COMPATIBLE = 1;</code>
       */
      public static final int COMPATIBLE_VALUE = 1;
      /**
       * <code>NOT_RUN = 2;</code>
       *
       * <pre>
       * the verifier did not run successfully.
       * </pre>
       */
      public static final int NOT_RUN_VALUE = 2;
      /**
       * <code>INSTANT_RUN_DISABLED = 3;</code>
       *
       * <pre>
       * InstantRun disabled on element like a method, class or package.
       * </pre>
       */
      public static final int INSTANT_RUN_DISABLED_VALUE = 3;
      /**
       * <code>INSTANT_RUN_FAILURE = 4;</code>
       *
       * <pre>
       * Any inability to run the verifier on a file will be tagged as such
       * </pre>
       */
      public static final int INSTANT_RUN_FAILURE_VALUE = 4;
      /**
       * <code>CLASS_ADDED = 5;</code>
       *
       * <pre>
       * A new class was added.
       * </pre>
       */
      public static final int CLASS_ADDED_VALUE = 5;
      /**
       * <code>PARENT_CLASS_CHANGED = 6;</code>
       *
       * <pre>
       * changes in the hierarchy
       * </pre>
       */
      public static final int PARENT_CLASS_CHANGED_VALUE = 6;
      /**
       * <code>IMPLEMENTED_INTERFACES_CHANGE = 7;</code>
       */
      public static final int IMPLEMENTED_INTERFACES_CHANGE_VALUE = 7;
      /**
       * <code>CLASS_ANNOTATION_CHANGE = 8;</code>
       *
       * <pre>
       * class related changes.
       * </pre>
       */
      public static final int CLASS_ANNOTATION_CHANGE_VALUE = 8;
      /**
       * <code>STATIC_INITIALIZER_CHANGE = 9;</code>
       */
      public static final int STATIC_INITIALIZER_CHANGE_VALUE = 9;
      /**
       * <code>CONSTRUCTOR_SIGNATURE_CHANGE = 10;</code>
       *
       * <pre>
       * changes in constructors,
       * </pre>
       */
      public static final int CONSTRUCTOR_SIGNATURE_CHANGE_VALUE = 10;
      /**
       * <code>METHOD_SIGNATURE_CHANGE = 11;</code>
       *
       * <pre>
       * changes in method
       * </pre>
       */
      public static final int METHOD_SIGNATURE_CHANGE_VALUE = 11;
      /**
       * <code>METHOD_ANNOTATION_CHANGE = 12;</code>
       */
      public static final int METHOD_ANNOTATION_CHANGE_VALUE = 12;
      /**
       * <code>METHOD_DELETED = 13;</code>
       */
      public static final int METHOD_DELETED_VALUE = 13;
      /**
       * <code>METHOD_ADDED = 14;</code>
       */
      public static final int METHOD_ADDED_VALUE = 14;
      /**
       * <code>FIELD_ADDED = 15;</code>
       *
       * <pre>
       * changes in fields.
       * </pre>
       */
      public static final int FIELD_ADDED_VALUE = 15;
      /**
       * <code>FIELD_REMOVED = 16;</code>
       */
      public static final int FIELD_REMOVED_VALUE = 16;
      /**
       * <code>FIELD_TYPE_CHANGE = 17;</code>
       *
       * <pre>
       * change of field type or kind (static | instance)
       * </pre>
       */
      public static final int FIELD_TYPE_CHANGE_VALUE = 17;
      /**
       * <code>R_CLASS_CHANGE = 18;</code>
       */
      public static final int R_CLASS_CHANGE_VALUE = 18;
      /**
       * <code>REFLECTION_USED = 19;</code>
       *
       * <pre>
       * reflection use
       * </pre>
       */
      public static final int REFLECTION_USED_VALUE = 19;
      /**
       * <code>JAVA_RESOURCES_CHANGED = 20;</code>
       */
      public static final int JAVA_RESOURCES_CHANGED_VALUE = 20;
      /**
       * <code>DEPENDENCY_CHANGED = 21;</code>
       */
      public static final int DEPENDENCY_CHANGED_VALUE = 21;
      /**
       * <code>MANIFEST_FILE_CHANGE = 22;</code>
       */
      public static final int MANIFEST_FILE_CHANGE_VALUE = 22;
      /**
       * <code>BINARY_MANIFEST_FILE_CHANGE = 23;</code>
       *
       * <pre>
       * the binary manifest file changed, probably due to references to resources which ID changed
       *  since last build.
       * </pre>
       */
      public static final int BINARY_MANIFEST_FILE_CHANGE_VALUE = 23;
      /**
       * <code>COLD_SWAP_REQUESTED = 24;</code>
       */
      public static final int COLD_SWAP_REQUESTED_VALUE = 24;
      /**
       * <code>FULL_BUILD_REQUESTED = 25;</code>
       */
      public static final int FULL_BUILD_REQUESTED_VALUE = 25;
      /**
       * <code>INITIAL_BUILD = 26;</code>
       */
      public static final int INITIAL_BUILD_VALUE = 26;
      /**
       * <code>NO_CHANGES = 27;</code>
       */
      public static final int NO_CHANGES_VALUE = 27;
      /**
       * <code>CHANGE_IN_SERIALIZABLE_CLASS_WITHOUT_VERSION_UID = 28;</code>
       */
      public static final int CHANGE_IN_SERIALIZABLE_CLASS_WITHOUT_VERSION_UID_VALUE = 28;


      public final int getNumber() { return value; }

      public static VerifierStatus valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_VERIFIER_STATUS;
          case 1: return COMPATIBLE;
          case 2: return NOT_RUN;
          case 3: return INSTANT_RUN_DISABLED;
          case 4: return INSTANT_RUN_FAILURE;
          case 5: return CLASS_ADDED;
          case 6: return PARENT_CLASS_CHANGED;
          case 7: return IMPLEMENTED_INTERFACES_CHANGE;
          case 8: return CLASS_ANNOTATION_CHANGE;
          case 9: return STATIC_INITIALIZER_CHANGE;
          case 10: return CONSTRUCTOR_SIGNATURE_CHANGE;
          case 11: return METHOD_SIGNATURE_CHANGE;
          case 12: return METHOD_ANNOTATION_CHANGE;
          case 13: return METHOD_DELETED;
          case 14: return METHOD_ADDED;
          case 15: return FIELD_ADDED;
          case 16: return FIELD_REMOVED;
          case 17: return FIELD_TYPE_CHANGE;
          case 18: return R_CLASS_CHANGE;
          case 19: return REFLECTION_USED;
          case 20: return JAVA_RESOURCES_CHANGED;
          case 21: return DEPENDENCY_CHANGED;
          case 22: return MANIFEST_FILE_CHANGE;
          case 23: return BINARY_MANIFEST_FILE_CHANGE;
          case 24: return COLD_SWAP_REQUESTED;
          case 25: return FULL_BUILD_REQUESTED;
          case 26: return INITIAL_BUILD;
          case 27: return NO_CHANGES;
          case 28: return CHANGE_IN_SERIALIZABLE_CLASS_WITHOUT_VERSION_UID;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<VerifierStatus>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<VerifierStatus>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<VerifierStatus>() {
              public VerifierStatus findValueByNumber(int number) {
                return VerifierStatus.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDescriptor().getEnumTypes().get(2);
      }

      private static final VerifierStatus[] VALUES = values();

      public static VerifierStatus valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private VerifierStatus(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.InstantRunStatus.VerifierStatus)
    }

    private int bitField0_;
    // optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;
    public static final int BUILD_MODE_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode buildMode_;
    /**
     * <code>optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;</code>
     *
     * <pre>
     * The type of artifacts built in this invocation.
     *  e.g. COLD for when the changes cannot be hot-swapped, either due to the
     *  app not running on the users device or the changes cannot be hot swapped.
     * </pre>
     */
    public boolean hasBuildMode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;</code>
     *
     * <pre>
     * The type of artifacts built in this invocation.
     *  e.g. COLD for when the changes cannot be hot-swapped, either due to the
     *  app not running on the users device or the changes cannot be hot swapped.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode getBuildMode() {
      return buildMode_;
    }

    // optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;
    public static final int PATCHING_POLICY_FIELD_NUMBER = 2;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy patchingPolicy_;
    /**
     * <code>optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;</code>
     *
     * <pre>
     * The type of deploy that the build can generate artifacts for.
     * </pre>
     */
    public boolean hasPatchingPolicy() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;</code>
     *
     * <pre>
     * The type of deploy that the build can generate artifacts for.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy getPatchingPolicy() {
      return patchingPolicy_;
    }

    // optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;
    public static final int VERIFIER_STATUS_FIELD_NUMBER = 3;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus verifierStatus_;
    /**
     * <code>optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;</code>
     *
     * <pre>
     * The result of the verifier run, whether the users change can be hot-swapped
     *  or requires a cold swap or full build is determined by the verifier.
     * </pre>
     */
    public boolean hasVerifierStatus() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;</code>
     *
     * <pre>
     * The result of the verifier run, whether the users change can be hot-swapped
     *  or requires a cold swap or full build is determined by the verifier.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus getVerifierStatus() {
      return verifierStatus_;
    }

    // repeated .android_studio.InstantRunArtifact artifact = 4;
    public static final int ARTIFACT_FIELD_NUMBER = 4;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact> artifact_;
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact> getArtifactList() {
      return artifact_;
    }
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder> 
        getArtifactOrBuilderList() {
      return artifact_;
    }
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    public int getArtifactCount() {
      return artifact_.size();
    }
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact getArtifact(int index) {
      return artifact_.get(index);
    }
    /**
     * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
     *
     * <pre>
     * The built artifacts stored in the build info.
     *  Artifacts that were built, but superseeded (e.g. a main APK contains
     *  resources, so the resources do not need to be reported separately) are
     *  not included.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder getArtifactOrBuilder(
        int index) {
      return artifact_.get(index);
    }

    private void initFields() {
      buildMode_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode.UNKNOWN_BUILD_MODE;
      patchingPolicy_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy.UNKNOWN_PATCHING_POLICY;
      verifierStatus_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus.UNKNOWN_VERIFIER_STATUS;
      artifact_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, buildMode_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, patchingPolicy_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, verifierStatus_.getNumber());
      }
      for (int i = 0; i < artifact_.size(); i++) {
        output.writeMessage(4, artifact_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, buildMode_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, patchingPolicy_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, verifierStatus_.getNumber());
      }
      for (int i = 0; i < artifact_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, artifact_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.InstantRunStatus}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatusOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunStatus_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunStatus_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getArtifactFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        buildMode_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode.UNKNOWN_BUILD_MODE;
        bitField0_ = (bitField0_ & ~0x00000001);
        patchingPolicy_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy.UNKNOWN_PATCHING_POLICY;
        bitField0_ = (bitField0_ & ~0x00000002);
        verifierStatus_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus.UNKNOWN_VERIFIER_STATUS;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (artifactBuilder_ == null) {
          artifact_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          artifactBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunStatus_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.buildMode_ = buildMode_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.patchingPolicy_ = patchingPolicy_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.verifierStatus_ = verifierStatus_;
        if (artifactBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            artifact_ = java.util.Collections.unmodifiableList(artifact_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.artifact_ = artifact_;
        } else {
          result.artifact_ = artifactBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.getDefaultInstance()) return this;
        if (other.hasBuildMode()) {
          setBuildMode(other.getBuildMode());
        }
        if (other.hasPatchingPolicy()) {
          setPatchingPolicy(other.getPatchingPolicy());
        }
        if (other.hasVerifierStatus()) {
          setVerifierStatus(other.getVerifierStatus());
        }
        if (artifactBuilder_ == null) {
          if (!other.artifact_.isEmpty()) {
            if (artifact_.isEmpty()) {
              artifact_ = other.artifact_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureArtifactIsMutable();
              artifact_.addAll(other.artifact_);
            }
            onChanged();
          }
        } else {
          if (!other.artifact_.isEmpty()) {
            if (artifactBuilder_.isEmpty()) {
              artifactBuilder_.dispose();
              artifactBuilder_ = null;
              artifact_ = other.artifact_;
              bitField0_ = (bitField0_ & ~0x00000008);
              artifactBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getArtifactFieldBuilder() : null;
            } else {
              artifactBuilder_.addAllMessages(other.artifact_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode buildMode_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode.UNKNOWN_BUILD_MODE;
      /**
       * <code>optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;</code>
       *
       * <pre>
       * The type of artifacts built in this invocation.
       *  e.g. COLD for when the changes cannot be hot-swapped, either due to the
       *  app not running on the users device or the changes cannot be hot swapped.
       * </pre>
       */
      public boolean hasBuildMode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;</code>
       *
       * <pre>
       * The type of artifacts built in this invocation.
       *  e.g. COLD for when the changes cannot be hot-swapped, either due to the
       *  app not running on the users device or the changes cannot be hot swapped.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode getBuildMode() {
        return buildMode_;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;</code>
       *
       * <pre>
       * The type of artifacts built in this invocation.
       *  e.g. COLD for when the changes cannot be hot-swapped, either due to the
       *  app not running on the users device or the changes cannot be hot swapped.
       * </pre>
       */
      public Builder setBuildMode(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        buildMode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.BuildMode build_mode = 1;</code>
       *
       * <pre>
       * The type of artifacts built in this invocation.
       *  e.g. COLD for when the changes cannot be hot-swapped, either due to the
       *  app not running on the users device or the changes cannot be hot swapped.
       * </pre>
       */
      public Builder clearBuildMode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        buildMode_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.BuildMode.UNKNOWN_BUILD_MODE;
        onChanged();
        return this;
      }

      // optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy patchingPolicy_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy.UNKNOWN_PATCHING_POLICY;
      /**
       * <code>optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;</code>
       *
       * <pre>
       * The type of deploy that the build can generate artifacts for.
       * </pre>
       */
      public boolean hasPatchingPolicy() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;</code>
       *
       * <pre>
       * The type of deploy that the build can generate artifacts for.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy getPatchingPolicy() {
        return patchingPolicy_;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;</code>
       *
       * <pre>
       * The type of deploy that the build can generate artifacts for.
       * </pre>
       */
      public Builder setPatchingPolicy(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        patchingPolicy_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.PatchingPolicy patching_policy = 2;</code>
       *
       * <pre>
       * The type of deploy that the build can generate artifacts for.
       * </pre>
       */
      public Builder clearPatchingPolicy() {
        bitField0_ = (bitField0_ & ~0x00000002);
        patchingPolicy_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.PatchingPolicy.UNKNOWN_PATCHING_POLICY;
        onChanged();
        return this;
      }

      // optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus verifierStatus_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus.UNKNOWN_VERIFIER_STATUS;
      /**
       * <code>optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;</code>
       *
       * <pre>
       * The result of the verifier run, whether the users change can be hot-swapped
       *  or requires a cold swap or full build is determined by the verifier.
       * </pre>
       */
      public boolean hasVerifierStatus() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;</code>
       *
       * <pre>
       * The result of the verifier run, whether the users change can be hot-swapped
       *  or requires a cold swap or full build is determined by the verifier.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus getVerifierStatus() {
        return verifierStatus_;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;</code>
       *
       * <pre>
       * The result of the verifier run, whether the users change can be hot-swapped
       *  or requires a cold swap or full build is determined by the verifier.
       * </pre>
       */
      public Builder setVerifierStatus(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        verifierStatus_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRunStatus.VerifierStatus verifier_status = 3;</code>
       *
       * <pre>
       * The result of the verifier run, whether the users change can be hot-swapped
       *  or requires a cold swap or full build is determined by the verifier.
       * </pre>
       */
      public Builder clearVerifierStatus() {
        bitField0_ = (bitField0_ & ~0x00000004);
        verifierStatus_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunStatus.VerifierStatus.UNKNOWN_VERIFIER_STATUS;
        onChanged();
        return this;
      }

      // repeated .android_studio.InstantRunArtifact artifact = 4;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact> artifact_ =
        java.util.Collections.emptyList();
      private void ensureArtifactIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          artifact_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact>(artifact_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder> artifactBuilder_;

      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact> getArtifactList() {
        if (artifactBuilder_ == null) {
          return java.util.Collections.unmodifiableList(artifact_);
        } else {
          return artifactBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public int getArtifactCount() {
        if (artifactBuilder_ == null) {
          return artifact_.size();
        } else {
          return artifactBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact getArtifact(int index) {
        if (artifactBuilder_ == null) {
          return artifact_.get(index);
        } else {
          return artifactBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder setArtifact(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact value) {
        if (artifactBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtifactIsMutable();
          artifact_.set(index, value);
          onChanged();
        } else {
          artifactBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder setArtifact(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder builderForValue) {
        if (artifactBuilder_ == null) {
          ensureArtifactIsMutable();
          artifact_.set(index, builderForValue.build());
          onChanged();
        } else {
          artifactBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder addArtifact(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact value) {
        if (artifactBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtifactIsMutable();
          artifact_.add(value);
          onChanged();
        } else {
          artifactBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder addArtifact(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact value) {
        if (artifactBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtifactIsMutable();
          artifact_.add(index, value);
          onChanged();
        } else {
          artifactBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder addArtifact(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder builderForValue) {
        if (artifactBuilder_ == null) {
          ensureArtifactIsMutable();
          artifact_.add(builderForValue.build());
          onChanged();
        } else {
          artifactBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder addArtifact(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder builderForValue) {
        if (artifactBuilder_ == null) {
          ensureArtifactIsMutable();
          artifact_.add(index, builderForValue.build());
          onChanged();
        } else {
          artifactBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder addAllArtifact(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact> values) {
        if (artifactBuilder_ == null) {
          ensureArtifactIsMutable();
          super.addAll(values, artifact_);
          onChanged();
        } else {
          artifactBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder clearArtifact() {
        if (artifactBuilder_ == null) {
          artifact_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          artifactBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public Builder removeArtifact(int index) {
        if (artifactBuilder_ == null) {
          ensureArtifactIsMutable();
          artifact_.remove(index);
          onChanged();
        } else {
          artifactBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder getArtifactBuilder(
          int index) {
        return getArtifactFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder getArtifactOrBuilder(
          int index) {
        if (artifactBuilder_ == null) {
          return artifact_.get(index);  } else {
          return artifactBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder> 
           getArtifactOrBuilderList() {
        if (artifactBuilder_ != null) {
          return artifactBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(artifact_);
        }
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder addArtifactBuilder() {
        return getArtifactFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder addArtifactBuilder(
          int index) {
        return getArtifactFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.InstantRunArtifact artifact = 4;</code>
       *
       * <pre>
       * The built artifacts stored in the build info.
       *  Artifacts that were built, but superseeded (e.g. a main APK contains
       *  resources, so the resources do not need to be reported separately) are
       *  not included.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder> 
           getArtifactBuilderList() {
        return getArtifactFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder> 
          getArtifactFieldBuilder() {
        if (artifactBuilder_ == null) {
          artifactBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder>(
                  artifact_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          artifact_ = null;
        }
        return artifactBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.InstantRunStatus)
    }

    static {
      defaultInstance = new InstantRunStatus(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.InstantRunStatus)
  }

  public interface InstantRunArtifactOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .android_studio.InstantRunArtifact.Type type = 1;
    /**
     * <code>optional .android_studio.InstantRunArtifact.Type type = 1;</code>
     */
    boolean hasType();
    /**
     * <code>optional .android_studio.InstantRunArtifact.Type type = 1;</code>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type getType();
  }
  /**
   * Protobuf type {@code android_studio.InstantRunArtifact}
   */
  public static final class InstantRunArtifact extends
      com.google.protobuf.GeneratedMessage
      implements InstantRunArtifactOrBuilder {
    // Use InstantRunArtifact.newBuilder() to construct.
    private InstantRunArtifact(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private InstantRunArtifact(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final InstantRunArtifact defaultInstance;
    public static InstantRunArtifact getDefaultInstance() {
      return defaultInstance;
    }

    public InstantRunArtifact getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private InstantRunArtifact(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type value = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunArtifact_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunArtifact_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder.class);
    }

    public static com.google.protobuf.Parser<InstantRunArtifact> PARSER =
        new com.google.protobuf.AbstractParser<InstantRunArtifact>() {
      public InstantRunArtifact parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new InstantRunArtifact(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<InstantRunArtifact> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.InstantRunArtifact.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>MAIN = 1;</code>
       *
       * <pre>
       * Main APK file for 19, and 21 platforms when using
       *  PatchingPolicy.MULTI_DEX.
       * </pre>
       */
      MAIN(0, 1),
      /**
       * <code>SPLIT_MAIN = 2;</code>
       *
       * <pre>
       * Main APK file when application is using PatchingPolicy.MULTI_DEX.
       * </pre>
       */
      SPLIT_MAIN(1, 2),
      /**
       * <code>RELOAD_DEX = 3;</code>
       *
       * <pre>
       * Reload dex file that can be used to patch application live.
       * </pre>
       */
      RELOAD_DEX(2, 3),
      /**
       * <code>RESTART_DEX = 4;</code>
       *
       * <pre>
       * Restart.dex file that can be used for Dalvik to restart applications
       *  with minimum set of changes delivered.
       * </pre>
       */
      RESTART_DEX(3, 4),
      /**
       * <code>DEX = 5;</code>
       *
       * <pre>
       * Shard dex file that can be used to replace originally installed
       *  multi-dex shard.
       * </pre>
       */
      DEX(4, 5),
      /**
       * <code>SPLIT = 6;</code>
       *
       * <pre>
       * Pure split (code only) that can be installed individually on M+ devices.
       * </pre>
       */
      SPLIT(5, 6),
      /**
       * <code>RESOURCES = 7;</code>
       *
       * <pre>
       * Resources: res.ap_ file
       * </pre>
       */
      RESOURCES(6, 7),
      ;

      /**
       * <code>MAIN = 1;</code>
       *
       * <pre>
       * Main APK file for 19, and 21 platforms when using
       *  PatchingPolicy.MULTI_DEX.
       * </pre>
       */
      public static final int MAIN_VALUE = 1;
      /**
       * <code>SPLIT_MAIN = 2;</code>
       *
       * <pre>
       * Main APK file when application is using PatchingPolicy.MULTI_DEX.
       * </pre>
       */
      public static final int SPLIT_MAIN_VALUE = 2;
      /**
       * <code>RELOAD_DEX = 3;</code>
       *
       * <pre>
       * Reload dex file that can be used to patch application live.
       * </pre>
       */
      public static final int RELOAD_DEX_VALUE = 3;
      /**
       * <code>RESTART_DEX = 4;</code>
       *
       * <pre>
       * Restart.dex file that can be used for Dalvik to restart applications
       *  with minimum set of changes delivered.
       * </pre>
       */
      public static final int RESTART_DEX_VALUE = 4;
      /**
       * <code>DEX = 5;</code>
       *
       * <pre>
       * Shard dex file that can be used to replace originally installed
       *  multi-dex shard.
       * </pre>
       */
      public static final int DEX_VALUE = 5;
      /**
       * <code>SPLIT = 6;</code>
       *
       * <pre>
       * Pure split (code only) that can be installed individually on M+ devices.
       * </pre>
       */
      public static final int SPLIT_VALUE = 6;
      /**
       * <code>RESOURCES = 7;</code>
       *
       * <pre>
       * Resources: res.ap_ file
       * </pre>
       */
      public static final int RESOURCES_VALUE = 7;


      public final int getNumber() { return value; }

      public static Type valueOf(int value) {
        switch (value) {
          case 1: return MAIN;
          case 2: return SPLIT_MAIN;
          case 3: return RELOAD_DEX;
          case 4: return RESTART_DEX;
          case 5: return DEX;
          case 6: return SPLIT;
          case 7: return RESOURCES;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.getDescriptor().getEnumTypes().get(0);
      }

      private static final Type[] VALUES = values();

      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.InstantRunArtifact.Type)
    }

    private int bitField0_;
    // optional .android_studio.InstantRunArtifact.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type type_;
    /**
     * <code>optional .android_studio.InstantRunArtifact.Type type = 1;</code>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .android_studio.InstantRunArtifact.Type type = 1;</code>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type getType() {
      return type_;
    }

    private void initFields() {
      type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type.MAIN;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.InstantRunArtifact}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifactOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunArtifact_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunArtifact_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type.MAIN;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_InstantRunArtifact_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .android_studio.InstantRunArtifact.Type type = 1;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type.MAIN;
      /**
       * <code>optional .android_studio.InstantRunArtifact.Type type = 1;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .android_studio.InstantRunArtifact.Type type = 1;</code>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type getType() {
        return type_;
      }
      /**
       * <code>optional .android_studio.InstantRunArtifact.Type type = 1;</code>
       */
      public Builder setType(com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.InstantRunArtifact.Type type = 1;</code>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.InstantRunArtifact.Type.MAIN;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.InstantRunArtifact)
    }

    static {
      defaultInstance = new InstantRunArtifact(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.InstantRunArtifact)
  }

  public interface LLDBFrontendDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 exit_code = 1;
    /**
     * <code>optional int32 exit_code = 1;</code>
     *
     * <pre>
     * the value returned when the LLDB Frontend process exited.
     * </pre>
     */
    boolean hasExitCode();
    /**
     * <code>optional int32 exit_code = 1;</code>
     *
     * <pre>
     * the value returned when the LLDB Frontend process exited.
     * </pre>
     */
    int getExitCode();
  }
  /**
   * Protobuf type {@code android_studio.LLDBFrontendDetails}
   *
   * <pre>
   * Details about the LLDB Frontend process
   * </pre>
   */
  public static final class LLDBFrontendDetails extends
      com.google.protobuf.GeneratedMessage
      implements LLDBFrontendDetailsOrBuilder {
    // Use LLDBFrontendDetails.newBuilder() to construct.
    private LLDBFrontendDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LLDBFrontendDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LLDBFrontendDetails defaultInstance;
    public static LLDBFrontendDetails getDefaultInstance() {
      return defaultInstance;
    }

    public LLDBFrontendDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LLDBFrontendDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              exitCode_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_LLDBFrontendDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_LLDBFrontendDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<LLDBFrontendDetails> PARSER =
        new com.google.protobuf.AbstractParser<LLDBFrontendDetails>() {
      public LLDBFrontendDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LLDBFrontendDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LLDBFrontendDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 exit_code = 1;
    public static final int EXIT_CODE_FIELD_NUMBER = 1;
    private int exitCode_;
    /**
     * <code>optional int32 exit_code = 1;</code>
     *
     * <pre>
     * the value returned when the LLDB Frontend process exited.
     * </pre>
     */
    public boolean hasExitCode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 exit_code = 1;</code>
     *
     * <pre>
     * the value returned when the LLDB Frontend process exited.
     * </pre>
     */
    public int getExitCode() {
      return exitCode_;
    }

    private void initFields() {
      exitCode_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, exitCode_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, exitCode_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.LLDBFrontendDetails}
     *
     * <pre>
     * Details about the LLDB Frontend process
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_LLDBFrontendDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_LLDBFrontendDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        exitCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_LLDBFrontendDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.exitCode_ = exitCode_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails.getDefaultInstance()) return this;
        if (other.hasExitCode()) {
          setExitCode(other.getExitCode());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.LLDBFrontendDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 exit_code = 1;
      private int exitCode_ ;
      /**
       * <code>optional int32 exit_code = 1;</code>
       *
       * <pre>
       * the value returned when the LLDB Frontend process exited.
       * </pre>
       */
      public boolean hasExitCode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 exit_code = 1;</code>
       *
       * <pre>
       * the value returned when the LLDB Frontend process exited.
       * </pre>
       */
      public int getExitCode() {
        return exitCode_;
      }
      /**
       * <code>optional int32 exit_code = 1;</code>
       *
       * <pre>
       * the value returned when the LLDB Frontend process exited.
       * </pre>
       */
      public Builder setExitCode(int value) {
        bitField0_ |= 0x00000001;
        exitCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 exit_code = 1;</code>
       *
       * <pre>
       * the value returned when the LLDB Frontend process exited.
       * </pre>
       */
      public Builder clearExitCode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        exitCode_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.LLDBFrontendDetails)
    }

    static {
      defaultInstance = new LLDBFrontendDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.LLDBFrontendDetails)
  }

  public interface FirebaseErrorDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string error_message = 1;
    /**
     * <code>optional string error_message = 1;</code>
     *
     * <pre>
     * The error message presented to the user upon Firebase errors.
     * </pre>
     */
    boolean hasErrorMessage();
    /**
     * <code>optional string error_message = 1;</code>
     *
     * <pre>
     * The error message presented to the user upon Firebase errors.
     * </pre>
     */
    java.lang.String getErrorMessage();
    /**
     * <code>optional string error_message = 1;</code>
     *
     * <pre>
     * The error message presented to the user upon Firebase errors.
     * </pre>
     */
    com.google.protobuf.ByteString
        getErrorMessageBytes();
  }
  /**
   * Protobuf type {@code android_studio.FirebaseErrorDetails}
   *
   * <pre>
   * Error details from the Firebase Assistant.
   * </pre>
   */
  public static final class FirebaseErrorDetails extends
      com.google.protobuf.GeneratedMessage
      implements FirebaseErrorDetailsOrBuilder {
    // Use FirebaseErrorDetails.newBuilder() to construct.
    private FirebaseErrorDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FirebaseErrorDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FirebaseErrorDetails defaultInstance;
    public static FirebaseErrorDetails getDefaultInstance() {
      return defaultInstance;
    }

    public FirebaseErrorDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FirebaseErrorDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              errorMessage_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_FirebaseErrorDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_FirebaseErrorDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<FirebaseErrorDetails> PARSER =
        new com.google.protobuf.AbstractParser<FirebaseErrorDetails>() {
      public FirebaseErrorDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FirebaseErrorDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<FirebaseErrorDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string error_message = 1;
    public static final int ERROR_MESSAGE_FIELD_NUMBER = 1;
    private java.lang.Object errorMessage_;
    /**
     * <code>optional string error_message = 1;</code>
     *
     * <pre>
     * The error message presented to the user upon Firebase errors.
     * </pre>
     */
    public boolean hasErrorMessage() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string error_message = 1;</code>
     *
     * <pre>
     * The error message presented to the user upon Firebase errors.
     * </pre>
     */
    public java.lang.String getErrorMessage() {
      java.lang.Object ref = errorMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          errorMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string error_message = 1;</code>
     *
     * <pre>
     * The error message presented to the user upon Firebase errors.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getErrorMessageBytes() {
      java.lang.Object ref = errorMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      errorMessage_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getErrorMessageBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getErrorMessageBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.FirebaseErrorDetails}
     *
     * <pre>
     * Error details from the Firebase Assistant.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_FirebaseErrorDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_FirebaseErrorDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        errorMessage_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_FirebaseErrorDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.errorMessage_ = errorMessage_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails.getDefaultInstance()) return this;
        if (other.hasErrorMessage()) {
          bitField0_ |= 0x00000001;
          errorMessage_ = other.errorMessage_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.FirebaseErrorDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string error_message = 1;
      private java.lang.Object errorMessage_ = "";
      /**
       * <code>optional string error_message = 1;</code>
       *
       * <pre>
       * The error message presented to the user upon Firebase errors.
       * </pre>
       */
      public boolean hasErrorMessage() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string error_message = 1;</code>
       *
       * <pre>
       * The error message presented to the user upon Firebase errors.
       * </pre>
       */
      public java.lang.String getErrorMessage() {
        java.lang.Object ref = errorMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          errorMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string error_message = 1;</code>
       *
       * <pre>
       * The error message presented to the user upon Firebase errors.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getErrorMessageBytes() {
        java.lang.Object ref = errorMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string error_message = 1;</code>
       *
       * <pre>
       * The error message presented to the user upon Firebase errors.
       * </pre>
       */
      public Builder setErrorMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        errorMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string error_message = 1;</code>
       *
       * <pre>
       * The error message presented to the user upon Firebase errors.
       * </pre>
       */
      public Builder clearErrorMessage() {
        bitField0_ = (bitField0_ & ~0x00000001);
        errorMessage_ = getDefaultInstance().getErrorMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string error_message = 1;</code>
       *
       * <pre>
       * The error message presented to the user upon Firebase errors.
       * </pre>
       */
      public Builder setErrorMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        errorMessage_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.FirebaseErrorDetails)
    }

    static {
      defaultInstance = new FirebaseErrorDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.FirebaseErrorDetails)
  }

  public interface GfxTracingDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 total_time = 1;
    /**
     * <code>optional int64 total_time = 1;</code>
     *
     * <pre>
     * total time the trace took
     * </pre>
     */
    boolean hasTotalTime();
    /**
     * <code>optional int64 total_time = 1;</code>
     *
     * <pre>
     * total time the trace took
     * </pre>
     */
    long getTotalTime();

    // optional string command = 2;
    /**
     * <code>optional string command = 2;</code>
     *
     * <pre>
     * class name of the UI command selected to affect the tracing.
     * </pre>
     */
    boolean hasCommand();
    /**
     * <code>optional string command = 2;</code>
     *
     * <pre>
     * class name of the UI command selected to affect the tracing.
     * </pre>
     */
    java.lang.String getCommand();
    /**
     * <code>optional string command = 2;</code>
     *
     * <pre>
     * class name of the UI command selected to affect the tracing.
     * </pre>
     */
    com.google.protobuf.ByteString
        getCommandBytes();

    // optional string error_message = 3;
    /**
     * <code>optional string error_message = 3;</code>
     *
     * <pre>
     * Error message when tracing fails.
     * </pre>
     */
    boolean hasErrorMessage();
    /**
     * <code>optional string error_message = 3;</code>
     *
     * <pre>
     * Error message when tracing fails.
     * </pre>
     */
    java.lang.String getErrorMessage();
    /**
     * <code>optional string error_message = 3;</code>
     *
     * <pre>
     * Error message when tracing fails.
     * </pre>
     */
    com.google.protobuf.ByteString
        getErrorMessageBytes();

    // optional string trace_path = 4;
    /**
     * <code>optional string trace_path = 4;</code>
     *
     * <pre>
     * A path describing the kind of details from the trace. This is a mix
     *  of class names (of our code) and random ids generated for the trace.
     *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
     *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
     *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
     * </pre>
     */
    boolean hasTracePath();
    /**
     * <code>optional string trace_path = 4;</code>
     *
     * <pre>
     * A path describing the kind of details from the trace. This is a mix
     *  of class names (of our code) and random ids generated for the trace.
     *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
     *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
     *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
     * </pre>
     */
    java.lang.String getTracePath();
    /**
     * <code>optional string trace_path = 4;</code>
     *
     * <pre>
     * A path describing the kind of details from the trace. This is a mix
     *  of class names (of our code) and random ids generated for the trace.
     *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
     *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
     *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
     * </pre>
     */
    com.google.protobuf.ByteString
        getTracePathBytes();

    // optional string image_format = 5;
    /**
     * <code>optional string image_format = 5;</code>
     *
     * <pre>
     * the image format of the gpu image being traced. e.g. 'image/png'
     * </pre>
     */
    boolean hasImageFormat();
    /**
     * <code>optional string image_format = 5;</code>
     *
     * <pre>
     * the image format of the gpu image being traced. e.g. 'image/png'
     * </pre>
     */
    java.lang.String getImageFormat();
    /**
     * <code>optional string image_format = 5;</code>
     *
     * <pre>
     * the image format of the gpu image being traced. e.g. 'image/png'
     * </pre>
     */
    com.google.protobuf.ByteString
        getImageFormatBytes();

    // optional int64 image_width = 6;
    /**
     * <code>optional int64 image_width = 6;</code>
     *
     * <pre>
     * the width of the image being traced.
     * </pre>
     */
    boolean hasImageWidth();
    /**
     * <code>optional int64 image_width = 6;</code>
     *
     * <pre>
     * the width of the image being traced.
     * </pre>
     */
    long getImageWidth();

    // optional int64 image_height = 7;
    /**
     * <code>optional int64 image_height = 7;</code>
     *
     * <pre>
     * the height of the image being traced.
     * </pre>
     */
    boolean hasImageHeight();
    /**
     * <code>optional int64 image_height = 7;</code>
     *
     * <pre>
     * the height of the image being traced.
     * </pre>
     */
    long getImageHeight();
  }
  /**
   * Protobuf type {@code android_studio.GfxTracingDetails}
   *
   * <pre>
   * Details on the GPU Debugger tracing run
   * </pre>
   */
  public static final class GfxTracingDetails extends
      com.google.protobuf.GeneratedMessage
      implements GfxTracingDetailsOrBuilder {
    // Use GfxTracingDetails.newBuilder() to construct.
    private GfxTracingDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GfxTracingDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GfxTracingDetails defaultInstance;
    public static GfxTracingDetails getDefaultInstance() {
      return defaultInstance;
    }

    public GfxTracingDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GfxTracingDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              totalTime_ = input.readInt64();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              command_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              errorMessage_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              tracePath_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              imageFormat_ = input.readBytes();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              imageWidth_ = input.readInt64();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              imageHeight_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GfxTracingDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GfxTracingDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<GfxTracingDetails> PARSER =
        new com.google.protobuf.AbstractParser<GfxTracingDetails>() {
      public GfxTracingDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GfxTracingDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GfxTracingDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 total_time = 1;
    public static final int TOTAL_TIME_FIELD_NUMBER = 1;
    private long totalTime_;
    /**
     * <code>optional int64 total_time = 1;</code>
     *
     * <pre>
     * total time the trace took
     * </pre>
     */
    public boolean hasTotalTime() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 total_time = 1;</code>
     *
     * <pre>
     * total time the trace took
     * </pre>
     */
    public long getTotalTime() {
      return totalTime_;
    }

    // optional string command = 2;
    public static final int COMMAND_FIELD_NUMBER = 2;
    private java.lang.Object command_;
    /**
     * <code>optional string command = 2;</code>
     *
     * <pre>
     * class name of the UI command selected to affect the tracing.
     * </pre>
     */
    public boolean hasCommand() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string command = 2;</code>
     *
     * <pre>
     * class name of the UI command selected to affect the tracing.
     * </pre>
     */
    public java.lang.String getCommand() {
      java.lang.Object ref = command_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          command_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string command = 2;</code>
     *
     * <pre>
     * class name of the UI command selected to affect the tracing.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getCommandBytes() {
      java.lang.Object ref = command_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        command_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string error_message = 3;
    public static final int ERROR_MESSAGE_FIELD_NUMBER = 3;
    private java.lang.Object errorMessage_;
    /**
     * <code>optional string error_message = 3;</code>
     *
     * <pre>
     * Error message when tracing fails.
     * </pre>
     */
    public boolean hasErrorMessage() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string error_message = 3;</code>
     *
     * <pre>
     * Error message when tracing fails.
     * </pre>
     */
    public java.lang.String getErrorMessage() {
      java.lang.Object ref = errorMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          errorMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string error_message = 3;</code>
     *
     * <pre>
     * Error message when tracing fails.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getErrorMessageBytes() {
      java.lang.Object ref = errorMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string trace_path = 4;
    public static final int TRACE_PATH_FIELD_NUMBER = 4;
    private java.lang.Object tracePath_;
    /**
     * <code>optional string trace_path = 4;</code>
     *
     * <pre>
     * A path describing the kind of details from the trace. This is a mix
     *  of class names (of our code) and random ids generated for the trace.
     *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
     *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
     *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
     * </pre>
     */
    public boolean hasTracePath() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string trace_path = 4;</code>
     *
     * <pre>
     * A path describing the kind of details from the trace. This is a mix
     *  of class names (of our code) and random ids generated for the trace.
     *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
     *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
     *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
     * </pre>
     */
    public java.lang.String getTracePath() {
      java.lang.Object ref = tracePath_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          tracePath_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string trace_path = 4;</code>
     *
     * <pre>
     * A path describing the kind of details from the trace. This is a mix
     *  of class names (of our code) and random ids generated for the trace.
     *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
     *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
     *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getTracePathBytes() {
      java.lang.Object ref = tracePath_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tracePath_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string image_format = 5;
    public static final int IMAGE_FORMAT_FIELD_NUMBER = 5;
    private java.lang.Object imageFormat_;
    /**
     * <code>optional string image_format = 5;</code>
     *
     * <pre>
     * the image format of the gpu image being traced. e.g. 'image/png'
     * </pre>
     */
    public boolean hasImageFormat() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string image_format = 5;</code>
     *
     * <pre>
     * the image format of the gpu image being traced. e.g. 'image/png'
     * </pre>
     */
    public java.lang.String getImageFormat() {
      java.lang.Object ref = imageFormat_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          imageFormat_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string image_format = 5;</code>
     *
     * <pre>
     * the image format of the gpu image being traced. e.g. 'image/png'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getImageFormatBytes() {
      java.lang.Object ref = imageFormat_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        imageFormat_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 image_width = 6;
    public static final int IMAGE_WIDTH_FIELD_NUMBER = 6;
    private long imageWidth_;
    /**
     * <code>optional int64 image_width = 6;</code>
     *
     * <pre>
     * the width of the image being traced.
     * </pre>
     */
    public boolean hasImageWidth() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int64 image_width = 6;</code>
     *
     * <pre>
     * the width of the image being traced.
     * </pre>
     */
    public long getImageWidth() {
      return imageWidth_;
    }

    // optional int64 image_height = 7;
    public static final int IMAGE_HEIGHT_FIELD_NUMBER = 7;
    private long imageHeight_;
    /**
     * <code>optional int64 image_height = 7;</code>
     *
     * <pre>
     * the height of the image being traced.
     * </pre>
     */
    public boolean hasImageHeight() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 image_height = 7;</code>
     *
     * <pre>
     * the height of the image being traced.
     * </pre>
     */
    public long getImageHeight() {
      return imageHeight_;
    }

    private void initFields() {
      totalTime_ = 0L;
      command_ = "";
      errorMessage_ = "";
      tracePath_ = "";
      imageFormat_ = "";
      imageWidth_ = 0L;
      imageHeight_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, totalTime_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getCommandBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getErrorMessageBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getTracePathBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getImageFormatBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt64(6, imageWidth_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(7, imageHeight_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, totalTime_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getCommandBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getErrorMessageBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getTracePathBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getImageFormatBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, imageWidth_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, imageHeight_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GfxTracingDetails}
     *
     * <pre>
     * Details on the GPU Debugger tracing run
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GfxTracingDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GfxTracingDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        totalTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        command_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        errorMessage_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        tracePath_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        imageFormat_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        imageWidth_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        imageHeight_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GfxTracingDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.totalTime_ = totalTime_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.command_ = command_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.errorMessage_ = errorMessage_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.tracePath_ = tracePath_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.imageFormat_ = imageFormat_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.imageWidth_ = imageWidth_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.imageHeight_ = imageHeight_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails.getDefaultInstance()) return this;
        if (other.hasTotalTime()) {
          setTotalTime(other.getTotalTime());
        }
        if (other.hasCommand()) {
          bitField0_ |= 0x00000002;
          command_ = other.command_;
          onChanged();
        }
        if (other.hasErrorMessage()) {
          bitField0_ |= 0x00000004;
          errorMessage_ = other.errorMessage_;
          onChanged();
        }
        if (other.hasTracePath()) {
          bitField0_ |= 0x00000008;
          tracePath_ = other.tracePath_;
          onChanged();
        }
        if (other.hasImageFormat()) {
          bitField0_ |= 0x00000010;
          imageFormat_ = other.imageFormat_;
          onChanged();
        }
        if (other.hasImageWidth()) {
          setImageWidth(other.getImageWidth());
        }
        if (other.hasImageHeight()) {
          setImageHeight(other.getImageHeight());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GfxTracingDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 total_time = 1;
      private long totalTime_ ;
      /**
       * <code>optional int64 total_time = 1;</code>
       *
       * <pre>
       * total time the trace took
       * </pre>
       */
      public boolean hasTotalTime() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 total_time = 1;</code>
       *
       * <pre>
       * total time the trace took
       * </pre>
       */
      public long getTotalTime() {
        return totalTime_;
      }
      /**
       * <code>optional int64 total_time = 1;</code>
       *
       * <pre>
       * total time the trace took
       * </pre>
       */
      public Builder setTotalTime(long value) {
        bitField0_ |= 0x00000001;
        totalTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 total_time = 1;</code>
       *
       * <pre>
       * total time the trace took
       * </pre>
       */
      public Builder clearTotalTime() {
        bitField0_ = (bitField0_ & ~0x00000001);
        totalTime_ = 0L;
        onChanged();
        return this;
      }

      // optional string command = 2;
      private java.lang.Object command_ = "";
      /**
       * <code>optional string command = 2;</code>
       *
       * <pre>
       * class name of the UI command selected to affect the tracing.
       * </pre>
       */
      public boolean hasCommand() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string command = 2;</code>
       *
       * <pre>
       * class name of the UI command selected to affect the tracing.
       * </pre>
       */
      public java.lang.String getCommand() {
        java.lang.Object ref = command_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          command_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string command = 2;</code>
       *
       * <pre>
       * class name of the UI command selected to affect the tracing.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getCommandBytes() {
        java.lang.Object ref = command_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          command_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string command = 2;</code>
       *
       * <pre>
       * class name of the UI command selected to affect the tracing.
       * </pre>
       */
      public Builder setCommand(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        command_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string command = 2;</code>
       *
       * <pre>
       * class name of the UI command selected to affect the tracing.
       * </pre>
       */
      public Builder clearCommand() {
        bitField0_ = (bitField0_ & ~0x00000002);
        command_ = getDefaultInstance().getCommand();
        onChanged();
        return this;
      }
      /**
       * <code>optional string command = 2;</code>
       *
       * <pre>
       * class name of the UI command selected to affect the tracing.
       * </pre>
       */
      public Builder setCommandBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        command_ = value;
        onChanged();
        return this;
      }

      // optional string error_message = 3;
      private java.lang.Object errorMessage_ = "";
      /**
       * <code>optional string error_message = 3;</code>
       *
       * <pre>
       * Error message when tracing fails.
       * </pre>
       */
      public boolean hasErrorMessage() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string error_message = 3;</code>
       *
       * <pre>
       * Error message when tracing fails.
       * </pre>
       */
      public java.lang.String getErrorMessage() {
        java.lang.Object ref = errorMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          errorMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string error_message = 3;</code>
       *
       * <pre>
       * Error message when tracing fails.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getErrorMessageBytes() {
        java.lang.Object ref = errorMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string error_message = 3;</code>
       *
       * <pre>
       * Error message when tracing fails.
       * </pre>
       */
      public Builder setErrorMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        errorMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string error_message = 3;</code>
       *
       * <pre>
       * Error message when tracing fails.
       * </pre>
       */
      public Builder clearErrorMessage() {
        bitField0_ = (bitField0_ & ~0x00000004);
        errorMessage_ = getDefaultInstance().getErrorMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string error_message = 3;</code>
       *
       * <pre>
       * Error message when tracing fails.
       * </pre>
       */
      public Builder setErrorMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        errorMessage_ = value;
        onChanged();
        return this;
      }

      // optional string trace_path = 4;
      private java.lang.Object tracePath_ = "";
      /**
       * <code>optional string trace_path = 4;</code>
       *
       * <pre>
       * A path describing the kind of details from the trace. This is a mix
       *  of class names (of our code) and random ids generated for the trace.
       *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
       *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
       *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
       * </pre>
       */
      public boolean hasTracePath() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string trace_path = 4;</code>
       *
       * <pre>
       * A path describing the kind of details from the trace. This is a mix
       *  of class names (of our code) and random ids generated for the trace.
       *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
       *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
       *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
       * </pre>
       */
      public java.lang.String getTracePath() {
        java.lang.Object ref = tracePath_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          tracePath_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string trace_path = 4;</code>
       *
       * <pre>
       * A path describing the kind of details from the trace. This is a mix
       *  of class names (of our code) and random ids generated for the trace.
       *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
       *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
       *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getTracePathBytes() {
        java.lang.Object ref = tracePath_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tracePath_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string trace_path = 4;</code>
       *
       * <pre>
       * A path describing the kind of details from the trace. This is a mix
       *  of class names (of our code) and random ids generated for the trace.
       *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
       *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
       *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
       * </pre>
       */
      public Builder setTracePath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        tracePath_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string trace_path = 4;</code>
       *
       * <pre>
       * A path describing the kind of details from the trace. This is a mix
       *  of class names (of our code) and random ids generated for the trace.
       *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
       *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
       *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
       * </pre>
       */
      public Builder clearTracePath() {
        bitField0_ = (bitField0_ & ~0x00000008);
        tracePath_ = getDefaultInstance().getTracePath();
        onChanged();
        return this;
      }
      /**
       * <code>optional string trace_path = 4;</code>
       *
       * <pre>
       * A path describing the kind of details from the trace. This is a mix
       *  of class names (of our code) and random ids generated for the trace.
       *  e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' +
       *       'Resource&lt;e1b2a028ce62a97b235172963ddee35f386c6940&gt;.' +
       *       'Thumbnail&lt;RGBA,100x100&gt;.As&lt;RGBA&gt;'
       * </pre>
       */
      public Builder setTracePathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        tracePath_ = value;
        onChanged();
        return this;
      }

      // optional string image_format = 5;
      private java.lang.Object imageFormat_ = "";
      /**
       * <code>optional string image_format = 5;</code>
       *
       * <pre>
       * the image format of the gpu image being traced. e.g. 'image/png'
       * </pre>
       */
      public boolean hasImageFormat() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string image_format = 5;</code>
       *
       * <pre>
       * the image format of the gpu image being traced. e.g. 'image/png'
       * </pre>
       */
      public java.lang.String getImageFormat() {
        java.lang.Object ref = imageFormat_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          imageFormat_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string image_format = 5;</code>
       *
       * <pre>
       * the image format of the gpu image being traced. e.g. 'image/png'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getImageFormatBytes() {
        java.lang.Object ref = imageFormat_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          imageFormat_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string image_format = 5;</code>
       *
       * <pre>
       * the image format of the gpu image being traced. e.g. 'image/png'
       * </pre>
       */
      public Builder setImageFormat(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        imageFormat_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string image_format = 5;</code>
       *
       * <pre>
       * the image format of the gpu image being traced. e.g. 'image/png'
       * </pre>
       */
      public Builder clearImageFormat() {
        bitField0_ = (bitField0_ & ~0x00000010);
        imageFormat_ = getDefaultInstance().getImageFormat();
        onChanged();
        return this;
      }
      /**
       * <code>optional string image_format = 5;</code>
       *
       * <pre>
       * the image format of the gpu image being traced. e.g. 'image/png'
       * </pre>
       */
      public Builder setImageFormatBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        imageFormat_ = value;
        onChanged();
        return this;
      }

      // optional int64 image_width = 6;
      private long imageWidth_ ;
      /**
       * <code>optional int64 image_width = 6;</code>
       *
       * <pre>
       * the width of the image being traced.
       * </pre>
       */
      public boolean hasImageWidth() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int64 image_width = 6;</code>
       *
       * <pre>
       * the width of the image being traced.
       * </pre>
       */
      public long getImageWidth() {
        return imageWidth_;
      }
      /**
       * <code>optional int64 image_width = 6;</code>
       *
       * <pre>
       * the width of the image being traced.
       * </pre>
       */
      public Builder setImageWidth(long value) {
        bitField0_ |= 0x00000020;
        imageWidth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 image_width = 6;</code>
       *
       * <pre>
       * the width of the image being traced.
       * </pre>
       */
      public Builder clearImageWidth() {
        bitField0_ = (bitField0_ & ~0x00000020);
        imageWidth_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 image_height = 7;
      private long imageHeight_ ;
      /**
       * <code>optional int64 image_height = 7;</code>
       *
       * <pre>
       * the height of the image being traced.
       * </pre>
       */
      public boolean hasImageHeight() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 image_height = 7;</code>
       *
       * <pre>
       * the height of the image being traced.
       * </pre>
       */
      public long getImageHeight() {
        return imageHeight_;
      }
      /**
       * <code>optional int64 image_height = 7;</code>
       *
       * <pre>
       * the height of the image being traced.
       * </pre>
       */
      public Builder setImageHeight(long value) {
        bitField0_ |= 0x00000040;
        imageHeight_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 image_height = 7;</code>
       *
       * <pre>
       * the height of the image being traced.
       * </pre>
       */
      public Builder clearImageHeight() {
        bitField0_ = (bitField0_ & ~0x00000040);
        imageHeight_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GfxTracingDetails)
    }

    static {
      defaultInstance = new GfxTracingDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GfxTracingDetails)
  }

  public interface TestRecorderDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 event_count = 1;
    /**
     * <code>optional int64 event_count = 1;</code>
     *
     * <pre>
     * The number of events in the test generated by the test recorder.
     * </pre>
     */
    boolean hasEventCount();
    /**
     * <code>optional int64 event_count = 1;</code>
     *
     * <pre>
     * The number of events in the test generated by the test recorder.
     * </pre>
     */
    long getEventCount();

    // optional int64 assertion_count = 2;
    /**
     * <code>optional int64 assertion_count = 2;</code>
     *
     * <pre>
     * The number of assertions in the test generated by the test recorder.
     * </pre>
     */
    boolean hasAssertionCount();
    /**
     * <code>optional int64 assertion_count = 2;</code>
     *
     * <pre>
     * The number of assertions in the test generated by the test recorder.
     * </pre>
     */
    long getAssertionCount();
  }
  /**
   * Protobuf type {@code android_studio.TestRecorderDetails}
   *
   * <pre>
   * Details of an invocation of the TestRecorder to generate tests.
   * </pre>
   */
  public static final class TestRecorderDetails extends
      com.google.protobuf.GeneratedMessage
      implements TestRecorderDetailsOrBuilder {
    // Use TestRecorderDetails.newBuilder() to construct.
    private TestRecorderDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TestRecorderDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TestRecorderDetails defaultInstance;
    public static TestRecorderDetails getDefaultInstance() {
      return defaultInstance;
    }

    public TestRecorderDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TestRecorderDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              eventCount_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              assertionCount_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRecorderDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRecorderDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<TestRecorderDetails> PARSER =
        new com.google.protobuf.AbstractParser<TestRecorderDetails>() {
      public TestRecorderDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TestRecorderDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TestRecorderDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 event_count = 1;
    public static final int EVENT_COUNT_FIELD_NUMBER = 1;
    private long eventCount_;
    /**
     * <code>optional int64 event_count = 1;</code>
     *
     * <pre>
     * The number of events in the test generated by the test recorder.
     * </pre>
     */
    public boolean hasEventCount() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 event_count = 1;</code>
     *
     * <pre>
     * The number of events in the test generated by the test recorder.
     * </pre>
     */
    public long getEventCount() {
      return eventCount_;
    }

    // optional int64 assertion_count = 2;
    public static final int ASSERTION_COUNT_FIELD_NUMBER = 2;
    private long assertionCount_;
    /**
     * <code>optional int64 assertion_count = 2;</code>
     *
     * <pre>
     * The number of assertions in the test generated by the test recorder.
     * </pre>
     */
    public boolean hasAssertionCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 assertion_count = 2;</code>
     *
     * <pre>
     * The number of assertions in the test generated by the test recorder.
     * </pre>
     */
    public long getAssertionCount() {
      return assertionCount_;
    }

    private void initFields() {
      eventCount_ = 0L;
      assertionCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, eventCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, assertionCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, eventCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, assertionCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.TestRecorderDetails}
     *
     * <pre>
     * Details of an invocation of the TestRecorder to generate tests.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRecorderDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRecorderDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        eventCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        assertionCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_TestRecorderDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.eventCount_ = eventCount_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.assertionCount_ = assertionCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails.getDefaultInstance()) return this;
        if (other.hasEventCount()) {
          setEventCount(other.getEventCount());
        }
        if (other.hasAssertionCount()) {
          setAssertionCount(other.getAssertionCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.TestRecorderDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 event_count = 1;
      private long eventCount_ ;
      /**
       * <code>optional int64 event_count = 1;</code>
       *
       * <pre>
       * The number of events in the test generated by the test recorder.
       * </pre>
       */
      public boolean hasEventCount() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 event_count = 1;</code>
       *
       * <pre>
       * The number of events in the test generated by the test recorder.
       * </pre>
       */
      public long getEventCount() {
        return eventCount_;
      }
      /**
       * <code>optional int64 event_count = 1;</code>
       *
       * <pre>
       * The number of events in the test generated by the test recorder.
       * </pre>
       */
      public Builder setEventCount(long value) {
        bitField0_ |= 0x00000001;
        eventCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 event_count = 1;</code>
       *
       * <pre>
       * The number of events in the test generated by the test recorder.
       * </pre>
       */
      public Builder clearEventCount() {
        bitField0_ = (bitField0_ & ~0x00000001);
        eventCount_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 assertion_count = 2;
      private long assertionCount_ ;
      /**
       * <code>optional int64 assertion_count = 2;</code>
       *
       * <pre>
       * The number of assertions in the test generated by the test recorder.
       * </pre>
       */
      public boolean hasAssertionCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 assertion_count = 2;</code>
       *
       * <pre>
       * The number of assertions in the test generated by the test recorder.
       * </pre>
       */
      public long getAssertionCount() {
        return assertionCount_;
      }
      /**
       * <code>optional int64 assertion_count = 2;</code>
       *
       * <pre>
       * The number of assertions in the test generated by the test recorder.
       * </pre>
       */
      public Builder setAssertionCount(long value) {
        bitField0_ |= 0x00000002;
        assertionCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 assertion_count = 2;</code>
       *
       * <pre>
       * The number of assertions in the test generated by the test recorder.
       * </pre>
       */
      public Builder clearAssertionCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        assertionCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.TestRecorderDetails)
    }

    static {
      defaultInstance = new TestRecorderDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.TestRecorderDetails)
  }

  public interface UIActionStatsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string action_class_name = 1;
    /**
     * <code>optional string action_class_name = 1;</code>
     *
     * <pre>
     * java class name (our code, not customer) of the UI Action reported on
     *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
     * </pre>
     */
    boolean hasActionClassName();
    /**
     * <code>optional string action_class_name = 1;</code>
     *
     * <pre>
     * java class name (our code, not customer) of the UI Action reported on
     *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
     * </pre>
     */
    java.lang.String getActionClassName();
    /**
     * <code>optional string action_class_name = 1;</code>
     *
     * <pre>
     * java class name (our code, not customer) of the UI Action reported on
     *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
     * </pre>
     */
    com.google.protobuf.ByteString
        getActionClassNameBytes();

    // optional int64 invocations = 2;
    /**
     * <code>optional int64 invocations = 2;</code>
     *
     * <pre>
     * How often since the last report this action was invoked.
     * </pre>
     */
    boolean hasInvocations();
    /**
     * <code>optional int64 invocations = 2;</code>
     *
     * <pre>
     * How often since the last report this action was invoked.
     * </pre>
     */
    long getInvocations();

    // optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;
    /**
     * <code>optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;</code>
     *
     * <pre>
     * The way this action was invocated by the user.
     * </pre>
     */
    boolean hasInvocationKind();
    /**
     * <code>optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;</code>
     *
     * <pre>
     * The way this action was invocated by the user.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind getInvocationKind();
  }
  /**
   * Protobuf type {@code android_studio.UIActionStats}
   *
   * <pre>
   * Reports aggregated information about how users invoke available UI actions.
   * </pre>
   */
  public static final class UIActionStats extends
      com.google.protobuf.GeneratedMessage
      implements UIActionStatsOrBuilder {
    // Use UIActionStats.newBuilder() to construct.
    private UIActionStats(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UIActionStats(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UIActionStats defaultInstance;
    public static UIActionStats getDefaultInstance() {
      return defaultInstance;
    }

    public UIActionStats getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UIActionStats(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              actionClassName_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              invocations_ = input.readInt64();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind value = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                invocationKind_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_UIActionStats_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_UIActionStats_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.Builder.class);
    }

    public static com.google.protobuf.Parser<UIActionStats> PARSER =
        new com.google.protobuf.AbstractParser<UIActionStats>() {
      public UIActionStats parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UIActionStats(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<UIActionStats> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.UIActionStats.InvocationKind}
     *
     * <pre>
     * The way an UI action was invocated by the user.
     * </pre>
     */
    public enum InvocationKind
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_INVOCATION_KIND = 0;</code>
       */
      UNKNOWN_INVOCATION_KIND(0, 0),
      /**
       * <code>TOOLBAR = 1;</code>
       */
      TOOLBAR(1, 1),
      /**
       * <code>MENU = 2;</code>
       */
      MENU(2, 2),
      /**
       * <code>KEYBOARD_SHORTCUT = 3;</code>
       */
      KEYBOARD_SHORTCUT(3, 3),
      /**
       * <code>MACRO = 4;</code>
       */
      MACRO(4, 4),
      ;

      /**
       * <code>UNKNOWN_INVOCATION_KIND = 0;</code>
       */
      public static final int UNKNOWN_INVOCATION_KIND_VALUE = 0;
      /**
       * <code>TOOLBAR = 1;</code>
       */
      public static final int TOOLBAR_VALUE = 1;
      /**
       * <code>MENU = 2;</code>
       */
      public static final int MENU_VALUE = 2;
      /**
       * <code>KEYBOARD_SHORTCUT = 3;</code>
       */
      public static final int KEYBOARD_SHORTCUT_VALUE = 3;
      /**
       * <code>MACRO = 4;</code>
       */
      public static final int MACRO_VALUE = 4;


      public final int getNumber() { return value; }

      public static InvocationKind valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN_INVOCATION_KIND;
          case 1: return TOOLBAR;
          case 2: return MENU;
          case 3: return KEYBOARD_SHORTCUT;
          case 4: return MACRO;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<InvocationKind>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<InvocationKind>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<InvocationKind>() {
              public InvocationKind findValueByNumber(int number) {
                return InvocationKind.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.getDescriptor().getEnumTypes().get(0);
      }

      private static final InvocationKind[] VALUES = values();

      public static InvocationKind valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private InvocationKind(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.UIActionStats.InvocationKind)
    }

    private int bitField0_;
    // optional string action_class_name = 1;
    public static final int ACTION_CLASS_NAME_FIELD_NUMBER = 1;
    private java.lang.Object actionClassName_;
    /**
     * <code>optional string action_class_name = 1;</code>
     *
     * <pre>
     * java class name (our code, not customer) of the UI Action reported on
     *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
     * </pre>
     */
    public boolean hasActionClassName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string action_class_name = 1;</code>
     *
     * <pre>
     * java class name (our code, not customer) of the UI Action reported on
     *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
     * </pre>
     */
    public java.lang.String getActionClassName() {
      java.lang.Object ref = actionClassName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          actionClassName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string action_class_name = 1;</code>
     *
     * <pre>
     * java class name (our code, not customer) of the UI Action reported on
     *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
     * </pre>
     */
    public com.google.protobuf.ByteString
        getActionClassNameBytes() {
      java.lang.Object ref = actionClassName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        actionClassName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 invocations = 2;
    public static final int INVOCATIONS_FIELD_NUMBER = 2;
    private long invocations_;
    /**
     * <code>optional int64 invocations = 2;</code>
     *
     * <pre>
     * How often since the last report this action was invoked.
     * </pre>
     */
    public boolean hasInvocations() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 invocations = 2;</code>
     *
     * <pre>
     * How often since the last report this action was invoked.
     * </pre>
     */
    public long getInvocations() {
      return invocations_;
    }

    // optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;
    public static final int INVOCATION_KIND_FIELD_NUMBER = 3;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind invocationKind_;
    /**
     * <code>optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;</code>
     *
     * <pre>
     * The way this action was invocated by the user.
     * </pre>
     */
    public boolean hasInvocationKind() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;</code>
     *
     * <pre>
     * The way this action was invocated by the user.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind getInvocationKind() {
      return invocationKind_;
    }

    private void initFields() {
      actionClassName_ = "";
      invocations_ = 0L;
      invocationKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind.UNKNOWN_INVOCATION_KIND;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getActionClassNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, invocations_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, invocationKind_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getActionClassNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, invocations_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, invocationKind_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.UIActionStats}
     *
     * <pre>
     * Reports aggregated information about how users invoke available UI actions.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStatsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_UIActionStats_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_UIActionStats_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        actionClassName_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        invocations_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        invocationKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind.UNKNOWN_INVOCATION_KIND;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_UIActionStats_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.actionClassName_ = actionClassName_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.invocations_ = invocations_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.invocationKind_ = invocationKind_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.getDefaultInstance()) return this;
        if (other.hasActionClassName()) {
          bitField0_ |= 0x00000001;
          actionClassName_ = other.actionClassName_;
          onChanged();
        }
        if (other.hasInvocations()) {
          setInvocations(other.getInvocations());
        }
        if (other.hasInvocationKind()) {
          setInvocationKind(other.getInvocationKind());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string action_class_name = 1;
      private java.lang.Object actionClassName_ = "";
      /**
       * <code>optional string action_class_name = 1;</code>
       *
       * <pre>
       * java class name (our code, not customer) of the UI Action reported on
       *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
       * </pre>
       */
      public boolean hasActionClassName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string action_class_name = 1;</code>
       *
       * <pre>
       * java class name (our code, not customer) of the UI Action reported on
       *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
       * </pre>
       */
      public java.lang.String getActionClassName() {
        java.lang.Object ref = actionClassName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          actionClassName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string action_class_name = 1;</code>
       *
       * <pre>
       * java class name (our code, not customer) of the UI Action reported on
       *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
       * </pre>
       */
      public com.google.protobuf.ByteString
          getActionClassNameBytes() {
        java.lang.Object ref = actionClassName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          actionClassName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string action_class_name = 1;</code>
       *
       * <pre>
       * java class name (our code, not customer) of the UI Action reported on
       *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
       * </pre>
       */
      public Builder setActionClassName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        actionClassName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string action_class_name = 1;</code>
       *
       * <pre>
       * java class name (our code, not customer) of the UI Action reported on
       *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
       * </pre>
       */
      public Builder clearActionClassName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        actionClassName_ = getDefaultInstance().getActionClassName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string action_class_name = 1;</code>
       *
       * <pre>
       * java class name (our code, not customer) of the UI Action reported on
       *  e.g. 'com.android.build.instant_run.HotSwapBuildAction'
       * </pre>
       */
      public Builder setActionClassNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        actionClassName_ = value;
        onChanged();
        return this;
      }

      // optional int64 invocations = 2;
      private long invocations_ ;
      /**
       * <code>optional int64 invocations = 2;</code>
       *
       * <pre>
       * How often since the last report this action was invoked.
       * </pre>
       */
      public boolean hasInvocations() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 invocations = 2;</code>
       *
       * <pre>
       * How often since the last report this action was invoked.
       * </pre>
       */
      public long getInvocations() {
        return invocations_;
      }
      /**
       * <code>optional int64 invocations = 2;</code>
       *
       * <pre>
       * How often since the last report this action was invoked.
       * </pre>
       */
      public Builder setInvocations(long value) {
        bitField0_ |= 0x00000002;
        invocations_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 invocations = 2;</code>
       *
       * <pre>
       * How often since the last report this action was invoked.
       * </pre>
       */
      public Builder clearInvocations() {
        bitField0_ = (bitField0_ & ~0x00000002);
        invocations_ = 0L;
        onChanged();
        return this;
      }

      // optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind invocationKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind.UNKNOWN_INVOCATION_KIND;
      /**
       * <code>optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;</code>
       *
       * <pre>
       * The way this action was invocated by the user.
       * </pre>
       */
      public boolean hasInvocationKind() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;</code>
       *
       * <pre>
       * The way this action was invocated by the user.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind getInvocationKind() {
        return invocationKind_;
      }
      /**
       * <code>optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;</code>
       *
       * <pre>
       * The way this action was invocated by the user.
       * </pre>
       */
      public Builder setInvocationKind(com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        invocationKind_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.UIActionStats.InvocationKind invocation_kind = 3;</code>
       *
       * <pre>
       * The way this action was invocated by the user.
       * </pre>
       */
      public Builder clearInvocationKind() {
        bitField0_ = (bitField0_ & ~0x00000004);
        invocationKind_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.UIActionStats.InvocationKind.UNKNOWN_INVOCATION_KIND;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.UIActionStats)
    }

    static {
      defaultInstance = new UIActionStats(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.UIActionStats)
  }

  public interface MachineDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 total_ram = 1;
    /**
     * <code>optional int64 total_ram = 1;</code>
     *
     * <pre>
     * Amount of total memory available in megabytes.
     * </pre>
     */
    boolean hasTotalRam();
    /**
     * <code>optional int64 total_ram = 1;</code>
     *
     * <pre>
     * Amount of total memory available in megabytes.
     * </pre>
     */
    long getTotalRam();

    // optional int64 total_disk = 2;
    /**
     * <code>optional int64 total_disk = 2;</code>
     *
     * <pre>
     * Amount of total disk available in megabytes.
     * </pre>
     */
    boolean hasTotalDisk();
    /**
     * <code>optional int64 total_disk = 2;</code>
     *
     * <pre>
     * Amount of total disk available in megabytes.
     * </pre>
     */
    long getTotalDisk();

    // repeated .android_studio.DisplayDetails display = 3;
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails> 
        getDisplayList();
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails getDisplay(int index);
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    int getDisplayCount();
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder> 
        getDisplayOrBuilderList();
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder getDisplayOrBuilder(
        int index);

    // optional int32 available_processors = 4;
    /**
     * <code>optional int32 available_processors = 4;</code>
     *
     * <pre>
     * Number of processors on the machine.
     * </pre>
     */
    boolean hasAvailableProcessors();
    /**
     * <code>optional int32 available_processors = 4;</code>
     *
     * <pre>
     * Number of processors on the machine.
     * </pre>
     */
    int getAvailableProcessors();
  }
  /**
   * Protobuf type {@code android_studio.MachineDetails}
   *
   * <pre>
   * Details about the machine this process is running on.
   * </pre>
   */
  public static final class MachineDetails extends
      com.google.protobuf.GeneratedMessage
      implements MachineDetailsOrBuilder {
    // Use MachineDetails.newBuilder() to construct.
    private MachineDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MachineDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MachineDetails defaultInstance;
    public static MachineDetails getDefaultInstance() {
      return defaultInstance;
    }

    public MachineDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MachineDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              totalRam_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              totalDisk_ = input.readInt64();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                display_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails>();
                mutable_bitField0_ |= 0x00000004;
              }
              display_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.PARSER, extensionRegistry));
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              availableProcessors_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          display_ = java.util.Collections.unmodifiableList(display_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MachineDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MachineDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<MachineDetails> PARSER =
        new com.google.protobuf.AbstractParser<MachineDetails>() {
      public MachineDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MachineDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MachineDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 total_ram = 1;
    public static final int TOTAL_RAM_FIELD_NUMBER = 1;
    private long totalRam_;
    /**
     * <code>optional int64 total_ram = 1;</code>
     *
     * <pre>
     * Amount of total memory available in megabytes.
     * </pre>
     */
    public boolean hasTotalRam() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 total_ram = 1;</code>
     *
     * <pre>
     * Amount of total memory available in megabytes.
     * </pre>
     */
    public long getTotalRam() {
      return totalRam_;
    }

    // optional int64 total_disk = 2;
    public static final int TOTAL_DISK_FIELD_NUMBER = 2;
    private long totalDisk_;
    /**
     * <code>optional int64 total_disk = 2;</code>
     *
     * <pre>
     * Amount of total disk available in megabytes.
     * </pre>
     */
    public boolean hasTotalDisk() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 total_disk = 2;</code>
     *
     * <pre>
     * Amount of total disk available in megabytes.
     * </pre>
     */
    public long getTotalDisk() {
      return totalDisk_;
    }

    // repeated .android_studio.DisplayDetails display = 3;
    public static final int DISPLAY_FIELD_NUMBER = 3;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails> display_;
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails> getDisplayList() {
      return display_;
    }
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder> 
        getDisplayOrBuilderList() {
      return display_;
    }
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    public int getDisplayCount() {
      return display_.size();
    }
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails getDisplay(int index) {
      return display_.get(index);
    }
    /**
     * <code>repeated .android_studio.DisplayDetails display = 3;</code>
     *
     * <pre>
     * Information about the display screens on the machine (resolution etc..)
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder getDisplayOrBuilder(
        int index) {
      return display_.get(index);
    }

    // optional int32 available_processors = 4;
    public static final int AVAILABLE_PROCESSORS_FIELD_NUMBER = 4;
    private int availableProcessors_;
    /**
     * <code>optional int32 available_processors = 4;</code>
     *
     * <pre>
     * Number of processors on the machine.
     * </pre>
     */
    public boolean hasAvailableProcessors() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 available_processors = 4;</code>
     *
     * <pre>
     * Number of processors on the machine.
     * </pre>
     */
    public int getAvailableProcessors() {
      return availableProcessors_;
    }

    private void initFields() {
      totalRam_ = 0L;
      totalDisk_ = 0L;
      display_ = java.util.Collections.emptyList();
      availableProcessors_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, totalRam_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, totalDisk_);
      }
      for (int i = 0; i < display_.size(); i++) {
        output.writeMessage(3, display_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(4, availableProcessors_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, totalRam_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, totalDisk_);
      }
      for (int i = 0; i < display_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, display_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, availableProcessors_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.MachineDetails}
     *
     * <pre>
     * Details about the machine this process is running on.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MachineDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MachineDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDisplayFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        totalRam_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        totalDisk_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (displayBuilder_ == null) {
          display_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          displayBuilder_.clear();
        }
        availableProcessors_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_MachineDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.totalRam_ = totalRam_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.totalDisk_ = totalDisk_;
        if (displayBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            display_ = java.util.Collections.unmodifiableList(display_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.display_ = display_;
        } else {
          result.display_ = displayBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.availableProcessors_ = availableProcessors_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails.getDefaultInstance()) return this;
        if (other.hasTotalRam()) {
          setTotalRam(other.getTotalRam());
        }
        if (other.hasTotalDisk()) {
          setTotalDisk(other.getTotalDisk());
        }
        if (displayBuilder_ == null) {
          if (!other.display_.isEmpty()) {
            if (display_.isEmpty()) {
              display_ = other.display_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureDisplayIsMutable();
              display_.addAll(other.display_);
            }
            onChanged();
          }
        } else {
          if (!other.display_.isEmpty()) {
            if (displayBuilder_.isEmpty()) {
              displayBuilder_.dispose();
              displayBuilder_ = null;
              display_ = other.display_;
              bitField0_ = (bitField0_ & ~0x00000004);
              displayBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDisplayFieldBuilder() : null;
            } else {
              displayBuilder_.addAllMessages(other.display_);
            }
          }
        }
        if (other.hasAvailableProcessors()) {
          setAvailableProcessors(other.getAvailableProcessors());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.MachineDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 total_ram = 1;
      private long totalRam_ ;
      /**
       * <code>optional int64 total_ram = 1;</code>
       *
       * <pre>
       * Amount of total memory available in megabytes.
       * </pre>
       */
      public boolean hasTotalRam() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 total_ram = 1;</code>
       *
       * <pre>
       * Amount of total memory available in megabytes.
       * </pre>
       */
      public long getTotalRam() {
        return totalRam_;
      }
      /**
       * <code>optional int64 total_ram = 1;</code>
       *
       * <pre>
       * Amount of total memory available in megabytes.
       * </pre>
       */
      public Builder setTotalRam(long value) {
        bitField0_ |= 0x00000001;
        totalRam_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 total_ram = 1;</code>
       *
       * <pre>
       * Amount of total memory available in megabytes.
       * </pre>
       */
      public Builder clearTotalRam() {
        bitField0_ = (bitField0_ & ~0x00000001);
        totalRam_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 total_disk = 2;
      private long totalDisk_ ;
      /**
       * <code>optional int64 total_disk = 2;</code>
       *
       * <pre>
       * Amount of total disk available in megabytes.
       * </pre>
       */
      public boolean hasTotalDisk() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 total_disk = 2;</code>
       *
       * <pre>
       * Amount of total disk available in megabytes.
       * </pre>
       */
      public long getTotalDisk() {
        return totalDisk_;
      }
      /**
       * <code>optional int64 total_disk = 2;</code>
       *
       * <pre>
       * Amount of total disk available in megabytes.
       * </pre>
       */
      public Builder setTotalDisk(long value) {
        bitField0_ |= 0x00000002;
        totalDisk_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 total_disk = 2;</code>
       *
       * <pre>
       * Amount of total disk available in megabytes.
       * </pre>
       */
      public Builder clearTotalDisk() {
        bitField0_ = (bitField0_ & ~0x00000002);
        totalDisk_ = 0L;
        onChanged();
        return this;
      }

      // repeated .android_studio.DisplayDetails display = 3;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails> display_ =
        java.util.Collections.emptyList();
      private void ensureDisplayIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          display_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails>(display_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder> displayBuilder_;

      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails> getDisplayList() {
        if (displayBuilder_ == null) {
          return java.util.Collections.unmodifiableList(display_);
        } else {
          return displayBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public int getDisplayCount() {
        if (displayBuilder_ == null) {
          return display_.size();
        } else {
          return displayBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails getDisplay(int index) {
        if (displayBuilder_ == null) {
          return display_.get(index);
        } else {
          return displayBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder setDisplay(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails value) {
        if (displayBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDisplayIsMutable();
          display_.set(index, value);
          onChanged();
        } else {
          displayBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder setDisplay(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder builderForValue) {
        if (displayBuilder_ == null) {
          ensureDisplayIsMutable();
          display_.set(index, builderForValue.build());
          onChanged();
        } else {
          displayBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder addDisplay(com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails value) {
        if (displayBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDisplayIsMutable();
          display_.add(value);
          onChanged();
        } else {
          displayBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder addDisplay(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails value) {
        if (displayBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDisplayIsMutable();
          display_.add(index, value);
          onChanged();
        } else {
          displayBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder addDisplay(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder builderForValue) {
        if (displayBuilder_ == null) {
          ensureDisplayIsMutable();
          display_.add(builderForValue.build());
          onChanged();
        } else {
          displayBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder addDisplay(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder builderForValue) {
        if (displayBuilder_ == null) {
          ensureDisplayIsMutable();
          display_.add(index, builderForValue.build());
          onChanged();
        } else {
          displayBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder addAllDisplay(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails> values) {
        if (displayBuilder_ == null) {
          ensureDisplayIsMutable();
          super.addAll(values, display_);
          onChanged();
        } else {
          displayBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder clearDisplay() {
        if (displayBuilder_ == null) {
          display_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          displayBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public Builder removeDisplay(int index) {
        if (displayBuilder_ == null) {
          ensureDisplayIsMutable();
          display_.remove(index);
          onChanged();
        } else {
          displayBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder getDisplayBuilder(
          int index) {
        return getDisplayFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder getDisplayOrBuilder(
          int index) {
        if (displayBuilder_ == null) {
          return display_.get(index);  } else {
          return displayBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder> 
           getDisplayOrBuilderList() {
        if (displayBuilder_ != null) {
          return displayBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(display_);
        }
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder addDisplayBuilder() {
        return getDisplayFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder addDisplayBuilder(
          int index) {
        return getDisplayFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.DisplayDetails display = 3;</code>
       *
       * <pre>
       * Information about the display screens on the machine (resolution etc..)
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder> 
           getDisplayBuilderList() {
        return getDisplayFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder> 
          getDisplayFieldBuilder() {
        if (displayBuilder_ == null) {
          displayBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder>(
                  display_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          display_ = null;
        }
        return displayBuilder_;
      }

      // optional int32 available_processors = 4;
      private int availableProcessors_ ;
      /**
       * <code>optional int32 available_processors = 4;</code>
       *
       * <pre>
       * Number of processors on the machine.
       * </pre>
       */
      public boolean hasAvailableProcessors() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 available_processors = 4;</code>
       *
       * <pre>
       * Number of processors on the machine.
       * </pre>
       */
      public int getAvailableProcessors() {
        return availableProcessors_;
      }
      /**
       * <code>optional int32 available_processors = 4;</code>
       *
       * <pre>
       * Number of processors on the machine.
       * </pre>
       */
      public Builder setAvailableProcessors(int value) {
        bitField0_ |= 0x00000008;
        availableProcessors_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 available_processors = 4;</code>
       *
       * <pre>
       * Number of processors on the machine.
       * </pre>
       */
      public Builder clearAvailableProcessors() {
        bitField0_ = (bitField0_ & ~0x00000008);
        availableProcessors_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.MachineDetails)
    }

    static {
      defaultInstance = new MachineDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.MachineDetails)
  }

  public interface DisplayDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 width = 1;
    /**
     * <code>optional int64 width = 1;</code>
     *
     * <pre>
     * Width of the display screen in pixels.
     * </pre>
     */
    boolean hasWidth();
    /**
     * <code>optional int64 width = 1;</code>
     *
     * <pre>
     * Width of the display screen in pixels.
     * </pre>
     */
    long getWidth();

    // optional int64 height = 2;
    /**
     * <code>optional int64 height = 2;</code>
     *
     * <pre>
     * Height of the display screen in pixels.
     * </pre>
     */
    boolean hasHeight();
    /**
     * <code>optional int64 height = 2;</code>
     *
     * <pre>
     * Height of the display screen in pixels.
     * </pre>
     */
    long getHeight();

    // optional int32 dots_per_inch_horizontal = 3;
    /**
     * <code>optional int32 dots_per_inch_horizontal = 3;</code>
     *
     * <pre>
     * Densitiy of the pixels on the screen horiziontally.
     * </pre>
     */
    boolean hasDotsPerInchHorizontal();
    /**
     * <code>optional int32 dots_per_inch_horizontal = 3;</code>
     *
     * <pre>
     * Densitiy of the pixels on the screen horiziontally.
     * </pre>
     */
    int getDotsPerInchHorizontal();

    // optional int32 dots_per_inch_vertical = 4;
    /**
     * <code>optional int32 dots_per_inch_vertical = 4;</code>
     *
     * <pre>
     * Densitiy of the pixels on the screen vertically.
     * </pre>
     */
    boolean hasDotsPerInchVertical();
    /**
     * <code>optional int32 dots_per_inch_vertical = 4;</code>
     *
     * <pre>
     * Densitiy of the pixels on the screen vertically.
     * </pre>
     */
    int getDotsPerInchVertical();
  }
  /**
   * Protobuf type {@code android_studio.DisplayDetails}
   *
   * <pre>
   * Details of a display screen.
   * </pre>
   */
  public static final class DisplayDetails extends
      com.google.protobuf.GeneratedMessage
      implements DisplayDetailsOrBuilder {
    // Use DisplayDetails.newBuilder() to construct.
    private DisplayDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DisplayDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DisplayDetails defaultInstance;
    public static DisplayDetails getDefaultInstance() {
      return defaultInstance;
    }

    public DisplayDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DisplayDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              width_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              height_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              dotsPerInchHorizontal_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              dotsPerInchVertical_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DisplayDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DisplayDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<DisplayDetails> PARSER =
        new com.google.protobuf.AbstractParser<DisplayDetails>() {
      public DisplayDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DisplayDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DisplayDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 width = 1;
    public static final int WIDTH_FIELD_NUMBER = 1;
    private long width_;
    /**
     * <code>optional int64 width = 1;</code>
     *
     * <pre>
     * Width of the display screen in pixels.
     * </pre>
     */
    public boolean hasWidth() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 width = 1;</code>
     *
     * <pre>
     * Width of the display screen in pixels.
     * </pre>
     */
    public long getWidth() {
      return width_;
    }

    // optional int64 height = 2;
    public static final int HEIGHT_FIELD_NUMBER = 2;
    private long height_;
    /**
     * <code>optional int64 height = 2;</code>
     *
     * <pre>
     * Height of the display screen in pixels.
     * </pre>
     */
    public boolean hasHeight() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 height = 2;</code>
     *
     * <pre>
     * Height of the display screen in pixels.
     * </pre>
     */
    public long getHeight() {
      return height_;
    }

    // optional int32 dots_per_inch_horizontal = 3;
    public static final int DOTS_PER_INCH_HORIZONTAL_FIELD_NUMBER = 3;
    private int dotsPerInchHorizontal_;
    /**
     * <code>optional int32 dots_per_inch_horizontal = 3;</code>
     *
     * <pre>
     * Densitiy of the pixels on the screen horiziontally.
     * </pre>
     */
    public boolean hasDotsPerInchHorizontal() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 dots_per_inch_horizontal = 3;</code>
     *
     * <pre>
     * Densitiy of the pixels on the screen horiziontally.
     * </pre>
     */
    public int getDotsPerInchHorizontal() {
      return dotsPerInchHorizontal_;
    }

    // optional int32 dots_per_inch_vertical = 4;
    public static final int DOTS_PER_INCH_VERTICAL_FIELD_NUMBER = 4;
    private int dotsPerInchVertical_;
    /**
     * <code>optional int32 dots_per_inch_vertical = 4;</code>
     *
     * <pre>
     * Densitiy of the pixels on the screen vertically.
     * </pre>
     */
    public boolean hasDotsPerInchVertical() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 dots_per_inch_vertical = 4;</code>
     *
     * <pre>
     * Densitiy of the pixels on the screen vertically.
     * </pre>
     */
    public int getDotsPerInchVertical() {
      return dotsPerInchVertical_;
    }

    private void initFields() {
      width_ = 0L;
      height_ = 0L;
      dotsPerInchHorizontal_ = 0;
      dotsPerInchVertical_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, width_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, height_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, dotsPerInchHorizontal_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, dotsPerInchVertical_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, width_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, height_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, dotsPerInchHorizontal_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, dotsPerInchVertical_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.DisplayDetails}
     *
     * <pre>
     * Details of a display screen.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DisplayDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DisplayDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        width_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        height_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        dotsPerInchHorizontal_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        dotsPerInchVertical_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_DisplayDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.width_ = width_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.height_ = height_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.dotsPerInchHorizontal_ = dotsPerInchHorizontal_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.dotsPerInchVertical_ = dotsPerInchVertical_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails.getDefaultInstance()) return this;
        if (other.hasWidth()) {
          setWidth(other.getWidth());
        }
        if (other.hasHeight()) {
          setHeight(other.getHeight());
        }
        if (other.hasDotsPerInchHorizontal()) {
          setDotsPerInchHorizontal(other.getDotsPerInchHorizontal());
        }
        if (other.hasDotsPerInchVertical()) {
          setDotsPerInchVertical(other.getDotsPerInchVertical());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.DisplayDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 width = 1;
      private long width_ ;
      /**
       * <code>optional int64 width = 1;</code>
       *
       * <pre>
       * Width of the display screen in pixels.
       * </pre>
       */
      public boolean hasWidth() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 width = 1;</code>
       *
       * <pre>
       * Width of the display screen in pixels.
       * </pre>
       */
      public long getWidth() {
        return width_;
      }
      /**
       * <code>optional int64 width = 1;</code>
       *
       * <pre>
       * Width of the display screen in pixels.
       * </pre>
       */
      public Builder setWidth(long value) {
        bitField0_ |= 0x00000001;
        width_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 width = 1;</code>
       *
       * <pre>
       * Width of the display screen in pixels.
       * </pre>
       */
      public Builder clearWidth() {
        bitField0_ = (bitField0_ & ~0x00000001);
        width_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 height = 2;
      private long height_ ;
      /**
       * <code>optional int64 height = 2;</code>
       *
       * <pre>
       * Height of the display screen in pixels.
       * </pre>
       */
      public boolean hasHeight() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 height = 2;</code>
       *
       * <pre>
       * Height of the display screen in pixels.
       * </pre>
       */
      public long getHeight() {
        return height_;
      }
      /**
       * <code>optional int64 height = 2;</code>
       *
       * <pre>
       * Height of the display screen in pixels.
       * </pre>
       */
      public Builder setHeight(long value) {
        bitField0_ |= 0x00000002;
        height_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 height = 2;</code>
       *
       * <pre>
       * Height of the display screen in pixels.
       * </pre>
       */
      public Builder clearHeight() {
        bitField0_ = (bitField0_ & ~0x00000002);
        height_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 dots_per_inch_horizontal = 3;
      private int dotsPerInchHorizontal_ ;
      /**
       * <code>optional int32 dots_per_inch_horizontal = 3;</code>
       *
       * <pre>
       * Densitiy of the pixels on the screen horiziontally.
       * </pre>
       */
      public boolean hasDotsPerInchHorizontal() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 dots_per_inch_horizontal = 3;</code>
       *
       * <pre>
       * Densitiy of the pixels on the screen horiziontally.
       * </pre>
       */
      public int getDotsPerInchHorizontal() {
        return dotsPerInchHorizontal_;
      }
      /**
       * <code>optional int32 dots_per_inch_horizontal = 3;</code>
       *
       * <pre>
       * Densitiy of the pixels on the screen horiziontally.
       * </pre>
       */
      public Builder setDotsPerInchHorizontal(int value) {
        bitField0_ |= 0x00000004;
        dotsPerInchHorizontal_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 dots_per_inch_horizontal = 3;</code>
       *
       * <pre>
       * Densitiy of the pixels on the screen horiziontally.
       * </pre>
       */
      public Builder clearDotsPerInchHorizontal() {
        bitField0_ = (bitField0_ & ~0x00000004);
        dotsPerInchHorizontal_ = 0;
        onChanged();
        return this;
      }

      // optional int32 dots_per_inch_vertical = 4;
      private int dotsPerInchVertical_ ;
      /**
       * <code>optional int32 dots_per_inch_vertical = 4;</code>
       *
       * <pre>
       * Densitiy of the pixels on the screen vertically.
       * </pre>
       */
      public boolean hasDotsPerInchVertical() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 dots_per_inch_vertical = 4;</code>
       *
       * <pre>
       * Densitiy of the pixels on the screen vertically.
       * </pre>
       */
      public int getDotsPerInchVertical() {
        return dotsPerInchVertical_;
      }
      /**
       * <code>optional int32 dots_per_inch_vertical = 4;</code>
       *
       * <pre>
       * Densitiy of the pixels on the screen vertically.
       * </pre>
       */
      public Builder setDotsPerInchVertical(int value) {
        bitField0_ |= 0x00000008;
        dotsPerInchVertical_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 dots_per_inch_vertical = 4;</code>
       *
       * <pre>
       * Densitiy of the pixels on the screen vertically.
       * </pre>
       */
      public Builder clearDotsPerInchVertical() {
        bitField0_ = (bitField0_ & ~0x00000008);
        dotsPerInchVertical_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.DisplayDetails)
    }

    static {
      defaultInstance = new DisplayDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.DisplayDetails)
  }

  public interface JavaProcessStatsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 heap_memory_usage = 1;
    /**
     * <code>optional int64 heap_memory_usage = 1;</code>
     *
     * <pre>
     * Number of bytes of memory in use as heap memory.
     * </pre>
     */
    boolean hasHeapMemoryUsage();
    /**
     * <code>optional int64 heap_memory_usage = 1;</code>
     *
     * <pre>
     * Number of bytes of memory in use as heap memory.
     * </pre>
     */
    long getHeapMemoryUsage();

    // optional int64 non_heap_memory_usage = 2;
    /**
     * <code>optional int64 non_heap_memory_usage = 2;</code>
     *
     * <pre>
     * Number of bytes of memory in use as non heap memory.
     * </pre>
     */
    boolean hasNonHeapMemoryUsage();
    /**
     * <code>optional int64 non_heap_memory_usage = 2;</code>
     *
     * <pre>
     * Number of bytes of memory in use as non heap memory.
     * </pre>
     */
    long getNonHeapMemoryUsage();

    // optional int32 loaded_class_count = 3;
    /**
     * <code>optional int32 loaded_class_count = 3;</code>
     *
     * <pre>
     * Current amount of java classes loaded.
     * </pre>
     */
    boolean hasLoadedClassCount();
    /**
     * <code>optional int32 loaded_class_count = 3;</code>
     *
     * <pre>
     * Current amount of java classes loaded.
     * </pre>
     */
    int getLoadedClassCount();

    // optional int32 thread_count = 4;
    /**
     * <code>optional int32 thread_count = 4;</code>
     *
     * <pre>
     * Current amount of threads.
     * </pre>
     */
    boolean hasThreadCount();
    /**
     * <code>optional int32 thread_count = 4;</code>
     *
     * <pre>
     * Current amount of threads.
     * </pre>
     */
    int getThreadCount();

    // repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats> 
        getGarbageCollectionStatsList();
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats getGarbageCollectionStats(int index);
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    int getGarbageCollectionStatsCount();
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder> 
        getGarbageCollectionStatsOrBuilderList();
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder getGarbageCollectionStatsOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code android_studio.JavaProcessStats}
   *
   * <pre>
   * Stats on the current running java process.
   * </pre>
   */
  public static final class JavaProcessStats extends
      com.google.protobuf.GeneratedMessage
      implements JavaProcessStatsOrBuilder {
    // Use JavaProcessStats.newBuilder() to construct.
    private JavaProcessStats(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private JavaProcessStats(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final JavaProcessStats defaultInstance;
    public static JavaProcessStats getDefaultInstance() {
      return defaultInstance;
    }

    public JavaProcessStats getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private JavaProcessStats(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              heapMemoryUsage_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              nonHeapMemoryUsage_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              loadedClassCount_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              threadCount_ = input.readInt32();
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                garbageCollectionStats_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats>();
                mutable_bitField0_ |= 0x00000010;
              }
              garbageCollectionStats_.add(input.readMessage(com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          garbageCollectionStats_ = java.util.Collections.unmodifiableList(garbageCollectionStats_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JavaProcessStats_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JavaProcessStats_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.Builder.class);
    }

    public static com.google.protobuf.Parser<JavaProcessStats> PARSER =
        new com.google.protobuf.AbstractParser<JavaProcessStats>() {
      public JavaProcessStats parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new JavaProcessStats(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<JavaProcessStats> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 heap_memory_usage = 1;
    public static final int HEAP_MEMORY_USAGE_FIELD_NUMBER = 1;
    private long heapMemoryUsage_;
    /**
     * <code>optional int64 heap_memory_usage = 1;</code>
     *
     * <pre>
     * Number of bytes of memory in use as heap memory.
     * </pre>
     */
    public boolean hasHeapMemoryUsage() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 heap_memory_usage = 1;</code>
     *
     * <pre>
     * Number of bytes of memory in use as heap memory.
     * </pre>
     */
    public long getHeapMemoryUsage() {
      return heapMemoryUsage_;
    }

    // optional int64 non_heap_memory_usage = 2;
    public static final int NON_HEAP_MEMORY_USAGE_FIELD_NUMBER = 2;
    private long nonHeapMemoryUsage_;
    /**
     * <code>optional int64 non_heap_memory_usage = 2;</code>
     *
     * <pre>
     * Number of bytes of memory in use as non heap memory.
     * </pre>
     */
    public boolean hasNonHeapMemoryUsage() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 non_heap_memory_usage = 2;</code>
     *
     * <pre>
     * Number of bytes of memory in use as non heap memory.
     * </pre>
     */
    public long getNonHeapMemoryUsage() {
      return nonHeapMemoryUsage_;
    }

    // optional int32 loaded_class_count = 3;
    public static final int LOADED_CLASS_COUNT_FIELD_NUMBER = 3;
    private int loadedClassCount_;
    /**
     * <code>optional int32 loaded_class_count = 3;</code>
     *
     * <pre>
     * Current amount of java classes loaded.
     * </pre>
     */
    public boolean hasLoadedClassCount() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 loaded_class_count = 3;</code>
     *
     * <pre>
     * Current amount of java classes loaded.
     * </pre>
     */
    public int getLoadedClassCount() {
      return loadedClassCount_;
    }

    // optional int32 thread_count = 4;
    public static final int THREAD_COUNT_FIELD_NUMBER = 4;
    private int threadCount_;
    /**
     * <code>optional int32 thread_count = 4;</code>
     *
     * <pre>
     * Current amount of threads.
     * </pre>
     */
    public boolean hasThreadCount() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 thread_count = 4;</code>
     *
     * <pre>
     * Current amount of threads.
     * </pre>
     */
    public int getThreadCount() {
      return threadCount_;
    }

    // repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;
    public static final int GARBAGE_COLLECTION_STATS_FIELD_NUMBER = 5;
    private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats> garbageCollectionStats_;
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats> getGarbageCollectionStatsList() {
      return garbageCollectionStats_;
    }
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder> 
        getGarbageCollectionStatsOrBuilderList() {
      return garbageCollectionStats_;
    }
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    public int getGarbageCollectionStatsCount() {
      return garbageCollectionStats_.size();
    }
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats getGarbageCollectionStats(int index) {
      return garbageCollectionStats_.get(index);
    }
    /**
     * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
     *
     * <pre>
     * Statistics about the garbage collectors used in this process.
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder getGarbageCollectionStatsOrBuilder(
        int index) {
      return garbageCollectionStats_.get(index);
    }

    private void initFields() {
      heapMemoryUsage_ = 0L;
      nonHeapMemoryUsage_ = 0L;
      loadedClassCount_ = 0;
      threadCount_ = 0;
      garbageCollectionStats_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, heapMemoryUsage_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, nonHeapMemoryUsage_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, loadedClassCount_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, threadCount_);
      }
      for (int i = 0; i < garbageCollectionStats_.size(); i++) {
        output.writeMessage(5, garbageCollectionStats_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, heapMemoryUsage_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, nonHeapMemoryUsage_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, loadedClassCount_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, threadCount_);
      }
      for (int i = 0; i < garbageCollectionStats_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, garbageCollectionStats_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.JavaProcessStats}
     *
     * <pre>
     * Stats on the current running java process.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStatsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JavaProcessStats_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JavaProcessStats_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getGarbageCollectionStatsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        heapMemoryUsage_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        nonHeapMemoryUsage_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        loadedClassCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        threadCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (garbageCollectionStatsBuilder_ == null) {
          garbageCollectionStats_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          garbageCollectionStatsBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JavaProcessStats_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.heapMemoryUsage_ = heapMemoryUsage_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.nonHeapMemoryUsage_ = nonHeapMemoryUsage_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.loadedClassCount_ = loadedClassCount_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.threadCount_ = threadCount_;
        if (garbageCollectionStatsBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            garbageCollectionStats_ = java.util.Collections.unmodifiableList(garbageCollectionStats_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.garbageCollectionStats_ = garbageCollectionStats_;
        } else {
          result.garbageCollectionStats_ = garbageCollectionStatsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats.getDefaultInstance()) return this;
        if (other.hasHeapMemoryUsage()) {
          setHeapMemoryUsage(other.getHeapMemoryUsage());
        }
        if (other.hasNonHeapMemoryUsage()) {
          setNonHeapMemoryUsage(other.getNonHeapMemoryUsage());
        }
        if (other.hasLoadedClassCount()) {
          setLoadedClassCount(other.getLoadedClassCount());
        }
        if (other.hasThreadCount()) {
          setThreadCount(other.getThreadCount());
        }
        if (garbageCollectionStatsBuilder_ == null) {
          if (!other.garbageCollectionStats_.isEmpty()) {
            if (garbageCollectionStats_.isEmpty()) {
              garbageCollectionStats_ = other.garbageCollectionStats_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureGarbageCollectionStatsIsMutable();
              garbageCollectionStats_.addAll(other.garbageCollectionStats_);
            }
            onChanged();
          }
        } else {
          if (!other.garbageCollectionStats_.isEmpty()) {
            if (garbageCollectionStatsBuilder_.isEmpty()) {
              garbageCollectionStatsBuilder_.dispose();
              garbageCollectionStatsBuilder_ = null;
              garbageCollectionStats_ = other.garbageCollectionStats_;
              bitField0_ = (bitField0_ & ~0x00000010);
              garbageCollectionStatsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getGarbageCollectionStatsFieldBuilder() : null;
            } else {
              garbageCollectionStatsBuilder_.addAllMessages(other.garbageCollectionStats_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.JavaProcessStats) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 heap_memory_usage = 1;
      private long heapMemoryUsage_ ;
      /**
       * <code>optional int64 heap_memory_usage = 1;</code>
       *
       * <pre>
       * Number of bytes of memory in use as heap memory.
       * </pre>
       */
      public boolean hasHeapMemoryUsage() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 heap_memory_usage = 1;</code>
       *
       * <pre>
       * Number of bytes of memory in use as heap memory.
       * </pre>
       */
      public long getHeapMemoryUsage() {
        return heapMemoryUsage_;
      }
      /**
       * <code>optional int64 heap_memory_usage = 1;</code>
       *
       * <pre>
       * Number of bytes of memory in use as heap memory.
       * </pre>
       */
      public Builder setHeapMemoryUsage(long value) {
        bitField0_ |= 0x00000001;
        heapMemoryUsage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 heap_memory_usage = 1;</code>
       *
       * <pre>
       * Number of bytes of memory in use as heap memory.
       * </pre>
       */
      public Builder clearHeapMemoryUsage() {
        bitField0_ = (bitField0_ & ~0x00000001);
        heapMemoryUsage_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 non_heap_memory_usage = 2;
      private long nonHeapMemoryUsage_ ;
      /**
       * <code>optional int64 non_heap_memory_usage = 2;</code>
       *
       * <pre>
       * Number of bytes of memory in use as non heap memory.
       * </pre>
       */
      public boolean hasNonHeapMemoryUsage() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 non_heap_memory_usage = 2;</code>
       *
       * <pre>
       * Number of bytes of memory in use as non heap memory.
       * </pre>
       */
      public long getNonHeapMemoryUsage() {
        return nonHeapMemoryUsage_;
      }
      /**
       * <code>optional int64 non_heap_memory_usage = 2;</code>
       *
       * <pre>
       * Number of bytes of memory in use as non heap memory.
       * </pre>
       */
      public Builder setNonHeapMemoryUsage(long value) {
        bitField0_ |= 0x00000002;
        nonHeapMemoryUsage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 non_heap_memory_usage = 2;</code>
       *
       * <pre>
       * Number of bytes of memory in use as non heap memory.
       * </pre>
       */
      public Builder clearNonHeapMemoryUsage() {
        bitField0_ = (bitField0_ & ~0x00000002);
        nonHeapMemoryUsage_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 loaded_class_count = 3;
      private int loadedClassCount_ ;
      /**
       * <code>optional int32 loaded_class_count = 3;</code>
       *
       * <pre>
       * Current amount of java classes loaded.
       * </pre>
       */
      public boolean hasLoadedClassCount() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 loaded_class_count = 3;</code>
       *
       * <pre>
       * Current amount of java classes loaded.
       * </pre>
       */
      public int getLoadedClassCount() {
        return loadedClassCount_;
      }
      /**
       * <code>optional int32 loaded_class_count = 3;</code>
       *
       * <pre>
       * Current amount of java classes loaded.
       * </pre>
       */
      public Builder setLoadedClassCount(int value) {
        bitField0_ |= 0x00000004;
        loadedClassCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 loaded_class_count = 3;</code>
       *
       * <pre>
       * Current amount of java classes loaded.
       * </pre>
       */
      public Builder clearLoadedClassCount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        loadedClassCount_ = 0;
        onChanged();
        return this;
      }

      // optional int32 thread_count = 4;
      private int threadCount_ ;
      /**
       * <code>optional int32 thread_count = 4;</code>
       *
       * <pre>
       * Current amount of threads.
       * </pre>
       */
      public boolean hasThreadCount() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 thread_count = 4;</code>
       *
       * <pre>
       * Current amount of threads.
       * </pre>
       */
      public int getThreadCount() {
        return threadCount_;
      }
      /**
       * <code>optional int32 thread_count = 4;</code>
       *
       * <pre>
       * Current amount of threads.
       * </pre>
       */
      public Builder setThreadCount(int value) {
        bitField0_ |= 0x00000008;
        threadCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 thread_count = 4;</code>
       *
       * <pre>
       * Current amount of threads.
       * </pre>
       */
      public Builder clearThreadCount() {
        bitField0_ = (bitField0_ & ~0x00000008);
        threadCount_ = 0;
        onChanged();
        return this;
      }

      // repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;
      private java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats> garbageCollectionStats_ =
        java.util.Collections.emptyList();
      private void ensureGarbageCollectionStatsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          garbageCollectionStats_ = new java.util.ArrayList<com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats>(garbageCollectionStats_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder> garbageCollectionStatsBuilder_;

      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats> getGarbageCollectionStatsList() {
        if (garbageCollectionStatsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(garbageCollectionStats_);
        } else {
          return garbageCollectionStatsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public int getGarbageCollectionStatsCount() {
        if (garbageCollectionStatsBuilder_ == null) {
          return garbageCollectionStats_.size();
        } else {
          return garbageCollectionStatsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats getGarbageCollectionStats(int index) {
        if (garbageCollectionStatsBuilder_ == null) {
          return garbageCollectionStats_.get(index);
        } else {
          return garbageCollectionStatsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder setGarbageCollectionStats(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats value) {
        if (garbageCollectionStatsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGarbageCollectionStatsIsMutable();
          garbageCollectionStats_.set(index, value);
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder setGarbageCollectionStats(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder builderForValue) {
        if (garbageCollectionStatsBuilder_ == null) {
          ensureGarbageCollectionStatsIsMutable();
          garbageCollectionStats_.set(index, builderForValue.build());
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder addGarbageCollectionStats(com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats value) {
        if (garbageCollectionStatsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGarbageCollectionStatsIsMutable();
          garbageCollectionStats_.add(value);
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder addGarbageCollectionStats(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats value) {
        if (garbageCollectionStatsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGarbageCollectionStatsIsMutable();
          garbageCollectionStats_.add(index, value);
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder addGarbageCollectionStats(
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder builderForValue) {
        if (garbageCollectionStatsBuilder_ == null) {
          ensureGarbageCollectionStatsIsMutable();
          garbageCollectionStats_.add(builderForValue.build());
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder addGarbageCollectionStats(
          int index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder builderForValue) {
        if (garbageCollectionStatsBuilder_ == null) {
          ensureGarbageCollectionStatsIsMutable();
          garbageCollectionStats_.add(index, builderForValue.build());
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder addAllGarbageCollectionStats(
          java.lang.Iterable<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats> values) {
        if (garbageCollectionStatsBuilder_ == null) {
          ensureGarbageCollectionStatsIsMutable();
          super.addAll(values, garbageCollectionStats_);
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder clearGarbageCollectionStats() {
        if (garbageCollectionStatsBuilder_ == null) {
          garbageCollectionStats_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public Builder removeGarbageCollectionStats(int index) {
        if (garbageCollectionStatsBuilder_ == null) {
          ensureGarbageCollectionStatsIsMutable();
          garbageCollectionStats_.remove(index);
          onChanged();
        } else {
          garbageCollectionStatsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder getGarbageCollectionStatsBuilder(
          int index) {
        return getGarbageCollectionStatsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder getGarbageCollectionStatsOrBuilder(
          int index) {
        if (garbageCollectionStatsBuilder_ == null) {
          return garbageCollectionStats_.get(index);  } else {
          return garbageCollectionStatsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public java.util.List<? extends com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder> 
           getGarbageCollectionStatsOrBuilderList() {
        if (garbageCollectionStatsBuilder_ != null) {
          return garbageCollectionStatsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(garbageCollectionStats_);
        }
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder addGarbageCollectionStatsBuilder() {
        return getGarbageCollectionStatsFieldBuilder().addBuilder(
            com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder addGarbageCollectionStatsBuilder(
          int index) {
        return getGarbageCollectionStatsFieldBuilder().addBuilder(
            index, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.getDefaultInstance());
      }
      /**
       * <code>repeated .android_studio.GarbageCollectionStats garbage_collection_stats = 5;</code>
       *
       * <pre>
       * Statistics about the garbage collectors used in this process.
       * </pre>
       */
      public java.util.List<com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder> 
           getGarbageCollectionStatsBuilderList() {
        return getGarbageCollectionStatsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder> 
          getGarbageCollectionStatsFieldBuilder() {
        if (garbageCollectionStatsBuilder_ == null) {
          garbageCollectionStatsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder>(
                  garbageCollectionStats_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          garbageCollectionStats_ = null;
        }
        return garbageCollectionStatsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.JavaProcessStats)
    }

    static {
      defaultInstance = new JavaProcessStats(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.JavaProcessStats)
  }

  public interface GarbageCollectionStatsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
     * </pre>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
     * </pre>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
     * </pre>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional int64 gc_collections = 2;
    /**
     * <code>optional int64 gc_collections = 2;</code>
     *
     * <pre>
     * Number of garbage collector invocations since last report.
     * </pre>
     */
    boolean hasGcCollections();
    /**
     * <code>optional int64 gc_collections = 2;</code>
     *
     * <pre>
     * Number of garbage collector invocations since last report.
     * </pre>
     */
    long getGcCollections();

    // optional int64 gc_time = 3;
    /**
     * <code>optional int64 gc_time = 3;</code>
     *
     * <pre>
     * Time spent garbage collecting since last report in milliseconds.
     * </pre>
     */
    boolean hasGcTime();
    /**
     * <code>optional int64 gc_time = 3;</code>
     *
     * <pre>
     * Time spent garbage collecting since last report in milliseconds.
     * </pre>
     */
    long getGcTime();
  }
  /**
   * Protobuf type {@code android_studio.GarbageCollectionStats}
   *
   * <pre>
   * Statistics about the garbage collector.
   * </pre>
   */
  public static final class GarbageCollectionStats extends
      com.google.protobuf.GeneratedMessage
      implements GarbageCollectionStatsOrBuilder {
    // Use GarbageCollectionStats.newBuilder() to construct.
    private GarbageCollectionStats(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GarbageCollectionStats(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GarbageCollectionStats defaultInstance;
    public static GarbageCollectionStats getDefaultInstance() {
      return defaultInstance;
    }

    public GarbageCollectionStats getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GarbageCollectionStats(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              gcCollections_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              gcTime_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GarbageCollectionStats_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GarbageCollectionStats_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder.class);
    }

    public static com.google.protobuf.Parser<GarbageCollectionStats> PARSER =
        new com.google.protobuf.AbstractParser<GarbageCollectionStats>() {
      public GarbageCollectionStats parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GarbageCollectionStats(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GarbageCollectionStats> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
     * </pre>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
     * </pre>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
     * </pre>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 gc_collections = 2;
    public static final int GC_COLLECTIONS_FIELD_NUMBER = 2;
    private long gcCollections_;
    /**
     * <code>optional int64 gc_collections = 2;</code>
     *
     * <pre>
     * Number of garbage collector invocations since last report.
     * </pre>
     */
    public boolean hasGcCollections() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 gc_collections = 2;</code>
     *
     * <pre>
     * Number of garbage collector invocations since last report.
     * </pre>
     */
    public long getGcCollections() {
      return gcCollections_;
    }

    // optional int64 gc_time = 3;
    public static final int GC_TIME_FIELD_NUMBER = 3;
    private long gcTime_;
    /**
     * <code>optional int64 gc_time = 3;</code>
     *
     * <pre>
     * Time spent garbage collecting since last report in milliseconds.
     * </pre>
     */
    public boolean hasGcTime() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 gc_time = 3;</code>
     *
     * <pre>
     * Time spent garbage collecting since last report in milliseconds.
     * </pre>
     */
    public long getGcTime() {
      return gcTime_;
    }

    private void initFields() {
      name_ = "";
      gcCollections_ = 0L;
      gcTime_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, gcCollections_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, gcTime_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, gcCollections_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, gcTime_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.GarbageCollectionStats}
     *
     * <pre>
     * Statistics about the garbage collector.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStatsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GarbageCollectionStats_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GarbageCollectionStats_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        gcCollections_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        gcTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_GarbageCollectionStats_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.gcCollections_ = gcCollections_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.gcTime_ = gcTime_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasGcCollections()) {
          setGcCollections(other.getGcCollections());
        }
        if (other.hasGcTime()) {
          setGcTime(other.getGcTime());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.GarbageCollectionStats) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
       * </pre>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
       * </pre>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
       * </pre>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
       * </pre>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
       * </pre>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the garbage collector (e.g. 'ConcurrentMarkSweep')
       * </pre>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional int64 gc_collections = 2;
      private long gcCollections_ ;
      /**
       * <code>optional int64 gc_collections = 2;</code>
       *
       * <pre>
       * Number of garbage collector invocations since last report.
       * </pre>
       */
      public boolean hasGcCollections() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 gc_collections = 2;</code>
       *
       * <pre>
       * Number of garbage collector invocations since last report.
       * </pre>
       */
      public long getGcCollections() {
        return gcCollections_;
      }
      /**
       * <code>optional int64 gc_collections = 2;</code>
       *
       * <pre>
       * Number of garbage collector invocations since last report.
       * </pre>
       */
      public Builder setGcCollections(long value) {
        bitField0_ |= 0x00000002;
        gcCollections_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 gc_collections = 2;</code>
       *
       * <pre>
       * Number of garbage collector invocations since last report.
       * </pre>
       */
      public Builder clearGcCollections() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gcCollections_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 gc_time = 3;
      private long gcTime_ ;
      /**
       * <code>optional int64 gc_time = 3;</code>
       *
       * <pre>
       * Time spent garbage collecting since last report in milliseconds.
       * </pre>
       */
      public boolean hasGcTime() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 gc_time = 3;</code>
       *
       * <pre>
       * Time spent garbage collecting since last report in milliseconds.
       * </pre>
       */
      public long getGcTime() {
        return gcTime_;
      }
      /**
       * <code>optional int64 gc_time = 3;</code>
       *
       * <pre>
       * Time spent garbage collecting since last report in milliseconds.
       * </pre>
       */
      public Builder setGcTime(long value) {
        bitField0_ |= 0x00000004;
        gcTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 gc_time = 3;</code>
       *
       * <pre>
       * Time spent garbage collecting since last report in milliseconds.
       * </pre>
       */
      public Builder clearGcTime() {
        bitField0_ = (bitField0_ & ~0x00000004);
        gcTime_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.GarbageCollectionStats)
    }

    static {
      defaultInstance = new GarbageCollectionStats(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.GarbageCollectionStats)
  }

  public interface JvmDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
     * </pre>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
     * </pre>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
     * </pre>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional string version = 2;
    /**
     * <code>optional string version = 2;</code>
     *
     * <pre>
     * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
     * </pre>
     */
    boolean hasVersion();
    /**
     * <code>optional string version = 2;</code>
     *
     * <pre>
     * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
     * </pre>
     */
    java.lang.String getVersion();
    /**
     * <code>optional string version = 2;</code>
     *
     * <pre>
     * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
     * </pre>
     */
    com.google.protobuf.ByteString
        getVersionBytes();

    // optional string vendor = 3;
    /**
     * <code>optional string vendor = 3;</code>
     *
     * <pre>
     * Vendor of the JVM (e.g. "JetBrains s.r.o.")
     * </pre>
     */
    boolean hasVendor();
    /**
     * <code>optional string vendor = 3;</code>
     *
     * <pre>
     * Vendor of the JVM (e.g. "JetBrains s.r.o.")
     * </pre>
     */
    java.lang.String getVendor();
    /**
     * <code>optional string vendor = 3;</code>
     *
     * <pre>
     * Vendor of the JVM (e.g. "JetBrains s.r.o.")
     * </pre>
     */
    com.google.protobuf.ByteString
        getVendorBytes();

    // optional int64 minimum_heap_size = 4;
    /**
     * <code>optional int64 minimum_heap_size = 4;</code>
     *
     * <pre>
     * VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
     * </pre>
     */
    boolean hasMinimumHeapSize();
    /**
     * <code>optional int64 minimum_heap_size = 4;</code>
     *
     * <pre>
     * VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
     * </pre>
     */
    long getMinimumHeapSize();

    // optional int64 maximum_heap_size = 5;
    /**
     * <code>optional int64 maximum_heap_size = 5;</code>
     *
     * <pre>
     * VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
     * </pre>
     */
    boolean hasMaximumHeapSize();
    /**
     * <code>optional int64 maximum_heap_size = 5;</code>
     *
     * <pre>
     * VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
     * </pre>
     */
    long getMaximumHeapSize();

    // optional int64 maximum_permanent_space_size = 6;
    /**
     * <code>optional int64 maximum_permanent_space_size = 6;</code>
     *
     * <pre>
     * VM Option specified to set maximum permanent space size in bytes.
     *  ("-XX:MaxPermSize" flag)
     * </pre>
     */
    boolean hasMaximumPermanentSpaceSize();
    /**
     * <code>optional int64 maximum_permanent_space_size = 6;</code>
     *
     * <pre>
     * VM Option specified to set maximum permanent space size in bytes.
     *  ("-XX:MaxPermSize" flag)
     * </pre>
     */
    long getMaximumPermanentSpaceSize();

    // optional int64 maximum_code_cache_size = 7;
    /**
     * <code>optional int64 maximum_code_cache_size = 7;</code>
     *
     * <pre>
     * VM Option specified to set maximum permanent space size in bytes.
     *  ("-XX:ReservedCodeCacheSize" flag)
     * </pre>
     */
    boolean hasMaximumCodeCacheSize();
    /**
     * <code>optional int64 maximum_code_cache_size = 7;</code>
     *
     * <pre>
     * VM Option specified to set maximum permanent space size in bytes.
     *  ("-XX:ReservedCodeCacheSize" flag)
     * </pre>
     */
    long getMaximumCodeCacheSize();

    // optional int64 soft_reference_lru_policy = 8;
    /**
     * <code>optional int64 soft_reference_lru_policy = 8;</code>
     *
     * <pre>
     * VM Option specified to set time soft referenced objects remain alive in ms.
     *  ("-XX:SoftRefLRUPolicyMSPerMB" flag)
     * </pre>
     */
    boolean hasSoftReferenceLruPolicy();
    /**
     * <code>optional int64 soft_reference_lru_policy = 8;</code>
     *
     * <pre>
     * VM Option specified to set time soft referenced objects remain alive in ms.
     *  ("-XX:SoftRefLRUPolicyMSPerMB" flag)
     * </pre>
     */
    long getSoftReferenceLruPolicy();

    // optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;
    /**
     * <code>optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;</code>
     *
     * <pre>
     * Type of Garbage Collector to use (various VM Option flags).
     * </pre>
     */
    boolean hasGarbageCollector();
    /**
     * <code>optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;</code>
     *
     * <pre>
     * Type of Garbage Collector to use (various VM Option flags).
     * </pre>
     */
    com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector getGarbageCollector();
  }
  /**
   * Protobuf type {@code android_studio.JvmDetails}
   *
   * <pre>
   * Details about the JVM used in this process.
   * </pre>
   */
  public static final class JvmDetails extends
      com.google.protobuf.GeneratedMessage
      implements JvmDetailsOrBuilder {
    // Use JvmDetails.newBuilder() to construct.
    private JvmDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private JvmDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final JvmDetails defaultInstance;
    public static JvmDetails getDefaultInstance() {
      return defaultInstance;
    }

    public JvmDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private JvmDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              version_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              vendor_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              minimumHeapSize_ = input.readInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              maximumHeapSize_ = input.readInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              maximumPermanentSpaceSize_ = input.readInt64();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              maximumCodeCacheSize_ = input.readInt64();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              softReferenceLruPolicy_ = input.readInt64();
              break;
            }
            case 72: {
              int rawValue = input.readEnum();
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector value = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(9, rawValue);
              } else {
                bitField0_ |= 0x00000100;
                garbageCollector_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JvmDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JvmDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<JvmDetails> PARSER =
        new com.google.protobuf.AbstractParser<JvmDetails>() {
      public JvmDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new JvmDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<JvmDetails> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code android_studio.JvmDetails.GarbageCollector}
     *
     * <pre>
     * Various garbage collectors that could be chosen through VM Options.
     * </pre>
     */
    public enum GarbageCollector
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNSPECIFIED_GC = 0;</code>
       */
      UNSPECIFIED_GC(0, 0),
      /**
       * <code>CONCURRENT_MARK_SWEEP_GC = 1;</code>
       */
      CONCURRENT_MARK_SWEEP_GC(1, 1),
      /**
       * <code>GARBAGE_FIRST_GC = 2;</code>
       */
      GARBAGE_FIRST_GC(2, 2),
      /**
       * <code>PARALLEL_GC = 3;</code>
       */
      PARALLEL_GC(3, 3),
      /**
       * <code>PARALLEL_OLD_GC = 4;</code>
       */
      PARALLEL_OLD_GC(4, 4),
      /**
       * <code>SERIAL_GC = 5;</code>
       */
      SERIAL_GC(5, 5),
      ;

      /**
       * <code>UNSPECIFIED_GC = 0;</code>
       */
      public static final int UNSPECIFIED_GC_VALUE = 0;
      /**
       * <code>CONCURRENT_MARK_SWEEP_GC = 1;</code>
       */
      public static final int CONCURRENT_MARK_SWEEP_GC_VALUE = 1;
      /**
       * <code>GARBAGE_FIRST_GC = 2;</code>
       */
      public static final int GARBAGE_FIRST_GC_VALUE = 2;
      /**
       * <code>PARALLEL_GC = 3;</code>
       */
      public static final int PARALLEL_GC_VALUE = 3;
      /**
       * <code>PARALLEL_OLD_GC = 4;</code>
       */
      public static final int PARALLEL_OLD_GC_VALUE = 4;
      /**
       * <code>SERIAL_GC = 5;</code>
       */
      public static final int SERIAL_GC_VALUE = 5;


      public final int getNumber() { return value; }

      public static GarbageCollector valueOf(int value) {
        switch (value) {
          case 0: return UNSPECIFIED_GC;
          case 1: return CONCURRENT_MARK_SWEEP_GC;
          case 2: return GARBAGE_FIRST_GC;
          case 3: return PARALLEL_GC;
          case 4: return PARALLEL_OLD_GC;
          case 5: return SERIAL_GC;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<GarbageCollector>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<GarbageCollector>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<GarbageCollector>() {
              public GarbageCollector findValueByNumber(int number) {
                return GarbageCollector.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.getDescriptor().getEnumTypes().get(0);
      }

      private static final GarbageCollector[] VALUES = values();

      public static GarbageCollector valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private GarbageCollector(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:android_studio.JvmDetails.GarbageCollector)
    }

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
     * </pre>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
     * </pre>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
     * </pre>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string version = 2;
    public static final int VERSION_FIELD_NUMBER = 2;
    private java.lang.Object version_;
    /**
     * <code>optional string version = 2;</code>
     *
     * <pre>
     * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
     * </pre>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string version = 2;</code>
     *
     * <pre>
     * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
     * </pre>
     */
    public java.lang.String getVersion() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version = 2;</code>
     *
     * <pre>
     * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
     * </pre>
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string vendor = 3;
    public static final int VENDOR_FIELD_NUMBER = 3;
    private java.lang.Object vendor_;
    /**
     * <code>optional string vendor = 3;</code>
     *
     * <pre>
     * Vendor of the JVM (e.g. "JetBrains s.r.o.")
     * </pre>
     */
    public boolean hasVendor() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string vendor = 3;</code>
     *
     * <pre>
     * Vendor of the JVM (e.g. "JetBrains s.r.o.")
     * </pre>
     */
    public java.lang.String getVendor() {
      java.lang.Object ref = vendor_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          vendor_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string vendor = 3;</code>
     *
     * <pre>
     * Vendor of the JVM (e.g. "JetBrains s.r.o.")
     * </pre>
     */
    public com.google.protobuf.ByteString
        getVendorBytes() {
      java.lang.Object ref = vendor_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        vendor_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 minimum_heap_size = 4;
    public static final int MINIMUM_HEAP_SIZE_FIELD_NUMBER = 4;
    private long minimumHeapSize_;
    /**
     * <code>optional int64 minimum_heap_size = 4;</code>
     *
     * <pre>
     * VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
     * </pre>
     */
    public boolean hasMinimumHeapSize() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 minimum_heap_size = 4;</code>
     *
     * <pre>
     * VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
     * </pre>
     */
    public long getMinimumHeapSize() {
      return minimumHeapSize_;
    }

    // optional int64 maximum_heap_size = 5;
    public static final int MAXIMUM_HEAP_SIZE_FIELD_NUMBER = 5;
    private long maximumHeapSize_;
    /**
     * <code>optional int64 maximum_heap_size = 5;</code>
     *
     * <pre>
     * VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
     * </pre>
     */
    public boolean hasMaximumHeapSize() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 maximum_heap_size = 5;</code>
     *
     * <pre>
     * VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
     * </pre>
     */
    public long getMaximumHeapSize() {
      return maximumHeapSize_;
    }

    // optional int64 maximum_permanent_space_size = 6;
    public static final int MAXIMUM_PERMANENT_SPACE_SIZE_FIELD_NUMBER = 6;
    private long maximumPermanentSpaceSize_;
    /**
     * <code>optional int64 maximum_permanent_space_size = 6;</code>
     *
     * <pre>
     * VM Option specified to set maximum permanent space size in bytes.
     *  ("-XX:MaxPermSize" flag)
     * </pre>
     */
    public boolean hasMaximumPermanentSpaceSize() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int64 maximum_permanent_space_size = 6;</code>
     *
     * <pre>
     * VM Option specified to set maximum permanent space size in bytes.
     *  ("-XX:MaxPermSize" flag)
     * </pre>
     */
    public long getMaximumPermanentSpaceSize() {
      return maximumPermanentSpaceSize_;
    }

    // optional int64 maximum_code_cache_size = 7;
    public static final int MAXIMUM_CODE_CACHE_SIZE_FIELD_NUMBER = 7;
    private long maximumCodeCacheSize_;
    /**
     * <code>optional int64 maximum_code_cache_size = 7;</code>
     *
     * <pre>
     * VM Option specified to set maximum permanent space size in bytes.
     *  ("-XX:ReservedCodeCacheSize" flag)
     * </pre>
     */
    public boolean hasMaximumCodeCacheSize() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 maximum_code_cache_size = 7;</code>
     *
     * <pre>
     * VM Option specified to set maximum permanent space size in bytes.
     *  ("-XX:ReservedCodeCacheSize" flag)
     * </pre>
     */
    public long getMaximumCodeCacheSize() {
      return maximumCodeCacheSize_;
    }

    // optional int64 soft_reference_lru_policy = 8;
    public static final int SOFT_REFERENCE_LRU_POLICY_FIELD_NUMBER = 8;
    private long softReferenceLruPolicy_;
    /**
     * <code>optional int64 soft_reference_lru_policy = 8;</code>
     *
     * <pre>
     * VM Option specified to set time soft referenced objects remain alive in ms.
     *  ("-XX:SoftRefLRUPolicyMSPerMB" flag)
     * </pre>
     */
    public boolean hasSoftReferenceLruPolicy() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int64 soft_reference_lru_policy = 8;</code>
     *
     * <pre>
     * VM Option specified to set time soft referenced objects remain alive in ms.
     *  ("-XX:SoftRefLRUPolicyMSPerMB" flag)
     * </pre>
     */
    public long getSoftReferenceLruPolicy() {
      return softReferenceLruPolicy_;
    }

    // optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;
    public static final int GARBAGE_COLLECTOR_FIELD_NUMBER = 9;
    private com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector garbageCollector_;
    /**
     * <code>optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;</code>
     *
     * <pre>
     * Type of Garbage Collector to use (various VM Option flags).
     * </pre>
     */
    public boolean hasGarbageCollector() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;</code>
     *
     * <pre>
     * Type of Garbage Collector to use (various VM Option flags).
     * </pre>
     */
    public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector getGarbageCollector() {
      return garbageCollector_;
    }

    private void initFields() {
      name_ = "";
      version_ = "";
      vendor_ = "";
      minimumHeapSize_ = 0L;
      maximumHeapSize_ = 0L;
      maximumPermanentSpaceSize_ = 0L;
      maximumCodeCacheSize_ = 0L;
      softReferenceLruPolicy_ = 0L;
      garbageCollector_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector.UNSPECIFIED_GC;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getVendorBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, minimumHeapSize_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, maximumHeapSize_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt64(6, maximumPermanentSpaceSize_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(7, maximumCodeCacheSize_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt64(8, softReferenceLruPolicy_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeEnum(9, garbageCollector_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getVendorBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, minimumHeapSize_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, maximumHeapSize_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, maximumPermanentSpaceSize_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, maximumCodeCacheSize_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(8, softReferenceLruPolicy_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(9, garbageCollector_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code android_studio.JvmDetails}
     *
     * <pre>
     * Details about the JVM used in this process.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JvmDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JvmDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.class, com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.Builder.class);
      }

      // Construct using com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        vendor_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        minimumHeapSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        maximumHeapSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        maximumPermanentSpaceSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        maximumCodeCacheSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        softReferenceLruPolicy_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        garbageCollector_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector.UNSPECIFIED_GC;
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.internal_static_android_studio_JvmDetails_descriptor;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails getDefaultInstanceForType() {
        return com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.getDefaultInstance();
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails build() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails buildPartial() {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails result = new com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.vendor_ = vendor_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.minimumHeapSize_ = minimumHeapSize_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.maximumHeapSize_ = maximumHeapSize_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.maximumPermanentSpaceSize_ = maximumPermanentSpaceSize_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.maximumCodeCacheSize_ = maximumCodeCacheSize_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.softReferenceLruPolicy_ = softReferenceLruPolicy_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.garbageCollector_ = garbageCollector_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails) {
          return mergeFrom((com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails other) {
        if (other == com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasVersion()) {
          bitField0_ |= 0x00000002;
          version_ = other.version_;
          onChanged();
        }
        if (other.hasVendor()) {
          bitField0_ |= 0x00000004;
          vendor_ = other.vendor_;
          onChanged();
        }
        if (other.hasMinimumHeapSize()) {
          setMinimumHeapSize(other.getMinimumHeapSize());
        }
        if (other.hasMaximumHeapSize()) {
          setMaximumHeapSize(other.getMaximumHeapSize());
        }
        if (other.hasMaximumPermanentSpaceSize()) {
          setMaximumPermanentSpaceSize(other.getMaximumPermanentSpaceSize());
        }
        if (other.hasMaximumCodeCacheSize()) {
          setMaximumCodeCacheSize(other.getMaximumCodeCacheSize());
        }
        if (other.hasSoftReferenceLruPolicy()) {
          setSoftReferenceLruPolicy(other.getSoftReferenceLruPolicy());
        }
        if (other.hasGarbageCollector()) {
          setGarbageCollector(other.getGarbageCollector());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
       * </pre>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
       * </pre>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
       * </pre>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
       * </pre>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
       * </pre>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o").
       * </pre>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional string version = 2;
      private java.lang.Object version_ = "";
      /**
       * <code>optional string version = 2;</code>
       *
       * <pre>
       * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
       * </pre>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string version = 2;</code>
       *
       * <pre>
       * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
       * </pre>
       */
      public java.lang.String getVersion() {
        java.lang.Object ref = version_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          version_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string version = 2;</code>
       *
       * <pre>
       * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
       * </pre>
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        java.lang.Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version = 2;</code>
       *
       * <pre>
       * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
       * </pre>
       */
      public Builder setVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 2;</code>
       *
       * <pre>
       * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
       * </pre>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 2;</code>
       *
       * <pre>
       * Version of the JVM (e.g. "1.8.0_76-release-b198 amd")
       * </pre>
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        version_ = value;
        onChanged();
        return this;
      }

      // optional string vendor = 3;
      private java.lang.Object vendor_ = "";
      /**
       * <code>optional string vendor = 3;</code>
       *
       * <pre>
       * Vendor of the JVM (e.g. "JetBrains s.r.o.")
       * </pre>
       */
      public boolean hasVendor() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string vendor = 3;</code>
       *
       * <pre>
       * Vendor of the JVM (e.g. "JetBrains s.r.o.")
       * </pre>
       */
      public java.lang.String getVendor() {
        java.lang.Object ref = vendor_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          vendor_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string vendor = 3;</code>
       *
       * <pre>
       * Vendor of the JVM (e.g. "JetBrains s.r.o.")
       * </pre>
       */
      public com.google.protobuf.ByteString
          getVendorBytes() {
        java.lang.Object ref = vendor_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          vendor_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string vendor = 3;</code>
       *
       * <pre>
       * Vendor of the JVM (e.g. "JetBrains s.r.o.")
       * </pre>
       */
      public Builder setVendor(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        vendor_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string vendor = 3;</code>
       *
       * <pre>
       * Vendor of the JVM (e.g. "JetBrains s.r.o.")
       * </pre>
       */
      public Builder clearVendor() {
        bitField0_ = (bitField0_ & ~0x00000004);
        vendor_ = getDefaultInstance().getVendor();
        onChanged();
        return this;
      }
      /**
       * <code>optional string vendor = 3;</code>
       *
       * <pre>
       * Vendor of the JVM (e.g. "JetBrains s.r.o.")
       * </pre>
       */
      public Builder setVendorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        vendor_ = value;
        onChanged();
        return this;
      }

      // optional int64 minimum_heap_size = 4;
      private long minimumHeapSize_ ;
      /**
       * <code>optional int64 minimum_heap_size = 4;</code>
       *
       * <pre>
       * VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
       * </pre>
       */
      public boolean hasMinimumHeapSize() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 minimum_heap_size = 4;</code>
       *
       * <pre>
       * VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
       * </pre>
       */
      public long getMinimumHeapSize() {
        return minimumHeapSize_;
      }
      /**
       * <code>optional int64 minimum_heap_size = 4;</code>
       *
       * <pre>
       * VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
       * </pre>
       */
      public Builder setMinimumHeapSize(long value) {
        bitField0_ |= 0x00000008;
        minimumHeapSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 minimum_heap_size = 4;</code>
       *
       * <pre>
       * VM Option specified to set minimum heap_size in bytes ("-Xms" flag).
       * </pre>
       */
      public Builder clearMinimumHeapSize() {
        bitField0_ = (bitField0_ & ~0x00000008);
        minimumHeapSize_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 maximum_heap_size = 5;
      private long maximumHeapSize_ ;
      /**
       * <code>optional int64 maximum_heap_size = 5;</code>
       *
       * <pre>
       * VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
       * </pre>
       */
      public boolean hasMaximumHeapSize() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 maximum_heap_size = 5;</code>
       *
       * <pre>
       * VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
       * </pre>
       */
      public long getMaximumHeapSize() {
        return maximumHeapSize_;
      }
      /**
       * <code>optional int64 maximum_heap_size = 5;</code>
       *
       * <pre>
       * VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
       * </pre>
       */
      public Builder setMaximumHeapSize(long value) {
        bitField0_ |= 0x00000010;
        maximumHeapSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 maximum_heap_size = 5;</code>
       *
       * <pre>
       * VM Option specified to set maximum heap_size in bytes ("-Xmx" flag).
       * </pre>
       */
      public Builder clearMaximumHeapSize() {
        bitField0_ = (bitField0_ & ~0x00000010);
        maximumHeapSize_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 maximum_permanent_space_size = 6;
      private long maximumPermanentSpaceSize_ ;
      /**
       * <code>optional int64 maximum_permanent_space_size = 6;</code>
       *
       * <pre>
       * VM Option specified to set maximum permanent space size in bytes.
       *  ("-XX:MaxPermSize" flag)
       * </pre>
       */
      public boolean hasMaximumPermanentSpaceSize() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int64 maximum_permanent_space_size = 6;</code>
       *
       * <pre>
       * VM Option specified to set maximum permanent space size in bytes.
       *  ("-XX:MaxPermSize" flag)
       * </pre>
       */
      public long getMaximumPermanentSpaceSize() {
        return maximumPermanentSpaceSize_;
      }
      /**
       * <code>optional int64 maximum_permanent_space_size = 6;</code>
       *
       * <pre>
       * VM Option specified to set maximum permanent space size in bytes.
       *  ("-XX:MaxPermSize" flag)
       * </pre>
       */
      public Builder setMaximumPermanentSpaceSize(long value) {
        bitField0_ |= 0x00000020;
        maximumPermanentSpaceSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 maximum_permanent_space_size = 6;</code>
       *
       * <pre>
       * VM Option specified to set maximum permanent space size in bytes.
       *  ("-XX:MaxPermSize" flag)
       * </pre>
       */
      public Builder clearMaximumPermanentSpaceSize() {
        bitField0_ = (bitField0_ & ~0x00000020);
        maximumPermanentSpaceSize_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 maximum_code_cache_size = 7;
      private long maximumCodeCacheSize_ ;
      /**
       * <code>optional int64 maximum_code_cache_size = 7;</code>
       *
       * <pre>
       * VM Option specified to set maximum permanent space size in bytes.
       *  ("-XX:ReservedCodeCacheSize" flag)
       * </pre>
       */
      public boolean hasMaximumCodeCacheSize() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 maximum_code_cache_size = 7;</code>
       *
       * <pre>
       * VM Option specified to set maximum permanent space size in bytes.
       *  ("-XX:ReservedCodeCacheSize" flag)
       * </pre>
       */
      public long getMaximumCodeCacheSize() {
        return maximumCodeCacheSize_;
      }
      /**
       * <code>optional int64 maximum_code_cache_size = 7;</code>
       *
       * <pre>
       * VM Option specified to set maximum permanent space size in bytes.
       *  ("-XX:ReservedCodeCacheSize" flag)
       * </pre>
       */
      public Builder setMaximumCodeCacheSize(long value) {
        bitField0_ |= 0x00000040;
        maximumCodeCacheSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 maximum_code_cache_size = 7;</code>
       *
       * <pre>
       * VM Option specified to set maximum permanent space size in bytes.
       *  ("-XX:ReservedCodeCacheSize" flag)
       * </pre>
       */
      public Builder clearMaximumCodeCacheSize() {
        bitField0_ = (bitField0_ & ~0x00000040);
        maximumCodeCacheSize_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 soft_reference_lru_policy = 8;
      private long softReferenceLruPolicy_ ;
      /**
       * <code>optional int64 soft_reference_lru_policy = 8;</code>
       *
       * <pre>
       * VM Option specified to set time soft referenced objects remain alive in ms.
       *  ("-XX:SoftRefLRUPolicyMSPerMB" flag)
       * </pre>
       */
      public boolean hasSoftReferenceLruPolicy() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int64 soft_reference_lru_policy = 8;</code>
       *
       * <pre>
       * VM Option specified to set time soft referenced objects remain alive in ms.
       *  ("-XX:SoftRefLRUPolicyMSPerMB" flag)
       * </pre>
       */
      public long getSoftReferenceLruPolicy() {
        return softReferenceLruPolicy_;
      }
      /**
       * <code>optional int64 soft_reference_lru_policy = 8;</code>
       *
       * <pre>
       * VM Option specified to set time soft referenced objects remain alive in ms.
       *  ("-XX:SoftRefLRUPolicyMSPerMB" flag)
       * </pre>
       */
      public Builder setSoftReferenceLruPolicy(long value) {
        bitField0_ |= 0x00000080;
        softReferenceLruPolicy_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 soft_reference_lru_policy = 8;</code>
       *
       * <pre>
       * VM Option specified to set time soft referenced objects remain alive in ms.
       *  ("-XX:SoftRefLRUPolicyMSPerMB" flag)
       * </pre>
       */
      public Builder clearSoftReferenceLruPolicy() {
        bitField0_ = (bitField0_ & ~0x00000080);
        softReferenceLruPolicy_ = 0L;
        onChanged();
        return this;
      }

      // optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;
      private com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector garbageCollector_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector.UNSPECIFIED_GC;
      /**
       * <code>optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;</code>
       *
       * <pre>
       * Type of Garbage Collector to use (various VM Option flags).
       * </pre>
       */
      public boolean hasGarbageCollector() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;</code>
       *
       * <pre>
       * Type of Garbage Collector to use (various VM Option flags).
       * </pre>
       */
      public com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector getGarbageCollector() {
        return garbageCollector_;
      }
      /**
       * <code>optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;</code>
       *
       * <pre>
       * Type of Garbage Collector to use (various VM Option flags).
       * </pre>
       */
      public Builder setGarbageCollector(com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000100;
        garbageCollector_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .android_studio.JvmDetails.GarbageCollector garbage_collector = 9;</code>
       *
       * <pre>
       * Type of Garbage Collector to use (various VM Option flags).
       * </pre>
       */
      public Builder clearGarbageCollector() {
        bitField0_ = (bitField0_ & ~0x00000100);
        garbageCollector_ = com.google.wireless.android.sdk.stats.AndroidStudioStats.JvmDetails.GarbageCollector.UNSPECIFIED_GC;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:android_studio.JvmDetails)
    }

    static {
      defaultInstance = new JvmDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:android_studio.JvmDetails)
  }

  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_AndroidStudioEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_AndroidStudioEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_ProductDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_ProductDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_DeviceInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_DeviceInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_StudioCrash_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_StudioCrash_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_EmulatorGuestGlInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_EmulatorGuestGlInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_EmulatorGpuInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_EmulatorGpuInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_EmulatorDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_EmulatorDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_EmulatorUiEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_EmulatorUiEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleBuildDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleBuildDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleLibrary_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleLibrary_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleModule_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleModule_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleAndroidModule_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleAndroidModule_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleNativeAndroidModule_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleNativeAndroidModule_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_InstantRun_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_InstantRun_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_MetaMetrics_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_MetaMetrics_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_TestRun_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_TestRun_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_TestLibraries_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_TestLibraries_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_Hypervisor_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_Hypervisor_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_EmulatorHost_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_EmulatorHost_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleBuildProfile_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleBuildProfile_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleBuildProject_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleBuildProject_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleBuildProjectMetrics_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleBuildProjectMetrics_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleBuildVariant_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleBuildVariant_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleBuildMemorySample_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleBuildMemorySample_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleBuildProfileSpan_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleBuildProfileSpan_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleTaskExecution_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleTaskExecution_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GradleTransformExecution_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GradleTransformExecution_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_InstantRunStatus_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_InstantRunStatus_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_InstantRunArtifact_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_InstantRunArtifact_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_LLDBFrontendDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_LLDBFrontendDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_FirebaseErrorDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_FirebaseErrorDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GfxTracingDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GfxTracingDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_TestRecorderDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_TestRecorderDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_UIActionStats_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_UIActionStats_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_MachineDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_MachineDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_DisplayDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_DisplayDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_JavaProcessStats_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_JavaProcessStats_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_GarbageCollectionStats_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_GarbageCollectionStats_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_android_studio_JvmDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_android_studio_JvmDetails_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\022studio_stats.proto\022\016android_studio\"\261;\n" +
      "\022AndroidStudioEvent\022B\n\010category\030\001 \001(\01620." +
      "android_studio.AndroidStudioEvent.EventC" +
      "ategory\022:\n\004kind\030\002 \001(\0162,.android_studio.A" +
      "ndroidStudioEvent.EventKind\022\031\n\021studio_se" +
      "ssion_id\030\003 \001(\t\0227\n\017product_details\030\004 \001(\0132" +
      "\036.android_studio.ProductDetails\022D\n\014monit" +
      "or_type\030\005 \001(\0162..android_studio.AndroidSt" +
      "udioEvent.MonitorType\022\026\n\016monitor_paused\030" +
      "\006 \001(\010\022U\n\025profiler_capture_type\030\007 \001(\01626.a",
      "ndroid_studio.AndroidStudioEvent.Profile" +
      "rCaptureType\022#\n\033cloud_testing_error_mess" +
      "age\030\010 \001(\t\022.\n&cloud_testing_loaded_screen" +
      "shots_count\030\t \001(\005\022W\n\026run_configuration_t" +
      "ype\030\n \001(\01627.android_studio.AndroidStudio" +
      "Event.RunConfigurationType\022F\n\rdebugger_t" +
      "ype\030\013 \001(\0162/.android_studio.AndroidStudio" +
      "Event.DebuggerType\022/\n\013device_info\030\014 \001(\0132" +
      "\032.android_studio.DeviceInfo\022$\n\034lldb_sess" +
      "ion_failure_message\030\r \001(\t\022W\n\026developer_s",
      "ervice_kind\030\016 \001(\01627.android_studio.Andro" +
      "idStudioEvent.DeveloperServiceKind\022\026\n\016gr" +
      "adle_version\030\017 \001(\t\022Q\n\023gradle_sync_failur" +
      "e\030\020 \001(\01624.android_studio.AndroidStudioEv" +
      "ent.GradleSyncFailure\022 \n\030gradle_missing_" +
      "signature\030\021 \001(\t\022N\n\021template_renderer\030\022 \001" +
      "(\01623.android_studio.AndroidStudioEvent.T" +
      "emplateRenderer\0221\n\014studio_crash\030\023 \001(\0132\033." +
      "android_studio.StudioCrash\022@\n\024gradle_bui" +
      "ld_details\030\024 \001(\0132\".android_studio.Gradle",
      "BuildDetails\022/\n\013instant_run\030\025 \001(\0132\032.andr" +
      "oid_studio.InstantRun\0221\n\014meta_metrics\030\026 " +
      "\001(\0132\033.android_studio.MetaMetrics\0229\n\020emul" +
      "ator_details\030\027 \001(\0132\037.android_studio.Emul" +
      "atorDetails\022)\n\010test_run\030\030 \001(\0132\027.android_" +
      "studio.TestRun\022:\n\021emulator_ui_event\030\031 \001(" +
      "\0132\037.android_studio.EmulatorUiEvent\022.\n\nhy" +
      "pervisor\030\032 \001(\0132\032.android_studio.Hypervis" +
      "or\0223\n\remulator_host\030\033 \001(\0132\034.android_stud" +
      "io.EmulatorHost\022@\n\024gradle_build_profile\030",
      "\034 \001(\0132\".android_studio.GradleBuildProfil" +
      "e\022B\n\025lldb_frontend_details\030\035 \001(\0132#.andro" +
      "id_studio.LLDBFrontendDetails\022D\n\026firebas" +
      "e_error_details\030\036 \001(\0132$.android_studio.F" +
      "irebaseErrorDetails\022\022\n\nproject_id\030\037 \001(\t\022" +
      ">\n\023gfx_tracing_details\030  \001(\0132!.android_s" +
      "tudio.GfxTracingDetails\022B\n\025test_recorder" +
      "_details\030! \001(\0132#.android_studio.TestReco" +
      "rderDetails\0226\n\017ui_action_stats\030\" \001(\0132\035.a" +
      "ndroid_studio.UIActionStats\0227\n\017machine_d",
      "etails\030# \001(\0132\036.android_studio.MachineDet" +
      "ails\022/\n\013jvm_details\030$ \001(\0132\032.android_stud" +
      "io.JvmDetails\022<\n\022java_process_stats\030% \001(" +
      "\0132 .android_studio.JavaProcessStats\"\237\003\n\r" +
      "EventCategory\022\025\n\021NO_EVENT_CATEGORY\020\000\022\016\n\n" +
      "DEPLOYMENT\020\001\022\020\n\014STUDIO_BUILD\020\002\022\026\n\022DEVELO" +
      "PER_SERVICES\020\003\022\017\n\013GRADLE_SYNC\020\004\022\r\n\tPROFI" +
      "LING\020\005\022\013\n\007MONITOR\020\006\022\017\n\013SDK_MANAGER\020\007\022\014\n\010" +
      "TEMPLATE\020\010\022\020\n\014THEME_EDITOR\020\t\022\020\n\014APP_INDE" +
      "XING\020\n\022\010\n\004LLDB\020\013\022\021\n\rCLOUD_TESTING\020\014\022\010\n\004P",
      "ING\020\r\022\t\n\005TESTS\020\016\022\010\n\004META\020\017\022\017\n\013EMULATOR_U" +
      "I\020\020\022\n\n\006SYSTEM\020\021\022\034\n\030PROJECT_STRUCTURE_DIA" +
      "LOG\020\022\022\n\n\006GRADLE\020\023\022\026\n\022FIREBASE_ASSISTANT\020" +
      "\024\022\020\n\014GPU_PROFILER\020\025\022\021\n\rTEST_RECORDER\020\026\022\r" +
      "\n\tSTUDIO_UI\020\027\"\207\030\n\tEventKind\022\026\n\022UNKNOWN_E" +
      "VENT_KIND\020\000\022\022\n\016DEPLOYMENT_APK\020\001\022\032\n\026DEPLO" +
      "YMENT_TO_EMULATOR\020\002\022 \n\034DEVELOPER_SERVICE" +
      "S_INSTALLED\020\003\022\036\n\032DEVELOPER_SERVICES_REMO" +
      "VED\020\004\022\027\n\023GRADLE_SYNC_STARTED\020\005\022\025\n\021GRADLE" +
      "_SYNC_ENDED\020\006\022\027\n\023GRADLE_SYNC_SKIPPED\020\007\022\027",
      "\n\023GRADLE_SYNC_FAILURE\020\010\022\035\n\031GRADLE_CPP_SY" +
      "NC_COMPLETED\020\t\022\025\n\021PROFILING_CAPTURE\020\n\022\022\n" +
      "\016PROFILING_OPEN\020\013\022\033\n\027PROFILING_CONVERT_H" +
      "PROF\020\014\022\032\n\026PROFILING_ANALYSIS_RUN\020\r\022\025\n\021MO" +
      "NITOR_ACTIVATED\020\016\022\023\n\017MONITOR_RUNNING\020\017\022\037" +
      "\n\033SDK_MANAGER_TOOLBAR_CLICKED\020\020\022#\n\037SDK_M" +
      "ANAGER_STANDALONE_LAUNCHED\020\021\022\026\n\022SDK_MANA" +
      "GER_LOADED\020\022\022\023\n\017TEMPLATE_RENDER\020\023\022\025\n\021THE" +
      "ME_EDITOR_OPEN\020\024\022\"\n\036APP_INDEXING_DEEP_LI" +
      "NK_CREATED\020\025\022!\n\035APP_INDEXING_API_CODE_CR",
      "EATED\020\026\022#\n\037APP_INDEXING_DEEP_LINK_LAUNCH" +
      "ED\020\027\022!\n\035APP_INDEXING_TRIGGER_QUICKFIX\020\030\022" +
      "!\n\035APP_INDEXING_SHOW_FEAG_DIALOG\020\031\022 \n\034AP" +
      "P_INDEXING_START_FEAG_TASK\020\032\022\021\n\rLLDB_LAU" +
      "NCHED\020\033\022\030\n\024LLDB_SESSION_STARTED\020\034\022\027\n\023LLD" +
      "B_SESSION_FAILED\020\035\022\032\n\026LLDB_SESSION_COMPL" +
      "ETED\020\036\022\030\n\024LLDB_INSTALL_STARTED\020\037\022\027\n\023LLDB" +
      "_INSTALL_FAILED\020 \022\032\n\026LLDB_INSTALL_COMPLE" +
      "TED\020!\022!\n\035LLDB_SESSION_USED_WATCHPOINTS\020\"" +
      "\022(\n$CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE",
      "\020#\022\"\n\036CLOUD_TESTING_CONFIGURE_MATRIX\020$\022%" +
      "\n!CLOUD_TESTING_LAUNCH_CLOUD_DEVICE\020%\022!\n" +
      "\035CLOUD_TESTING_RUN_TEST_MATRIX\020&\022\037\n\033CLOU" +
      "D_TESTING_BACKEND_ERROR\020\'\022$\n CLOUD_TESTI" +
      "NG_DEBUG_FROM_RESULTS\020(\022,\n(CLOUD_TESTING" +
      "_COMPARE_SCREENSHOTS_OPENED\020)\022\020\n\014STUDIO_" +
      "CRASH\020*\022\030\n\024GRADLE_BUILD_DETAILS\020,\022\017\n\013INS" +
      "TANT_RUN\020-\022\017\n\013STUDIO_PING\020.\022\021\n\rEMULATOR_" +
      "PING\020/\022\020\n\014META_METRICS\0200\022\014\n\010TEST_RUN\0202\022\025" +
      "\n\021EMULATOR_UI_EVENT\0203\022\016\n\nHYPERVISOR\0204\022\021\n",
      "\rEMULATOR_HOST\0205\022!\n\035PROJECT_STRUCTURE_DI" +
      "ALOG_OPEN\0206\022!\n\035PROJECT_STRUCTURE_DIALOG_" +
      "SAVE\0207\022*\n&PROJECT_STRUCTURE_DIALOG_TOP_T" +
      "AB_CLICK\0208\022)\n%PROJECT_STRUCTURE_DIALOG_T" +
      "OP_TAB_SAVE\0209\022+\n\'PROJECT_STRUCTURE_DIALO" +
      "G_LEFT_NAV_CLICK\020:\022*\n&PROJECT_STRUCTURE_" +
      "DIALOG_LEFT_NAV_SAVE\020;\022\030\n\024GRADLE_BUILD_P" +
      "ROFILE\020<\022\030\n\024LLDB_FRONTEND_EXITED\020=\022&\n\"FI" +
      "REBASE_ASSISTANT_PROJECT_CREATED\020>\022,\n(FI" +
      "REBASE_ASSISTANT_PROJECT_CREATE_FAILED\020?",
      "\022\'\n#FIREBASE_ASSISTANT_PROJECT_UPGRADED\020" +
      "@\022-\n)FIREBASE_ASSISTANT_PROJECT_UPGRADE_" +
      "FAILED\020B\0223\n/FIREBASE_ASSISTANT_PROJECT_C" +
      "ONFIG_CREATE_FAILED\020C\022&\n\"FIREBASE_ASSIST" +
      "ANT_PROJECT_UPDATED\020D\022,\n(FIREBASE_ASSIST" +
      "ANT_PROJECT_UPDATE_FAILED\020E\0222\n.FIREBASE_" +
      "ASSISTANT_PROJECT_CONFIG_WRITE_FAILED\020F\022" +
      "!\n\035FIREBASE_ASSISTANT_TOS_FAILED\020G\022$\n FI" +
      "REBASE_ASSISTANT_ATTEMPT_LOGIN\020H\022$\n FIRE" +
      "BASE_ASSISTANT_LOGIN_SUCCESS\020I\022,\n(FIREBA",
      "SE_ASSISTANT_RECONNECT_DIALOG_SYNC\020J\022(\n$" +
      "FIREBASE_ASSISTANT_CONNECT_REQUESTED\020K\022\033" +
      "\n\027FIREBASE_ASSISTANT_OPEN\020L\022,\n(FIREBASE_" +
      "ASSISTANT_CONNECT_DIALOG_OPENED\020M\022*\n&FIR" +
      "EBASE_ASSISTANT_CONNECT_DIALOG_SYNC\020N\022&\n" +
      "\"FIREBASE_ASSISTANT_ERROR_PRESENTED\020O\022#\n" +
      "\037FIREBASE_ASSISTANT_SILENT_ERROR\020P\022.\n*FI" +
      "REBASE_ASSISTANT_RECONNECT_DIALOG_OPENED" +
      "\020Q\022\030\n\024GFX_TRACE_INIT_ERROR\020R\022\024\n\020GFX_TRAC" +
      "E_CLOSED\020S\022\036\n\032GFX_TRACE_PARAMETER_EDITED",
      "\020T\022\033\n\027GFX_TRACE_TRACE_STARTED\020U\022\033\n\027GFX_T" +
      "RACE_TRACE_STOPPED\020V\022\036\n\032GFX_TRACE_COMMAN" +
      "D_SELECTED\020W\022\032\n\026GFX_TRACE_LINK_CLICKED\020X" +
      "\022\033\n\027GFX_TRACE_MEMORY_VIEWED\020Y\022\034\n\030GFX_TRA" +
      "CE_TEXTURE_VIEWED\020Z\022\037\n\033LEGACY_IDEA_ANDRO" +
      "ID_PROJECT\020[\022%\n!TEST_RECORDER_GENERATE_T" +
      "EST_CLASS\020\\\022/\n+TEST_RECORDER_MISSING_ESP" +
      "RESSO_DEPENDENCIES\020]\0225\n1TEST_RECORDER_MI" +
      "SSING_INSTRUMENTATION_TEST_FOLDER\020^\022\030\n\024T" +
      "EST_RECORDER_LAUNCH\020_\022\022\n\016GFX_TRACE_OPEN\020",
      "`\022\032\n\026STUDIO_UI_ACTION_STATS\020a\022\030\n\024STUDIO_" +
      "PROCESS_STATS\020b\"R\n\013MonitorType\022\030\n\024UNKNOW" +
      "N_MONITOR_TYPE\020\000\022\007\n\003CPU\020\001\022\007\n\003GPU\020\002\022\n\n\006ME" +
      "MORY\020\003\022\013\n\007NETWORK\020\004\"\321\001\n\023ProfilerCaptureT" +
      "ype\022!\n\035UNKNOWN_PROFILER_CAPTURE_TYPE\020\000\022\016" +
      "\n\nALLOCATION\020\001\022\010\n\004FILE\020\002\022\r\n\tGFX_TRACE\020\003\022" +
      "\010\n\004HEAP\020\004\022\017\n\013SYSTEM_INFO\020\005\022\014\n\010VM_TRACE\020\006" +
      "\022\022\n\016METHOD_TRACING\020\007\022\035\n\031LAYOUT_INSPECTOR" +
      "_SNAPSHOT\020\010\022\022\n\016HIERARCHY_VIEW\020\t\"m\n\024RunCo" +
      "nfigurationType\022\"\n\036UNKNOWN_RUN_CONFIGURA",
      "TION_TYPE\020\000\022\013\n\007ANDROID\020\001\022\022\n\016ANDROID_NATI" +
      "VE\020\002\022\020\n\014ANDROID_TEST\020\003\"K\n\014DebuggerType\022\031" +
      "\n\025UNKNOWN_DEBUGGER_TYPE\020\000\022\010\n\004JAVA\020\001\022\n\n\006H" +
      "YBRID\020\002\022\n\n\006NATIVE\020\003\"\261\002\n\024DeveloperService" +
      "Kind\022\"\n\036UNKNOWN_DEVELOPER_SERVICE_KIND\020\000" +
      "\022\032\n\026GOOGLE_CLOUD_MESSAGING\020\001\022\n\n\006AD_MOB\020\002" +
      "\022\022\n\016GOOGLE_SIGN_IN\020\003\022\024\n\020GOOGLE_ANALYTICS" +
      "\020\004\022\014\n\010FIREBASE\020\005\022\025\n\021REALTIME_DATABASE\020\006\022" +
      "\022\n\016AUTHENTICATION\020\007\022\023\n\017CRASH_REPORTING\020\010" +
      "\022\021\n\rNOTIFICATIONS\020\t\022\021\n\rREMOTE_CONFIG\020\n\022\013",
      "\n\007STORAGE\020\013\022\017\n\013APP_INVITES\020\014\022\021\n\rDYNAMIC_" +
      "LINKS\020\r\"\247\006\n\020TemplateRenderer\022\035\n\031UNKNOWN_" +
      "TEMPLATE_RENDERER\020\000\022\034\n\030CUSTOM_TEMPLATE_R" +
      "ENDERER\020\001\022\022\n\016ANDROID_MODULE\020\002\022\023\n\017ANDROID" +
      "_PROJECT\020\003\022\022\n\016EMPTY_ACTIVITY\020\004\022\022\n\016BLANK_" +
      "ACTIVITY\020\005\022\023\n\017LAYOUT_XML_FILE\020\006\022\022\n\016FRAGM" +
      "ENT_BLANK\020\007\022\036\n\032NAVIGATION_DRAWER_ACTIVIT" +
      "Y\020\010\022\023\n\017VALUES_XML_FILE\020\t\022\030\n\024GOOGLE_MAPS_" +
      "ACTIVITY\020\n\022\022\n\016LOGIN_ACTIVITY\020\013\022\021\n\rASSETS" +
      "_FOLDER\020\014\022\023\n\017TABBED_ACTIVITY\020\r\022\026\n\022SCROLL",
      "ING_ACTIVITY\020\016\022\027\n\023FULLSCREEN_ACTIVITY\020\017\022" +
      "\013\n\007SERVICE\020\020\022\020\n\014JAVA_LIBRARY\020\021\022\025\n\021SETTIN" +
      "GS_ACTIVITY\020\022\022\021\n\rFRAGMENT_LIST\020\023\022\026\n\022MAST" +
      "ER_DETAIL_FLOW\020\024\022\027\n\023ANDROID_WEAR_MODULE\020" +
      "\025\022\026\n\022BROADCAST_RECEIVER\020\026\022\r\n\tAIDL_FILE\020\027" +
      "\022\022\n\016INTENT_SERVICE\020\030\022\016\n\nJNI_FOLDER\020\031\022\017\n\013" +
      "JAVA_FOLDER\020\032\022\017\n\013CUSTOM_VIEW\020\033\022\025\n\021ANDROI" +
      "D_TV_MODULE\020\034\022\036\n\032GOOGLE_ADMOBS_ADS_ACTIV" +
      "ITY\020\035\022\033\n\027ALWAYS_ON_WEAR_ACTIVITY\020\036\022\016\n\nRE" +
      "S_FOLDER\020\037\022\027\n\023ANDROID_TV_ACTIVITY\020 \022\027\n\023B",
      "LANK_WEAR_ACTIVITY\020!\022\023\n\017BASIC_ACTIVITIY\020" +
      "\"\022\016\n\nAPP_WIDGET\020#\"\374\002\n\021GradleSyncFailure\022" +
      "\032\n\026UNKNOWN_GRADLE_FAILURE\020\000\022\025\n\021CONNECTIO" +
      "N_DENIED\020\001\022\023\n\017CLASS_NOT_FOUND\020\002\022\030\n\024DSL_M" +
      "ETHOD_NOT_FOUND\020\003\022\027\n\023FAILED_TO_PARSE_SDK" +
      "\020\004\022\024\n\020METHOD_NOT_FOUND\020\005\022\034\n\030MISSING_ANDR" +
      "OID_PLATFORM\020\006\022 \n\034MISSING_ANDROID_SUPPOR" +
      "T_REPO\020\007\022\027\n\023MISSING_BUILD_TOOLS\020\010\022\021\n\rOUT" +
      "_OF_MEMORY\020\t\022\021\n\rSDK_NOT_FOUND\020\n\022\020\n\014UNKNO" +
      "WN_HOST\020\013\022%\n!UNSUPPORTED_ANDROID_MODEL_V",
      "ERSION\020\014\022\036\n\032UNSUPPORTED_GRADLE_VERSION\020\r" +
      "\"\362\004\n\016ProductDetails\022;\n\007product\030\001 \001(\0162*.a" +
      "ndroid_studio.ProductDetails.ProductKind" +
      "\022\r\n\005build\030\002 \001(\t\022\017\n\007version\030\003 \001(\t\022\017\n\007prev" +
      "iew\030\004 \001(\010\022G\n\017os_architecture\030\005 \001(\0162..and" +
      "roid_studio.ProductDetails.CpuArchitectu" +
      "re\022H\n\007channel\030\006 \001(\01627.android_studio.Pro" +
      "ductDetails.SoftwareLifeCycleChannel\"e\n\030" +
      "SoftwareLifeCycleChannel\022\036\n\032UNKNOWN_LIFE" +
      "_CYCLE_CHANNEL\020\000\022\n\n\006CANARY\020\001\022\007\n\003DEV\020\002\022\010\n",
      "\004BETA\020\003\022\n\n\006STABLE\020\004\"R\n\013ProductKind\022\023\n\017UN" +
      "KNOWN_PRODUCT\020\000\022\n\n\006STUDIO\020\001\022\014\n\010EMULATOR\020" +
      "\002\022\n\n\006GRADLE\020\003\022\010\n\004DDMS\020\004\"^\n\006OSKind\022\023\n\017UNK" +
      "NOWN_OS_KIND\020\000\022\014\n\010OTHER_OS\020\001\022\013\n\007WINDOWS\020" +
      "\002\022\013\n\007MAC_OSX\020\003\022\t\n\005LINUX\020\004\022\014\n\010FREE_BSD\020\005\"" +
      "D\n\017CpuArchitecture\022\034\n\030UNKNOWN_CPU_ARCHIT" +
      "ECTURE\020\000\022\007\n\003X86\020\001\022\n\n\006X86_64\020\002\"\217\005\n\nDevice" +
      "Info\022 \n\030anonymized_serial_number\030\001 \001(\t\022\022" +
      "\n\nbuild_tags\030\002 \001(\t\022\022\n\nbuild_type\030\003 \001(\t\022\035" +
      "\n\025build_version_release\030\004 \001(\t\022\027\n\017build_a",
      "pi_level\030\005 \001(\005\022F\n\007cpu_abi\030\006 \001(\01625.androi" +
      "d_studio.DeviceInfo.ApplicationBinaryInt" +
      "erface\022\024\n\014manufacturer\030\007 \001(\t\022\r\n\005model\030\010 " +
      "\001(\t\022:\n\013device_type\030\t \001(\0162%.android_studi" +
      "o.DeviceInfo.DeviceType\022\034\n\024build_api_lev" +
      "el_full\030\n \001(\t\"\300\001\n\032ApplicationBinaryInter" +
      "face\022\017\n\013UNKNOWN_ABI\020\000\022\020\n\014ARME_ABI_V7A\020\001\022" +
      "\013\n\007X86_ABI\020\002\022\021\n\rARM64_V8A_ABI\020\003\022\016\n\nX86_6" +
      "4_ABI\020\004\022\014\n\010ARME_ABI\020\005\022\014\n\010MIPS_ABI\020\006\022\017\n\013M" +
      "IPS_R2_ABI\020\007\022\020\n\014ARME_ABI_V6L\020\010\022\020\n\014ARME_A",
      "BI_V6J\020\t\"u\n\nDeviceType\022\027\n\023UNKNOWN_DEVICE" +
      "_TYPE\020\000\022\022\n\016LOCAL_PHYSICAL\020\001\022\022\n\016LOCAL_EMU" +
      "LATOR\020\002\022\022\n\016CLOUD_EMULATOR\020\003\022\022\n\016CLOUD_PHY" +
      "SICAL\020\004\"\215\001\n\013StudioCrash\022\017\n\007actions\030\001 \001(\003" +
      "\022\022\n\nexceptions\030\002 \001(\003\022\017\n\007crashes\030\003 \001(\003\022!\n" +
      "\031bundled_plugin_exceptions\030\004 \001(\003\022%\n\035non_" +
      "bundled_plugin_exceptions\030\005 \001(\003\"H\n\023Emula" +
      "torGuestGlInfo\022\016\n\006vendor\030\001 \001(\t\022\020\n\010render" +
      "er\030\002 \001(\t\022\017\n\007version\030\003 \001(\t\"y\n\017EmulatorGpu" +
      "Info\022\014\n\004make\030\001 \001(\t\022\r\n\005model\030\002 \001(\t\022\021\n\tdev",
      "ice_id\030\003 \001(\t\022\023\n\013revision_id\030\004 \001(\t\022\017\n\007ver" +
      "sion\030\005 \001(\t\022\020\n\010renderer\030\006 \001(\t\"\325\007\n\017Emulato" +
      "rDetails\022H\n\nguest_arch\030\001 \001(\01624.android_s" +
      "tudio.EmulatorDetails.GuestCpuArchitectu" +
      "re\022\023\n\013system_time\030\002 \001(\003\022\021\n\tuser_time\030\003 \001" +
      "(\003\022\017\n\007crashes\030\004 \001(\003\022\021\n\twall_time\030\005 \001(\003\022\024" +
      "\n\014exit_started\030\006 \001(\010\022\027\n\017guest_api_level\030" +
      "\007 \001(\003\022\031\n\021guest_gpu_enabled\030\010 \001(\010\022\027\n\017is_o" +
      "pengl_alive\030\n \001(\010\022I\n\014adb_liveness\030\013 \001(\0162" +
      "3.android_studio.EmulatorDetails.Emulato",
      "rAdbLiveness\0225\n\010guest_gl\030\014 \001(\0132#.android" +
      "_studio.EmulatorGuestGlInfo\0221\n\010host_gpu\030" +
      "\r \003(\0132\037.android_studio.EmulatorGpuInfo\022K" +
      "\n\rsession_phase\030\016 \001(\01624.android_studio.E" +
      "mulatorDetails.EmulatorSessionPhase\"\224\001\n\023" +
      "EmulatorAdbLiveness\022!\n\035UNKNOWN_EMULATOR_" +
      "ADB_LIVENESS\020\000\022\022\n\016FAILURE_NO_ADB\020\001\022\016\n\nAD" +
      "B_ONLINE\020\002\022\033\n\027FAILURE_ADB_SERVER_DEAD\020\003\022" +
      "\031\n\025FAILURE_EMULATOR_DEAD\020\004\"\262\001\n\024EmulatorS" +
      "essionPhase\022\"\n\036UNKNOWN_EMULATOR_SESSION_",
      "PHASE\020\000\022\014\n\010LAUNCHER\020\001\022\021\n\rPARSE_OPTIONS\020\002" +
      "\022\020\n\014INIT_GENERAL\020\003\022\014\n\010INIT_GPU\020\004\022\016\n\nINIT" +
      "_ACCEL\020\005\022\023\n\017RUNNING_GENERAL\020\006\022\020\n\014EXIT_GE" +
      "NERAL\020\007\"{\n\024GuestCpuArchitecture\022\"\n\036UNKNO" +
      "WN_GUEST_CPU_ARCHITECTURE\020\000\022\007\n\003X86\020\001\022\n\n\006" +
      "X86_64\020\002\022\007\n\003ARM\020\003\022\n\n\006ARM_64\020\004\022\010\n\004MIPS\020\005\022" +
      "\013\n\007MIPS_64\020\006\"\234\003\n\017EmulatorUiEvent\022\022\n\nelem" +
      "ent_id\030\001 \001(\t\022A\n\004type\030\002 \001(\01623.android_stu" +
      "dio.EmulatorUiEvent.EmulatorUiEventType\022" +
      "G\n\007context\030\003 \001(\01626.android_studio.Emulat",
      "orUiEvent.EmulatorUiEventContext\022\r\n\005valu" +
      "e\030\004 \001(\003\"\177\n\023EmulatorUiEventType\022\"\n\036UNKONW" +
      "N_EMULATOR_UI_EVENT_TYPE\020\000\022\020\n\014BUTTON_PRE" +
      "SS\020\001\022\035\n\031OPTION_SET_TO_NON_DEFAULT\020\002\022\023\n\017O" +
      "PTION_SELECTED\020\003\"Y\n\026EmulatorUiEventConte" +
      "xt\022%\n!UNKNOWN_EMULATOR_UI_EVENT_CONTEXT\020" +
      "\000\022\030\n\024EXTENDED_WINDOW_OPEN\020\001\"\207\003\n\022GradleBu" +
      "ildDetails\022\036\n\026android_plugin_version\030\001 \001" +
      "(\t\022\026\n\016gradle_version\030\002 \001(\t\022\027\n\017user_enabl" +
      "ed_ir\030\003 \001(\010\022\031\n\021model_supports_ir\030\004 \001(\010\022\033",
      "\n\023variant_supports_ir\030\005 \001(\010\0220\n\tlibraries" +
      "\030\006 \003(\0132\035.android_studio.GradleLibrary\022-\n" +
      "\007modules\030\007 \003(\0132\034.android_studio.GradleMo" +
      "dule\022<\n\017android_modules\030\010 \003(\0132#.android_" +
      "studio.GradleAndroidModule\022I\n\026native_and" +
      "roid_modules\030\t \003(\0132).android_studio.Grad" +
      "leNativeAndroidModule\"K\n\rGradleLibrary\022\034" +
      "\n\024jar_dependency_count\030\001 \001(\003\022\034\n\024aar_depe" +
      "ndency_count\030\002 \001(\003\"^\n\014GradleModule\022\032\n\022to" +
      "tal_module_count\030\001 \001(\003\022\030\n\020app_module_cou",
      "nt\030\002 \001(\003\022\030\n\020lib_module_count\030\003 \001(\003\"\266\001\n\023G" +
      "radleAndroidModule\022\016\n\006app_id\030\001 \001(\t\022\023\n\013mo" +
      "dule_name\030\002 \001(\t\022\022\n\nis_library\030\003 \001(\010\022\030\n\020b" +
      "uild_type_count\030\004 \001(\003\022\024\n\014flavor_count\030\005 " +
      "\001(\003\022\030\n\020flavor_dimension\030\006 \001(\003\022\034\n\024signing" +
      "_config_count\030\007 \001(\003\"\240\002\n\031GradleNativeAndr" +
      "oidModule\022\016\n\006app_id\030\001 \001(\t\022\023\n\013module_name" +
      "\030\002 \001(\t\022Z\n\021build_system_type\030\003 \001(\0162?.andr" +
      "oid_studio.GradleNativeAndroidModule.Nat" +
      "iveBuildSystemType\"\201\001\n\025NativeBuildSystem",
      "Type\022$\n UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE" +
      "\020\000\022\027\n\023GRADLE_EXPERIMENTAL\020\001\022\017\n\013NDK_COMPI" +
      "LE\020\002\022\r\n\tNDK_BUILD\020\003\022\t\n\005CMAKE\020\004\"\273\n\n\nInsta" +
      "ntRun\022L\n\017deployment_kind\030\001 \001(\01623.android" +
      "_studio.InstantRun.InstantRunDeploymentK" +
      "ind\022P\n\027instant_run_build_cause\030\003 \001(\0162/.a" +
      "ndroid_studio.InstantRun.InstantRunBuild" +
      "Cause\022\022\n\nbuild_time\030\004 \001(\003\022\022\n\nsession_id\030" +
      "\005 \001(\t\022K\n\017ide_build_cause\030\006 \001(\01622.android" +
      "_studio.InstantRun.InstantRunIdeBuildCau",
      "se\"\242\001\n\030InstantRunDeploymentKind\022\'\n#UNKNO" +
      "WN_INSTANT_RUN_DEPLOYMENT_KIND\020\000\022\n\n\006LEGA" +
      "CY\020\001\022\014\n\010FULL_APK\020\002\022\r\n\tSPLIT_APK\020\003\022\007\n\003DEX" +
      "\020\004\022\014\n\010HOT_SWAP\020\005\022\r\n\tWARM_SWAP\020\006\022\016\n\nNO_CH" +
      "ANGES\020\007\"\277\003\n\024InstantRunBuildCause\022#\n\037UNKN" +
      "OWN_INSTANT_RUN_BUILD_CAUSE\020\000\022\016\n\nCOMPATI" +
      "BLE\020\001\022\023\n\017MANIFEST_CHANGE\020\002\022\025\n\021FIELD_TYPE" +
      "_CHANGE\020\003\022\021\n\rFIELD_REMOVED\020\004\022\017\n\013FIELD_AD" +
      "DED\020\005\022\022\n\016METHOD_DELETED\020\006\022\020\n\014METHOD_ADDE" +
      "D\020\007\022\017\n\013CLASS_ADDED\020\010\022\035\n\031STATIC_INITIALIZ",
      "ER_CHANGE\020\t\022\033\n\027CLASS_ANNOTATION_CHANGE\020\n" +
      "\022\023\n\017RESOURCE_CHANGE\020\013\022\037\n\033IMPLEMENTS_INTE" +
      "RFACE_CHANGE\020\014\022\022\n\016R_CLASS_CHANGE\020\r\022\027\n\023PA" +
      "RENT_CLASS_CHANGE\020\016\022\034\n\030METHOD_ANNOTATION" +
      "_CHANGE\020\017\022\031\n\025API_LEVEL_UNSUPPORTED\020\020\022\023\n\017" +
      "REFLECTION_USED\020\021\"\260\003\n\027InstantRunIdeBuild" +
      "Cause\022\'\n#UNKNOWN_INSTANT_RUN_IDE_BUILD_C" +
      "AUSE\020\000\022\r\n\tNO_DEVICE\020\001\022\025\n\021APP_NOT_INSTALL" +
      "ED\020\002\022\032\n\026MISMATCHING_TIMESTAMPS\020\003\022\036\n\032USER" +
      "_REQUESTED_CLEAN_BUILD\020\004\022\037\n\033API_TOO_LOW_",
      "FOR_INSTANT_RUN\020\005\022 \n\034FIRST_INSTALLATION_" +
      "TO_DEVICE\020\006\022\035\n\031MANIFEST_RESOURCE_CHANGED" +
      "\020\007\022\036\n\032FREEZE_SWAP_REQUIRES_API21\020\010\022\'\n#FR" +
      "EEZE_SWAP_REQUIRES_WORKING_RUN_AS\020\t\022\023\n\017A" +
      "PP_NOT_RUNNING\020\n\022\037\n\033APP_USES_MULTIPLE_PR" +
      "OCESSES\020\013\022\025\n\021INCREMENTAL_BUILD\020\014\022\022\n\016NO_I" +
      "NSTANT_RUN\020\r\"k\n\013MetaMetrics\022\032\n\022failed_co" +
      "nnections\030\001 \001(\005\022!\n\031bytes_sent_in_last_up" +
      "load\030\002 \001(\003\022\035\n\025failed_server_replies\030\003 \001(" +
      "\005\"\200\004\n\007TestRun\022H\n\024test_invocation_type\030\001 ",
      "\001(\0162*.android_studio.TestRun.TestInvocat" +
      "ionType\022 \n\030number_of_tests_executed\030\002 \001(" +
      "\005\0223\n\ttest_kind\030\003 \001(\0162 .android_studio.Te" +
      "stRun.TestKind\022\017\n\007crashed\030\004 \001(\010\022\026\n\016gradl" +
      "e_version\030\005 \001(\t\022\035\n\025code_coverage_enabled" +
      "\030\006 \001(\010\0225\n\016test_libraries\030\007 \001(\0132\035.android" +
      "_studio.TestLibraries\"\210\001\n\022TestInvocation" +
      "Type\022 \n\034UNKNOWN_TEST_INVOCATION_TYPE\020\000\022\017" +
      "\n\013GRADLE_TEST\020\001\022\027\n\023ANDROID_STUDIO_TEST\020\002" +
      "\022&\n\"ANDROID_STUDIO_THROUGH_GRADLE_TEST\020\003",
      "\"J\n\010TestKind\022\025\n\021UNKNOWN_TEST_KIND\020\000\022\r\n\tU" +
      "NIT_TEST\020\001\022\030\n\024INSTRUMENTATION_TEST\020\002\"\205\001\n" +
      "\rTestLibraries\022$\n\034test_support_library_v" +
      "ersion\030\001 \001(\t\022\030\n\020espresso_version\030\002 \001(\t\022\033" +
      "\n\023robolectric_version\030\003 \001(\t\022\027\n\017mockito_v" +
      "ersion\030\004 \001(\t\"\311\001\n\nHypervisor\022=\n\rhyper_v_s" +
      "tate\030\001 \001(\0162&.android_studio.Hypervisor.H" +
      "yperVState\"|\n\013HyperVState\022\030\n\024UNKNOWN_HYP" +
      "ERV_STATE\020\000\022\021\n\rHYPERV_ABSENT\020\001\022\024\n\020HYPERV" +
      "_INSTALLED\020\002\022\022\n\016HYPERV_RUNNING\020\003\022\026\n\022HYPE",
      "RV_CHECK_ERROR\020\004\"k\n\014EmulatorHost\022\030\n\020cpu_" +
      "manufacturer\030\001 \001(\t\022\024\n\014virt_support\030\002 \001(\010" +
      "\022\025\n\rrunning_in_vm\030\003 \001(\010\022\024\n\014os_bit_count\030" +
      "\004 \001(\003\"\310\003\n\022GradleBuildProfile\022\026\n\016gradle_v" +
      "ersion\030\002 \001(\t\022\017\n\007os_name\030\006 \001(\t\022\022\n\nos_vers" +
      "ion\030\007 \001(\t\022\024\n\014java_version\030\010 \001(\t\022\027\n\017java_" +
      "vm_version\030\t \001(\t\022\022\n\nmax_memory\030\n \001(\003\022\022\n\n" +
      "build_time\030\013 \001(\003\022\020\n\010gc_count\030\014 \001(\003\022\017\n\007gc" +
      "_time\030\r \001(\003\0223\n\007project\030\016 \003(\0132\".android_s" +
      "tudio.GradleBuildProject\022>\n\rmemory_sampl",
      "e\030\017 \003(\0132\'.android_studio.GradleBuildMemo" +
      "rySample\0224\n\004span\030\020 \003(\0132&.android_studio." +
      "GradleBuildProfileSpan\022<\n\022instant_run_st" +
      "atus\030\021 \001(\0132 .android_studio.InstantRunSt" +
      "atus\022\022\n\nproject_id\030\022 \001(\t\"\207\004\n\022GradleBuild" +
      "Project\022\n\n\002id\030\001 \001(\003\022\036\n\026android_plugin_ve" +
      "rsion\030\002 \001(\t\022E\n\016android_plugin\030\003 \001(\0162-.an" +
      "droid_studio.GradleBuildProject.PluginTy" +
      "pe\022N\n\021plugin_generation\030\004 \001(\01623.android_" +
      "studio.GradleBuildProject.PluginGenerati",
      "on\022\033\n\023build_tools_version\030\005 \001(\t\022:\n\007metri" +
      "cs\030\006 \001(\0132).android_studio.GradleBuildPro" +
      "jectMetrics\0223\n\007variant\030\007 \003(\0132\".android_s" +
      "tudio.GradleBuildVariant\"M\n\nPluginType\022\027" +
      "\n\023UNKNOWN_PLUGIN_TYPE\020\000\022\017\n\013APPLICATION\020\001" +
      "\022\013\n\007LIBRARY\020\002\022\010\n\004TEST\020\003\"Q\n\020PluginGenerat" +
      "ion\022\035\n\031UNKNOWN_PLUGIN_GENERATION\020\000\022\t\n\005FI" +
      "RST\020\001\022\023\n\017COMPONENT_MODEL\020\002\"a\n\031GradleBuil" +
      "dProjectMetrics\022\027\n\017metrics_time_ns\030\001 \001(\003" +
      "\022\020\n\010apk_size\030\002 \001(\003\022\031\n\021resources_ap_size\030",
      "\003 \001(\003\"\266\002\n\022GradleBuildVariant\022\n\n\002id\030\001 \001(\003" +
      "\022\020\n\010is_debug\030\002 \001(\010\022\020\n\010use_jack\030\003 \001(\010\022\026\n\016" +
      "minify_enabled\030\004 \001(\010\022\024\n\014use_multidex\030\005 \001" +
      "(\010\022\033\n\023use_legacy_multidex\030\006 \001(\010\022D\n\014varia" +
      "nt_type\030\007 \001(\0162..android_studio.GradleBui" +
      "ldVariant.VariantType\022\021\n\ttested_id\030\010 \001(\003" +
      "\"L\n\013VariantType\022\017\n\013APPLICATION\020\000\022\013\n\007LIBR" +
      "ARY\020\001\022\020\n\014ANDROID_TEST\020\002\022\r\n\tUNIT_TEST\020\003\"R" +
      "\n\027GradleBuildMemorySample\022\022\n\ngc_time_ms\030" +
      "\001 \001(\003\022\020\n\010gc_count\030\002 \001(\003\022\021\n\ttimestamp\030\003 \001",
      "(\003\"\361\034\n\026GradleBuildProfileSpan\022\n\n\002id\030\001 \001(" +
      "\003\022\021\n\tparent_id\030\002 \001(\003\022\030\n\020start_time_in_ms" +
      "\030\003 \001(\003\022\026\n\016duration_in_ms\030\004 \001(\003\022B\n\004type\030\005" +
      " \001(\01624.android_studio.GradleBuildProfile" +
      "Span.ExecutionType\022;\n\ttransform\030\006 \001(\0132(." +
      "android_studio.GradleTransformExecution\022" +
      "1\n\004task\030\t \001(\0132#.android_studio.GradleTas" +
      "kExecution\022\017\n\007project\030\007 \001(\003\022\017\n\007variant\030\010" +
      " \001(\003\"\257\032\n\rExecutionType\022\032\n\026SOME_RANDOM_PR" +
      "OCESSING\020\001\022!\n\035BASE_PLUGIN_PROJECT_CONFIG",
      "URE\020\002\022/\n+BASE_PLUGIN_PROJECT_BASE_EXTENS" +
      "ION_CREATION\020\003\022&\n\"BASE_PLUGIN_PROJECT_TA" +
      "SKS_CREATION\020\004\022\036\n\032BASE_PLUGIN_BUILD_FINI" +
      "SHED\020\005\022\035\n\031TASK_MANAGER_CREATE_TASKS\020\006\022$\n" +
      " BASE_PLUGIN_CREATE_ANDROID_TASKS\020\007\022(\n$V" +
      "ARIANT_MANAGER_CREATE_ANDROID_TASKS\020\010\022,\n" +
      "(VARIANT_MANAGER_CREATE_TASKS_FOR_VARIAN" +
      "T\020\t\022%\n!VARIANT_MANAGER_CREATE_LINT_TASKS" +
      "\020\n\022&\n\"VARIANT_MANAGER_CREATE_TESTS_TASKS" +
      "\020\013\022#\n\037VARIANT_MANAGER_CREATE_VARIANTS\020\014\022",
      "\030\n\024RESOLVE_DEPENDENCIES\020\r\022\022\n\016TASK_EXECUT" +
      "ION\020\016\022\024\n\020INITIAL_METADATA\020d\022\022\n\016FINAL_MET" +
      "ADATA\020e\022\022\n\016GENERAL_CONFIG\020f\022\022\n\016VARIANT_C" +
      "ONFIG\020g\0221\n-VARIANT_MANAGER_EXTERNAL_NATI" +
      "VE_CONFIG_VALUES\020h\022\017\n\013APK_METRICS\020i\0220\n+A" +
      "PP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TA" +
      "SK\020\350\007\0225\n0APP_TASK_MANAGER_CREATE_GENERAT" +
      "E_RES_VALUES_TASK\020\351\007\0225\n0APP_TASK_MANAGER" +
      "_CREATE_CREATE_RENDERSCRIPT_TASK\020\352\007\0221\n,A" +
      "PP_TASK_MANAGER_CREATE_MERGE_RESOURCES_T",
      "ASK\020\353\007\022.\n)APP_TASK_MANAGER_CREATE_MERGE_" +
      "ASSETS_TASK\020\354\007\022.\n)APP_TASK_MANAGER_CREAT" +
      "E_BUILD_CONFIG_TASK\020\355\007\022-\n(APP_TASK_MANAG" +
      "ER_CREATE_PROCESS_RES_TASK\020\356\007\022&\n!APP_TAS" +
      "K_MANAGER_CREATE_AIDL_TASK\020\357\007\022)\n$APP_TAS" +
      "K_MANAGER_CREATE_COMPILE_TASK\020\360\007\022%\n APP_" +
      "TASK_MANAGER_CREATE_NDK_TASK\020\361\007\022\'\n\"APP_T" +
      "ASK_MANAGER_CREATE_SPLIT_TASK\020\362\007\022+\n&APP_" +
      "TASK_MANAGER_CREATE_PACKAGING_TASK\020\363\007\0226\n" +
      "1APP_TASK_MANAGER_CREATE_PREPROCESS_RESO",
      "URCES_TASK\020\364\007\0224\n/APP_TASK_MANAGER_CREATE" +
      "_BACKPORT_RESOURCES_TASK\020\365\007\022&\n!APP_TASK_" +
      "MANAGER_CREATE_LINT_TASK\020\366\007\0227\n2APP_TASK_" +
      "MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TAS" +
      "K\020\367\007\022(\n#APP_TASK_MANAGER_CREATE_SHADER_T" +
      "ASK\020\370\007\0227\n2APP_TASK_MANAGER_CREATE_EXTERN" +
      "AL_NATIVE_BUILD_TASK\020\371\007\0226\n1APP_TASK_MANA" +
      "GER_CREATE_STRIP_NATIVE_LIBRARY_TASK\020\372\007\022" +
      "0\n+LIB_TASK_MANAGER_CREATE_MERGE_MANIFES" +
      "T_TASK\020\320\017\0225\n0LIB_TASK_MANAGER_CREATE_GEN",
      "ERATE_RES_VALUES_TASK\020\321\017\0225\n0LIB_TASK_MAN" +
      "AGER_CREATE_CREATE_RENDERSCRIPT_TASK\020\322\017\022" +
      "1\n,LIB_TASK_MANAGER_CREATE_MERGE_RESOURC" +
      "ES_TASK\020\323\017\022.\n)LIB_TASK_MANAGER_CREATE_ME" +
      "RGE_ASSETS_TASK\020\324\017\022.\n)LIB_TASK_MANAGER_C" +
      "REATE_BUILD_CONFIG_TASK\020\325\017\022-\n(LIB_TASK_M" +
      "ANAGER_CREATE_PROCESS_RES_TASK\020\326\017\022&\n!LIB" +
      "_TASK_MANAGER_CREATE_AIDL_TASK\020\327\017\022)\n$LIB" +
      "_TASK_MANAGER_CREATE_COMPILE_TASK\020\330\017\022%\n " +
      "LIB_TASK_MANAGER_CREATE_NDK_TASK\020\331\017\022\'\n\"L",
      "IB_TASK_MANAGER_CREATE_SPLIT_TASK\020\332\017\022+\n&" +
      "LIB_TASK_MANAGER_CREATE_PACKAGING_TASK\020\333" +
      "\017\0225\n0LIB_TASK_MANAGER_CREATE_MERGE_PROGU" +
      "ARD_FILE_TASK\020\334\017\0222\n-LIB_TASK_MANAGER_CRE" +
      "ATE_POST_COMPILATION_TASK\020\335\017\022*\n%LIB_TASK" +
      "_MANAGER_CREATE_PROGUARD_TASK\020\336\017\022.\n)LIB_" +
      "TASK_MANAGER_CREATE_PACKAGE_LOCAL_JAR\020\337\017" +
      "\0224\n/LIB_TASK_MANAGER_CREATE_BACKPORT_RES" +
      "OURCES_TASK\020\340\017\022&\n!LIB_TASK_MANAGER_CREAT" +
      "E_LINT_TASK\020\341\017\022(\n#LIB_TASK_MANAGER_CREAT",
      "E_SHADER_TASK\020\342\017\0227\n2LIB_TASK_MANAGER_CRE" +
      "ATE_EXTERNAL_NATIVE_BUILD_TASK\020\343\017\022\033\n\026GEN" +
      "ERIC_TASK_EXECUTION\020\270\027\022\026\n\021TASK_AIDL_COMP" +
      "ILE\020\271\027\022\020\n\013TASK_DELETE\020\272\027\022\030\n\023TASK_CHECK_M" +
      "ANIFEST\020\273\027\022#\n\036TASK_PREPARE_DEPENDENCIES_" +
      "TASK\020\274\027\022\036\n\031TASK_RENDERSCRIPT_COMPILE\020\275\027\022" +
      "\037\n\032TASK_GENERATE_BUILD_CONFIG\020\276\027\022\026\n\021TASK" +
      "_MERGE_ASSETS\020\277\027\022\035\n\030TASK_GENERATE_RES_VA" +
      "LUES\020\300\027\022\031\n\024TASK_MERGE_RESOURCES\020\301\027\022\031\n\024TA" +
      "SK_MERGE_MANIFESTS\020\302\027\022#\n\036TASK_PROCESS_AN",
      "DROID_RESOURCES\020\303\027\022\026\n\021TASK_JAVA_COMPILE\020" +
      "\304\027\022\025\n\020TASK_NDK_COMPILE\020\305\027\022\021\n\014TASK_PRE_DE" +
      "X\020\306\027\022\r\n\010TASK_DEX\020\307\027\022\033\n\026TASK_PACKAGE_SPLI" +
      "T_RES\020\310\027\022\033\n\026TASK_PROCESS_RESOURCES\020\311\027\022\037\n" +
      "\032TASK_VALIDATE_SIGNING_TASK\020\312\027\022\035\n\030TASK_P" +
      "ACKAGE_APPLICATION\020\313\027\022\031\n\024TASK_SPLIT_ZIP_" +
      "ALIGN\020\314\027\022\023\n\016TASK_ZIP_ALIGN\020\315\027\022\016\n\tTASK_CO" +
      "PY\020\316\027\022\016\n\tTASK_LINT\020\317\027\022\033\n\026TASK_FILE_VERIF" +
      "ICATION\020\322\027\022=\n8TASK_EXTERNAL_NATIVE_BUILD" +
      "_GENERATE_JSON_PROCESS_PER_ABI\020\323\027\0225\n0TAS",
      "K_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PR" +
      "OCESS\020\324\027\022\037\n\032TASK_TRANSFORM_PREPARATION\020\320" +
      "\027\022\023\n\016TASK_TRANSFORM\020\321\027\"\222\016\n\023GradleTaskExe" +
      "cution\0226\n\004type\030\001 \001(\0162(.android_studio.Gr" +
      "adleTaskExecution.Type\022\020\n\010did_work\030\002 \001(\010" +
      "\022\017\n\007skipped\030\003 \001(\010\022\022\n\nup_to_date\030\004 \001(\010\022\016\n" +
      "\006failed\030\005 \001(\010\"\373\014\n\004Type\022\025\n\021UNKNOWN_TASK_T" +
      "YPE\020\000\022\020\n\014AIDL_COMPILE\020\001\022\017\n\013ANDROID_JAR\020\002" +
      "\022\030\n\024ANDROID_JAVA_COMPILE\020\003\022\022\n\016ANDROID_RE" +
      "PORT\020\004\022\025\n\021ANDROID_UNIT_TEST\020\005\022\022\n\016BUILD_E",
      "MULATOR\020\006\022\025\n\021BUILD_INFO_LOADER\020\007\022\022\n\016CHEC" +
      "K_MANIFEST\020\010\022\037\n\033COMPATIBLE_SCREENS_MANIF" +
      "EST\020\t\022\035\n\031CREATE_MANIFEST_KEEP_LIST\020\n\022\"\n\036" +
      "DATA_BINDING_EXPORT_BUILD_INFO\020\013\022 \n\034DATA" +
      "_BINDING_PROCESS_LAYOUTS\020\014\022\025\n\021DEPENDENCY" +
      "_REPORT\020\r\022#\n\037DEVICE_PROVIDER_INSTRUMENT_" +
      "TEST\020\016\022\031\n\025EXTERNAL_BUILD_ANCHOR\020\017\022\036\n\032EXT" +
      "ERNAL_NATIVE_BUILD_JSON\020\020\022\031\n\025EXTERNAL_NA" +
      "TIVE_BUILD\020\021\022\027\n\023EXTRACT_ANNOTATIONS\020\022\022\032\n" +
      "\026EXTRACT_JAVA_RESOURCES\020\023\022\032\n\026EXTRACT_PRO",
      "GUARD_FILES\020\024\022!\n\035FAST_DEPLOY_RUNTIME_EXT" +
      "RACTOR\020\025\022\025\n\021FILTERED_JAR_COPY\020\026\022\025\n\021GENER" +
      "ATE_APK_DATA\020\027\022\031\n\025GENERATE_BUILD_CONFIG\020" +
      "\030\022!\n\035GENERATE_INSTANT_RUN_APP_INFO\020\031\022\027\n\023" +
      "GENERATE_RES_VALUES\020\032\022\032\n\026GENERATE_SPLIT_" +
      "ABI_RES\020\033\022\023\n\017GOOGLE_SERVICES\020\034\022\031\n\025INCREM" +
      "ENTAL_SAFEGUARD\020\035\022\023\n\017INSTALL_VARIANT\020\036\022!" +
      "\n\035INSTANT_RUN_SPLIT_APK_BUILDER\020\037\022\027\n\023INS" +
      "TANT_RUN_WRAPPER\020 \022\032\n\026INVOKE_MANIFEST_ME" +
      "RGER\020!\022\026\n\022JACK_JACOCO_REPORT\020\"\022\021\n\rJACOCO",
      "_REPORT\020#\022\010\n\004LINT\020$\022\020\n\014LINT_COMPILE\020%\022\016\n" +
      "\nMERGE_FILE\020&\022\023\n\017MERGE_MANIFESTS\020\'\022\023\n\017ME" +
      "RGE_RESOURCES\020(\022\034\n\030MERGE_SOURCE_SET_FOLD" +
      "ERS\020)\022\030\n\024MOCKABLE_ANDROID_JAR\020*\022\017\n\013NDK_C" +
      "OMPILE\020+\022\007\n\003NDK\020,\022\027\n\023PACKAGE_APPLICATION" +
      "\020-\022\025\n\021PACKAGE_SPLIT_ABI\020.\022\025\n\021PACKAGE_SPL" +
      "IT_RES\020/\022\021\n\rPRE_COLD_SWAP\0200\022\030\n\024PREPARE_D" +
      "EPENDENCIES\0201\022\023\n\017PREPARE_LIBRARY\0202\022\035\n\031PR" +
      "OCESS_ANDROID_RESOURCES\0203\022\024\n\020PROCESS_MAN" +
      "IFEST\0204\022\031\n\025PROCESS_TEST_MANIFEST\0205\022\030\n\024RE",
      "NDERSCRIPT_COMPILE\0206\022\022\n\016SHADER_COMPILE\0207" +
      "\022\022\n\016SIGNING_REPORT\0208\022\024\n\020SINGLE_FILE_COPY" +
      "\0209\022\017\n\013SOURCE_SETS\020:\022\023\n\017SPLIT_ZIP_ALIGN\020;" +
      "\022\020\n\014STREAM_BASED\020<\022\026\n\022STRIP_DEBUG_SYMBOL" +
      "\020=\022\026\n\022STRIP_DEPENDENCIES\020>\022\031\n\025TEST_MODUL" +
      "E_PRO_GUARD\020?\022\017\n\013TEST_SERVER\020@\022\r\n\tTRANSF" +
      "ORM\020A\022\r\n\tUNINSTALL\020B\022\024\n\020VALIDATE_SIGNING" +
      "\020C\022\r\n\tZIP_ALIGN\020D\022\020\n\014JAVA_COMPILE\020E\"\337\003\n\030" +
      "GradleTransformExecution\022;\n\004type\030\001 \001(\0162-" +
      ".android_studio.GradleTransformExecution",
      ".Type\022\026\n\016is_incremental\030\002 \001(\010\"\355\002\n\004Type\022\032" +
      "\n\026UNKNOWN_TRANSFORM_TYPE\020\000\022\007\n\003DEX\020\001\022\020\n\014E" +
      "XTRACT_JARS\020\002\022\023\n\017INSTANT_RUN_DEX\020\003\022\026\n\022IN" +
      "STANT_RUN_SLICER\020\004\022\017\n\013INSTANT_RUN\020\005\022\027\n\023I" +
      "NSTANT_RUN_VERIFER\020\006\022\020\n\014JACK_PRE_DEX\020\007\022\010" +
      "\n\004JACK\020\010\022\n\n\006JACOCO\020\t\022\017\n\013JAR_MERGING\020\n\022\017\n" +
      "\013LIBRARY_JAR\020\013\022\024\n\020LIBRARY_JNI_LIBS\020\014\022\030\n\024" +
      "MERGE_JAVA_RESOURCES\020\r\022\r\n\tMULTI_DEX\020\016\022\020\n" +
      "\014NEW_SHRINKER\020\017\022\027\n\023NO_CHANGES_VERIFIER\020\020" +
      "\022\r\n\tPRO_GUARD\020\021\022\024\n\020SHRINK_RESOURCES\020\022\"\256\t",
      "\n\020InstantRunStatus\022>\n\nbuild_mode\030\001 \001(\0162*" +
      ".android_studio.InstantRunStatus.BuildMo" +
      "de\022H\n\017patching_policy\030\002 \001(\0162/.android_st" +
      "udio.InstantRunStatus.PatchingPolicy\022H\n\017" +
      "verifier_status\030\003 \001(\0162/.android_studio.I" +
      "nstantRunStatus.VerifierStatus\0224\n\010artifa" +
      "ct\030\004 \003(\0132\".android_studio.InstantRunArti" +
      "fact\"E\n\tBuildMode\022\026\n\022UNKNOWN_BUILD_MODE\020" +
      "\000\022\014\n\010HOT_WARM\020\001\022\010\n\004COLD\020\002\022\010\n\004FULL\020\003\"]\n\016P" +
      "atchingPolicy\022\033\n\027UNKNOWN_PATCHING_POLICY",
      "\020\000\022\020\n\014PRE_LOLLIPOP\020\001\022\r\n\tMULTI_DEX\020\002\022\r\n\tM" +
      "ULTI_APK\020\003\"\351\005\n\016VerifierStatus\022\033\n\027UNKNOWN" +
      "_VERIFIER_STATUS\020\000\022\016\n\nCOMPATIBLE\020\001\022\013\n\007NO" +
      "T_RUN\020\002\022\030\n\024INSTANT_RUN_DISABLED\020\003\022\027\n\023INS" +
      "TANT_RUN_FAILURE\020\004\022\017\n\013CLASS_ADDED\020\005\022\030\n\024P" +
      "ARENT_CLASS_CHANGED\020\006\022!\n\035IMPLEMENTED_INT" +
      "ERFACES_CHANGE\020\007\022\033\n\027CLASS_ANNOTATION_CHA" +
      "NGE\020\010\022\035\n\031STATIC_INITIALIZER_CHANGE\020\t\022 \n\034" +
      "CONSTRUCTOR_SIGNATURE_CHANGE\020\n\022\033\n\027METHOD" +
      "_SIGNATURE_CHANGE\020\013\022\034\n\030METHOD_ANNOTATION",
      "_CHANGE\020\014\022\022\n\016METHOD_DELETED\020\r\022\020\n\014METHOD_" +
      "ADDED\020\016\022\017\n\013FIELD_ADDED\020\017\022\021\n\rFIELD_REMOVE" +
      "D\020\020\022\025\n\021FIELD_TYPE_CHANGE\020\021\022\022\n\016R_CLASS_CH" +
      "ANGE\020\022\022\023\n\017REFLECTION_USED\020\023\022\032\n\026JAVA_RESO" +
      "URCES_CHANGED\020\024\022\026\n\022DEPENDENCY_CHANGED\020\025\022" +
      "\030\n\024MANIFEST_FILE_CHANGE\020\026\022\037\n\033BINARY_MANI" +
      "FEST_FILE_CHANGE\020\027\022\027\n\023COLD_SWAP_REQUESTE" +
      "D\020\030\022\030\n\024FULL_BUILD_REQUESTED\020\031\022\021\n\rINITIAL" +
      "_BUILD\020\032\022\016\n\nNO_CHANGES\020\033\0224\n0CHANGE_IN_SE" +
      "RIALIZABLE_CLASS_WITHOUT_VERSION_UID\020\034\"\261",
      "\001\n\022InstantRunArtifact\0225\n\004type\030\001 \001(\0162\'.an" +
      "droid_studio.InstantRunArtifact.Type\"d\n\004" +
      "Type\022\010\n\004MAIN\020\001\022\016\n\nSPLIT_MAIN\020\002\022\016\n\nRELOAD" +
      "_DEX\020\003\022\017\n\013RESTART_DEX\020\004\022\007\n\003DEX\020\005\022\t\n\005SPLI" +
      "T\020\006\022\r\n\tRESOURCES\020\007\"(\n\023LLDBFrontendDetail" +
      "s\022\021\n\texit_code\030\001 \001(\005\"-\n\024FirebaseErrorDet" +
      "ails\022\025\n\rerror_message\030\001 \001(\t\"\244\001\n\021GfxTraci" +
      "ngDetails\022\022\n\ntotal_time\030\001 \001(\003\022\017\n\007command" +
      "\030\002 \001(\t\022\025\n\rerror_message\030\003 \001(\t\022\022\n\ntrace_p" +
      "ath\030\004 \001(\t\022\024\n\014image_format\030\005 \001(\t\022\023\n\013image",
      "_width\030\006 \001(\003\022\024\n\014image_height\030\007 \001(\003\"C\n\023Te" +
      "stRecorderDetails\022\023\n\013event_count\030\001 \001(\003\022\027" +
      "\n\017assertion_count\030\002 \001(\003\"\356\001\n\rUIActionStat" +
      "s\022\031\n\021action_class_name\030\001 \001(\t\022\023\n\013invocati" +
      "ons\030\002 \001(\003\022E\n\017invocation_kind\030\003 \001(\0162,.and" +
      "roid_studio.UIActionStats.InvocationKind" +
      "\"f\n\016InvocationKind\022\033\n\027UNKNOWN_INVOCATION" +
      "_KIND\020\000\022\013\n\007TOOLBAR\020\001\022\010\n\004MENU\020\002\022\025\n\021KEYBOA" +
      "RD_SHORTCUT\020\003\022\t\n\005MACRO\020\004\"\206\001\n\016MachineDeta" +
      "ils\022\021\n\ttotal_ram\030\001 \001(\003\022\022\n\ntotal_disk\030\002 \001",
      "(\003\022/\n\007display\030\003 \003(\0132\036.android_studio.Dis" +
      "playDetails\022\034\n\024available_processors\030\004 \001(" +
      "\005\"q\n\016DisplayDetails\022\r\n\005width\030\001 \001(\003\022\016\n\006he" +
      "ight\030\002 \001(\003\022 \n\030dots_per_inch_horizontal\030\003" +
      " \001(\005\022\036\n\026dots_per_inch_vertical\030\004 \001(\005\"\310\001\n" +
      "\020JavaProcessStats\022\031\n\021heap_memory_usage\030\001" +
      " \001(\003\022\035\n\025non_heap_memory_usage\030\002 \001(\003\022\032\n\022l" +
      "oaded_class_count\030\003 \001(\005\022\024\n\014thread_count\030" +
      "\004 \001(\005\022H\n\030garbage_collection_stats\030\005 \003(\0132" +
      "&.android_studio.GarbageCollectionStats\"",
      "O\n\026GarbageCollectionStats\022\014\n\004name\030\001 \001(\t\022" +
      "\026\n\016gc_collections\030\002 \001(\003\022\017\n\007gc_time\030\003 \001(\003" +
      "\"\265\003\n\nJvmDetails\022\014\n\004name\030\001 \001(\t\022\017\n\007version" +
      "\030\002 \001(\t\022\016\n\006vendor\030\003 \001(\t\022\031\n\021minimum_heap_s" +
      "ize\030\004 \001(\003\022\031\n\021maximum_heap_size\030\005 \001(\003\022$\n\034" +
      "maximum_permanent_space_size\030\006 \001(\003\022\037\n\027ma" +
      "ximum_code_cache_size\030\007 \001(\003\022!\n\031soft_refe" +
      "rence_lru_policy\030\010 \001(\003\022F\n\021garbage_collec" +
      "tor\030\t \001(\0162+.android_studio.JvmDetails.Ga" +
      "rbageCollector\"\217\001\n\020GarbageCollector\022\022\n\016U",
      "NSPECIFIED_GC\020\000\022\034\n\030CONCURRENT_MARK_SWEEP" +
      "_GC\020\001\022\024\n\020GARBAGE_FIRST_GC\020\002\022\017\n\013PARALLEL_" +
      "GC\020\003\022\023\n\017PARALLEL_OLD_GC\020\004\022\r\n\tSERIAL_GC\020\005" +
      "B;\n%com.google.wireless.android.sdk.stat" +
      "sB\022AndroidStudioStats"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_android_studio_AndroidStudioEvent_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_android_studio_AndroidStudioEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_AndroidStudioEvent_descriptor,
              new java.lang.String[] { "Category", "Kind", "StudioSessionId", "ProductDetails", "MonitorType", "MonitorPaused", "ProfilerCaptureType", "CloudTestingErrorMessage", "CloudTestingLoadedScreenshotsCount", "RunConfigurationType", "DebuggerType", "DeviceInfo", "LldbSessionFailureMessage", "DeveloperServiceKind", "GradleVersion", "GradleSyncFailure", "GradleMissingSignature", "TemplateRenderer", "StudioCrash", "GradleBuildDetails", "InstantRun", "MetaMetrics", "EmulatorDetails", "TestRun", "EmulatorUiEvent", "Hypervisor", "EmulatorHost", "GradleBuildProfile", "LldbFrontendDetails", "FirebaseErrorDetails", "ProjectId", "GfxTracingDetails", "TestRecorderDetails", "UiActionStats", "MachineDetails", "JvmDetails", "JavaProcessStats", });
          internal_static_android_studio_ProductDetails_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_android_studio_ProductDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_ProductDetails_descriptor,
              new java.lang.String[] { "Product", "Build", "Version", "Preview", "OsArchitecture", "Channel", });
          internal_static_android_studio_DeviceInfo_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_android_studio_DeviceInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_DeviceInfo_descriptor,
              new java.lang.String[] { "AnonymizedSerialNumber", "BuildTags", "BuildType", "BuildVersionRelease", "BuildApiLevel", "CpuAbi", "Manufacturer", "Model", "DeviceType", "BuildApiLevelFull", });
          internal_static_android_studio_StudioCrash_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_android_studio_StudioCrash_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_StudioCrash_descriptor,
              new java.lang.String[] { "Actions", "Exceptions", "Crashes", "BundledPluginExceptions", "NonBundledPluginExceptions", });
          internal_static_android_studio_EmulatorGuestGlInfo_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_android_studio_EmulatorGuestGlInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_EmulatorGuestGlInfo_descriptor,
              new java.lang.String[] { "Vendor", "Renderer", "Version", });
          internal_static_android_studio_EmulatorGpuInfo_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_android_studio_EmulatorGpuInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_EmulatorGpuInfo_descriptor,
              new java.lang.String[] { "Make", "Model", "DeviceId", "RevisionId", "Version", "Renderer", });
          internal_static_android_studio_EmulatorDetails_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_android_studio_EmulatorDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_EmulatorDetails_descriptor,
              new java.lang.String[] { "GuestArch", "SystemTime", "UserTime", "Crashes", "WallTime", "ExitStarted", "GuestApiLevel", "GuestGpuEnabled", "IsOpenglAlive", "AdbLiveness", "GuestGl", "HostGpu", "SessionPhase", });
          internal_static_android_studio_EmulatorUiEvent_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_android_studio_EmulatorUiEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_EmulatorUiEvent_descriptor,
              new java.lang.String[] { "ElementId", "Type", "Context", "Value", });
          internal_static_android_studio_GradleBuildDetails_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_android_studio_GradleBuildDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleBuildDetails_descriptor,
              new java.lang.String[] { "AndroidPluginVersion", "GradleVersion", "UserEnabledIr", "ModelSupportsIr", "VariantSupportsIr", "Libraries", "Modules", "AndroidModules", "NativeAndroidModules", });
          internal_static_android_studio_GradleLibrary_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_android_studio_GradleLibrary_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleLibrary_descriptor,
              new java.lang.String[] { "JarDependencyCount", "AarDependencyCount", });
          internal_static_android_studio_GradleModule_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_android_studio_GradleModule_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleModule_descriptor,
              new java.lang.String[] { "TotalModuleCount", "AppModuleCount", "LibModuleCount", });
          internal_static_android_studio_GradleAndroidModule_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_android_studio_GradleAndroidModule_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleAndroidModule_descriptor,
              new java.lang.String[] { "AppId", "ModuleName", "IsLibrary", "BuildTypeCount", "FlavorCount", "FlavorDimension", "SigningConfigCount", });
          internal_static_android_studio_GradleNativeAndroidModule_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_android_studio_GradleNativeAndroidModule_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleNativeAndroidModule_descriptor,
              new java.lang.String[] { "AppId", "ModuleName", "BuildSystemType", });
          internal_static_android_studio_InstantRun_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_android_studio_InstantRun_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_InstantRun_descriptor,
              new java.lang.String[] { "DeploymentKind", "InstantRunBuildCause", "BuildTime", "SessionId", "IdeBuildCause", });
          internal_static_android_studio_MetaMetrics_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_android_studio_MetaMetrics_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_MetaMetrics_descriptor,
              new java.lang.String[] { "FailedConnections", "BytesSentInLastUpload", "FailedServerReplies", });
          internal_static_android_studio_TestRun_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_android_studio_TestRun_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_TestRun_descriptor,
              new java.lang.String[] { "TestInvocationType", "NumberOfTestsExecuted", "TestKind", "Crashed", "GradleVersion", "CodeCoverageEnabled", "TestLibraries", });
          internal_static_android_studio_TestLibraries_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_android_studio_TestLibraries_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_TestLibraries_descriptor,
              new java.lang.String[] { "TestSupportLibraryVersion", "EspressoVersion", "RobolectricVersion", "MockitoVersion", });
          internal_static_android_studio_Hypervisor_descriptor =
            getDescriptor().getMessageTypes().get(17);
          internal_static_android_studio_Hypervisor_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_Hypervisor_descriptor,
              new java.lang.String[] { "HyperVState", });
          internal_static_android_studio_EmulatorHost_descriptor =
            getDescriptor().getMessageTypes().get(18);
          internal_static_android_studio_EmulatorHost_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_EmulatorHost_descriptor,
              new java.lang.String[] { "CpuManufacturer", "VirtSupport", "RunningInVm", "OsBitCount", });
          internal_static_android_studio_GradleBuildProfile_descriptor =
            getDescriptor().getMessageTypes().get(19);
          internal_static_android_studio_GradleBuildProfile_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleBuildProfile_descriptor,
              new java.lang.String[] { "GradleVersion", "OsName", "OsVersion", "JavaVersion", "JavaVmVersion", "MaxMemory", "BuildTime", "GcCount", "GcTime", "Project", "MemorySample", "Span", "InstantRunStatus", "ProjectId", });
          internal_static_android_studio_GradleBuildProject_descriptor =
            getDescriptor().getMessageTypes().get(20);
          internal_static_android_studio_GradleBuildProject_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleBuildProject_descriptor,
              new java.lang.String[] { "Id", "AndroidPluginVersion", "AndroidPlugin", "PluginGeneration", "BuildToolsVersion", "Metrics", "Variant", });
          internal_static_android_studio_GradleBuildProjectMetrics_descriptor =
            getDescriptor().getMessageTypes().get(21);
          internal_static_android_studio_GradleBuildProjectMetrics_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleBuildProjectMetrics_descriptor,
              new java.lang.String[] { "MetricsTimeNs", "ApkSize", "ResourcesApSize", });
          internal_static_android_studio_GradleBuildVariant_descriptor =
            getDescriptor().getMessageTypes().get(22);
          internal_static_android_studio_GradleBuildVariant_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleBuildVariant_descriptor,
              new java.lang.String[] { "Id", "IsDebug", "UseJack", "MinifyEnabled", "UseMultidex", "UseLegacyMultidex", "VariantType", "TestedId", });
          internal_static_android_studio_GradleBuildMemorySample_descriptor =
            getDescriptor().getMessageTypes().get(23);
          internal_static_android_studio_GradleBuildMemorySample_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleBuildMemorySample_descriptor,
              new java.lang.String[] { "GcTimeMs", "GcCount", "Timestamp", });
          internal_static_android_studio_GradleBuildProfileSpan_descriptor =
            getDescriptor().getMessageTypes().get(24);
          internal_static_android_studio_GradleBuildProfileSpan_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleBuildProfileSpan_descriptor,
              new java.lang.String[] { "Id", "ParentId", "StartTimeInMs", "DurationInMs", "Type", "Transform", "Task", "Project", "Variant", });
          internal_static_android_studio_GradleTaskExecution_descriptor =
            getDescriptor().getMessageTypes().get(25);
          internal_static_android_studio_GradleTaskExecution_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleTaskExecution_descriptor,
              new java.lang.String[] { "Type", "DidWork", "Skipped", "UpToDate", "Failed", });
          internal_static_android_studio_GradleTransformExecution_descriptor =
            getDescriptor().getMessageTypes().get(26);
          internal_static_android_studio_GradleTransformExecution_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GradleTransformExecution_descriptor,
              new java.lang.String[] { "Type", "IsIncremental", });
          internal_static_android_studio_InstantRunStatus_descriptor =
            getDescriptor().getMessageTypes().get(27);
          internal_static_android_studio_InstantRunStatus_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_InstantRunStatus_descriptor,
              new java.lang.String[] { "BuildMode", "PatchingPolicy", "VerifierStatus", "Artifact", });
          internal_static_android_studio_InstantRunArtifact_descriptor =
            getDescriptor().getMessageTypes().get(28);
          internal_static_android_studio_InstantRunArtifact_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_InstantRunArtifact_descriptor,
              new java.lang.String[] { "Type", });
          internal_static_android_studio_LLDBFrontendDetails_descriptor =
            getDescriptor().getMessageTypes().get(29);
          internal_static_android_studio_LLDBFrontendDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_LLDBFrontendDetails_descriptor,
              new java.lang.String[] { "ExitCode", });
          internal_static_android_studio_FirebaseErrorDetails_descriptor =
            getDescriptor().getMessageTypes().get(30);
          internal_static_android_studio_FirebaseErrorDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_FirebaseErrorDetails_descriptor,
              new java.lang.String[] { "ErrorMessage", });
          internal_static_android_studio_GfxTracingDetails_descriptor =
            getDescriptor().getMessageTypes().get(31);
          internal_static_android_studio_GfxTracingDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GfxTracingDetails_descriptor,
              new java.lang.String[] { "TotalTime", "Command", "ErrorMessage", "TracePath", "ImageFormat", "ImageWidth", "ImageHeight", });
          internal_static_android_studio_TestRecorderDetails_descriptor =
            getDescriptor().getMessageTypes().get(32);
          internal_static_android_studio_TestRecorderDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_TestRecorderDetails_descriptor,
              new java.lang.String[] { "EventCount", "AssertionCount", });
          internal_static_android_studio_UIActionStats_descriptor =
            getDescriptor().getMessageTypes().get(33);
          internal_static_android_studio_UIActionStats_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_UIActionStats_descriptor,
              new java.lang.String[] { "ActionClassName", "Invocations", "InvocationKind", });
          internal_static_android_studio_MachineDetails_descriptor =
            getDescriptor().getMessageTypes().get(34);
          internal_static_android_studio_MachineDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_MachineDetails_descriptor,
              new java.lang.String[] { "TotalRam", "TotalDisk", "Display", "AvailableProcessors", });
          internal_static_android_studio_DisplayDetails_descriptor =
            getDescriptor().getMessageTypes().get(35);
          internal_static_android_studio_DisplayDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_DisplayDetails_descriptor,
              new java.lang.String[] { "Width", "Height", "DotsPerInchHorizontal", "DotsPerInchVertical", });
          internal_static_android_studio_JavaProcessStats_descriptor =
            getDescriptor().getMessageTypes().get(36);
          internal_static_android_studio_JavaProcessStats_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_JavaProcessStats_descriptor,
              new java.lang.String[] { "HeapMemoryUsage", "NonHeapMemoryUsage", "LoadedClassCount", "ThreadCount", "GarbageCollectionStats", });
          internal_static_android_studio_GarbageCollectionStats_descriptor =
            getDescriptor().getMessageTypes().get(37);
          internal_static_android_studio_GarbageCollectionStats_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_GarbageCollectionStats_descriptor,
              new java.lang.String[] { "Name", "GcCollections", "GcTime", });
          internal_static_android_studio_JvmDetails_descriptor =
            getDescriptor().getMessageTypes().get(38);
          internal_static_android_studio_JvmDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_android_studio_JvmDetails_descriptor,
              new java.lang.String[] { "Name", "Version", "Vendor", "MinimumHeapSize", "MaximumHeapSize", "MaximumPermanentSpaceSize", "MaximumCodeCacheSize", "SoftReferenceLruPolicy", "GarbageCollector", });
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
  }

  // @@protoc_insertion_point(outer_class_scope)
}
