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;
  }
}

/** 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 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;
}
