/*
 * Copyright 2015 The Kythe Authors. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto3";

package kythe.proto;

option go_package = "java_go_proto";
option java_package = "com.google.devtools.kythe.proto";

import "kythe/proto/storage.proto";

// CompilationUnit details enumerating the contents of each extracted .jar file.
message JarDetails {
  message Jar {
    VName v_name = 1;

    reserved 2;
  }

  repeated Jar jar = 1;
}

// CompilationUnit.FileInput details connecting a file to its enclosing jar.
message JarEntryDetails {
  // Index into JarDetails for this file's jar container.
  int32 jar_container = 1;
}

// Java-specific details used in a CompilationUnit.
// Its type is "kythe.io/proto/kythe.proto.JavaDetails".
message JavaDetails {
  // List of classpaths used in the compilation.
  repeated string classpath = 1;

  // List of sourcepaths used in the compilation.
  repeated string sourcepath = 2;

  // List of bootclasspaths used in the compilation.
  repeated string bootclasspath = 3;

  // List of additional JavaC arguments identified by the extractor as
  // necessary for analysis, but not included in the argument list.
  repeated string extra_javacopts = 10;
}
