// 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.libanalyzer.proto;

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

// Camel-case the outer class name (default is `Libraryanalyzerresult`).
option java_outer_classname = "LibraryAnalyzerResultProtos";

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

// Analysis result produced by the library analyzer.
message LibraryAnalyzerResult {
  D8CompileResult d8_compile_result = 1;
  R8CompileResult r8_compile_result = 2;
  ValidateConsumerKeepRulesResult validate_consumer_keep_rules_result = 3;
}

message D8CompileResult {
  int32 dex_size_bytes = 1;
}

message R8CompileResult {
  int32 dex_size_bytes = 1;
  // Information about the R8 configuration, specifically the keep rules.
  ConfigurationSummary configuration = 2;
  // Information about the library's classes and how they are hit by keep rules.
  ItemCollectionSummary classes = 3;
  // Ditto, for fields.
  ItemCollectionSummary fields = 4;
  // Ditto, for methods.
  ItemCollectionSummary methods = 5;
}

message ConfigurationSummary {
  // Keep rules and their keep radius. Useful for manual inspection.
  repeated KeepRuleKeepRadiusSummary keep_rules = 1;
  // Package wide keep rules and their keep radius.
  repeated KeepRuleKeepRadiusSummary used_package_wide_keep_rules = 2;
  // Unused package wide keep rules, i.e., rules with zero keep radius.
  // These rules likely target packages not part of the current library.
  repeated KeepRuleKeepRadiusSummary unused_package_wide_keep_rules = 3;
}

message ItemCollectionSummary {
  // Total number of items (classes, fields or methods) in the input.
  int32 item_count = 1;
  // Total number of items that are matched by one or more keep rules.
  int32 kept_item_count = 2;
  // Total number of items where obfuscation is prohibited.
  int32 no_obfuscation_count = 3;
  // Total number of items where optimization is prohibited.
  int32 no_optimization_count = 4;
  // Total number of items where shrinking is prohibited.
  int32 no_shrinking_count = 5;
}

message KeepRuleKeepRadiusSummary {
  string source = 1;
  int32 kept_item_count = 2;
  bool no_obfuscation = 3;
  bool no_optimization = 4;
  bool no_shrinking = 5;
}

message ValidateConsumerKeepRulesResult {
  repeated BlockedConsumerKeepRule blocked_keep_rules = 1;
}

message BlockedConsumerKeepRule {
  string source = 1;
}
