syntax = "proto3";

option go_package = "dart2js_info";

package dart2js_info.proto;

message DependencyInfoPB {
  /** The dependency element's serialized_id, references as FunctionInfo or FieldInfo. */
  string target_id = 1;

  /** Either a selector mask indicating how this is used, or 'inlined'. */
  string mask = 2;
}

/** The entire information produced when compiling a program. */
message AllInfoPB {
  /** Summary information about the program. */
  ProgramInfoPB program = 1;

  /** All the recorded information about elements processed by the compiler. */
  map<string, InfoPB> all_infos = 2;

  /** Details about all deferred imports and what files would be loaded when the import is resolved. */
  repeated LibraryDeferredImportsPB deferred_imports = 3;
}

/*
 * Common interface to many pieces of information generated by the dart2js
 * compiler that are directly associated with an element (compilation unit,
 * library, class, function, or field).
 */
message InfoPB {
  /** Name of the element associated with this info. */
  string name = 1;

  /** An id to uniquely identify this info among infos of the same kind. */
  int32 id = 2;

  /** A globally unique id which combines kind and id together. */
  string serialized_id = 3;

  /** Id used by the compiler when instrumenting code for code coverage. */
  string coverage_id = 4;

  /** Bytes used in the generated code for the corresponding element. */
  int32 size = 5;

  /** The serialized_id of the enclosing element. */
  string parent_id = 6;

  /** How does this function or field depend on others. */
  repeated DependencyInfoPB uses = 7;

  /** The serialized_id of the output unit the element is generated into. */
  string output_unit_id = 8;

  /** Reserved tags for future common fields. */
  reserved 9 to 99;

  /** The concrete info type. */
  oneof concrete {
    /** Information about a library element. */
    LibraryInfoPB library_info = 100;

    /** Information about a class element. */
    ClassInfoPB class_info = 101;

    /** Information about a function element. */
    FunctionInfoPB function_info = 102;

    /** Information about a field element. */
    FieldInfoPB field_info = 103;

    /** Information about a constant element. */
    ConstantInfoPB constant_info = 104;

    /** Information about an output unit element. */
    OutputUnitInfoPB output_unit_info = 105;

    /** Information about a typedef element. */
    TypedefInfoPB typedef_info = 106;

    /** Information about a closure element. */
    ClosureInfoPB closure_info = 107;

    /** Information about a class type element. */
    ClassTypeInfoPB class_type_info = 108;
  }
}

/** General metadata about the dart2js invocation. */
message ProgramInfoPB {
  /** serialized_id for the entrypoint FunctionInfo. */
  string entrypoint_id = 1;

  /** The overall size of the dart2js binary. */
  int32 size = 2;

  /** The version of dart2js used to compile the program. */
  string dart2js_version = 3;

  /** The time at which the compilation was performed in microseconds since epoch. */
  int64 compilation_moment = 4;

  /** The amount of time spent compiling the program in microseconds. */
  int64 compilation_duration = 5;

  /** The amount of time spent converting the info to protobuf in microseconds. */
  int64 to_proto_duration = 6;

  /** The amount of time spent writing out the serialized info in microseconds. */
  int64 dump_info_duration = 7;

  /** true if noSuchMethod is used. */
  bool no_such_method_enabled = 8;

  /** True if Object.runtimeType is used. */
  bool is_runtime_type_used = 9;

  /** True if dart:isolate library is used. */
  bool is_isolate_used = 10;

  /** True if Function.apply is used. */
  bool is_function_apply_used = 11;

  /** True if dart:mirrors features are used. */
  bool is_mirrors_used = 12;

  /** Whether the resulting dart2js binary is minified. */
  bool minified = 13;
}

/** Info associated with a library element. */
message LibraryInfoPB {
  /** The canonical uri that identifies the library. */
  string uri = 1;

  /** The serialized_ids of all FunctionInfo, FieldInfo, ClassInfo and TypedefInfo elements that are defined in the library. */
  repeated string children_ids = 2;
}

/**
 * Information about an output unit. Normally there is just one for the entire
 * program unless the application uses deferred imports, in which case there
 * would be an additional output unit per deferred chunk.
 */
message OutputUnitInfoPB {
  /** The deferred imports that will load this output unit. */
  repeated string imports = 1;
}

/** Information about a class element. */
message ClassInfoPB {
  /** Whether the class is abstract. */
  bool is_abstract = 1;

  /** The serialized_ids of all FunctionInfo and FieldInfo elements defined in the class. */
  repeated string children_ids = 2;
}

/** Information about a class type element. */
message ClassTypeInfoPB {}

/** Information about a constant value. */
message ConstantInfoPB {
  /** The actual generated code for the constant. */
  string code = 1;
}

/** Information about a field element. */
message FieldInfoPB {
  /** The type of the field. */
  string type = 1;

  /** The type inferred by dart2js's whole program analysis. */
  string inferred_type = 2;

  /** The serialized_ids of all ClosureInfo elements nested in the field initializer. */
  repeated string children_ids = 3;

  /** The actual generated code for the field. */
  string code = 4;

  /** Whether the field is a const declaration. */
  bool is_const = 5;

  /** When isConst is true, the serialized_id of the ConstantInfo initializer expression. */
  string initializer_id = 6;
}

/** Information about a typedef declaration. */
message TypedefInfoPB {
  /** The declared type. */
  string type = 1;
}

/** Available function modifiers. */
message FunctionModifiersPB {
  /** Whether the function is declared as static. */
  bool is_static = 1;

  /** Whether the function is declared as const. */
  bool is_const = 2;

  /** Whether the function is a factory constructor. */
  bool is_factory = 3;

  /** Whether the function is declared as extern. */
  bool is_external = 4;
}

/** Information about a function parameter. */
message ParameterInfoPB {
  string name = 1;
  string type = 2;
  string declared_type = 3;
}

/** Information about a function or method. */
message FunctionInfoPB {
  /** Modifiers applied to the function. */
  FunctionModifiersPB function_modifiers = 1;

  /** serialized_ids of any ClosureInfo elements declared in the function. */
  repeated string children_ids = 2;

  /** The declared return type. */
  string return_type = 3;

  /** The inferred return type. */
  string inferred_return_type = 4;

  /** Name and type information for each parameter. */
  repeated ParameterInfoPB parameters = 5;

  /** Side-effects of the function. */
  string side_effects = 6;

  /** How many function calls were inlined into the function. */
  int32 inlined_count = 7;

  /** The actual generated code. */
  string code = 8;

  /** Measurements collected for this function. */
  reserved 9;
}

/** Information about a closure, also known as a local function. */
message ClosureInfoPB {
  /** serialized_id of the FunctionInfo wrapped by this closure. */
  string function_id = 1;
}

message DeferredImportPB {
  /** The prefix assigned to the deferred import. */
  string prefix = 1;

  /** The list of filenames loaded by the import. */
  repeated string files = 2;
}

/** Information about deferred imports within a dart library. */
message LibraryDeferredImportsPB {
  /** The uri of the library which makes the deferred import. */
  string library_uri = 1;

  /** The name of the library, or "<unnamed>" if it is unnamed. */
  string library_name = 2;

  /** The individual deferred imports within the library. */
  repeated DeferredImportPB imports = 3;
}
