// Copyright (c) 2026, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
syntax = "proto3";

package com.android.tools.r8.keepradius.proto;

// Don't put all messages under the outer class.
option java_multiple_files = true;

// Camel-case the outer class name.
option java_outer_classname = "KeepRadiusSummaryProtos";

// Java package consistent with R8 convention.
option java_package = "com.android.tools.r8.keepradius.proto";

message KeepRadiusSummary {
  // Name that identifies the build.
  string name = 1;

  // Link to the full report.
  string link = 2;

  // Info about number of live items.
  int32 live_class_count = 3;
  int32 live_field_count = 4;
  int32 live_method_count = 5;

  // Info about number of keep rules.
  int32 keep_rule_count = 6;
  int32 keep_rule_package_wide_count = 7;

  // Info about number of kept items.
  KeepInfoCollectionSummary kept_classes = 8;
  KeepInfoCollectionSummary kept_fields = 9;
  KeepInfoCollectionSummary kept_methods = 10;

  // Info about problematic rules.
  repeated KeepRuleKeepRadiusSummary keep_rule_keep_radius = 11;

  // Info about problematic global rules.
  repeated GlobalKeepRuleKeepRadiusSummary global_keep_rule_keep_radius = 12;
}

message KeepInfoCollectionSummary {
  int32 item_count = 1;
  int32 no_obfuscation_count = 2;
  int32 no_optimization_count = 3;
  int32 no_shrinking_count = 4;
}

message KeepRuleKeepRadiusSummary {
  string source = 1;
  int32 item_count = 2;
}

message GlobalKeepRuleKeepRadiusSummary {
  string source = 1;
}